Files

4373 lines
128 KiB
JavaScript

var Prototype = {
Version: "1.6.0.2",
Browser: {
IE: !!(window.attachEvent && !window.opera),
Opera: !!window.opera,
WebKit: navigator.userAgent.indexOf("AppleWebKit/") > -1,
Gecko: navigator.userAgent.indexOf("Gecko") > -1 && navigator.userAgent.indexOf("KHTML") == -1,
MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
},
BrowserFeatures: {
XPath: !!document.evaluate,
ElementExtensions: !!window.HTMLElement,
SpecificElementExtensions: document.createElement("div").__proto__ && document.createElement("div").__proto__ !== document.createElement("form").__proto__
},
ScriptFragment: "<script[^>]*>([\\S\\s]*?)<\/script>",
JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
emptyFunction: function() {},
K: function(A) {
return A
}
};
if (Prototype.Browser.MobileSafari) {
Prototype.BrowserFeatures.SpecificElementExtensions = false
}
var Class = {
create: function() {
var E = null,
D = $A(arguments);
if (Object.isFunction(D[0])) {
E = D.shift()
}
function A() {
this.initialize.apply(this, arguments)
}
Object.extend(A, Class.Methods);
A.superclass = E;
A.subclasses = [];
if (E) {
var B = function() {};
B.prototype = E.prototype;
A.prototype = new B;
E.subclasses.push(A)
}
for (var C = 0; C < D.length; C++) {
A.addMethods(D[C])
}
if (!A.prototype.initialize) {
A.prototype.initialize = Prototype.emptyFunction
}
A.prototype.constructor = A;
return A
}
};
Class.Methods = {
addMethods: function(G) {
var C = this.superclass && this.superclass.prototype;
var B = Object.keys(G);
if (!Object.keys({
toString: true
}).length) {
B.push("toString", "valueOf")
}
for (var A = 0, D = B.length; A < D; A++) {
var F = B[A],
E = G[F];
if (C && Object.isFunction(E) && E.argumentNames().first() == "$super") {
var H = E,
E = Object.extend((function(I) {
return function() {
return C[I].apply(this, arguments)
}
})(F).wrap(H), {
valueOf: function() {
return H
},
toString: function() {
return H.toString()
}
})
}
this.prototype[F] = E
}
return this
}
};
var Abstract = {};
Object.extend = function(A, C) {
for (var B in C) {
A[B] = C[B]
}
return A
};
Object.extend(Object, {
inspect: function(A) {
try {
if (Object.isUndefined(A)) {
return "undefined"
}
if (A === null) {
return "null"
}
return A.inspect ? A.inspect() : String(A)
} catch (B) {
if (B instanceof RangeError) {
return "..."
}
throw B
}
},
toJSON: function(A) {
var C = typeof A;
switch (C) {
case "undefined":
case "function":
case "unknown":
return;
case "boolean":
return A.toString()
}
if (A === null) {
return "null"
}
if (A.toJSON) {
return A.toJSON()
}
if (Object.isElement(A)) {
return
}
var B = [];
for (var E in A) {
var D = Object.toJSON(A[E]);
if (!Object.isUndefined(D)) {
B.push(E.toJSON() + ": " + D)
}
}
return "{" + B.join(", ") + "}"
},
toQueryString: function(A) {
return $H(A).toQueryString()
},
toHTML: function(A) {
return A && A.toHTML ? A.toHTML() : String.interpret(A)
},
keys: function(A) {
var B = [];
for (var C in A) {
B.push(C)
}
return B
},
values: function(B) {
var A = [];
for (var C in B) {
A.push(B[C])
}
return A
},
clone: function(A) {
return Object.extend({}, A)
},
isElement: function(A) {
return A && A.nodeType == 1
},
isArray: function(A) {
return A != null && typeof A == "object" && "splice" in A && "join" in A
},
isHash: function(A) {
return A instanceof Hash
},
isFunction: function(A) {
return typeof A == "function"
},
isString: function(A) {
return typeof A == "string"
},
isNumber: function(A) {
return typeof A == "number"
},
isUndefined: function(A) {
return typeof A == "undefined"
}
});
Object.extend(Function.prototype, {
argumentNames: function() {
var A = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");
return A.length == 1 && !A[0] ? [] : A
},
bind: function() {
if (arguments.length < 2 && Object.isUndefined(arguments[0])) {
return this
}
var A = this,
C = $A(arguments),
B = C.shift();
return function() {
return A.apply(B, C.concat($A(arguments)))
}
},
bindAsEventListener: function() {
var A = this,
C = $A(arguments),
B = C.shift();
return function(D) {
return A.apply(B, [D || window.event].concat(C))
}
},
curry: function() {
if (!arguments.length) {
return this
}
var A = this,
B = $A(arguments);
return function() {
return A.apply(this, B.concat($A(arguments)))
}
},
delay: function() {
var A = this,
B = $A(arguments),
C = B.shift() * 1000;
return window.setTimeout(function() {
return A.apply(A, B)
}, C)
},
wrap: function(B) {
var A = this;
return function() {
return B.apply(this, [A.bind(this)].concat($A(arguments)))
}
},
methodize: function() {
if (this._methodized) {
return this._methodized
}
var A = this;
return this._methodized = function() {
return A.apply(null, [this].concat($A(arguments)))
}
}
});
Function.prototype.defer = Function.prototype.delay.curry(0.01);
Date.prototype.toJSON = function() {
return '"' + this.getUTCFullYear() + "-" + (this.getUTCMonth() + 1).toPaddedString(2) + "-" + this.getUTCDate().toPaddedString(2) + "T" + this.getUTCHours().toPaddedString(2) + ":" + this.getUTCMinutes().toPaddedString(2) + ":" + this.getUTCSeconds().toPaddedString(2) + 'Z"'
};
var Try = {
these: function() {
var C;
for (var B = 0, D = arguments.length; B < D; B++) {
var A = arguments[B];
try {
C = A();
break
} catch (E) {}
}
return C
}
};
RegExp.prototype.match = RegExp.prototype.test;
RegExp.escape = function(A) {
return String(A).replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1")
};
var PeriodicalExecuter = Class.create({
initialize: function(B, A) {
this.callback = B;
this.frequency = A;
this.currentlyExecuting = false;
this.registerCallback()
},
registerCallback: function() {
this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000)
},
execute: function() {
this.callback(this)
},
stop: function() {
if (!this.timer) {
return
}
clearInterval(this.timer);
this.timer = null
},
onTimerEvent: function() {
if (!this.currentlyExecuting) {
try {
this.currentlyExecuting = true;
this.execute()
} finally {
this.currentlyExecuting = false
}
}
}
});
Object.extend(String, {
interpret: function(A) {
return A == null ? "" : String(A)
},
specialChar: {
"\b": "\\b",
"\t": "\\t",
"\n": "\\n",
"\f": "\\f",
"\r": "\\r",
"\\": "\\\\"
}
});
Object.extend(String.prototype, {
gsub: function(E, C) {
var A = "",
D = this,
B;
C = arguments.callee.prepareReplacement(C);
while (D.length > 0) {
if (B = D.match(E)) {
A += D.slice(0, B.index);
A += String.interpret(C(B));
D = D.slice(B.index + B[0].length)
} else {
A += D, D = ""
}
}
return A
},
sub: function(C, A, B) {
A = this.gsub.prepareReplacement(A);
B = Object.isUndefined(B) ? 1 : B;
return this.gsub(C, function(D) {
if (--B < 0) {
return D[0]
}
return A(D)
})
},
scan: function(B, A) {
this.gsub(B, A);
return String(this)
},
truncate: function(B, A) {
B = B || 30;
A = Object.isUndefined(A) ? "..." : A;
return this.length > B ? this.slice(0, B - A.length) + A : String(this)
},
strip: function() {
return this.replace(/^\s+/, "").replace(/\s+$/, "")
},
stripTags: function() {
return this.replace(/<\/?[^>]+>/gi, "")
},
stripScripts: function() {
return this.replace(new RegExp(Prototype.ScriptFragment, "img"), "")
},
extractScripts: function() {
var B = new RegExp(Prototype.ScriptFragment, "img");
var A = new RegExp(Prototype.ScriptFragment, "im");
return (this.match(B) || []).map(function(C) {
return (C.match(A) || ["", ""])[1]
})
},
evalScripts: function() {
return this.extractScripts().map(function(script) {
return eval(script)
})
},
escapeHTML: function() {
var A = arguments.callee;
A.text.data = this;
return A.div.innerHTML
},
unescapeHTML: function() {
var A = new Element("div");
A.innerHTML = this.stripTags();
return A.childNodes[0] ? (A.childNodes.length > 1 ? $A(A.childNodes).inject("", function(B, C) {
return B + C.nodeValue
}) : A.childNodes[0].nodeValue) : ""
},
toQueryParams: function(B) {
var A = this.strip().match(/([^?#]*)(#.*)?$/);
if (!A) {
return {}
}
return A[1].split(B || "&").inject({}, function(E, F) {
if ((F = F.split("="))[0]) {
var C = decodeURIComponent(F.shift());
var D = F.length > 1 ? F.join("=") : F[0];
if (D != undefined) {
D = decodeURIComponent(D)
}
if (C in E) {
if (!Object.isArray(E[C])) {
E[C] = [E[C]]
}
E[C].push(D)
} else {
E[C] = D
}
}
return E
})
},
toArray: function() {
return this.split("")
},
succ: function() {
return this.slice(0, this.length - 1) + String.fromCharCode(this.charCodeAt(this.length - 1) + 1)
},
times: function(A) {
return A < 1 ? "" : new Array(A + 1).join(this)
},
camelize: function() {
var D = this.split("-"),
A = D.length;
if (A == 1) {
return D[0]
}
var C = this.charAt(0) == "-" ? D[0].charAt(0).toUpperCase() + D[0].substring(1) : D[0];
for (var B = 1; B < A; B++) {
C += D[B].charAt(0).toUpperCase() + D[B].substring(1)
}
return C
},
capitalize: function() {
return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase()
},
underscore: function() {
return this.gsub(/::/, "/").gsub(/([A-Z]+)([A-Z][a-z])/, "#{1}_#{2}").gsub(/([a-z\d])([A-Z])/, "#{1}_#{2}").gsub(/-/, "_").toLowerCase()
},
dasherize: function() {
return this.gsub(/_/, "-")
},
inspect: function(B) {
var A = this.gsub(/[\x00-\x1f\\]/, function(C) {
var D = String.specialChar[C[0]];
return D ? D : "\\u00" + C[0].charCodeAt().toPaddedString(2, 16)
});
if (B) {
return '"' + A.replace(/"/g, '\\"') + '"'
}
return "'" + A.replace(/'/g, "\\'") + "'"
},
toJSON: function() {
return this.inspect(true)
},
unfilterJSON: function(A) {
return this.sub(A || Prototype.JSONFilter, "#{1}")
},
isJSON: function() {
var A = this;
if (A.blank()) {
return false
}
A = this.replace(/\\./g, "@").replace(/"[^"\\\n\r]*"/g, "");
return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(A)
},
evalJSON: function(sanitize) {
var json = this.unfilterJSON();
try {
if (!sanitize || json.isJSON()) {
return eval("(" + json + ")")
}
} catch (e) {}
throw new SyntaxError("Badly formed JSON string: " + this.inspect())
},
include: function(A) {
return this.indexOf(A) > -1
},
startsWith: function(A) {
return this.indexOf(A) === 0
},
endsWith: function(A) {
var B = this.length - A.length;
return B >= 0 && this.lastIndexOf(A) === B
},
empty: function() {
return this == ""
},
blank: function() {
return /^\s*$/.test(this)
},
interpolate: function(A, B) {
return new Template(this, B).evaluate(A)
}
});
if (Prototype.Browser.WebKit || Prototype.Browser.IE) {
Object.extend(String.prototype, {
escapeHTML: function() {
return this.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")
},
unescapeHTML: function() {
return this.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">")
}
})
}
String.prototype.gsub.prepareReplacement = function(B) {
if (Object.isFunction(B)) {
return B
}
var A = new Template(B);
return function(C) {
return A.evaluate(C)
}
};
String.prototype.parseQuery = String.prototype.toQueryParams;
Object.extend(String.prototype.escapeHTML, {
div: document.createElement("div"),
text: document.createTextNode("")
});
with(String.prototype.escapeHTML) {
div.appendChild(text)
}
var Template = Class.create({
initialize: function(A, B) {
this.template = A.toString();
this.pattern = B || Template.Pattern
},
evaluate: function(A) {
if (Object.isFunction(A.toTemplateReplacements)) {
A = A.toTemplateReplacements()
}
return this.template.gsub(this.pattern, function(D) {
if (A == null) {
return ""
}
var F = D[1] || "";
if (F == "\\") {
return D[2]
}
var B = A,
G = D[3];
var E = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
D = E.exec(G);
if (D == null) {
return F
}
while (D != null) {
var C = D[1].startsWith("[") ? D[2].gsub("\\\\]", "]") : D[1];
B = B[C];
if (null == B || "" == D[3]) {
break
}
G = G.substring("[" == D[3] ? D[1].length : D[0].length);
D = E.exec(G)
}
return F + String.interpret(B)
})
}
});
Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
var $break = {};
var Enumerable = {
each: function(C, B) {
var A = 0;
C = C.bind(B);
try {
this._each(function(E) {
C(E, A++)
})
} catch (D) {
if (D != $break) {
throw D
}
}
return this
},
eachSlice: function(D, C, B) {
C = C ? C.bind(B) : Prototype.K;
var A = -D,
E = [],
F = this.toArray();
while ((A += D) < F.length) {
E.push(F.slice(A, A + D))
}
return E.collect(C, B)
},
all: function(C, B) {
C = C ? C.bind(B) : Prototype.K;
var A = true;
this.each(function(E, D) {
A = A && !!C(E, D);
if (!A) {
throw $break
}
});
return A
},
any: function(C, B) {
C = C ? C.bind(B) : Prototype.K;
var A = false;
this.each(function(E, D) {
if (A = !!C(E, D)) {
throw $break
}
});
return A
},
collect: function(C, B) {
C = C ? C.bind(B) : Prototype.K;
var A = [];
this.each(function(E, D) {
A.push(C(E, D))
});
return A
},
detect: function(C, B) {
C = C.bind(B);
var A;
this.each(function(E, D) {
if (C(E, D)) {
A = E;
throw $break
}
});
return A
},
findAll: function(C, B) {
C = C.bind(B);
var A = [];
this.each(function(E, D) {
if (C(E, D)) {
A.push(E)
}
});
return A
},
grep: function(D, C, B) {
C = C ? C.bind(B) : Prototype.K;
var A = [];
if (Object.isString(D)) {
D = new RegExp(D)
}
this.each(function(F, E) {
if (D.match(F)) {
A.push(C(F, E))
}
});
return A
},
include: function(A) {
if (Object.isFunction(this.indexOf)) {
if (this.indexOf(A) != -1) {
return true
}
}
var B = false;
this.each(function(C) {
if (C == A) {
B = true;
throw $break
}
});
return B
},
inGroupsOf: function(B, A) {
A = Object.isUndefined(A) ? null : A;
return this.eachSlice(B, function(C) {
while (C.length < B) {
C.push(A)
}
return C
})
},
inject: function(A, C, B) {
C = C.bind(B);
this.each(function(E, D) {
A = C(A, E, D)
});
return A
},
invoke: function(B) {
var A = $A(arguments).slice(1);
return this.map(function(C) {
return C[B].apply(C, A)
})
},
max: function(C, B) {
C = C ? C.bind(B) : Prototype.K;
var A;
this.each(function(E, D) {
E = C(E, D);
if (A == null || E >= A) {
A = E
}
});
return A
},
min: function(C, B) {
C = C ? C.bind(B) : Prototype.K;
var A;
this.each(function(E, D) {
E = C(E, D);
if (A == null || E < A) {
A = E
}
});
return A
},
partition: function(D, B) {
D = D ? D.bind(B) : Prototype.K;
var C = [],
A = [];
this.each(function(F, E) {
(D(F, E) ? C : A).push(F)
});
return [C, A]
},
pluck: function(B) {
var A = [];
this.each(function(C) {
A.push(C[B])
});
return A
},
reject: function(C, B) {
C = C.bind(B);
var A = [];
this.each(function(E, D) {
if (!C(E, D)) {
A.push(E)
}
});
return A
},
sortBy: function(B, A) {
B = B.bind(A);
return this.map(function(D, C) {
return {
value: D,
criteria: B(D, C)
}
}).sort(function(F, E) {
var D = F.criteria,
C = E.criteria;
return D < C ? -1 : D > C ? 1 : 0
}).pluck("value")
},
toArray: function() {
return this.map()
},
zip: function() {
var B = Prototype.K,
A = $A(arguments);
if (Object.isFunction(A.last())) {
B = A.pop()
}
var C = [this].concat(A).map($A);
return this.map(function(E, D) {
return B(C.pluck(D))
})
},
size: function() {
return this.toArray().length
},
inspect: function() {
return "#<Enumerable:" + this.toArray().inspect() + ">"
}
};
Object.extend(Enumerable, {
map: Enumerable.collect,
find: Enumerable.detect,
select: Enumerable.findAll,
filter: Enumerable.findAll,
member: Enumerable.include,
entries: Enumerable.toArray,
every: Enumerable.all,
some: Enumerable.any
});
function $A(C) {
if (!C) {
return []
}
if (C.toArray) {
return C.toArray()
}
var B = C.length || 0,
A = new Array(B);
while (B--) {
A[B] = C[B]
}
return A
}
if (Prototype.Browser.WebKit) {
$A = function(C) {
if (!C) {
return []
}
if (!(Object.isFunction(C) && C == "[object NodeList]") && C.toArray) {
return C.toArray()
}
var B = C.length || 0,
A = new Array(B);
while (B--) {
A[B] = C[B]
}
return A
}
}
Array.from = $A;
Object.extend(Array.prototype, Enumerable);
if (!Array.prototype._reverse) {
Array.prototype._reverse = Array.prototype.reverse
}
Object.extend(Array.prototype, {
_each: function(B) {
for (var A = 0, C = this.length; A < C; A++) {
B(this[A])
}
},
clear: function() {
this.length = 0;
return this
},
first: function() {
return this[0]
},
last: function() {
return this[this.length - 1]
},
compact: function() {
return this.select(function(A) {
return A != null
})
},
flatten: function() {
return this.inject([], function(B, A) {
return B.concat(Object.isArray(A) ? A.flatten() : [A])
})
},
without: function() {
var A = $A(arguments);
return this.select(function(B) {
return !A.include(B)
})
},
reverse: function(A) {
return (A !== false ? this : this.toArray())._reverse()
},
reduce: function() {
return this.length > 1 ? this : this[0]
},
uniq: function(A) {
return this.inject([], function(D, C, B) {
if (0 == B || (A ? D.last() != C : !D.include(C))) {
D.push(C)
}
return D
})
},
intersect: function(A) {
return this.uniq().findAll(function(B) {
return A.detect(function(C) {
return B === C
})
})
},
clone: function() {
return [].concat(this)
},
size: function() {
return this.length
},
inspect: function() {
return "[" + this.map(Object.inspect).join(", ") + "]"
},
toJSON: function() {
var A = [];
this.each(function(B) {
var C = Object.toJSON(B);
if (!Object.isUndefined(C)) {
A.push(C)
}
});
return "[" + A.join(", ") + "]"
}
});
if (Object.isFunction(Array.prototype.forEach)) {
Array.prototype._each = Array.prototype.forEach
}
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(C, A) {
A || (A = 0);
var B = this.length;
if (A < 0) {
A = B + A
}
for (; A < B; A++) {
if (this[A] === C) {
return A
}
}
return -1
}
}
if (!Array.prototype.lastIndexOf) {
Array.prototype.lastIndexOf = function(B, A) {
A = isNaN(A) ? this.length : (A < 0 ? this.length + A : A) + 1;
var C = this.slice(0, A).reverse().indexOf(B);
return (C < 0) ? C : A - C - 1
}
}
Array.prototype.toArray = Array.prototype.clone;
function $w(A) {
if (!Object.isString(A)) {
return []
}
A = A.strip();
return A ? A.split(/\s+/) : []
}
if (Prototype.Browser.Opera) {
Array.prototype.concat = function() {
var E = [];
for (var B = 0, C = this.length; B < C; B++) {
E.push(this[B])
}
for (var B = 0, C = arguments.length; B < C; B++) {
if (Object.isArray(arguments[B])) {
for (var A = 0, D = arguments[B].length; A < D; A++) {
E.push(arguments[B][A])
}
} else {
E.push(arguments[B])
}
}
return E
}
}
Object.extend(Number.prototype, {
toColorPart: function() {
return this.toPaddedString(2, 16)
},
succ: function() {
return this + 1
},
times: function(A) {
$R(0, this, true).each(A);
return this
},
toPaddedString: function(C, B) {
var A = this.toString(B || 10);
return "0".times(C - A.length) + A
},
toJSON: function() {
return isFinite(this) ? this.toString() : "null"
}
});
$w("abs round ceil floor").each(function(A) {
Number.prototype[A] = Math[A].methodize()
});
function $H(A) {
return new Hash(A)
}
var Hash = Class.create(Enumerable, (function() {
function A(B, C) {
if (Object.isUndefined(C)) {
return B
}
return B + "=" + encodeURIComponent(String.interpret(C))
}
return {
initialize: function(B) {
this._object = Object.isHash(B) ? B.toObject() : Object.clone(B)
},
_each: function(C) {
for (var B in this._object) {
var D = this._object[B],
E = [B, D];
E.key = B;
E.value = D;
C(E)
}
},
set: function(B, C) {
return this._object[B] = C
},
get: function(B) {
return this._object[B]
},
unset: function(B) {
var C = this._object[B];
delete this._object[B];
return C
},
toObject: function() {
return Object.clone(this._object)
},
keys: function() {
return this.pluck("key")
},
values: function() {
return this.pluck("value")
},
index: function(C) {
var B = this.detect(function(D) {
return D.value === C
});
return B && B.key
},
merge: function(B) {
return this.clone().update(B)
},
update: function(B) {
return new Hash(B).inject(this, function(C, D) {
C.set(D.key, D.value);
return C
})
},
toQueryString: function() {
return this.map(function(D) {
var C = encodeURIComponent(D.key),
B = D.value;
if (B && typeof B == "object") {
if (Object.isArray(B)) {
return B.map(A.curry(C)).join("&")
}
}
return A(C, B)
}).join("&")
},
inspect: function() {
return "#<Hash:{" + this.map(function(B) {
return B.map(Object.inspect).join(": ")
}).join(", ") + "}>"
},
toJSON: function() {
return Object.toJSON(this.toObject())
},
clone: function() {
return new Hash(this)
}
}
})());
Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
Hash.from = $H;
var ObjectRange = Class.create(Enumerable, {
initialize: function(C, A, B) {
this.start = C;
this.end = A;
this.exclusive = B
},
_each: function(A) {
var B = this.start;
while (this.include(B)) {
A(B);
B = B.succ()
}
},
include: function(A) {
if (A < this.start) {
return false
}
if (this.exclusive) {
return A < this.end
}
return A <= this.end
}
});
var $R = function(C, A, B) {
return new ObjectRange(C, A, B)
};
var Ajax = {
getTransport: function() {
return Try.these(function() {
return new XMLHttpRequest()
}, function() {
return new ActiveXObject("Msxml2.XMLHTTP")
}, function() {
return new ActiveXObject("Microsoft.XMLHTTP")
}) || false
},
activeRequestCount: 0
};
Ajax.Responders = {
responders: [],
_each: function(A) {
this.responders._each(A)
},
register: function(A) {
if (!this.include(A)) {
this.responders.push(A)
}
},
unregister: function(A) {
this.responders = this.responders.without(A)
},
dispatch: function(D, B, C, A) {
this.each(function(E) {
if (Object.isFunction(E[D])) {
try {
E[D].apply(E, [B, C, A])
} catch (F) {}
}
})
}
};
Object.extend(Ajax.Responders, Enumerable);
Ajax.Responders.register({
onCreate: function() {
Ajax.activeRequestCount++
},
onComplete: function() {
Ajax.activeRequestCount--
}
});
Ajax.Base = Class.create({
initialize: function(A) {
this.options = {
method: "post",
asynchronous: true,
contentType: "application/x-www-form-urlencoded",
encoding: "UTF-8",
parameters: "",
evalJSON: true,
evalJS: true
};
Object.extend(this.options, A || {});
this.options.method = this.options.method.toLowerCase();
if (Object.isString(this.options.parameters)) {
this.options.parameters = this.options.parameters.toQueryParams()
} else {
if (Object.isHash(this.options.parameters)) {
this.options.parameters = this.options.parameters.toObject()
}
}
}
});
Ajax.Request = Class.create(Ajax.Base, {
_complete: false,
initialize: function($super, B, A) {
$super(A);
this.transport = Ajax.getTransport();
this.request(B)
},
request: function(B) {
this.url = B;
this.method = this.options.method;
var D = Object.clone(this.options.parameters);
if (!["get", "post"].include(this.method)) {
D._method = this.method;
this.method = "post"
}
this.parameters = D;
if (D = Object.toQueryString(D)) {
if (this.method == "get") {
this.url += (this.url.include("?") ? "&" : "?") + D
} else {
if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
D += "&_="
}
}
}
try {
var A = new Ajax.Response(this);
if (this.options.onCreate) {
this.options.onCreate(A)
}
Ajax.Responders.dispatch("onCreate", this, A);
this.transport.open(this.method.toUpperCase(), this.url, this.options.asynchronous);
if (this.options.asynchronous) {
this.respondToReadyState.bind(this).defer(1)
}
this.transport.onreadystatechange = this.onStateChange.bind(this);
this.setRequestHeaders();
this.body = this.method == "post" ? (this.options.postBody || D) : null;
this.transport.send(this.body);
if (!this.options.asynchronous && this.transport.overrideMimeType) {
this.onStateChange()
}
} catch (C) {
this.dispatchException(C)
}
},
onStateChange: function() {
var A = this.transport.readyState;
if (A > 1 && !((A == 4) && this._complete)) {
this.respondToReadyState(this.transport.readyState)
}
},
setRequestHeaders: function() {
var E = {
"X-Requested-With": "XMLHttpRequest",
"X-Prototype-Version": Prototype.Version,
Accept: "text/javascript, text/html, application/xml, text/xml, */*"
};
if (this.method == "post") {
E["Content-type"] = this.options.contentType + (this.options.encoding ? "; charset=" + this.options.encoding : "");
if (this.transport.overrideMimeType && (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0, 2005])[1] < 2005) {
E.Connection = "close"
}
}
if (typeof this.options.requestHeaders == "object") {
var C = this.options.requestHeaders;
if (Object.isFunction(C.push)) {
for (var B = 0, D = C.length; B < D; B += 2) {
E[C[B]] = C[B + 1]
}
} else {
$H(C).each(function(F) {
E[F.key] = F.value
})
}
}
for (var A in E) {
this.transport.setRequestHeader(A, E[A])
}
},
success: function() {
var A = this.getStatus();
return !A || (A >= 200 && A < 300)
},
getStatus: function() {
try {
return this.transport.status || 0
} catch (A) {
return 0
}
},
respondToReadyState: function(A) {
var C = Ajax.Request.Events[A],
B = new Ajax.Response(this);
if (C == "Complete") {
try {
this._complete = true;
(this.options["on" + B.status] || this.options["on" + (this.success() ? "Success" : "Failure")] || Prototype.emptyFunction)(B, B.headerJSON)
} catch (D) {
this.dispatchException(D)
}
var E = B.getHeader("Content-type");
if (this.options.evalJS == "force" || (this.options.evalJS && this.isSameOrigin() && E && E.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) {
this.evalResponse()
}
}
try {
(this.options["on" + C] || Prototype.emptyFunction)(B, B.headerJSON);
Ajax.Responders.dispatch("on" + C, this, B, B.headerJSON)
} catch (D) {
this.dispatchException(D)
}
if (C == "Complete") {
this.transport.onreadystatechange = Prototype.emptyFunction
}
},
isSameOrigin: function() {
var A = this.url.match(/^\s*https?:\/\/[^\/]*/);
return !A || (A[0] == "#{protocol}//#{domain}#{port}".interpolate({
protocol: location.protocol,
domain: document.domain,
port: location.port ? ":" + location.port : ""
}))
},
getHeader: function(A) {
try {
return this.transport.getResponseHeader(A) || null
} catch (B) {
return null
}
},
evalResponse: function() {
try {
return eval((this.transport.responseText || "").unfilterJSON())
} catch (e) {
this.dispatchException(e)
}
},
dispatchException: function(A) {
(this.options.onException || Prototype.emptyFunction)(this, A);
Ajax.Responders.dispatch("onException", this, A)
}
});
Ajax.Request.Events = ["Uninitialized", "Loading", "Loaded", "Interactive", "Complete"];
Ajax.Response = Class.create({
initialize: function(C) {
this.request = C;
var D = this.transport = C.transport,
A = this.readyState = D.readyState;
if ((A > 2 && !Prototype.Browser.IE) || A == 4) {
this.status = this.getStatus();
this.statusText = this.getStatusText();
this.responseText = String.interpret(D.responseText);
this.headerJSON = this._getHeaderJSON()
}
if (A == 4) {
var B = D.responseXML;
this.responseXML = Object.isUndefined(B) ? null : B;
this.responseJSON = this._getResponseJSON()
}
},
status: 0,
statusText: "",
getStatus: Ajax.Request.prototype.getStatus,
getStatusText: function() {
try {
return this.transport.statusText || ""
} catch (A) {
return ""
}
},
getHeader: Ajax.Request.prototype.getHeader,
getAllHeaders: function() {
try {
return this.getAllResponseHeaders()
} catch (A) {
return null
}
},
getResponseHeader: function(A) {
return this.transport.getResponseHeader(A)
},
getAllResponseHeaders: function() {
return this.transport.getAllResponseHeaders()
},
_getHeaderJSON: function() {
var A = this.getHeader("X-JSON");
if (!A) {
return null
}
A = decodeURIComponent(escape(A));
try {
return A.evalJSON(this.request.options.sanitizeJSON || !this.request.isSameOrigin())
} catch (B) {
this.request.dispatchException(B)
}
},
_getResponseJSON: function() {
var A = this.request.options;
if (!A.evalJSON || (A.evalJSON != "force" && !(this.getHeader("Content-type") || "").include("application/json")) || this.responseText.blank()) {
return null
}
try {
return this.responseText.evalJSON(A.sanitizeJSON || !this.request.isSameOrigin())
} catch (B) {
this.request.dispatchException(B)
}
}
});
Ajax.Updater = Class.create(Ajax.Request, {
initialize: function($super, A, C, B) {
this.container = {
success: (A.success || A),
failure: (A.failure || (A.success ? null : A))
};
B = Object.clone(B);
var D = B.onComplete;
B.onComplete = (function(E, F) {
this.updateContent(E.responseText);
if (Object.isFunction(D)) {
D(E, F)
}
}).bind(this);
$super(C, B)
},
updateContent: function(D) {
var C = this.container[this.success() ? "success" : "failure"],
A = this.options;
if (!A.evalScripts) {
D = D.stripScripts()
}
if (C = $(C)) {
if (A.insertion) {
if (Object.isString(A.insertion)) {
var B = {};
B[A.insertion] = D;
C.insert(B)
} else {
A.insertion(C, D)
}
} else {
C.update(D)
}
}
}
});
Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
initialize: function($super, A, C, B) {
$super(B);
this.onComplete = this.options.onComplete;
this.frequency = (this.options.frequency || 2);
this.decay = (this.options.decay || 1);
this.updater = {};
this.container = A;
this.url = C;
this.start()
},
start: function() {
this.options.onComplete = this.updateComplete.bind(this);
this.onTimerEvent()
},
stop: function() {
this.updater.options.onComplete = undefined;
clearTimeout(this.timer);
(this.onComplete || Prototype.emptyFunction).apply(this, arguments)
},
updateComplete: function(A) {
if (this.options.decay) {
this.decay = (A.responseText == this.lastText ? this.decay * this.options.decay : 1);
this.lastText = A.responseText
}
this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency)
},
onTimerEvent: function() {
this.updater = new Ajax.Updater(this.container, this.url, this.options)
}
});
function $(B) {
if (arguments.length > 1) {
for (var A = 0, D = [], C = arguments.length; A < C; A++) {
D.push($(arguments[A]))
}
return D
}
if (Object.isString(B)) {
B = document.getElementById(B)
}
return Element.extend(B)
}
if (Prototype.BrowserFeatures.XPath) {
document._getElementsByXPath = function(F, A) {
var C = [];
var E = document.evaluate(F, $(A) || document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var B = 0, D = E.snapshotLength; B < D; B++) {
C.push(Element.extend(E.snapshotItem(B)))
}
return C
}
}
if (!window.Node) {
var Node = {}
}
if (!Node.ELEMENT_NODE) {
Object.extend(Node, {
ELEMENT_NODE: 1,
ATTRIBUTE_NODE: 2,
TEXT_NODE: 3,
CDATA_SECTION_NODE: 4,
ENTITY_REFERENCE_NODE: 5,
ENTITY_NODE: 6,
PROCESSING_INSTRUCTION_NODE: 7,
COMMENT_NODE: 8,
DOCUMENT_NODE: 9,
DOCUMENT_TYPE_NODE: 10,
DOCUMENT_FRAGMENT_NODE: 11,
NOTATION_NODE: 12
})
}(function() {
var A = this.Element;
this.Element = function(D, C) {
C = C || {};
D = D.toLowerCase();
var B = Element.cache;
if (Prototype.Browser.IE && C.name) {
D = "<" + D + ' name="' + C.name + '">';
delete C.name;
return Element.writeAttribute(document.createElement(D), C)
}
if (!B[D]) {
B[D] = Element.extend(document.createElement(D))
}
return Element.writeAttribute(B[D].cloneNode(false), C)
};
Object.extend(this.Element, A || {})
}).call(window);
Element.cache = {};
Element.Methods = {
visible: function(A) {
return $(A).style.display != "none"
},
toggle: function(A) {
A = $(A);
Element[Element.visible(A) ? "hide" : "show"](A);
return A
},
hide: function(A) {
$(A).style.display = "none";
return A
},
show: function(A) {
$(A).style.display = "";
return A
},
remove: function(A) {
A = $(A);
A.parentNode.removeChild(A);
return A
},
update: function(A, B) {
A = $(A);
if (B && B.toElement) {
B = B.toElement()
}
if (Object.isElement(B)) {
return A.update().insert(B)
}
B = Object.toHTML(B);
A.innerHTML = B.stripScripts();
B.evalScripts.bind(B).defer();
return A
},
replace: function(B, C) {
B = $(B);
if (C && C.toElement) {
C = C.toElement()
} else {
if (!Object.isElement(C)) {
C = Object.toHTML(C);
var A = B.ownerDocument.createRange();
A.selectNode(B);
C.evalScripts.bind(C).defer();
C = A.createContextualFragment(C.stripScripts())
}
}
B.parentNode.replaceChild(C, B);
return B
},
insert: function(C, E) {
C = $(C);
if (Object.isString(E) || Object.isNumber(E) || Object.isElement(E) || (E && (E.toElement || E.toHTML))) {
E = {
bottom: E
}
}
var D, F, B, G;
for (var A in E) {
D = E[A];
A = A.toLowerCase();
F = Element._insertionTranslations[A];
if (D && D.toElement) {
D = D.toElement()
}
if (Object.isElement(D)) {
F(C, D);
continue
}
D = Object.toHTML(D);
B = ((A == "before" || A == "after") ? C.parentNode : C).tagName.toUpperCase();
G = Element._getContentFromAnonymousElement(B, D.stripScripts());
if (A == "top" || A == "after") {
G.reverse()
}
G.each(F.curry(C));
D.evalScripts.bind(D).defer()
}
return C
},
wrap: function(B, C, A) {
B = $(B);
if (Object.isElement(C)) {
$(C).writeAttribute(A || {})
} else {
if (Object.isString(C)) {
C = new Element(C, A)
} else {
C = new Element("div", C)
}
}
if (B.parentNode) {
B.parentNode.replaceChild(C, B)
}
C.appendChild(B);
return C
},
inspect: function(B) {
B = $(B);
var A = "<" + B.tagName.toLowerCase();
$H({
id: "id",
className: "class"
}).each(function(F) {
var E = F.first(),
C = F.last();
var D = (B[E] || "").toString();
if (D) {
A += " " + C + "=" + D.inspect(true)
}
});
return A + ">"
},
recursivelyCollect: function(A, C) {
A = $(A);
var B = [];
while (A = A[C]) {
if (A.nodeType == 1) {
B.push(Element.extend(A))
}
}
return B
},
ancestors: function(A) {
return $(A).recursivelyCollect("parentNode")
},
descendants: function(A) {
return $(A).select("*")
},
firstDescendant: function(A) {
A = $(A).firstChild;
while (A && A.nodeType != 1) {
A = A.nextSibling
}
return $(A)
},
immediateDescendants: function(A) {
if (!(A = $(A).firstChild)) {
return []
}
while (A && A.nodeType != 1) {
A = A.nextSibling
}
if (A) {
return [A].concat($(A).nextSiblings())
}
return []
},
previousSiblings: function(A) {
return $(A).recursivelyCollect("previousSibling")
},
nextSiblings: function(A) {
return $(A).recursivelyCollect("nextSibling")
},
siblings: function(A) {
A = $(A);
return A.previousSiblings().reverse().concat(A.nextSiblings())
},
match: function(B, A) {
if (Object.isString(A)) {
A = new Selector(A)
}
return A.match($(B))
},
up: function(B, D, A) {
B = $(B);
if (arguments.length == 1) {
return $(B.parentNode)
}
var C = B.ancestors();
return Object.isNumber(D) ? C[D] : Selector.findElement(C, D, A)
},
down: function(B, C, A) {
B = $(B);
if (arguments.length == 1) {
return B.firstDescendant()
}
return Object.isNumber(C) ? B.descendants()[C] : B.select(C)[A || 0]
},
previous: function(B, D, A) {
B = $(B);
if (arguments.length == 1) {
return $(Selector.handlers.previousElementSibling(B))
}
var C = B.previousSiblings();
return Object.isNumber(D) ? C[D] : Selector.findElement(C, D, A)
},
next: function(C, D, B) {
C = $(C);
if (arguments.length == 1) {
return $(Selector.handlers.nextElementSibling(C))
}
var A = C.nextSiblings();
return Object.isNumber(D) ? A[D] : Selector.findElement(A, D, B)
},
select: function() {
var A = $A(arguments),
B = $(A.shift());
return Selector.findChildElements(B, A)
},
adjacent: function() {
var A = $A(arguments),
B = $(A.shift());
return Selector.findChildElements(B.parentNode, A).without(B)
},
identify: function(B) {
B = $(B);
var C = B.readAttribute("id"),
A = arguments.callee;
if (C) {
return C
}
do {
C = "anonymous_element_" + A.counter++
} while ($(C));
B.writeAttribute("id", C);
return C
},
readAttribute: function(C, A) {
C = $(C);
if (Prototype.Browser.IE) {
var B = Element._attributeTranslations.read;
if (B.values[A]) {
return B.values[A](C, A)
}
if (B.names[A]) {
A = B.names[A]
}
if (A.include(":")) {
return (!C.attributes || !C.attributes[A]) ? null : C.attributes[A].value
}
}
return C.getAttribute(A)
},
writeAttribute: function(E, C, F) {
E = $(E);
var B = {},
D = Element._attributeTranslations.write;
if (typeof C == "object") {
B = C
} else {
B[C] = Object.isUndefined(F) ? true : F
}
for (var A in B) {
C = D.names[A] || A;
F = B[A];
if (D.values[A]) {
C = D.values[A](E, F)
}
if (F === false || F === null) {
E.removeAttribute(C)
} else {
if (F === true) {
E.setAttribute(C, C)
} else {
E.setAttribute(C, F)
}
}
}
return E
},
getHeight: function(A) {
return $(A).getDimensions().height
},
getWidth: function(A) {
return $(A).getDimensions().width
},
classNames: function(A) {
return new Element.ClassNames(A)
},
hasClassName: function(A, B) {
if (!(A = $(A))) {
return
}
var C = A.className;
return (C.length > 0 && (C == B || new RegExp("(^|\\s)" + B + "(\\s|$)").test(C)))
},
addClassName: function(A, B) {
if (!(A = $(A))) {
return
}
if (!A.hasClassName(B)) {
A.className += (A.className ? " " : "") + B
}
return A
},
removeClassName: function(A, B) {
if (!(A = $(A))) {
return
}
A.className = A.className.replace(new RegExp("(^|\\s+)" + B + "(\\s+|$)"), " ").strip();
return A
},
toggleClassName: function(A, B) {
if (!(A = $(A))) {
return
}
return A[A.hasClassName(B) ? "removeClassName" : "addClassName"](B)
},
cleanWhitespace: function(B) {
B = $(B);
var C = B.firstChild;
while (C) {
var A = C.nextSibling;
if (C.nodeType == 3 && !/\S/.test(C.nodeValue)) {
B.removeChild(C)
}
C = A
}
return B
},
empty: function(A) {
return $(A).innerHTML.blank()
},
descendantOf: function(D, C) {
D = $(D), C = $(C);
var F = C;
if (D.compareDocumentPosition) {
return (D.compareDocumentPosition(C) & 8) === 8
}
if (D.sourceIndex && !Prototype.Browser.Opera) {
var E = D.sourceIndex,
B = C.sourceIndex,
A = C.nextSibling;
if (!A) {
do {
C = C.parentNode
} while (!(A = C.nextSibling) && C.parentNode)
}
if (A && A.sourceIndex) {
return (E > B && E < A.sourceIndex)
}
}
while (D = D.parentNode) {
if (D == F) {
return true
}
}
return false
},
scrollTo: function(A) {
A = $(A);
var B = A.cumulativeOffset();
window.scrollTo(B[0], B[1]);
return A
},
getStyle: function(B, C) {
B = $(B);
C = C == "float" ? "cssFloat" : C.camelize();
var D = B.style[C];
if (!D) {
var A = document.defaultView.getComputedStyle(B, null);
D = A ? A[C] : null
}
if (C == "opacity") {
return D ? parseFloat(D) : 1
}
return D == "auto" ? null : D
},
getOpacity: function(A) {
return $(A).getStyle("opacity")
},
setStyle: function(B, C) {
B = $(B);
var E = B.style,
A;
if (Object.isString(C)) {
B.style.cssText += ";" + C;
return C.include("opacity") ? B.setOpacity(C.match(/opacity:\s*(\d?\.?\d*)/)[1]) : B
}
for (var D in C) {
if (D == "opacity") {
B.setOpacity(C[D])
} else {
E[(D == "float" || D == "cssFloat") ? (Object.isUndefined(E.styleFloat) ? "cssFloat" : "styleFloat") : D] = C[D]
}
}
return B
},
setOpacity: function(A, B) {
A = $(A);
A.style.opacity = (B == 1 || B === "") ? "" : (B < 0.00001) ? 0 : B;
return A
},
getDimensions: function(C) {
C = $(C);
var G = $(C).getStyle("display");
if (G != "none" && G != null) {
return {
width: C.offsetWidth,
height: C.offsetHeight
}
}
var B = C.style;
var F = B.visibility;
var D = B.position;
var A = B.display;
B.visibility = "hidden";
B.position = "absolute";
B.display = "block";
var H = C.clientWidth;
var E = C.clientHeight;
B.display = A;
B.position = D;
B.visibility = F;
return {
width: H,
height: E
}
},
makePositioned: function(A) {
A = $(A);
var B = Element.getStyle(A, "position");
if (B == "static" || !B) {
A._madePositioned = true;
A.style.position = "relative";
if (window.opera) {
A.style.top = 0;
A.style.left = 0
}
}
return A
},
undoPositioned: function(A) {
A = $(A);
if (A._madePositioned) {
A._madePositioned = undefined;
A.style.position = A.style.top = A.style.left = A.style.bottom = A.style.right = ""
}
return A
},
makeClipping: function(A) {
A = $(A);
if (A._overflow) {
return A
}
A._overflow = Element.getStyle(A, "overflow") || "auto";
if (A._overflow !== "hidden") {
A.style.overflow = "hidden"
}
return A
},
undoClipping: function(A) {
A = $(A);
if (!A._overflow) {
return A
}
A.style.overflow = A._overflow == "auto" ? "" : A._overflow;
A._overflow = null;
return A
},
cumulativeOffset: function(B) {
var A = 0,
C = 0;
do {
A += B.offsetTop || 0;
C += B.offsetLeft || 0;
B = B.offsetParent
} while (B);
return Element._returnOffset(C, A)
},
positionedOffset: function(B) {
var A = 0,
D = 0;
do {
A += B.offsetTop || 0;
D += B.offsetLeft || 0;
B = B.offsetParent;
if (B) {
if (B.tagName == "BODY") {
break
}
var C = Element.getStyle(B, "position");
if (C !== "static") {
break
}
}
} while (B);
return Element._returnOffset(D, A)
},
absolutize: function(B) {
B = $(B);
if (B.getStyle("position") == "absolute") {
return
}
var D = B.positionedOffset();
var F = D[1];
var E = D[0];
var C = B.clientWidth;
var A = B.clientHeight;
B._originalLeft = E - parseFloat(B.style.left || 0);
B._originalTop = F - parseFloat(B.style.top || 0);
B._originalWidth = B.style.width;
B._originalHeight = B.style.height;
B.style.position = "absolute";
B.style.top = F + "px";
B.style.left = E + "px";
B.style.width = C + "px";
B.style.height = A + "px";
return B
},
relativize: function(A) {
A = $(A);
if (A.getStyle("position") == "relative") {
return
}
A.style.position = "relative";
var C = parseFloat(A.style.top || 0) - (A._originalTop || 0);
var B = parseFloat(A.style.left || 0) - (A._originalLeft || 0);
A.style.top = C + "px";
A.style.left = B + "px";
A.style.height = A._originalHeight;
A.style.width = A._originalWidth;
return A
},
cumulativeScrollOffset: function(B) {
var A = 0,
C = 0;
do {
A += B.scrollTop || 0;
C += B.scrollLeft || 0;
B = B.parentNode
} while (B);
return Element._returnOffset(C, A)
},
getOffsetParent: function(A) {
if (A.offsetParent) {
return $(A.offsetParent)
}
if (A == document.body) {
return $(A)
}
while ((A = A.parentNode) && A != document.body) {
if (Element.getStyle(A, "position") != "static") {
return $(A)
}
}
return $(document.body)
},
viewportOffset: function(D) {
var A = 0,
C = 0;
var B = D;
do {
A += B.offsetTop || 0;
C += B.offsetLeft || 0;
if (B.offsetParent == document.body && Element.getStyle(B, "position") == "absolute") {
break
}
} while (B = B.offsetParent);
B = D;
do {
if (!Prototype.Browser.Opera || B.tagName == "BODY") {
A -= B.scrollTop || 0;
C -= B.scrollLeft || 0
}
} while (B = B.parentNode);
return Element._returnOffset(C, A)
},
clonePosition: function(B, D) {
var A = Object.extend({
setLeft: true,
setTop: true,
setWidth: true,
setHeight: true,
offsetTop: 0,
offsetLeft: 0
}, arguments[2] || {});
D = $(D);
var E = D.viewportOffset();
B = $(B);
var F = [0, 0];
var C = null;
if (Element.getStyle(B, "position") == "absolute") {
C = B.getOffsetParent();
F = C.viewportOffset()
}
if (C == document.body) {
F[0] -= document.body.offsetLeft;
F[1] -= document.body.offsetTop
}
if (A.setLeft) {
B.style.left = (E[0] - F[0] + A.offsetLeft) + "px"
}
if (A.setTop) {
B.style.top = (E[1] - F[1] + A.offsetTop) + "px"
}
if (A.setWidth) {
B.style.width = D.offsetWidth + "px"
}
if (A.setHeight) {
B.style.height = D.offsetHeight + "px"
}
return B
}
};
Element.Methods.identify.counter = 1;
Object.extend(Element.Methods, {
getElementsBySelector: Element.Methods.select,
childElements: Element.Methods.immediateDescendants
});
Element._attributeTranslations = {
write: {
names: {
className: "class",
htmlFor: "for"
},
values: {}
}
};
if (Prototype.Browser.Opera) {
Element.Methods.getStyle = Element.Methods.getStyle.wrap(function(D, B, C) {
switch (C) {
case "left":
case "top":
case "right":
case "bottom":
if (D(B, "position") === "static") {
return null
}
case "height":
case "width":
if (!Element.visible(B)) {
return null
}
var E = parseInt(D(B, C), 10);
if (E !== B["offset" + C.capitalize()]) {
return E + "px"
}
var A;
if (C === "height") {
A = ["border-top-width", "padding-top", "padding-bottom", "border-bottom-width"]
} else {
A = ["border-left-width", "padding-left", "padding-right", "border-right-width"]
}
return A.inject(E, function(F, G) {
var H = D(B, G);
return H === null ? F : F - parseInt(H, 10)
}) + "px";
default:
return D(B, C)
}
});
Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(function(C, A, B) {
if (B === "title") {
return A.title
}
return C(A, B)
})
} else {
if (Prototype.Browser.IE) {
Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(function(C, B) {
B = $(B);
var A = B.getStyle("position");
if (A !== "static") {
return C(B)
}
B.setStyle({
position: "relative"
});
var D = C(B);
B.setStyle({
position: A
});
return D
});
$w("positionedOffset viewportOffset").each(function(A) {
Element.Methods[A] = Element.Methods[A].wrap(function(E, C) {
C = $(C);
var B = C.getStyle("position");
if (B !== "static") {
return E(C)
}
var D = C.getOffsetParent();
if (D && D.getStyle("position") === "fixed") {
D.setStyle({
zoom: 1
})
}
C.setStyle({
position: "relative"
});
var F = E(C);
C.setStyle({
position: B
});
return F
})
});
Element.Methods.getStyle = function(A, B) {
A = $(A);
B = (B == "float" || B == "cssFloat") ? "styleFloat" : B.camelize();
var C = A.style[B];
if (!C && A.currentStyle) {
C = A.currentStyle[B]
}
if (B == "opacity") {
if (C = (A.getStyle("filter") || "").match(/alpha\(opacity=(.*)\)/)) {
if (C[1]) {
return parseFloat(C[1]) / 100
}
}
return 1
}
if (C == "auto") {
if ((B == "width" || B == "height") && (A.getStyle("display") != "none")) {
return A["offset" + B.capitalize()] + "px"
}
return null
}
return C
};
Element.Methods.setOpacity = function(B, E) {
function F(G) {
return G.replace(/alpha\([^\)]*\)/gi, "")
}
B = $(B);
var A = B.currentStyle;
if ((A && !A.hasLayout) || (!A && B.style.zoom == "normal")) {
B.style.zoom = 1
}
var D = B.getStyle("filter"),
C = B.style;
if (E == 1 || E === "") {
(D = F(D)) ? C.filter = D: C.removeAttribute("filter");
return B
} else {
if (E < 0.00001) {
E = 0
}
}
C.filter = F(D) + "alpha(opacity=" + (E * 100) + ")";
return B
};
Element._attributeTranslations = {
read: {
names: {
"class": "className",
"for": "htmlFor"
},
values: {
_getAttr: function(A, B) {
return A.getAttribute(B, 2)
},
_getAttrNode: function(A, C) {
var B = A.getAttributeNode(C);
return B ? B.value : ""
},
_getEv: function(A, B) {
B = A.getAttribute(B);
return B ? B.toString().slice(23, -2) : null
},
_flag: function(A, B) {
return $(A).hasAttribute(B) ? B : null
},
style: function(A) {
return A.style.cssText.toLowerCase()
},
title: function(A) {
return A.title
}
}
}
};
Element._attributeTranslations.write = {
names: Object.extend({
cellpadding: "cellPadding",
cellspacing: "cellSpacing"
}, Element._attributeTranslations.read.names),
values: {
checked: function(A, B) {
A.checked = !!B
},
style: function(A, B) {
A.style.cssText = B ? B : ""
}
}
};
Element._attributeTranslations.has = {};
$w("colSpan rowSpan vAlign dateTime accessKey tabIndex encType maxLength readOnly longDesc").each(function(A) {
Element._attributeTranslations.write.names[A.toLowerCase()] = A;
Element._attributeTranslations.has[A.toLowerCase()] = A
});
(function(A) {
Object.extend(A, {
href: A._getAttr,
src: A._getAttr,
type: A._getAttr,
action: A._getAttrNode,
disabled: A._flag,
checked: A._flag,
readonly: A._flag,
multiple: A._flag,
onload: A._getEv,
onunload: A._getEv,
onclick: A._getEv,
ondblclick: A._getEv,
onmousedown: A._getEv,
onmouseup: A._getEv,
onmouseover: A._getEv,
onmousemove: A._getEv,
onmouseout: A._getEv,
onfocus: A._getEv,
onblur: A._getEv,
onkeypress: A._getEv,
onkeydown: A._getEv,
onkeyup: A._getEv,
onsubmit: A._getEv,
onreset: A._getEv,
onselect: A._getEv,
onchange: A._getEv
})
})(Element._attributeTranslations.read.values)
} else {
if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
Element.Methods.setOpacity = function(A, B) {
A = $(A);
A.style.opacity = (B == 1) ? 0.999999 : (B === "") ? "" : (B < 0.00001) ? 0 : B;
return A
}
} else {
if (Prototype.Browser.WebKit) {
Element.Methods.setOpacity = function(A, B) {
A = $(A);
A.style.opacity = (B == 1 || B === "") ? "" : (B < 0.00001) ? 0 : B;
if (B == 1) {
if (A.tagName == "IMG" && A.width) {
A.width++;
A.width--
} else {
try {
var D = document.createTextNode(" ");
A.appendChild(D);
A.removeChild(D)
} catch (C) {}
}
}
return A
};
Element.Methods.cumulativeOffset = function(B) {
var A = 0,
C = 0;
do {
A += B.offsetTop || 0;
C += B.offsetLeft || 0;
if (B.offsetParent == document.body) {
if (Element.getStyle(B, "position") == "absolute") {
break
}
}
B = B.offsetParent
} while (B);
return Element._returnOffset(C, A)
}
}
}
}
}
if (Prototype.Browser.IE || Prototype.Browser.Opera) {
Element.Methods.update = function(B, C) {
B = $(B);
if (C && C.toElement) {
C = C.toElement()
}
if (Object.isElement(C)) {
return B.update().insert(C)
}
C = Object.toHTML(C);
var A = B.tagName.toUpperCase();
if (A in Element._insertionTranslations.tags) {
$A(B.childNodes).each(function(D) {
B.removeChild(D)
});
Element._getContentFromAnonymousElement(A, C.stripScripts()).each(function(D) {
B.appendChild(D)
})
} else {
B.innerHTML = C.stripScripts()
}
C.evalScripts.bind(C).defer();
return B
}
}
if ("outerHTML" in document.createElement("div")) {
Element.Methods.replace = function(C, E) {
C = $(C);
if (E && E.toElement) {
E = E.toElement()
}
if (Object.isElement(E)) {
C.parentNode.replaceChild(E, C);
return C
}
E = Object.toHTML(E);
var D = C.parentNode,
B = D.tagName.toUpperCase();
if (Element._insertionTranslations.tags[B]) {
var F = C.next();
var A = Element._getContentFromAnonymousElement(B, E.stripScripts());
D.removeChild(C);
if (F) {
A.each(function(G) {
D.insertBefore(G, F)
})
} else {
A.each(function(G) {
D.appendChild(G)
})
}
} else {
C.outerHTML = E.stripScripts()
}
E.evalScripts.bind(E).defer();
return C
}
}
Element._returnOffset = function(B, C) {
var A = [B, C];
A.left = B;
A.top = C;
return A
};
Element._getContentFromAnonymousElement = function(C, B) {
var D = new Element("div"),
A = Element._insertionTranslations.tags[C];
if (A) {
D.innerHTML = A[0] + B + A[1];
A[2].times(function() {
D = D.firstChild
})
} else {
D.innerHTML = B
}
return $A(D.childNodes)
};
Element._insertionTranslations = {
before: function(A, B) {
A.parentNode.insertBefore(B, A)
},
top: function(A, B) {
A.insertBefore(B, A.firstChild)
},
bottom: function(A, B) {
A.appendChild(B)
},
after: function(A, B) {
A.parentNode.insertBefore(B, A.nextSibling)
},
tags: {
TABLE: ["<table>", "</table>", 1],
TBODY: ["<table><tbody>", "</tbody></table>", 2],
TR: ["<table><tbody><tr>", "</tr></tbody></table>", 3],
TD: ["<table><tbody><tr><td>", "</td></tr></tbody></table>", 4],
SELECT: ["<select>", "</select>", 1]
}
};
(function() {
Object.extend(this.tags, {
THEAD: this.tags.TBODY,
TFOOT: this.tags.TBODY,
TH: this.tags.TD
})
}).call(Element._insertionTranslations);
Element.Methods.Simulated = {
hasAttribute: function(A, C) {
C = Element._attributeTranslations.has[C] || C;
var B = $(A).getAttributeNode(C);
return B && B.specified
}
};
Element.Methods.ByTag = {};
Object.extend(Element, Element.Methods);
if (!Prototype.BrowserFeatures.ElementExtensions && document.createElement("div").__proto__) {
window.HTMLElement = {};
window.HTMLElement.prototype = document.createElement("div").__proto__;
Prototype.BrowserFeatures.ElementExtensions = true
}
Element.extend = (function() {
if (Prototype.BrowserFeatures.SpecificElementExtensions) {
return Prototype.K
}
var A = {},
B = Element.Methods.ByTag;
var C = Object.extend(function(F) {
if (!F || F._extendedByPrototype || F.nodeType != 1 || F == window) {
return F
}
var D = Object.clone(A),
E = F.tagName,
H, G;
if (B[E]) {
Object.extend(D, B[E])
}
for (H in D) {
G = D[H];
if (Object.isFunction(G) && !(H in F)) {
F[H] = G.methodize()
}
}
F._extendedByPrototype = Prototype.emptyFunction;
return F
}, {
refresh: function() {
if (!Prototype.BrowserFeatures.ElementExtensions) {
Object.extend(A, Element.Methods);
Object.extend(A, Element.Methods.Simulated)
}
}
});
C.refresh();
return C
})();
Element.hasAttribute = function(A, B) {
if (A.hasAttribute) {
return A.hasAttribute(B)
}
return Element.Methods.Simulated.hasAttribute(A, B)
};
Element.addMethods = function(C) {
var I = Prototype.BrowserFeatures,
D = Element.Methods.ByTag;
if (!C) {
Object.extend(Form, Form.Methods);
Object.extend(Form.Element, Form.Element.Methods);
Object.extend(Element.Methods.ByTag, {
FORM: Object.clone(Form.Methods),
INPUT: Object.clone(Form.Element.Methods),
SELECT: Object.clone(Form.Element.Methods),
TEXTAREA: Object.clone(Form.Element.Methods)
})
}
if (arguments.length == 2) {
var B = C;
C = arguments[1]
}
if (!B) {
Object.extend(Element.Methods, C || {})
} else {
if (Object.isArray(B)) {
B.each(H)
} else {
H(B)
}
}
function H(F) {
F = F.toUpperCase();
if (!Element.Methods.ByTag[F]) {
Element.Methods.ByTag[F] = {}
}
Object.extend(Element.Methods.ByTag[F], C)
}
function A(L, K, F) {
F = F || false;
for (var N in L) {
var M = L[N];
if (!Object.isFunction(M)) {
continue
}
if (!F || !(N in K)) {
K[N] = M.methodize()
}
}
}
function E(L) {
var F;
var K = {
OPTGROUP: "OptGroup",
TEXTAREA: "TextArea",
P: "Paragraph",
FIELDSET: "FieldSet",
UL: "UList",
OL: "OList",
DL: "DList",
DIR: "Directory",
H1: "Heading",
H2: "Heading",
H3: "Heading",
H4: "Heading",
H5: "Heading",
H6: "Heading",
Q: "Quote",
INS: "Mod",
DEL: "Mod",
A: "Anchor",
IMG: "Image",
CAPTION: "TableCaption",
COL: "TableCol",
COLGROUP: "TableCol",
THEAD: "TableSection",
TFOOT: "TableSection",
TBODY: "TableSection",
TR: "TableRow",
TH: "TableCell",
TD: "TableCell",
FRAMESET: "FrameSet",
IFRAME: "IFrame"
};
if (K[L]) {
F = "HTML" + K[L] + "Element"
}
if (window[F]) {
return window[F]
}
F = "HTML" + L + "Element";
if (window[F]) {
return window[F]
}
F = "HTML" + L.capitalize() + "Element";
if (window[F]) {
return window[F]
}
window[F] = {};
window[F].prototype = document.createElement(L).__proto__;
return window[F]
}
if (I.ElementExtensions) {
A(Element.Methods, HTMLElement.prototype);
A(Element.Methods.Simulated, HTMLElement.prototype, true)
}
if (I.SpecificElementExtensions) {
for (var J in Element.Methods.ByTag) {
var G = E(J);
if (Object.isUndefined(G)) {
continue
}
A(D[J], G.prototype)
}
}
Object.extend(Element, Element.Methods);
delete Element.ByTag;
if (Element.extend.refresh) {
Element.extend.refresh()
}
Element.cache = {}
};
document.viewport = {
getDimensions: function() {
var A = {};
var C = Prototype.Browser;
$w("width height").each(function(E) {
var B = E.capitalize();
A[E] = (C.WebKit && !document.evaluate) ? self["inner" + B] : (C.Opera) ? document.body["client" + B] : document.documentElement["client" + B]
});
return A
},
getWidth: function() {
return this.getDimensions().width
},
getHeight: function() {
return this.getDimensions().height
},
getScrollOffsets: function() {
return Element._returnOffset(window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop)
}
};
var Selector = Class.create({
initialize: function(A) {
this.expression = A.strip();
this.compileMatcher()
},
shouldUseXPath: function() {
if (!Prototype.BrowserFeatures.XPath) {
return false
}
var A = this.expression;
if (Prototype.Browser.WebKit && (A.include("-of-type") || A.include(":empty"))) {
return false
}
if ((/(\[[\w-]*?:|:checked)/).test(this.expression)) {
return false
}
return true
},
compileMatcher: function() {
if (this.shouldUseXPath()) {
return this.compileXPathMatcher()
}
var e = this.expression,
ps = Selector.patterns,
h = Selector.handlers,
c = Selector.criteria,
le, p, m;
if (Selector._cache[e]) {
this.matcher = Selector._cache[e];
return
}
this.matcher = ["this.matcher = function(root) {", "var r = root, h = Selector.handlers, c = false, n;"];
while (e && le != e && (/\S/).test(e)) {
le = e;
for (var i in ps) {
p = ps[i];
if (m = e.match(p)) {
this.matcher.push(Object.isFunction(c[i]) ? c[i](m) : new Template(c[i]).evaluate(m));
e = e.replace(m[0], "");
break
}
}
}
this.matcher.push("return h.unique(n);\n}");
eval(this.matcher.join("\n"));
Selector._cache[this.expression] = this.matcher
},
compileXPathMatcher: function() {
var E = this.expression,
F = Selector.patterns,
B = Selector.xpath,
D, A;
if (Selector._cache[E]) {
this.xpath = Selector._cache[E];
return
}
this.matcher = [".//*"];
while (E && D != E && (/\S/).test(E)) {
D = E;
for (var C in F) {
if (A = E.match(F[C])) {
this.matcher.push(Object.isFunction(B[C]) ? B[C](A) : new Template(B[C]).evaluate(A));
E = E.replace(A[0], "");
break
}
}
}
this.xpath = this.matcher.join("");
Selector._cache[this.expression] = this.xpath
},
findElements: function(A) {
A = A || document;
if (this.xpath) {
return document._getElementsByXPath(this.xpath, A)
}
return this.matcher(A)
},
match: function(H) {
this.tokens = [];
var L = this.expression,
A = Selector.patterns,
E = Selector.assertions;
var B, D, F;
while (L && B !== L && (/\S/).test(L)) {
B = L;
for (var I in A) {
D = A[I];
if (F = L.match(D)) {
if (E[I]) {
this.tokens.push([I, Object.clone(F)]);
L = L.replace(F[0], "")
} else {
return this.findElements(document).include(H)
}
}
}
}
var K = true,
C, J;
for (var I = 0, G; G = this.tokens[I]; I++) {
C = G[0], J = G[1];
if (!Selector.assertions[C](H, J)) {
K = false;
break
}
}
return K
},
toString: function() {
return this.expression
},
inspect: function() {
return "#<Selector:" + this.expression.inspect() + ">"
}
});
Object.extend(Selector, {
_cache: {},
xpath: {
descendant: "//*",
child: "/*",
adjacent: "/following-sibling::*[1]",
laterSibling: "/following-sibling::*",
tagName: function(A) {
if (A[1] == "*") {
return ""
}
return "[local-name()='" + A[1].toLowerCase() + "' or local-name()='" + A[1].toUpperCase() + "']"
},
className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
id: "[@id='#{1}']",
attrPresence: function(A) {
A[1] = A[1].toLowerCase();
return new Template("[@#{1}]").evaluate(A)
},
attr: function(A) {
A[1] = A[1].toLowerCase();
A[3] = A[5] || A[6];
return new Template(Selector.xpath.operators[A[2]]).evaluate(A)
},
pseudo: function(A) {
var B = Selector.xpath.pseudos[A[1]];
if (!B) {
return ""
}
if (Object.isFunction(B)) {
return B(A)
}
return new Template(Selector.xpath.pseudos[A[1]]).evaluate(A)
},
operators: {
"=": "[@#{1}='#{3}']",
"!=": "[@#{1}!='#{3}']",
"^=": "[starts-with(@#{1}, '#{3}')]",
"$=": "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
"*=": "[contains(@#{1}, '#{3}')]",
"~=": "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
"|=": "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
},
pseudos: {
"first-child": "[not(preceding-sibling::*)]",
"last-child": "[not(following-sibling::*)]",
"only-child": "[not(preceding-sibling::* or following-sibling::*)]",
empty: "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",
checked: "[@checked]",
disabled: "[@disabled]",
enabled: "[not(@disabled)]",
not: function(B) {
var H = B[6],
G = Selector.patterns,
A = Selector.xpath,
E, C;
var F = [];
while (H && E != H && (/\S/).test(H)) {
E = H;
for (var D in G) {
if (B = H.match(G[D])) {
C = Object.isFunction(A[D]) ? A[D](B) : new Template(A[D]).evaluate(B);
F.push("(" + C.substring(1, C.length - 1) + ")");
H = H.replace(B[0], "");
break
}
}
}
return "[not(" + F.join(" and ") + ")]"
},
"nth-child": function(A) {
return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", A)
},
"nth-last-child": function(A) {
return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", A)
},
"nth-of-type": function(A) {
return Selector.xpath.pseudos.nth("position() ", A)
},
"nth-last-of-type": function(A) {
return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", A)
},
"first-of-type": function(A) {
A[6] = "1";
return Selector.xpath.pseudos["nth-of-type"](A)
},
"last-of-type": function(A) {
A[6] = "1";
return Selector.xpath.pseudos["nth-last-of-type"](A)
},
"only-of-type": function(A) {
var B = Selector.xpath.pseudos;
return B["first-of-type"](A) + B["last-of-type"](A)
},
nth: function(E, C) {
var F, G = C[6],
B;
if (G == "even") {
G = "2n+0"
}
if (G == "odd") {
G = "2n+1"
}
if (F = G.match(/^(\d+)$/)) {
return "[" + E + "= " + F[1] + "]"
}
if (F = G.match(/^(-?\d*)?n(([+-])(\d+))?/)) {
if (F[1] == "-") {
F[1] = -1
}
var D = F[1] ? Number(F[1]) : 1;
var A = F[2] ? Number(F[2]) : 0;
B = "[((#{fragment} - #{b}) mod #{a} = 0) and ((#{fragment} - #{b}) div #{a} >= 0)]";
return new Template(B).evaluate({
fragment: E,
a: D,
b: A
})
}
}
}
},
criteria: {
tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
className: 'n = h.className(n, r, "#{1}", c); c = false;',
id: 'n = h.id(n, r, "#{1}", c); c = false;',
attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
attr: function(A) {
A[3] = (A[5] || A[6]);
return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(A)
},
pseudo: function(A) {
if (A[6]) {
A[6] = A[6].replace(/"/g, '\\"')
}
return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(A)
},
descendant: 'c = "descendant";',
child: 'c = "child";',
adjacent: 'c = "adjacent";',
laterSibling: 'c = "laterSibling";'
},
patterns: {
laterSibling: /^\s*~\s*/,
child: /^\s*>\s*/,
adjacent: /^\s*\+\s*/,
descendant: /^\s/,
tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
id: /^#([\w\-\*]+)(\b|$)/,
className: /^\.([\w\-\*]+)(\b|$)/,
pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
attrPresence: /^\[([\w]+)\]/,
attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
},
assertions: {
tagName: function(A, B) {
return B[1].toUpperCase() == A.tagName.toUpperCase()
},
className: function(A, B) {
return Element.hasClassName(A, B[1])
},
id: function(A, B) {
return A.id === B[1]
},
attrPresence: function(A, B) {
return Element.hasAttribute(A, B[1])
},
attr: function(B, C) {
var A = Element.readAttribute(B, C[1]);
return A && Selector.operators[C[2]](A, C[5] || C[6])
}
},
handlers: {
concat: function(B, A) {
for (var C = 0, D; D = A[C]; C++) {
B.push(D)
}
return B
},
mark: function(A) {
var D = Prototype.emptyFunction;
for (var B = 0, C; C = A[B]; B++) {
C._countedByPrototype = D
}
return A
},
unmark: function(A) {
for (var B = 0, C; C = A[B]; B++) {
C._countedByPrototype = undefined
}
return A
},
index: function(A, D, G) {
A._countedByPrototype = Prototype.emptyFunction;
if (D) {
for (var B = A.childNodes, E = B.length - 1, C = 1; E >= 0; E--) {
var F = B[E];
if (F.nodeType == 1 && (!G || F._countedByPrototype)) {
F.nodeIndex = C++
}
}
} else {
for (var E = 0, C = 1, B = A.childNodes; F = B[E]; E++) {
if (F.nodeType == 1 && (!G || F._countedByPrototype)) {
F.nodeIndex = C++
}
}
}
},
unique: function(B) {
if (B.length == 0) {
return B
}
var D = [],
E;
for (var C = 0, A = B.length; C < A; C++) {
if (!(E = B[C])._countedByPrototype) {
E._countedByPrototype = Prototype.emptyFunction;
D.push(Element.extend(E))
}
}
return Selector.handlers.unmark(D)
},
descendant: function(A) {
var D = Selector.handlers;
for (var C = 0, B = [], E; E = A[C]; C++) {
D.concat(B, E.getElementsByTagName("*"))
}
return B
},
child: function(A) {
var E = Selector.handlers;
for (var D = 0, C = [], F; F = A[D]; D++) {
for (var B = 0, G; G = F.childNodes[B]; B++) {
if (G.nodeType == 1 && G.tagName != "!") {
C.push(G)
}
}
}
return C
},
adjacent: function(A) {
for (var C = 0, B = [], E; E = A[C]; C++) {
var D = this.nextElementSibling(E);
if (D) {
B.push(D)
}
}
return B
},
laterSibling: function(A) {
var D = Selector.handlers;
for (var C = 0, B = [], E; E = A[C]; C++) {
D.concat(B, Element.nextSiblings(E))
}
return B
},
nextElementSibling: function(A) {
while (A = A.nextSibling) {
if (A.nodeType == 1) {
return A
}
}
return null
},
previousElementSibling: function(A) {
while (A = A.previousSibling) {
if (A.nodeType == 1) {
return A
}
}
return null
},
tagName: function(A, H, C, B) {
var I = C.toUpperCase();
var E = [],
G = Selector.handlers;
if (A) {
if (B) {
if (B == "descendant") {
for (var F = 0, D; D = A[F]; F++) {
G.concat(E, D.getElementsByTagName(C))
}
return E
} else {
A = this[B](A)
}
if (C == "*") {
return A
}
}
for (var F = 0, D; D = A[F]; F++) {
if (D.tagName.toUpperCase() === I) {
E.push(D)
}
}
return E
} else {
return H.getElementsByTagName(C)
}
},
id: function(B, A, H, F) {
var G = $(H),
D = Selector.handlers;
if (!G) {
return []
}
if (!B && A == document) {
return [G]
}
if (B) {
if (F) {
if (F == "child") {
for (var C = 0, E; E = B[C]; C++) {
if (G.parentNode == E) {
return [G]
}
}
} else {
if (F == "descendant") {
for (var C = 0, E; E = B[C]; C++) {
if (Element.descendantOf(G, E)) {
return [G]
}
}
} else {
if (F == "adjacent") {
for (var C = 0, E; E = B[C]; C++) {
if (Selector.handlers.previousElementSibling(G) == E) {
return [G]
}
}
} else {
B = D[F](B)
}
}
}
}
for (var C = 0, E; E = B[C]; C++) {
if (E == G) {
return [G]
}
}
return []
}
return (G && Element.descendantOf(G, A)) ? [G] : []
},
className: function(B, A, C, D) {
if (B && D) {
B = this[D](B)
}
return Selector.handlers.byClassName(B, A, C)
},
byClassName: function(C, B, F) {
if (!C) {
C = Selector.handlers.descendant([B])
}
var H = " " + F + " ";
for (var E = 0, D = [], G, A; G = C[E]; E++) {
A = G.className;
if (A.length == 0) {
continue
}
if (A == F || (" " + A + " ").include(H)) {
D.push(G)
}
}
return D
},
attrPresence: function(C, B, A, G) {
if (!C) {
C = B.getElementsByTagName("*")
}
if (C && G) {
C = this[G](C)
}
var E = [];
for (var D = 0, F; F = C[D]; D++) {
if (Element.hasAttribute(F, A)) {
E.push(F)
}
}
return E
},
attr: function(A, I, H, J, C, B) {
if (!A) {
A = I.getElementsByTagName("*")
}
if (A && B) {
A = this[B](A)
}
var K = Selector.operators[C],
F = [];
for (var E = 0, D; D = A[E]; E++) {
var G = Element.readAttribute(D, H);
if (G === null) {
continue
}
if (K(G, J)) {
F.push(D)
}
}
return F
},
pseudo: function(B, C, E, A, D) {
if (B && D) {
B = this[D](B)
}
if (!B) {
B = A.getElementsByTagName("*")
}
return Selector.pseudos[C](B, E, A)
}
},
pseudos: {
"first-child": function(B, F, A) {
for (var D = 0, C = [], E; E = B[D]; D++) {
if (Selector.handlers.previousElementSibling(E)) {
continue
}
C.push(E)
}
return C
},
"last-child": function(B, F, A) {
for (var D = 0, C = [], E; E = B[D]; D++) {
if (Selector.handlers.nextElementSibling(E)) {
continue
}
C.push(E)
}
return C
},
"only-child": function(B, G, A) {
var E = Selector.handlers;
for (var D = 0, C = [], F; F = B[D]; D++) {
if (!E.previousElementSibling(F) && !E.nextElementSibling(F)) {
C.push(F)
}
}
return C
},
"nth-child": function(B, C, A) {
return Selector.pseudos.nth(B, C, A)
},
"nth-last-child": function(B, C, A) {
return Selector.pseudos.nth(B, C, A, true)
},
"nth-of-type": function(B, C, A) {
return Selector.pseudos.nth(B, C, A, false, true)
},
"nth-last-of-type": function(B, C, A) {
return Selector.pseudos.nth(B, C, A, true, true)
},
"first-of-type": function(B, C, A) {
return Selector.pseudos.nth(B, "1", A, false, true)
},
"last-of-type": function(B, C, A) {
return Selector.pseudos.nth(B, "1", A, true, true)
},
"only-of-type": function(B, D, A) {
var C = Selector.pseudos;
return C["last-of-type"](C["first-of-type"](B, D, A), D, A)
},
getIndices: function(B, A, C) {
if (B == 0) {
return A > 0 ? [A] : []
}
return $R(1, C).inject([], function(D, E) {
if (0 == (E - A) % B && (E - A) / B >= 0) {
D.push(E)
}
return D
})
},
nth: function(A, L, N, K, C) {
if (A.length == 0) {
return []
}
if (L == "even") {
L = "2n+0"
}
if (L == "odd") {
L = "2n+1"
}
var J = Selector.handlers,
I = [],
B = [],
E;
J.mark(A);
for (var H = 0, D; D = A[H]; H++) {
if (!D.parentNode._countedByPrototype) {
J.index(D.parentNode, K, C);
B.push(D.parentNode)
}
}
if (L.match(/^\d+$/)) {
L = Number(L);
for (var H = 0, D; D = A[H]; H++) {
if (D.nodeIndex == L) {
I.push(D)
}
}
} else {
if (E = L.match(/^(-?\d*)?n(([+-])(\d+))?/)) {
if (E[1] == "-") {
E[1] = -1
}
var O = E[1] ? Number(E[1]) : 1;
var M = E[2] ? Number(E[2]) : 0;
var P = Selector.pseudos.getIndices(O, M, A.length);
for (var H = 0, D, F = P.length; D = A[H]; H++) {
for (var G = 0; G < F; G++) {
if (D.nodeIndex == P[G]) {
I.push(D)
}
}
}
}
}
J.unmark(A);
J.unmark(B);
return I
},
empty: function(B, F, A) {
for (var D = 0, C = [], E; E = B[D]; D++) {
if (E.tagName == "!" || (E.firstChild && !E.innerHTML.match(/^\s*$/))) {
continue
}
C.push(E)
}
return C
},
not: function(A, D, I) {
var G = Selector.handlers,
J, C;
var H = new Selector(D).findElements(I);
G.mark(H);
for (var F = 0, E = [], B; B = A[F]; F++) {
if (!B._countedByPrototype) {
E.push(B)
}
}
G.unmark(H);
return E
},
enabled: function(B, F, A) {
for (var D = 0, C = [], E; E = B[D]; D++) {
if (!E.disabled) {
C.push(E)
}
}
return C
},
disabled: function(B, F, A) {
for (var D = 0, C = [], E; E = B[D]; D++) {
if (E.disabled) {
C.push(E)
}
}
return C
},
checked: function(B, F, A) {
for (var D = 0, C = [], E; E = B[D]; D++) {
if (E.checked) {
C.push(E)
}
}
return C
}
},
operators: {
"=": function(B, A) {
return B == A
},
"!=": function(B, A) {
return B != A
},
"^=": function(B, A) {
return B.startsWith(A)
},
"$=": function(B, A) {
return B.endsWith(A)
},
"*=": function(B, A) {
return B.include(A)
},
"~=": function(B, A) {
return (" " + B + " ").include(" " + A + " ")
},
"|=": function(B, A) {
return ("-" + B.toUpperCase() + "-").include("-" + A.toUpperCase() + "-")
}
},
split: function(B) {
var A = [];
B.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(C) {
A.push(C[1].strip())
});
return A
},
matchElements: function(F, G) {
var E = $$(G),
D = Selector.handlers;
D.mark(E);
for (var C = 0, B = [], A; A = F[C]; C++) {
if (A._countedByPrototype) {
B.push(A)
}
}
D.unmark(E);
return B
},
findElement: function(B, C, A) {
if (Object.isNumber(C)) {
A = C;
C = false
}
return Selector.matchElements(B, C || "*")[A || 0]
},
findChildElements: function(E, G) {
G = Selector.split(G.join(","));
var D = [],
F = Selector.handlers;
for (var C = 0, B = G.length, A; C < B; C++) {
A = new Selector(G[C].strip());
F.concat(D, A.findElements(E))
}
return (B > 1) ? F.unique(D) : D
}
});
if (Prototype.Browser.IE) {
Object.extend(Selector.handlers, {
concat: function(B, A) {
for (var C = 0, D; D = A[C]; C++) {
if (D.tagName !== "!") {
B.push(D)
}
}
return B
},
unmark: function(A) {
for (var B = 0, C; C = A[B]; B++) {
C.removeAttribute("_countedByPrototype")
}
return A
}
})
}
function $$() {
return Selector.findChildElements(document, $A(arguments))
}
var Form = {
reset: function(A) {
$(A).reset();
return A
},
serializeElements: function(G, B) {
if (typeof B != "object") {
B = {
hash: !!B
}
} else {
if (Object.isUndefined(B.hash)) {
B.hash = true
}
}
var C, F, A = false,
E = B.submit;
var D = G.inject({}, function(H, I) {
if (!I.disabled && I.name) {
C = I.name;
F = $(I).getValue();
if (F != null && (I.type != "submit" || (!A && E !== false && (!E || C == E) && (A = true)))) {
if (C in H) {
if (!Object.isArray(H[C])) {
H[C] = [H[C]]
}
H[C].push(F)
} else {
H[C] = F
}
}
}
return H
});
return B.hash ? D : Object.toQueryString(D)
}
};
Form.Methods = {
serialize: function(B, A) {
return Form.serializeElements(Form.getElements(B), A)
},
getElements: function(A) {
return $A($(A).getElementsByTagName("*")).inject([], function(B, C) {
if (Form.Element.Serializers[C.tagName.toLowerCase()]) {
B.push(Element.extend(C))
}
return B
})
},
getInputs: function(G, C, D) {
G = $(G);
var A = G.getElementsByTagName("input");
if (!C && !D) {
return $A(A).map(Element.extend)
}
for (var E = 0, H = [], F = A.length; E < F; E++) {
var B = A[E];
if ((C && B.type != C) || (D && B.name != D)) {
continue
}
H.push(Element.extend(B))
}
return H
},
disable: function(A) {
A = $(A);
Form.getElements(A).invoke("disable");
return A
},
enable: function(A) {
A = $(A);
Form.getElements(A).invoke("enable");
return A
},
findFirstElement: function(B) {
var C = $(B).getElements().findAll(function(D) {
return "hidden" != D.type && !D.disabled
});
var A = C.findAll(function(D) {
return D.hasAttribute("tabIndex") && D.tabIndex >= 0
}).sortBy(function(D) {
return D.tabIndex
}).first();
return A ? A : C.find(function(D) {
return ["input", "select", "textarea"].include(D.tagName.toLowerCase())
})
},
focusFirstElement: function(A) {
A = $(A);
A.findFirstElement().activate();
return A
},
request: function(B, A) {
B = $(B), A = Object.clone(A || {});
var D = A.parameters,
C = B.readAttribute("action") || "";
if (C.blank()) {
C = window.location.href
}
A.parameters = B.serialize(true);
if (D) {
if (Object.isString(D)) {
D = D.toQueryParams()
}
Object.extend(A.parameters, D)
}
if (B.hasAttribute("method") && !A.method) {
A.method = B.method
}
return new Ajax.Request(C, A)
}
};
Form.Element = {
focus: function(A) {
$(A).focus();
return A
},
select: function(A) {
$(A).select();
return A
}
};
Form.Element.Methods = {
serialize: function(A) {
A = $(A);
if (!A.disabled && A.name) {
var B = A.getValue();
if (B != undefined) {
var C = {};
C[A.name] = B;
return Object.toQueryString(C)
}
}
return ""
},
getValue: function(A) {
A = $(A);
var B = A.tagName.toLowerCase();
return Form.Element.Serializers[B](A)
},
setValue: function(A, B) {
A = $(A);
var C = A.tagName.toLowerCase();
Form.Element.Serializers[C](A, B);
return A
},
clear: function(A) {
$(A).value = "";
return A
},
present: function(A) {
return $(A).value != ""
},
activate: function(A) {
A = $(A);
try {
A.focus();
if (A.select && (A.tagName.toLowerCase() != "input" || !["button", "reset", "submit"].include(A.type))) {
A.select()
}
} catch (B) {}
return A
},
disable: function(A) {
A = $(A);
A.blur();
A.disabled = true;
return A
},
enable: function(A) {
A = $(A);
A.disabled = false;
return A
}
};
var Field = Form.Element;
var $F = Form.Element.Methods.getValue;
Form.Element.Serializers = {
input: function(A, B) {
switch (A.type.toLowerCase()) {
case "checkbox":
case "radio":
return Form.Element.Serializers.inputSelector(A, B);
default:
return Form.Element.Serializers.textarea(A, B)
}
},
inputSelector: function(A, B) {
if (Object.isUndefined(B)) {
return A.checked ? A.value : null
} else {
A.checked = !!B
}
},
textarea: function(A, B) {
if (Object.isUndefined(B)) {
return A.value
} else {
A.value = B
}
},
select: function(D, A) {
if (Object.isUndefined(A)) {
return this[D.type == "select-one" ? "selectOne" : "selectMany"](D)
} else {
var C, F, G = !Object.isArray(A);
for (var B = 0, E = D.length; B < E; B++) {
C = D.options[B];
F = this.optionValue(C);
if (G) {
if (F == A) {
C.selected = true;
return
}
} else {
C.selected = A.include(F)
}
}
}
},
selectOne: function(B) {
var A = B.selectedIndex;
return A >= 0 ? this.optionValue(B.options[A]) : null
},
selectMany: function(D) {
var A, E = D.length;
if (!E) {
return null
}
for (var C = 0, A = []; C < E; C++) {
var B = D.options[C];
if (B.selected) {
A.push(this.optionValue(B))
}
}
return A
},
optionValue: function(A) {
return Element.extend(A).hasAttribute("value") ? A.value : A.text
}
};
Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
initialize: function($super, A, B, C) {
$super(C, B);
this.element = $(A);
this.lastValue = this.getValue()
},
execute: function() {
var A = this.getValue();
if (Object.isString(this.lastValue) && Object.isString(A) ? this.lastValue != A : String(this.lastValue) != String(A)) {
this.callback(this.element, A);
this.lastValue = A
}
}
});
Form.Element.Observer = Class.create(Abstract.TimedObserver, {
getValue: function() {
return Form.Element.getValue(this.element)
}
});
Form.Observer = Class.create(Abstract.TimedObserver, {
getValue: function() {
return Form.serialize(this.element)
}
});
Abstract.EventObserver = Class.create({
initialize: function(A, B) {
this.element = $(A);
this.callback = B;
this.lastValue = this.getValue();
if (this.element.tagName.toLowerCase() == "form") {
this.registerFormCallbacks()
} else {
this.registerCallback(this.element)
}
},
onElementEvent: function() {
var A = this.getValue();
if (this.lastValue != A) {
this.callback(this.element, A);
this.lastValue = A
}
},
registerFormCallbacks: function() {
Form.getElements(this.element).each(this.registerCallback, this)
},
registerCallback: function(A) {
if (A.type) {
switch (A.type.toLowerCase()) {
case "checkbox":
case "radio":
Event.observe(A, "click", this.onElementEvent.bind(this));
break;
default:
Event.observe(A, "change", this.onElementEvent.bind(this));
break
}
}
}
});
Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
getValue: function() {
return Form.Element.getValue(this.element)
}
});
Form.EventObserver = Class.create(Abstract.EventObserver, {
getValue: function() {
return Form.serialize(this.element)
}
});
if (!window.Event) {
var Event = {}
}
Object.extend(Event, {
KEY_BACKSPACE: 8,
KEY_TAB: 9,
KEY_RETURN: 13,
KEY_ESC: 27,
KEY_LEFT: 37,
KEY_UP: 38,
KEY_RIGHT: 39,
KEY_DOWN: 40,
KEY_DELETE: 46,
KEY_HOME: 36,
KEY_END: 35,
KEY_PAGEUP: 33,
KEY_PAGEDOWN: 34,
KEY_INSERT: 45,
cache: {},
relatedTarget: function(B) {
var A;
switch (B.type) {
case "mouseover":
A = B.fromElement;
break;
case "mouseout":
A = B.toElement;
break;
default:
return null
}
return Element.extend(A)
}
});
Event.Methods = (function() {
var A;
if (Prototype.Browser.IE) {
var B = {
0: 1,
1: 4,
2: 2
};
A = function(D, C) {
return D.button == B[C]
}
} else {
if (Prototype.Browser.WebKit) {
A = function(D, C) {
switch (C) {
case 0:
return D.which == 1 && !D.metaKey;
case 1:
return D.which == 1 && D.metaKey;
default:
return false
}
}
} else {
A = function(D, C) {
return D.which ? (D.which === C + 1) : (D.button === C)
}
}
}
return {
isLeftClick: function(C) {
return A(C, 0)
},
isMiddleClick: function(C) {
return A(C, 1)
},
isRightClick: function(C) {
return A(C, 2)
},
element: function(D) {
var C = Event.extend(D).target;
return Element.extend(C.nodeType == Node.TEXT_NODE ? C.parentNode : C)
},
findElement: function(D, F) {
var C = Event.element(D);
if (!F) {
return C
}
var E = [C].concat(C.ancestors());
return Selector.findElement(E, F, 0)
},
pointer: function(C) {
return {
x: C.pageX || (C.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)),
y: C.pageY || (C.clientY + (document.documentElement.scrollTop || document.body.scrollTop))
}
},
pointerX: function(C) {
return Event.pointer(C).x
},
pointerY: function(C) {
return Event.pointer(C).y
},
stop: function(C) {
Event.extend(C);
C.preventDefault();
C.stopPropagation();
C.stopped = true
}
}
})();
Event.extend = (function() {
var A = Object.keys(Event.Methods).inject({}, function(B, C) {
B[C] = Event.Methods[C].methodize();
return B
});
if (Prototype.Browser.IE) {
Object.extend(A, {
stopPropagation: function() {
this.cancelBubble = true
},
preventDefault: function() {
this.returnValue = false
},
inspect: function() {
return "[object Event]"
}
});
return function(B) {
if (!B) {
return false
}
if (B._extendedByPrototype) {
return B
}
B._extendedByPrototype = Prototype.emptyFunction;
var C = Event.pointer(B);
Object.extend(B, {
target: B.srcElement,
relatedTarget: Event.relatedTarget(B),
pageX: C.x,
pageY: C.y
});
return Object.extend(B, A)
}
} else {
Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__;
Object.extend(Event.prototype, A);
return Prototype.K
}
})();
Object.extend(Event, (function() {
var B = Event.cache;
function C(J) {
if (J._prototypeEventID) {
return J._prototypeEventID[0]
}
arguments.callee.id = arguments.callee.id || 1;
return J._prototypeEventID = [++arguments.callee.id]
}
function G(J) {
if (J && J.include(":")) {
return "dataavailable"
}
return J
}
function A(J) {
return B[J] = B[J] || {}
}
function F(L, J) {
var K = A(L);
return K[J] = K[J] || []
}
function H(K, J, L) {
var O = C(K);
var N = F(O, J);
if (N.pluck("handler").include(L)) {
return false
}
var M = function(P) {
if (!Event || !Event.extend || (P.eventName && P.eventName != J)) {
return false
}
Event.extend(P);
L.call(K, P)
};
M.handler = L;
N.push(M);
return M
}
function I(M, J, K) {
var L = F(M, J);
return L.find(function(N) {
return N.handler == K
})
}
function D(M, J, K) {
var L = A(M);
if (!L[J]) {
return false
}
L[J] = L[J].without(I(M, J, K))
}
function E() {
for (var K in B) {
for (var J in B[K]) {
B[K][J] = null
}
}
}
if (window.attachEvent) {
window.attachEvent("onunload", E)
}
return {
observe: function(L, J, M) {
L = $(L);
var K = G(J);
var N = H(L, J, M);
if (!N) {
return L
}
if (L.addEventListener) {
L.addEventListener(K, N, false)
} else {
L.attachEvent("on" + K, N)
}
return L
},
stopObserving: function(L, J, M) {
L = $(L);
var O = C(L),
K = G(J);
if (!M && J) {
F(O, J).each(function(P) {
L.stopObserving(J, P.handler)
});
return L
} else {
if (!J) {
Object.keys(A(O)).each(function(P) {
L.stopObserving(P)
});
return L
}
}
var N = I(O, J, M);
if (!N) {
return L
}
if (L.removeEventListener) {
L.removeEventListener(K, N, false)
} else {
L.detachEvent("on" + K, N)
}
D(O, J, M);
return L
},
fire: function(L, K, J) {
L = $(L);
if (L == document && document.createEvent && !L.dispatchEvent) {
L = document.documentElement
}
var M;
if (document.createEvent) {
M = document.createEvent("HTMLEvents");
M.initEvent("dataavailable", true, true)
} else {
M = document.createEventObject();
M.eventType = "ondataavailable"
}
M.eventName = K;
M.memo = J || {};
if (document.createEvent) {
L.dispatchEvent(M)
} else {
L.fireEvent(M.eventType, M)
}
return Event.extend(M)
}
}
})());
Object.extend(Event, Event.Methods);
Element.addMethods({
fire: Event.fire,
observe: Event.observe,
stopObserving: Event.stopObserving
});
Object.extend(document, {
fire: Element.Methods.fire.methodize(),
observe: Element.Methods.observe.methodize(),
stopObserving: Element.Methods.stopObserving.methodize(),
loaded: false
});
(function() {
var B;
function A() {
if (document.loaded) {
return
}
if (B) {
window.clearInterval(B)
}
document.fire("dom:loaded");
document.loaded = true
}
if (document.addEventListener) {
if (Prototype.Browser.WebKit) {
B = window.setInterval(function() {
if (/loaded|complete/.test(document.readyState)) {
A()
}
}, 0);
Event.observe(window, "load", A)
} else {
document.addEventListener("DOMContentLoaded", A, false)
}
} else {
document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
$("__onDOMContentLoaded").onreadystatechange = function() {
if (this.readyState == "complete") {
this.onreadystatechange = null;
A()
}
}
}
})();
Hash.toQueryString = Object.toQueryString;
var Toggle = {
display: Element.toggle
};
Element.Methods.childOf = Element.Methods.descendantOf;
var Insertion = {
Before: function(A, B) {
return Element.insert(A, {
before: B
})
},
Top: function(A, B) {
return Element.insert(A, {
top: B
})
},
Bottom: function(A, B) {
return Element.insert(A, {
bottom: B
})
},
After: function(A, B) {
return Element.insert(A, {
after: B
})
}
};
var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
var Position = {
includeScrollOffsets: false,
prepare: function() {
this.deltaX = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;
this.deltaY = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0
},
within: function(B, A, C) {
if (this.includeScrollOffsets) {
return this.withinIncludingScrolloffsets(B, A, C)
}
this.xcomp = A;
this.ycomp = C;
this.offset = Element.cumulativeOffset(B);
return (C >= this.offset[1] && C < this.offset[1] + B.offsetHeight && A >= this.offset[0] && A < this.offset[0] + B.offsetWidth)
},
withinIncludingScrolloffsets: function(B, A, D) {
var C = Element.cumulativeScrollOffset(B);
this.xcomp = A + C[0] - this.deltaX;
this.ycomp = D + C[1] - this.deltaY;
this.offset = Element.cumulativeOffset(B);
return (this.ycomp >= this.offset[1] && this.ycomp < this.offset[1] + B.offsetHeight && this.xcomp >= this.offset[0] && this.xcomp < this.offset[0] + B.offsetWidth)
},
overlap: function(B, A) {
if (!B) {
return 0
}
if (B == "vertical") {
return ((this.offset[1] + A.offsetHeight) - this.ycomp) / A.offsetHeight
}
if (B == "horizontal") {
return ((this.offset[0] + A.offsetWidth) - this.xcomp) / A.offsetWidth
}
},
cumulativeOffset: Element.Methods.cumulativeOffset,
positionedOffset: Element.Methods.positionedOffset,
absolutize: function(A) {
Position.prepare();
return Element.absolutize(A)
},
relativize: function(A) {
Position.prepare();
return Element.relativize(A)
},
realOffset: Element.Methods.cumulativeScrollOffset,
offsetParent: Element.Methods.getOffsetParent,
page: Element.Methods.viewportOffset,
clone: function(B, C, A) {
A = A || {};
return Element.clonePosition(C, B, A)
}
};
if (!document.getElementsByClassName) {
document.getElementsByClassName = function(B) {
function A(C) {
return C.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + C + " ')]"
}
B.getElementsByClassName = Prototype.BrowserFeatures.XPath ? function(C, E) {
E = E.toString().strip();
var D = /\s/.test(E) ? $w(E).map(A).join("") : A(E);
return D ? document._getElementsByXPath(".//*" + D, C) : []
} : function(E, F) {
F = F.toString().strip();
var G = [],
H = (/\s/.test(F) ? $w(F) : null);
if (!H && !F) {
return G
}
var C = $(E).getElementsByTagName("*");
F = " " + F + " ";
for (var D = 0, J, I; J = C[D]; D++) {
if (J.className && (I = " " + J.className + " ") && (I.include(F) || (H && H.all(function(K) {
return !K.toString().blank() && I.include(" " + K + " ")
})))) {
G.push(Element.extend(J))
}
}
return G
};
return function(D, C) {
return $(C || document.body).getElementsByClassName(D)
}
}(Element.Methods)
}
Element.ClassNames = Class.create();
Element.ClassNames.prototype = {
initialize: function(A) {
this.element = $(A)
},
_each: function(A) {
this.element.className.split(/\s+/).select(function(B) {
return B.length > 0
})._each(A)
},
set: function(A) {
this.element.className = A
},
add: function(A) {
if (this.include(A)) {
return
}
this.set($A(this).concat(A).join(" "))
},
remove: function(A) {
if (!this.include(A)) {
return
}
this.set($A(this).without(A).join(" "))
},
toString: function() {
return $A(this).join(" ")
}
};
Object.extend(Element.ClassNames.prototype, Enumerable);
Element.addMethods();
var HabboView = {
_callbacks: [],
add: function(A) {
HabboView._callbacks.push(A)
},
run: function() {
if (HabboView._callbacks) {
HabboView._callbacks.each(function(A) {
A()
})
}
}
};
var Rounder = function() {
var C = function(J) {
var I, K;
I = document.createElement("div");
I.className = "bt";
K = document.createElement("div");
I.appendChild(K);
J.insertBefore(I, J.firstChild)
};
var H = function(J) {
var I, K;
I = document.createElement("div");
I.className = "bb";
K = document.createElement("div");
I.appendChild(K);
J.appendChild(I)
};
var G = function(J, I, U, a, Z, T) {
var W, V;
var X = document.createElement("div");
X.style.backgroundColor = I;
var S = 0;
for (W = 1; W <= Z; W++) {
var N, O, M, L;
O = Math.sqrt(1 - D(1 - W / Z)) * a;
var K = a - Math.ceil(O);
var R = Math.floor(S);
var Y = a - K - R;
var Q = document.createElement("div");
var P = X;
Q.style.margin = "0px " + K + "px";
Q.style.height = "1px";
Q.style.overflow = "hidden";
for (V = 1; V <= Y; V++) {
if (V == 1) {
if (V == Y) {
N = ((O + S) * 0.5) - R
} else {
N = 0
}
} else {
if (V == Y) {
M = Math.sqrt(1 - D((a - K - V + 1) / a)) * Z;
N = 1 - (1 - (M - (Z - W))) * (1 - (S - R)) * 0.5
} else {
L = Math.sqrt(1 - D((a - K - V) / a)) * Z;
M = Math.sqrt(1 - D((a - K - V + 1) / a)) * Z;
N = ((M + L) * 0.5) - (Z - W)
}
}
Q.style.backgroundColor = F(I, U, N);
if (T) {
P.appendChild(Q)
} else {
P.insertBefore(Q, P.firstChild)
}
P = Q;
Q = document.createElement("div");
Q.style.height = "1px";
Q.style.overflow = "hidden";
Q.style.margin = "0px 1px"
}
Q.style.backgroundColor = U;
if (T) {
P.appendChild(Q)
} else {
P.insertBefore(Q, P.firstChild)
}
S = O
}
if (T) {
J.insertBefore(X, J.firstChild)
} else {
J.appendChild(X)
}
};
var F = function(L, J, M) {
var K = [parseInt("0x" + L.substring(1, 3)), parseInt("0x" + L.substring(3, 5)), parseInt("0x" + L.substring(5, 7))];
var I = [parseInt("0x" + J.substring(1, 3)), parseInt("0x" + J.substring(3, 5)), parseInt("0x" + J.substring(5, 7))];
return "#" + ("0" + Math.round(K[0] + (I[0] - K[0]) * M).toString(16)).slice(-2).toString(16) + ("0" + Math.round(K[1] + (I[1] - K[1]) * M).toString(16)).slice(-2).toString(16) + ("0" + Math.round(K[2] + (I[2] - K[2]) * M).toString(16)).slice(-2).toString(16)
};
var E = function(J) {
var L;
try {
var K = document.defaultView.getComputedStyle(J, null);
L = K.getPropertyValue("background-color")
} catch (I) {
if (J.currentStyle) {
L = J.currentStyle.getAttribute("backgroundColor")
}
}
if ((L.indexOf("rgba") > -1 || L == "transparent") && J.parentNode) {
if (J.parentNode != document) {
L = E(J.parentNode)
} else {
L = "#FFFFFF"
}
}
if (L.indexOf("rgb") > -1 && L.indexOf("rgba") == -1) {
L = A(L)
}
if (L.length == 4) {
L = "#" + L.substring(1, 1) + L.substring(1, 1) + L.substring(2, 1) + L.substring(2, 1) + L.substring(3, 1) + L.substring(3, 1)
}
return L
};
var A = function(L) {
var J = "";
var K = /([0-9]+)[, ]+([0-9]+)[, ]+([0-9]+)/;
var M = K.exec(L);
for (var I = 1; I < 4; I++) {
J += ("0" + parseInt(M[I]).toString(16)).slice(-2)
}
return "#" + J
};
var D = function(I) {
return I * I
};
var B = function(M, N) {
var P = new RegExp("(^|\\s)" + N + "(\\s|$)");
var O = M.className;
var I = document.createElement("div");
I.className = M.className.replace(P, "$1cb$2");
if (M.getAttribute("id")) {
var L = M.id;
M.removeAttribute("id");
I.setAttribute("id", "");
I.id = L
}
M.className = "i3";
M.parentNode.replaceChild(I, M);
var K = document.createElement("div");
K.className = "i1";
I.appendChild(K);
var J = document.createElement("div");
J.className = "i2";
K.appendChild(J);
J.appendChild(M);
C(I);
if (O.indexOf("toponly") == -1) {
H(I)
}
M.select(".title").each(function(Q) {
if ((!Q.parentNode.className || Q.parentNode.className != "rounded-container") && !Q.parentNode.className.includes("no-rounding")) {
Rounder.addCorners(Q, 4, 4, "rounded-container")
}
})
};
return {
init: function(I) {
$$(".rounded").each(function(J) {
Rounder.addCorners(J, 8, 8)
});
if (!I) {
I = "cbb"
}
if (!document.getElementById || !document.createElement || !document.appendChild) {
return false
}
$$("." + I).reverse(false).each(function(J) {
B(J, I)
})
},
addCorners: function(N, L, K, O) {
var M = E(N);
var J = E(N.parentNode);
var I = document.createElement("div");
I.className = O || "rounded-container";
var P = N.cloneNode(true);
$(P).removeClassName("rounded");
$(P).addClassName("rounded-done");
I.appendChild(P);
N.parentNode.replaceChild(I, N);
G(I, J, M, L, K, true);
G(I, J, M, L, K, false)
},
round: function(I) {
if (!$(I)) {
return
}
if ($(I).hasClassName("cbb")) {
B(I, "cbb")
}
}
}
}();
HabboView.add(function() {
Rounder.init()
});