var Scriptaculous = {Version:"1.6.1", require:(function (libraryName) {document.write("<script type=\"text/javascript\" src=\"" + libraryName + "\"></script>");}), load:(function () {if ((typeof Prototype == "undefined") || (typeof Element == "undefined") || (typeof Element.Methods == "undefined") || parseFloat(Prototype.Version.split(".")[0] + "." + Prototype.Version.split(".")[1]) < 1.5) {throw ("script.aculo.us requires the Prototype JavaScript framework >= 1.5.0");}$A(document.getElementsByTagName("script")).findAll((function (s) {return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/));})).each((function (s) {var path = s.src.replace(/scriptaculous\.js(\?.*)?$/, "");var includes = s.src.match(/\?.*load=([a-z,]*)/);}));})};Scriptaculous.load();String.prototype.parseColor = (function () {var color = "#";if (this.slice(0, 4) == "rgb(") {var cols = this.slice(4, this.length - 1).split(",");var i = 0;do {color += parseInt(cols[i]).toColorPart();} while (++i < 3);} else {if (this.slice(0, 1) == "#") {if (this.length == 4) {for (var i = 1; i < 4; i++) {color += (this.charAt(i) + this.charAt(i)).toLowerCase();}}if (this.length == 7) {color = this.toLowerCase();}}}return (color.length == 7 ? color : (arguments[0] || this));});Element.collectTextNodes = (function (element) {return $A($(element).childNodes).collect((function (node) {return (node.nodeType == 3 ? node.nodeValue : (node.hasChildNodes() ? Element.collectTextNodes(node) : ""));})).flatten().join("");});Element.collectTextNodesIgnoreClass = (function (element, className) {return $A($(element).childNodes).collect((function (node) {return (node.nodeType == 3 ? node.nodeValue : ((node.hasChildNodes() && !Element.hasClassName(node, className)) ? Element.collectTextNodesIgnoreClass(node, className) : ""));})).flatten().join("");});Element.setContentZoom = (function (element, percent) {element = $(element);Element.setStyle(element, {fontSize:(percent / 100) + "em"});if (navigator.appVersion.indexOf("AppleWebKit") > 0) {window.scrollBy(0, 0);}});Element.getOpacity = (function (element) {var opacity;if (opacity = Element.getStyle(element, "opacity")) {return parseFloat(opacity);}if (opacity = (Element.getStyle(element, "filter") || "").match(/alpha\(opacity=(.*)\)/)) {if (opacity[1]) {return parseFloat(opacity[1]) / 100;}}return 1;});Element.setOpacity = (function (element, value) {element = $(element);if (value == 1) {Element.setStyle(element, {opacity:(/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : null});if (/MSIE/.test(navigator.userAgent)) {Element.setStyle(element, {filter:Element.getStyle(element, "filter").replace(/alpha\([^\)]*\)/gi, "")});}} else {if (value < 0.00001) {value = 0;}Element.setStyle(element, {opacity:value});if (/MSIE/.test(navigator.userAgent)) {Element.setStyle(element, {filter:Element.getStyle(element, "filter").replace(/alpha\([^\)]*\)/gi, "") + "alpha(opacity=" + value * 100 + ")"});}}});Element.getInlineOpacity = (function (element) {return $(element).style.opacity || "";});Element.childrenWithClassName = (function (element, className, findFirst) {var classNameRegExp = new RegExp("(^|\\s)" + className + "(\\s|$)");var results = $A($(element).getElementsByTagName("*"))[findFirst ? "detect" : "select"]((function (c) {return (c.className && c.className.match(classNameRegExp));}));if (!results) {results = [];}return results;});Element.forceRerendering = (function (element) {try {element = $(element);var n = document.createTextNode(" ");element.appendChild(n);element.removeChild(n);} catch (e) {}});Array.prototype.call = (function () {var args = arguments;this.each((function (f) {f.apply(this, args);}));});var Effect = {tagifyText:(function (element) {var tagifyStyle = "position:relative";if (/MSIE/.test(navigator.userAgent)) {tagifyStyle += ";zoom:1";}element = $(element);$A(element.childNodes).each((function (child) {if (child.nodeType == 3) {child.nodeValue.toArray().each((function (character) {element.insertBefore(Builder.node("span", {style:tagifyStyle}, character == " " ? String.fromCharCode(160) : character), child);}));Element.remove(child);}}));}), multiple:(function (element, effect) {var elements;if (((typeof element == "object") || (typeof element == "function")) && (element.length)) {elements = element;} else {elements = $(element).childNodes;}var options = Object.extend({speed:0.1, delay:0}, arguments[2] || {});var masterDelay = options.delay;$A(elements).each((function (element, index) {new effect(element, Object.extend(options, {delay:index * options.speed + masterDelay}));}));}), PAIRS:{slide:["SlideDown", "SlideUp"], blind:["BlindDown", "BlindUp"], appear:["Appear", "Fade"]}, toggle:(function (element, effect) {element = $(element);effect = (effect || "appear").toLowerCase();var options = Object.extend({queue:{position:"end", scope:(element.id || "global"), limit:1}}, arguments[2] || {});Effect[element.visible() ? Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);})};var Effect2 = Effect;Effect.Transitions = {};Effect.Transitions.linear = (function (pos) {return pos;});Effect.Transitions.sinoidal = (function (pos) {return (-Math.cos(pos * Math.PI) / 2) + 0.5;});Effect.Transitions.reverse = (function (pos) {return 1 - pos;});Effect.Transitions.flicker = (function (pos) {return ((-Math.cos(pos * Math.PI) / 4) + 0.75) + Math.random() / 4;});Effect.Transitions.wobble = (function (pos) {return (-Math.cos(pos * Math.PI * (9 * pos)) / 2) + 0.5;});Effect.Transitions.pulse = (function (pos) {return (Math.floor(pos * 10) % 2 == 0 ? (pos * 10 - Math.floor(pos * 10)) : 1 - (pos * 10 - Math.floor(pos * 10)));});Effect.Transitions.none = (function (pos) {return 0;});Effect.Transitions.full = (function (pos) {return 1;});Effect.ScopedQueue = Class.create();Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {initialize:(function () {this.effects = [];this.interval = null;}), _each:(function (iterator) {this.effects._each(iterator);}), add:(function (effect) {var timestamp = (new Date()).getTime();var position = (typeof effect.options.queue == "string") ? effect.options.queue : effect.options.queue.position;switch (position) {case "front":this.effects.findAll((function (e) {return e.state == "idle";})).each((function (e) {e.startOn += effect.finishOn;e.finishOn += effect.finishOn;}));break;case "end":timestamp = this.effects.pluck("finishOn").max() || timestamp;break;default:;}effect.startOn += timestamp;effect.finishOn += timestamp;if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit)) {this.effects.push(effect);}if (!this.interval) {this.interval = setInterval(this.loop.bind(this), 40);}}), remove:(function (effect) {this.effects = this.effects.reject((function (e) {return e == effect;}));if (this.effects.length == 0) {clearInterval(this.interval);this.interval = null;}}), loop:(function () {var timePos = (new Date()).getTime();this.effects.invoke("loop", timePos);})});Effect.Queues = {instances:$H(), get:(function (queueName) {if (typeof queueName != "string") {return queueName;}if (!this.instances[queueName]) {this.instances[queueName] = new Effect.ScopedQueue();}return this.instances[queueName];})};Effect.Queue = Effect.Queues.get("global");Effect.DefaultOptions = {transition:Effect.Transitions.sinoidal, duration:1, fps:25, sync:false, from:0, to:1, delay:0, queue:"parallel"};Effect.Base = (function () {});Effect.Base.prototype = {position:null, start:(function (options) {this.options = Object.extend(Object.extend({}, Effect.DefaultOptions), options || {});this.currentFrame = 0;this.state = "idle";this.startOn = this.options.delay * 1000;this.finishOn = this.startOn + (this.options.duration * 1000);this.event("beforeStart");if (!this.options.sync) {Effect.Queues.get(typeof this.options.queue == "string" ? "global" : this.options.queue.scope).add(this);}}), loop:(function (timePos) {if (timePos >= this.startOn) {if (timePos >= this.finishOn) {this.render(1);this.cancel();this.event("beforeFinish");if (this.finish) {this.finish();}this.event("afterFinish");return;}var pos = (timePos - this.startOn) / (this.finishOn - this.startOn);var frame = Math.round(pos * this.options.fps * this.options.duration);if (frame > this.currentFrame) {this.render(pos);this.currentFrame = frame;}}}), render:(function (pos) {if (this.state == "idle") {this.state = "running";this.event("beforeSetup");if (this.setup) {this.setup();}this.event("afterSetup");}if (this.state == "running") {if (this.options.transition) {pos = this.options.transition(pos);}pos *= (this.options.to - this.options.from);pos += this.options.from;this.position = pos;this.event("beforeUpdate");if (this.update) {this.update(pos);}this.event("afterUpdate");}}), cancel:(function () {if (!this.options.sync) {Effect.Queues.get(typeof this.options.queue == "string" ? "global" : this.options.queue.scope).remove(this);}this.state = "finished";}), event:(function (eventName) {if (this.options[eventName + "Internal"]) {this.options[eventName + "Internal"](this);}if (this.options[eventName]) {this.options[eventName](this);}}), inspect:(function () {return "#<Effect:" + $H(this).inspect() + ",options:" + $H(this.options).inspect() + ">";})};Effect.Parallel = Class.create();Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {initialize:(function (effects) {this.effects = effects || [];this.start(arguments[1]);}), update:(function (position) {this.effects.invoke("render", position);}), finish:(function (position) {this.effects.each((function (effect) {effect.render(1);effect.cancel();effect.event("beforeFinish");if (effect.finish) {effect.finish(position);}effect.event("afterFinish");}));})});Effect.Opacity = Class.create();Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {initialize:(function (element) {this.element = $(element);if (/MSIE/.test(navigator.userAgent) && (!this.element.hasLayout)) {this.element.setStyle({zoom:1});}var options = Object.extend({from:this.element.getOpacity() || 0, to:1}, arguments[1] || {});this.start(options);}), update:(function (position) {this.element.setOpacity(position);})});Effect.Move = Class.create();Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {initialize:(function (element) {this.element = $(element);var options = Object.extend({x:0, y:0, mode:"relative"}, arguments[1] || {});this.start(options);}), setup:(function () {this.element.makePositioned();this.originalLeft = parseFloat(this.element.getStyle("left") || "0");this.originalTop = parseFloat(this.element.getStyle("top") || "0");if (this.options.mode == "absolute") {this.options.x = this.options.x - this.originalLeft;this.options.y = this.options.y - this.originalTop;}}), update:(function (position) {this.element.setStyle({left:this.options.x * position + this.originalLeft + "px", top:this.options.y * position + this.originalTop + "px"});})});Effect.MoveBy = (function (element, toTop, toLeft) {return new Effect.Move(element, Object.extend({x:toLeft, y:toTop}, arguments[3] || {}));});Effect.Scale = Class.create();Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {initialize:(function (element, percent) {this.element = $(element);var options = Object.extend({scaleX:true, scaleY:true, scaleContent:true, scaleFromCenter:false, scaleMode:"box", scaleFrom:100, scaleTo:percent}, arguments[2] || {});this.start(options);}), setup:(function () {this.restoreAfterFinish = this.options.restoreAfterFinish || false;this.elementPositioning = this.element.getStyle("position");this.originalStyle = {};["top", "left", "width", "height", "fontSize"].each((function (k) {this.originalStyle[k] = this.element.style[k];}).bind(this));this.originalTop = this.element.offsetTop;this.originalLeft = this.element.offsetLeft;var fontSize = this.element.getStyle("font-size") || "100%";["em", "px", "%"].each((function (fontSizeType) {if (fontSize.indexOf(fontSizeType) > 0) {this.fontSize = parseFloat(fontSize);this.fontSizeType = fontSizeType;}}).bind(this));this.factor = (this.options.scaleTo - this.options.scaleFrom) / 100;this.dims = null;if (this.options.scaleMode == "box") {this.dims = [this.element.offsetHeight, this.element.offsetWidth];}if (/^content/.test(this.options.scaleMode)) {this.dims = [this.element.scrollHeight, this.element.scrollWidth];}if (!this.dims) {this.dims = [this.options.scaleMode.originalHeight, this.options.scaleMode.originalWidth];}}), update:(function (position) {var currentScale = (this.options.scaleFrom / 100) + (this.factor * position);if (this.options.scaleContent && this.fontSize) {this.element.setStyle({fontSize:this.fontSize * currentScale + this.fontSizeType});}this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);}), finish:(function (position) {if (this.restoreAfterFinish) {this.element.setStyle(this.originalStyle);}}), setDimensions:(function (height, width) {var d = {};if (this.options.scaleX) {d.width = width + "px";}if (this.options.scaleY) {d.height = height + "px";}if (this.options.scaleFromCenter) {var topd = (height - this.dims[0]) / 2;var leftd = (width - this.dims[1]) / 2;if (this.elementPositioning == "absolute") {if (this.options.scaleY) {d.top = this.originalTop - topd + "px";}if (this.options.scaleX) {d.left = this.originalLeft - leftd + "px";}} else {if (this.options.scaleY) {d.top = -topd + "px";}if (this.options.scaleX) {d.left = -leftd + "px";}}}this.element.setStyle(d);})});Effect.Highlight = Class.create();Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {initialize:(function (element) {this.element = $(element);var options = Object.extend({startcolor:"#ffff99"}, arguments[1] || {});this.start(options);}), setup:(function () {if (this.element.getStyle("display") == "none") {this.cancel();return;}this.oldStyle = {backgroundImage:this.element.getStyle("background-image")};this.element.setStyle({backgroundImage:"none"});if (!this.options.endcolor) {this.options.endcolor = this.element.getStyle("background-color").parseColor("#ffffff");}if (!this.options.restorecolor) {this.options.restorecolor = this.element.getStyle("background-color");}this._base = $R(0, 2).map((function (i) {return parseInt(this.options.startcolor.slice(i * 2 + 1, i * 2 + 3), 16);}).bind(this));this._delta = $R(0, 2).map((function (i) {return parseInt(this.options.endcolor.slice(i * 2 + 1, i * 2 + 3), 16) - this._base[i];}).bind(this));}), update:(function (position) {this.element.setStyle({backgroundColor:$R(0, 2).inject("#", (function (m, v, i) {return m + (Math.round(this._base[i] + (this._delta[i] * position)).toColorPart());}).bind(this))});}), finish:(function () {this.element.setStyle(Object.extend(this.oldStyle, {backgroundColor:this.options.restorecolor}));})});Effect.ScrollTo = Class.create();Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {initialize:(function (element) {this.element = $(element);this.start(arguments[1] || {});}), setup:(function () {Position.prepare();var offsets = Position.cumulativeOffset(this.element);if (this.options.offset) {offsets[1] += this.options.offset;}var max = window.innerHeight ? window.height - window.innerHeight : document.body.scrollHeight - (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight);this.scrollStart = Position.deltaY;this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;}), update:(function (position) {Position.prepare();window.scrollTo(Position.deltaX, this.scrollStart + (position * this.delta));})});Effect.Fade = (function (element) {element = $(element);var oldOpacity = element.getInlineOpacity();var options = Object.extend({from:element.getOpacity() || 1, to:0, afterFinishInternal:(function (effect) {if (effect.options.to != 0) {return;}effect.element.hide();effect.element.setStyle({opacity:oldOpacity});})}, arguments[1] || {});return new Effect.Opacity(element, options);});Effect.Appear = (function (element) {element = $(element);var options = Object.extend({from:(element.getStyle("display") == "none" ? 0 : element.getOpacity() || 0), to:1, afterFinishInternal:(function (effect) {effect.element.forceRerendering();}), beforeSetup:(function (effect) {effect.element.setOpacity(effect.options.from);effect.element.show();})}, arguments[1] || {});return new Effect.Opacity(element, options);});Effect.Puff = (function (element) {element = $(element);var oldStyle = {opacity:element.getInlineOpacity(), position:element.getStyle("position")};return new Effect.Parallel([new Effect.Scale(element, 200, {sync:true, scaleFromCenter:true, scaleContent:true, restoreAfterFinish:true}), new Effect.Opacity(element, {sync:true, to:0})], Object.extend({duration:1, beforeSetupInternal:(function (effect) {effect.effects[0].element.setStyle({position:"absolute"});}), afterFinishInternal:(function (effect) {effect.effects[0].element.hide();effect.effects[0].element.setStyle(oldStyle);})}, arguments[1] || {}));});Effect.BlindUp = (function (element) {element = $(element);element.makeClipping();return new Effect.Scale(element, 0, Object.extend({scaleContent:false, scaleX:false, restoreAfterFinish:true, afterFinishInternal:(function (effect) {effect.element.hide();effect.element.undoClipping();})}, arguments[1] || {}));});Effect.BlindDown = (function (element) {element = $(element);var elementDimensions = element.getDimensions();return new Effect.Scale(element, 100, Object.extend({scaleContent:false, scaleX:false, scaleFrom:0, scaleMode:{originalHeight:elementDimensions.height, originalWidth:elementDimensions.width}, restoreAfterFinish:true, afterSetup:(function (effect) {effect.element.makeClipping();effect.element.setStyle({height:"0px"});effect.element.show();}), afterFinishInternal:(function (effect) {effect.element.undoClipping();})}, arguments[1] || {}));});Effect.SwitchOff = (function (element) {element = $(element);var oldOpacity = element.getInlineOpacity();return new Effect.Appear(element, {duration:0.4, from:0, transition:Effect.Transitions.flicker, afterFinishInternal:(function (effect) {new Effect.Scale(effect.element, 1, {duration:0.3, scaleFromCenter:true, scaleX:false, scaleContent:false, restoreAfterFinish:true, beforeSetup:(function (effect) {effect.element.makePositioned();effect.element.makeClipping();}), afterFinishInternal:(function (effect) {effect.element.hide();effect.element.undoClipping();effect.element.undoPositioned();effect.element.setStyle({opacity:oldOpacity});})});})});});Effect.DropOut = (function (element) {element = $(element);var oldStyle = {top:element.getStyle("top"), left:element.getStyle("left"), opacity:element.getInlineOpacity()};return new Effect.Parallel([new Effect.Move(element, {x:0, y:100, sync:true}), new Effect.Opacity(element, {sync:true, to:0})], Object.extend({duration:0.5, beforeSetup:(function (effect) {effect.effects[0].element.makePositioned();}), afterFinishInternal:(function (effect) {effect.effects[0].element.hide();effect.effects[0].element.undoPositioned();effect.effects[0].element.setStyle(oldStyle);})}, arguments[1] || {}));});Effect.Shake = (function (element) {element = $(element);var oldStyle = {top:element.getStyle("top"), left:element.getStyle("left")};return new Effect.Move(element, {x:20, y:0, duration:0.05, afterFinishInternal:(function (effect) {new Effect.Move(effect.element, {x:-40, y:0, duration:0.1, afterFinishInternal:(function (effect) {new Effect.Move(effect.element, {x:40, y:0, duration:0.1, afterFinishInternal:(function (effect) {new Effect.Move(effect.element, {x:-40, y:0, duration:0.1, afterFinishInternal:(function (effect) {new Effect.Move(effect.element, {x:40, y:0, duration:0.1, afterFinishInternal:(function (effect) {new Effect.Move(effect.element, {x:-20, y:0, duration:0.05, afterFinishInternal:(function (effect) {effect.element.undoPositioned();effect.element.setStyle(oldStyle);})});})});})});})});})});})});});Effect.SlideDown = (function (element) {element = $(element);element.cleanWhitespace();var oldInnerBottom = $(element.firstChild).getStyle("bottom");var elementDimensions = element.getDimensions();return new Effect.Scale(element, 100, Object.extend({scaleContent:false, scaleX:false, scaleFrom:window.opera ? 0 : 1, scaleMode:{originalHeight:elementDimensions.height, originalWidth:elementDimensions.width}, restoreAfterFinish:true, afterSetup:(function (effect) {effect.element.makePositioned();effect.element.firstChild.makePositioned();if (window.opera) {effect.element.setStyle({top:""});}effect.element.makeClipping();effect.element.setStyle({height:"0px"});effect.element.show();}), afterUpdateInternal:(function (effect) {effect.element.firstChild.setStyle({bottom:(effect.dims[0] - effect.element.clientHeight) + "px"});}), afterFinishInternal:(function (effect) {effect.element.undoClipping();if (/MSIE/.test(navigator.userAgent)) {effect.element.undoPositioned();effect.element.firstChild.undoPositioned();} else {effect.element.firstChild.undoPositioned();effect.element.undoPositioned();}effect.element.firstChild.setStyle({bottom:oldInnerBottom});})}, arguments[1] || {}));});Effect.SlideUp = (function (element) {element = $(element);element.cleanWhitespace();var oldInnerBottom = $(element.firstChild).getStyle("bottom");return new Effect.Scale(element, window.opera ? 0 : 1, Object.extend({scaleContent:false, scaleX:false, scaleMode:"box", scaleFrom:100, restoreAfterFinish:true, beforeStartInternal:(function (effect) {effect.element.makePositioned();effect.element.firstChild.makePositioned();if (window.opera) {effect.element.setStyle({top:""});}effect.element.makeClipping();effect.element.show();}), afterUpdateInternal:(function (effect) {effect.element.firstChild.setStyle({bottom:(effect.dims[0] - effect.element.clientHeight) + "px"});}), afterFinishInternal:(function (effect) {effect.element.hide();effect.element.undoClipping();effect.element.firstChild.undoPositioned();effect.element.undoPositioned();effect.element.setStyle({bottom:oldInnerBottom});})}, arguments[1] || {}));});Effect.Squish = (function (element) {return new Effect.Scale(element, window.opera ? 1 : 0, {restoreAfterFinish:true, beforeSetup:(function (effect) {effect.element.makeClipping(effect.element);}), afterFinishInternal:(function (effect) {effect.element.hide(effect.element);effect.element.undoClipping(effect.element);})});});Effect.Grow = (function (element) {element = $(element);var options = Object.extend({direction:"center", moveTransition:Effect.Transitions.sinoidal, scaleTransition:Effect.Transitions.sinoidal, opacityTransition:Effect.Transitions.full}, arguments[1] || {});var oldStyle = {top:element.style.top, left:element.style.left, height:element.style.height, width:element.style.width, opacity:element.getInlineOpacity()};var dims = element.getDimensions();var initialMoveX, initialMoveY;var moveX, moveY;switch (options.direction) {case "top-left":initialMoveX = initialMoveY = moveX = moveY = 0;break;case "top-right":initialMoveX = dims.width;initialMoveY = moveY = 0;moveX = -dims.width;break;case "bottom-left":initialMoveX = moveX = 0;initialMoveY = dims.height;moveY = -dims.height;break;case "bottom-right":initialMoveX = dims.width;initialMoveY = dims.height;moveX = -dims.width;moveY = -dims.height;break;case "center":initialMoveX = dims.width / 2;initialMoveY = dims.height / 2;moveX = -dims.width / 2;moveY = -dims.height / 2;break;default:;}return new Effect.Move(element, {x:initialMoveX, y:initialMoveY, duration:0.01, beforeSetup:(function (effect) {effect.element.hide();effect.element.makeClipping();effect.element.makePositioned();}), afterFinishInternal:(function (effect) {new Effect.Parallel([new Effect.Opacity(effect.element, {sync:true, to:1, from:0, transition:options.opacityTransition}), new Effect.Move(effect.element, {x:moveX, y:moveY, sync:true, transition:options.moveTransition}), new Effect.Scale(effect.element, 100, {scaleMode:{originalHeight:dims.height, originalWidth:dims.width}, sync:true, scaleFrom:window.opera ? 1 : 0, transition:options.scaleTransition, restoreAfterFinish:true})], Object.extend({beforeSetup:(function (effect) {effect.effects[0].element.setStyle({height:"0px"});effect.effects[0].element.show();}), afterFinishInternal:(function (effect) {effect.effects[0].element.undoClipping();effect.effects[0].element.undoPositioned();effect.effects[0].element.setStyle(oldStyle);})}, options));})});});Effect.Shrink = (function (element) {element = $(element);var options = Object.extend({direction:"center", moveTransition:Effect.Transitions.sinoidal, scaleTransition:Effect.Transitions.sinoidal, opacityTransition:Effect.Transitions.none}, arguments[1] || {});var oldStyle = {top:element.style.top, left:element.style.left, height:element.style.height, width:element.style.width, opacity:element.getInlineOpacity()};var dims = element.getDimensions();var moveX, moveY;switch (options.direction) {case "top-left":moveX = moveY = 0;break;case "top-right":moveX = dims.width;moveY = 0;break;case "bottom-left":moveX = 0;moveY = dims.height;break;case "bottom-right":moveX = dims.width;moveY = dims.height;break;case "center":moveX = dims.width / 2;moveY = dims.height / 2;break;default:;}return new Effect.Parallel([new Effect.Opacity(element, {sync:true, to:0, from:1, transition:options.opacityTransition}), new Effect.Scale(element, window.opera ? 1 : 0, {sync:true, transition:options.scaleTransition, restoreAfterFinish:true}), new Effect.Move(element, {x:moveX, y:moveY, sync:true, transition:options.moveTransition})], Object.extend({beforeStartInternal:(function (effect) {effect.effects[0].element.makePositioned();effect.effects[0].element.makeClipping();}), afterFinishInternal:(function (effect) {effect.effects[0].element.hide();effect.effects[0].element.undoClipping();effect.effects[0].element.undoPositioned();effect.effects[0].element.setStyle(oldStyle);})}, options));});Effect.Pulsate = (function (element) {element = $(element);var options = arguments[1] || {};var oldOpacity = element.getInlineOpacity();var transition = options.transition || Effect.Transitions.sinoidal;var reverser = (function (pos) {return transition(1 - Effect.Transitions.pulse(pos));});reverser.bind(transition);return new Effect.Opacity(element, Object.extend(Object.extend({duration:3, from:0, afterFinishInternal:(function (effect) {effect.element.setStyle({opacity:oldOpacity});})}, options), {transition:reverser}));});Effect.Fold = (function (element) {element = $(element);var oldStyle = {top:element.style.top, left:element.style.left, width:element.style.width, height:element.style.height};Element.makeClipping(element);return new Effect.Scale(element, 5, Object.extend({scaleContent:false, scaleX:false, afterFinishInternal:(function (effect) {new Effect.Scale(element, 1, {scaleContent:false, scaleY:false, afterFinishInternal:(function (effect) {effect.element.hide();effect.element.undoClipping();effect.element.setStyle(oldStyle);})});})}, arguments[1] || {}));});["setOpacity", "getOpacity", "getInlineOpacity", "forceRerendering", "setContentZoom", "collectTextNodes", "collectTextNodesIgnoreClass", "childrenWithClassName"].each((function (f) {Element.Methods[f] = Element[f];}));Element.Methods.visualEffect = (function (element, effect, options) {s = effect.gsub(/_/, "-").camelize();effect_class = s.charAt(0).toUpperCase() + s.substring(1);new Effect[effect_class](element, options);return $(element);});Element.addMethods();var Autocompleter = {};Autocompleter.Base = (function () {});Autocompleter.Base.prototype = {baseInitialize:(function (element, update, options) {this.element = $(element);this.update = $(update);this.hasFocus = false;this.changed = false;this.active = false;this.index = 0;this.entryCount = 0;if (this.setOptions) {this.setOptions(options);} else {this.options = options || {};}this.options.paramName = this.options.paramName || this.element.name;this.options.tokens = this.options.tokens || [];this.options.frequency = this.options.frequency || 0.4;this.options.minChars = this.options.minChars || 1;this.options.onShow = this.options.onShow || (function (element, update) {if (!update.style.position || update.style.position == "absolute") {update.style.position = "absolute";Position.clone(element, update, {setHeight:false, offsetTop:element.offsetHeight});}Effect.Appear(update, {duration:0.15});});this.options.onHide = this.options.onHide || (function (element, update) {new Effect.Fade(update, {duration:0.15});});if (typeof (this.options.tokens) == "string") {this.options.tokens = new Array(this.options.tokens);}this.observer = null;this.element.setAttribute("autocomplete", "off");Element.hide(this.update);Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this));Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this));}), show:(function () {if (Element.getStyle(this.update, "display") == "none") {this.options.onShow(this.element, this.update);}if (!this.iefix && (navigator.appVersion.indexOf("MSIE") > 0) && (navigator.userAgent.indexOf("Opera") < 0) && (Element.getStyle(this.update, "position") == "absolute")) {new Insertion.After(this.update, "<iframe id=\"" + this.update.id + "_iefix\" " + "style=\"display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);\" " + "src=\"javascript:false;\" frameborder=\"0\" scrolling=\"no\"></iframe>");this.iefix = $(this.update.id + "_iefix");}if (this.iefix) {setTimeout(this.fixIEOverlapping.bind(this), 50);}}), fixIEOverlapping:(function () {Position.clone(this.update, this.iefix);this.iefix.style.zIndex = 1;this.update.style.zIndex = 2;Element.show(this.iefix);}), hide:(function () {this.stopIndicator();if (Element.getStyle(this.update, "display") != "none") {this.options.onHide(this.element, this.update);}if (this.iefix) {Element.hide(this.iefix);}}), startIndicator:(function () {if (this.options.indicator) {Element.show(this.options.indicator);}}), stopIndicator:(function () {if (this.options.indicator) {Element.hide(this.options.indicator);}}), onKeyPress:(function (event) {if (this.active) {switch (event.keyCode) {case Event.KEY_TAB:case Event.KEY_RETURN:this.selectEntry();Event.stop(event);case Event.KEY_ESC:this.hide();this.active = false;Event.stop(event);return;case Event.KEY_LEFT:case Event.KEY_RIGHT:return;case Event.KEY_UP:this.markPrevious();this.render();if (navigator.appVersion.indexOf("AppleWebKit") > 0) {Event.stop(event);}return;case Event.KEY_DOWN:default:this.markNext();this.render();if (navigator.appVersion.indexOf("AppleWebKit") > 0) {Event.stop(event);}return;}} else {if (event.keyCode == Event.KEY_TAB || event.keyCode == Event.KEY_RETURN || (navigator.appVersion.indexOf("AppleWebKit") > 0 && event.keyCode == 0)) {return;}}this.changed = true;this.hasFocus = true;if (this.observer) {clearTimeout(this.observer);}this.observer = setTimeout(this.onObserverEvent.bind(this), this.options.frequency * 1000);}), activate:(function () {this.changed = false;this.hasFocus = true;this.getUpdatedChoices();}), onHover:(function (event) {var element = Event.findElement(event, "LI");if (this.index != element.autocompleteIndex) {this.index = element.autocompleteIndex;this.render();}Event.stop(event);}), onClick:(function (event) {var element = Event.findElement(event, "LI");this.index = element.autocompleteIndex;this.selectEntry();this.hide();}), onBlur:(function (event) {setTimeout(this.hide.bind(this), 250);this.hasFocus = false;this.active = false;}), render:(function () {if (this.entryCount > 0) {for (var i = 0; i < this.entryCount; i++) {this.index == i ? Element.addClassName(this.getEntry(i), "selected") : Element.removeClassName(this.getEntry(i), "selected");}if (this.hasFocus) {this.show();this.active = true;}} else {this.active = false;this.hide();}}), markPrevious:(function () {if (this.index > 0) {this.index--;} else {this.index = this.entryCount - 1;}}), markNext:(function () {if (this.index < this.entryCount - 1) {this.index++;} else {this.index = 0;}}), getEntry:(function (index) {return this.update.firstChild.childNodes[index];}), getCurrentEntry:(function () {return this.getEntry(this.index);}), selectEntry:(function () {this.active = false;this.updateElement(this.getCurrentEntry());}), updateElement:(function (selectedElement) {if (this.options.updateElement) {this.options.updateElement(selectedElement);return;}this.element.autocompleted = true;var value = "";if (this.options.select) {var nodes = document.getElementsByClassName(this.options.select, selectedElement) || [];if (nodes.length > 0) {value = Element.collectTextNodes(nodes[0], this.options.select);}} else {value = Element.collectTextNodesIgnoreClass(selectedElement, "informal");}var lastTokenPos = this.findLastToken();if (lastTokenPos != -1) {var newValue = this.element.value.substr(0, lastTokenPos + 1);var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/);if (whitespace) {newValue += whitespace[0];}this.element.value = newValue + value;} else {this.element.value = value;}this.element.focus();if (this.options.afterUpdateElement) {this.options.afterUpdateElement(this.element, selectedElement);}}), updateChoices:(function (choices) {if (!this.changed && this.hasFocus) {this.update.innerHTML = choices;Element.cleanWhitespace(this.update);Element.cleanWhitespace(this.update.firstChild);if (this.update.firstChild && this.update.firstChild.childNodes) {this.entryCount = this.update.firstChild.childNodes.length;for (var i = 0; i < this.entryCount; i++) {var entry = this.getEntry(i);entry.autocompleteIndex = i;this.addObservers(entry);}} else {this.entryCount = 0;}this.stopIndicator();this.index = 0;this.render();}}), addObservers:(function (element) {Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));Event.observe(element, "click", this.onClick.bindAsEventListener(this));}), onObserverEvent:(function () {this.changed = false;if (this.getToken().length >= this.options.minChars) {this.startIndicator();this.getUpdatedChoices();} else {this.active = false;this.hide();}}), getToken:(function () {var tokenPos = this.findLastToken();if (tokenPos != -1) {var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/, "").replace(/\s+$/, "");} else {var ret = this.element.value;}return /\n/.test(ret) ? "" : ret;}), findLastToken:(function () {var lastTokenPos = -1;for (var i = 0; i < this.options.tokens.length; i++) {var thisTokenPos = this.element.value.lastIndexOf(this.options.tokens[i]);if (thisTokenPos > lastTokenPos) {lastTokenPos = thisTokenPos;}}return lastTokenPos;})};Ajax.Autocompleter = Class.create();Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {initialize:(function (element, update, url, options) {this.baseInitialize(element, update, options);this.options.asynchronous = true;this.options.onComplete = this.onComplete.bind(this);this.options.defaultParams = this.options.parameters || null;this.url = url;}), getUpdatedChoices:(function () {token = this.getToken();if (token.indexOf("(") != -1) {return;}entry = encodeURIComponent(this.options.paramName) + "=" + encodeURIComponent(token);this.options.parameters = this.options.callback ? this.options.callback(this.element, entry) : entry;if (this.options.defaultParams) {this.options.parameters += "&" + this.options.defaultParams;}if (getCurrentPane() == "input") {this.options.parameters += "&mode=" + document.forms.inputform.mode.value;}new Ajax.Request(this.url, this.options);}), onComplete:(function (request) {this.updateChoices(request.responseText);})});Autocompleter.Local = Class.create();Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {initialize:(function (element, update, array, options) {this.baseInitialize(element, update, options);this.options.array = array;}), getUpdatedChoices:(function () {this.updateChoices(this.options.selector(this));}), setOptions:(function (options) {this.options = Object.extend({choices:10, partialSearch:true, partialChars:2, ignoreCase:true, fullSearch:false, selector:(function (instance) {var ret = [];var partial = [];var entry = instance.getToken();var count = 0;for (var i = 0; i < instance.options.array.length && ret.length < instance.options.choices; i++) {var elem = instance.options.array[i];var foundPos = instance.options.ignoreCase ? elem.toLowerCase().indexOf(entry.toLowerCase()) : elem.indexOf(entry);while (foundPos != -1) {if (foundPos == 0 && elem.length != entry.length) {ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" + elem.substr(entry.length) + "</li>");break;} else {if (entry.length >= instance.options.partialChars && instance.options.partialSearch && foundPos != -1) {if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos - 1, 1))) {partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" + elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(foundPos + entry.length) + "</li>");break;}}}foundPos = instance.options.ignoreCase ? elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : elem.indexOf(entry, foundPos + 1);}}if (partial.length) {ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));}return "<ul>" + ret.join("") + "</ul>";})}, options || {});})});Field.scrollFreeActivate = (function (field) {setTimeout((function () {Field.activate(field);}), 1);});Ajax.InPlaceEditor = Class.create();Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99";Ajax.InPlaceEditor.prototype = {initialize:(function (element, url, options) {this.url = url;this.element = $(element);this.options = Object.extend({okButton:true, okText:"ok", cancelLink:true, cancelText:"cancel", savingText:"Saving...", clickToEditText:"Click to edit", okText:"ok", rows:1, onComplete:(function (transport, element) {new Effect.Highlight(element, {startcolor:this.options.highlightcolor});}), onFailure:(function (transport) {alert("Error communicating with the server: " + transport.responseText.stripTags());}), callback:(function (form) {return Form.serialize(form);}), handleLineBreaks:true, loadingText:"Loading...", savingClassName:"inplaceeditor-saving", loadingClassName:"inplaceeditor-loading", formClassName:"inplaceeditor-form", highlightcolor:Ajax.InPlaceEditor.defaultHighlightColor, highlightendcolor:"#FFFFFF", externalControl:null, submitOnBlur:false, ajaxOptions:{}, evalScripts:false}, options || {});if (!this.options.formId && this.element.id) {this.options.formId = this.element.id + "-inplaceeditor";if ($(this.options.formId)) {this.options.formId = null;}}if (this.options.externalControl) {this.options.externalControl = $(this.options.externalControl);}this.originalBackground = Element.getStyle(this.element, "background-color");if (!this.originalBackground) {this.originalBackground = "transparent";}this.element.title = this.options.clickToEditText;this.onclickListener = this.enterEditMode.bindAsEventListener(this);this.mouseoverListener = this.enterHover.bindAsEventListener(this);this.mouseoutListener = this.leaveHover.bindAsEventListener(this);Event.observe(this.element, "click", this.onclickListener);Event.observe(this.element, "mouseover", this.mouseoverListener);Event.observe(this.element, "mouseout", this.mouseoutListener);if (this.options.externalControl) {Event.observe(this.options.externalControl, "click", this.onclickListener);Event.observe(this.options.externalControl, "mouseover", this.mouseoverListener);Event.observe(this.options.externalControl, "mouseout", this.mouseoutListener);}}), enterEditMode:(function (evt) {if (this.saving) {return;}if (this.editing) {return;}this.editing = true;this.onEnterEditMode();if (this.options.externalControl) {Element.hide(this.options.externalControl);}Element.hide(this.element);this.createForm();this.element.parentNode.insertBefore(this.form, this.element);Field.scrollFreeActivate(this.editField);if (evt) {Event.stop(evt);}return false;}), createForm:(function () {this.form = document.createElement("form");this.form.id = this.options.formId;Element.addClassName(this.form, this.options.formClassName);this.form.onsubmit = this.onSubmit.bind(this);this.createEditField();if (this.options.textarea) {var br = document.createElement("br");this.form.appendChild(br);}if (this.options.okButton) {okButton = document.createElement("input");okButton.type = "submit";okButton.value = this.options.okText;okButton.className = "editor_ok_button";this.form.appendChild(okButton);}if (this.options.cancelLink) {cancelLink = document.createElement("a");cancelLink.href = "#";cancelLink.appendChild(document.createTextNode(this.options.cancelText));cancelLink.onclick = this.onclickCancel.bind(this);cancelLink.className = "editor_cancel";this.form.appendChild(cancelLink);}}), hasHTMLLineBreaks:(function (string) {if (!this.options.handleLineBreaks) {return false;}return string.match(/<br/i) || string.match(/<p>/i);}), convertHTMLLineBreaks:(function (string) {return string.replace(/<br>/gi, "\n").replace(/<br\/>/gi, "\n").replace(/<\/p>/gi, "\n").replace(/<p>/gi, "");}), createEditField:(function () {var text;if (this.options.loadTextURL) {text = this.options.loadingText;} else {text = this.getText();}var obj = this;if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) {this.options.textarea = false;var textField = document.createElement("input");textField.obj = this;textField.type = "text";textField.name = "value";textField.value = text;textField.style.backgroundColor = this.options.highlightcolor;textField.className = "editor_field";var size = this.options.size || this.options.cols || 0;if (size != 0) {textField.size = size;}if (this.options.submitOnBlur) {textField.onblur = this.onSubmit.bind(this);}this.editField = textField;} else {this.options.textarea = true;var textArea = document.createElement("textarea");textArea.obj = this;textArea.name = "value";textArea.value = this.convertHTMLLineBreaks(text);textArea.rows = this.options.rows;textArea.cols = this.options.cols || 40;textArea.className = "editor_field";if (this.options.submitOnBlur) {textArea.onblur = this.onSubmit.bind(this);}this.editField = textArea;}if (this.options.loadTextURL) {this.loadExternalText();}this.form.appendChild(this.editField);}), getText:(function () {return this.element.innerHTML;}), loadExternalText:(function () {Element.addClassName(this.form, this.options.loadingClassName);this.editField.disabled = true;new Ajax.Request(this.options.loadTextURL, Object.extend({asynchronous:true, onComplete:this.onLoadedExternalText.bind(this)}, this.options.ajaxOptions));}), onLoadedExternalText:(function (transport) {Element.removeClassName(this.form, this.options.loadingClassName);this.editField.disabled = false;this.editField.value = transport.responseText.stripTags();}), onclickCancel:(function () {this.onComplete();this.leaveEditMode();return false;}), onFailure:(function (transport) {this.options.onFailure(transport);if (this.oldInnerHTML) {this.element.innerHTML = this.oldInnerHTML;this.oldInnerHTML = null;}return false;}), onSubmit:(function () {var form = this.form;var value = this.editField.value;this.onLoading();if (this.options.evalScripts) {new Ajax.Request(this.url, Object.extend({parameters:this.options.callback(form, value), onComplete:this.onComplete.bind(this), onFailure:this.onFailure.bind(this), asynchronous:true, evalScripts:true}, this.options.ajaxOptions));} else {new Ajax.Updater({success:this.element, failure:null}, this.url, Object.extend({parameters:this.options.callback(form, value), onComplete:this.onComplete.bind(this), onFailure:this.onFailure.bind(this)}, this.options.ajaxOptions));}if (arguments.length > 1) {Event.stop(arguments[0]);}return false;}), onLoading:(function () {this.saving = true;this.removeForm();this.leaveHover();this.showSaving();}), showSaving:(function () {this.oldInnerHTML = this.element.innerHTML;this.element.innerHTML = this.options.savingText;Element.addClassName(this.element, this.options.savingClassName);this.element.style.backgroundColor = this.originalBackground;Element.show(this.element);}), removeForm:(function () {if (this.form) {if (this.form.parentNode) {Element.remove(this.form);}this.form = null;}}), enterHover:(function () {if (this.saving) {return;}this.element.style.backgroundColor = this.options.highlightcolor;if (this.effect) {this.effect.cancel();}Element.addClassName(this.element, this.options.hoverClassName);}), leaveHover:(function () {if (this.options.backgroundColor) {this.element.style.backgroundColor = this.oldBackground;}Element.removeClassName(this.element, this.options.hoverClassName);if (this.saving) {return;}this.effect = new Effect.Highlight(this.element, {startcolor:this.options.highlightcolor, endcolor:this.options.highlightendcolor, restorecolor:this.originalBackground});}), leaveEditMode:(function () {Element.removeClassName(this.element, this.options.savingClassName);this.removeForm();this.leaveHover();this.element.style.backgroundColor = this.originalBackground;Element.show(this.element);if (this.options.externalControl) {Element.show(this.options.externalControl);}this.editing = false;this.saving = false;this.oldInnerHTML = null;this.onLeaveEditMode();}), onComplete:(function (transport) {this.leaveEditMode();this.options.onComplete.bind(this)(transport, this.element);}), onEnterEditMode:(function () {}), onLeaveEditMode:(function () {}), dispose:(function () {if (this.oldInnerHTML) {this.element.innerHTML = this.oldInnerHTML;}this.leaveEditMode();Event.stopObserving(this.element, "click", this.onclickListener);Event.stopObserving(this.element, "mouseover", this.mouseoverListener);Event.stopObserving(this.element, "mouseout", this.mouseoutListener);if (this.options.externalControl) {Event.stopObserving(this.options.externalControl, "click", this.onclickListener);Event.stopObserving(this.options.externalControl, "mouseover", this.mouseoverListener);Event.stopObserving(this.options.externalControl, "mouseout", this.mouseoutListener);}})};Ajax.InPlaceCollectionEditor = Class.create();Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype);Object.extend(Ajax.InPlaceCollectionEditor.prototype, {createEditField:(function () {if (!this.cached_selectTag) {var selectTag = document.createElement("select");var collection = this.options.collection || [];var optionTag;collection.each((function (e, i) {optionTag = document.createElement("option");optionTag.value = (e instanceof Array) ? e[0] : e;if (this.options.value == optionTag.value) {optionTag.selected = true;}optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e));selectTag.appendChild(optionTag);}).bind(this));this.cached_selectTag = selectTag;}this.editField = this.cached_selectTag;if (this.options.loadTextURL) {this.loadExternalText();}this.form.appendChild(this.editField);this.options.callback = (function (form, value) {return "value=" + encodeURIComponent(value);});})});Form.Element.DelayedObserver = Class.create();Form.Element.DelayedObserver.prototype = {initialize:(function (element, delay, callback) {this.delay = delay || 0.5;this.element = $(element);this.callback = callback;this.timer = null;this.lastValue = $F(this.element);Event.observe(this.element, "keyup", this.delayedListener.bindAsEventListener(this));}), delayedListener:(function (event) {if (this.lastValue == $F(this.element)) {return;}if (this.timer) {clearTimeout(this.timer);}this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);this.lastValue = $F(this.element);}), onTimerEvent:(function () {this.timer = null;this.callback(this.element, $F(this.element));})};
