var cookieDomain='.nbcolympics.com';var domainUrl ='www.nbcolympics.com';var s_account='nbcuolympicsprodbu';var langCode='en';var dcSite='nbcu.olympics';var css_browser_selector=function(){var C=this;var B=navigator.userAgent.toLowerCase();var E=function(H){return B.indexOf(H)!=-1};var D=document.getElementsByTagName("html")[0];var A=(B.indexOf("opera/9")>-1)?"opera opera9":(B.indexOf("opera 8")>-1)?"opera opera8":(B.indexOf("opera 7")>-1)?"opera opera7":(B.indexOf("msie 8")>-1)?"ie ie8":(B.indexOf("msie 7")>-1)?"ie ie7":(B.indexOf("msie 6")>-1)?"ie ie6":(B.indexOf("msie 5.5")>-1)?"ie ie55":(B.indexOf("msie 5.23")>-1)?"ie ie523":(B.indexOf("msie 5.0")>-1)?"ie ie5":(B.indexOf("safari")>-1&&B.indexOf("version/3.")>-1&&B.indexOf("version/3.")<B.indexOf("safari"))?"safari safari3":(B.indexOf("safari")>-1)?"safari safari2":(B.indexOf("seamonkey")>-1)?"seamonkey gecko":(B.indexOf("netscape")>-1)?"netscape gecko":(B.indexOf("firefox")>-1)?"firefox gecko":(B.indexOf("gecko")>-1)?"gecko":"",F=(E("x11")||E("linux"))?" linux":E("mac")?" mac":E("win")?" win":"";var G=A+F+" js";D.className+=D.className?" "+G:G;C.ver=navigator.appVersion;C.agent=navigator.userAgent;C.mac=B.indexOf("mac")>-1;C.pc=B.indexOf("win")>-1;C.opera=B.indexOf("opera")>-1;C.opera9=B.indexOf("opera/9")>-1;C.opera8=B.indexOf("opera 8")>-1;C.opera7=B.indexOf("opera 7")>-1;C.ie8=(B.indexOf("msie 7")>-1&&!C.opera)?1:0;C.ie7=(B.indexOf("msie 7")>-1&&!C.opera)?1:0;C.ie6=(B.indexOf("msie 6")>-1&&!C.opera)?1:0;C.ie55=(B.indexOf("msie 5.5")>-1&&!C.opera)?1:0;C.ie523=(B.indexOf("msie 5.23")>-1)?1:0;C.ie4=(B.indexOf("msie 4")>-1)?1:0;C.ie3=(B.indexOf("msie 3")>-1)?1:0;C.ie5=(B.indexOf("msie 5.0")>-1&&!C.ie55&&!C.ie523)?1:0;C.ns71=(B.indexOf("netscape/7.1")>-1)?1:0;C.safari3=(B.indexOf("safari")>-1&&B.indexOf("version/3.")>-1&&B.indexOf("version/3.")<B.indexOf("safari"))?1:0;C.safari2=(B.indexOf("safari")>-1&&B.indexOf("version/")==-1)?1:0;C.safari=(C.safari2||C.safari3);C.ie=(C.ie8||C.ie7||C.ie55||C.ie5||C.ie6||C.ie523||C.ie4||C.ie3);C.gecko=(B.indexOf("gecko")>-1&!C.ie)?1:0;C.ns=(C.ns71);C.ieOld=(C.ie55||C.ie5||C.ie523||C.ie4||C.ie3);C.ajaxaware=(C.opera||C.ie8||C.ie7||C.ie6||C.safari||C.gecko)?1:0}();var Prototype = {Version: '1.6.0',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(x) { return x }};if (Prototype.Browser.MobileSafari)Prototype.BrowserFeatures.SpecificElementExtensions = false;if (Prototype.Browser.WebKit)Prototype.BrowserFeatures.XPath = false;var Class = {create: function() {var parent = null, properties = $A(arguments);if (Object.isFunction(properties[0]))parent = properties.shift();function klass() {this.initialize.apply(this, arguments);}Object.extend(klass, Class.Methods);klass.superclass = parent;klass.subclasses = [];if (parent) {var subclass = function() { };subclass.prototype = parent.prototype;klass.prototype = new subclass;parent.subclasses.push(klass);}for (var i = 0; i < properties.length; i++)klass.addMethods(properties[i]);if (!klass.prototype.initialize)klass.prototype.initialize = Prototype.emptyFunction;klass.prototype.constructor = klass;return klass;}};Class.Methods = {addMethods: function(source) {var ancestor = this.superclass && this.superclass.prototype;var properties = Object.keys(source);if (!Object.keys({ toString: true }).length)properties.push("toString", "valueOf");for (var i = 0, length = properties.length; i < length; i++) {var property = properties[i], value = source[property];if (ancestor && Object.isFunction(value) &&value.argumentNames().first() == "$super") {var method = value, value = Object.extend((function(m) {return function() { return ancestor[m].apply(this, arguments) };})(property).wrap(method), {valueOf: function() { return method },toString: function() { return method.toString() }});}this.prototype[property] = value;}return this;}};var Abstract = { };Object.extend = function(destination, source) {for (var property in source)destination[property] = source[property];return destination;};Object.extend(Object, {inspect: function(object) {try {if (object === undefined) return 'undefined';if (object === null) return 'null';return object.inspect ? object.inspect() : object.toString();} catch (e) {if (e instanceof RangeError) return '...';throw e;}},toJSON: function(object) {var type = typeof object;switch (type) {case 'undefined':case 'function':case 'unknown': return;case 'boolean': return object.toString();}if (object === null) return 'null';if (object.toJSON) return object.toJSON();if (Object.isElement(object)) return;var results = [];for (var property in object) {var value = Object.toJSON(object[property]);if (value !== undefined)results.push(property.toJSON() + ': ' + value);}return '{' + results.join(', ') + '}';},toQueryString: function(object) {return $H(object).toQueryString();},toHTML: function(object) {return object && object.toHTML ? object.toHTML() : String.interpret(object);},keys: function(object) {var keys = [];for (var property in object)keys.push(property);return keys;},values: function(object) {var values = [];for (var property in object)values.push(object[property]);return values;},clone: function(object) {return Object.extend({ }, object);},isElement: function(object) {return object && object.nodeType == 1;},isArray: function(object) {return object && object.constructor === Array;},isHash: function(object) {return object instanceof Hash;},isFunction: function(object) {return typeof object == "function";},isString: function(object) {return typeof object == "string";},isNumber: function(object) {return typeof object == "number";},isUndefined: function(object) {return typeof object == "undefined";}});Object.extend(Function.prototype, {argumentNames: function() {var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");return names.length == 1 && !names[0] ? [] : names;},bind: function() {if (arguments.length < 2 && arguments[0] === undefined) return this;var __method = this, args = $A(arguments), object = args.shift();return function() {return __method.apply(object, args.concat($A(arguments)));}},bindAsEventListener: function() {var __method = this, args = $A(arguments), object = args.shift();return function(event) {return __method.apply(object, [event || window.event].concat(args));}},curry: function() {if (!arguments.length) return this;var __method = this, args = $A(arguments);return function() {return __method.apply(this, args.concat($A(arguments)));}},delay: function() {var __method = this, args = $A(arguments), timeout = args.shift() * 1000;return window.setTimeout(function() {return __method.apply(__method, args);}, timeout);},wrap: function(wrapper) {var __method = this;return function() {return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));}},methodize: function() {if (this._methodized) return this._methodized;var __method = this;return this._methodized = function() {return __method.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 returnValue;for (var i = 0, length = arguments.length; i < length; i++) {var lambda = arguments[i];try {returnValue = lambda();break;} catch (e) { }}return returnValue;}};RegExp.prototype.match = RegExp.prototype.test;RegExp.escape = function(str) {return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');};var PeriodicalExecuter = Class.create({initialize: function(callback, frequency) {this.callback = callback;this.frequency = frequency;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(value) {return value == null ? '' : String(value);},specialChar: {'\b': '\\b','\t': '\\t','\n': '\\n','\f': '\\f','\r': '\\r','\\': '\\\\'}});Object.extend(String.prototype, {gsub: function(pattern, replacement) {var result = '', source = this, match;replacement = arguments.callee.prepareReplacement(replacement);while (source.length > 0) {if (match = source.match(pattern)) {result += source.slice(0, match.index);result += String.interpret(replacement(match));source = source.slice(match.index + match[0].length);} else {result += source, source = '';}}return result;},sub: function(pattern, replacement, count) {replacement = this.gsub.prepareReplacement(replacement);count = count === undefined ? 1 : count;return this.gsub(pattern, function(match) {if (--count < 0) return match[0];return replacement(match);});},scan: function(pattern, iterator) {this.gsub(pattern, iterator);return String(this);},truncate: function(length, truncation) {length = length || 30;truncation = truncation === undefined ? '...' : truncation;return this.length > length ?this.slice(0, length - truncation.length) + truncation : 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 matchAll = new RegExp(Prototype.ScriptFragment, 'img');var matchOne = new RegExp(Prototype.ScriptFragment, 'im');return (this.match(matchAll) || []).map(function(scriptTag) {return (scriptTag.match(matchOne) || ['', ''])[1];});},evalScripts: function() {return this.extractScripts().map(function(script) { return eval(script) });},escapeHTML: function() {var self = arguments.callee;self.text.data = this;return self.div.innerHTML;},unescapeHTML: function() {var div = new Element('div');div.innerHTML = this.stripTags();return div.childNodes[0] ? (div.childNodes.length > 1 ?$A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :div.childNodes[0].nodeValue) : '';},toQueryParams: function(separator) {var match = this.strip().match(/([^?#]*)(#.*)?$/);if (!match) return { };return match[1].split(separator || '&').inject({ }, function(hash, pair) {if ((pair = pair.split('='))[0]) {var key = decodeURIComponent(pair.shift());var value = pair.length > 1 ? pair.join('=') : pair[0];if (value != undefined) value = decodeURIComponent(value);if (key in hash) {if (!Object.isArray(hash[key])) hash[key] = [hash[key]];hash[key].push(value);}else hash[key] = value;}return hash;});},toArray: function() {return this.split('');},succ: function() {return this.slice(0, this.length - 1) +String.fromCharCode(this.charCodeAt(this.length - 1) + 1);},times: function(count) {return count < 1 ? '' : new Array(count + 1).join(this);},camelize: function() {var parts = this.split('-'), len = parts.length;if (len == 1) return parts[0];var camelized = this.charAt(0) == '-'? parts[0].charAt(0).toUpperCase() + parts[0].substring(1): parts[0];for (var i = 1; i < len; i++)camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);return camelized;},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(useDoubleQuotes) {var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {var character = String.specialChar[match[0]];return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);});if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';return "'" + escapedString.replace(/'/g, '\\\'') + "'";},toJSON: function() {return this.inspect(true);},unfilterJSON: function(filter) {return this.sub(filter || Prototype.JSONFilter, '#{1}');},isJSON: function() {var str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);},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(pattern) {return this.indexOf(pattern) > -1;},startsWith: function(pattern) {return this.indexOf(pattern) === 0;},endsWith: function(pattern) {var d = this.length - pattern.length;return d >= 0 && this.lastIndexOf(pattern) === d;},empty: function() {return this == '';},blank: function() {return /^\s*$/.test(this);},interpolate: function(object, pattern) {return new Template(this, pattern).evaluate(object);}});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(replacement) {if (Object.isFunction(replacement)) return replacement;var template = new Template(replacement);return function(match) { return template.evaluate(match) };};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(template, pattern) {this.template = template.toString();this.pattern = pattern || Template.Pattern;},evaluate: function(object) {if (Object.isFunction(object.toTemplateReplacements))object = object.toTemplateReplacements();return this.template.gsub(this.pattern, function(match) {if (object == null) return '';var before = match[1] || '';if (before == '\\') return match[2];var ctx = object, expr = match[3];var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/, match = pattern.exec(expr);if (match == null) return before;while (match != null) {var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];ctx = ctx[comp];if (null == ctx || '' == match[3]) break;expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);match = pattern.exec(expr);}return before + String.interpret(ctx);}.bind(this));}});Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;var $break = { };var Enumerable = {each: function(iterator, context) {var index = 0;iterator = iterator.bind(context);try {this._each(function(value) {iterator(value, index++);});} catch (e) {if (e != $break) throw e;}return this;},eachSlice: function(number, iterator, context) {iterator = iterator ? iterator.bind(context) : Prototype.K;var index = -number, slices = [], array = this.toArray();while ((index += number) < array.length)slices.push(array.slice(index, index+number));return slices.collect(iterator, context);},all: function(iterator, context) {iterator = iterator ? iterator.bind(context) : Prototype.K;var result = true;this.each(function(value, index) {result = result && !!iterator(value, index);if (!result) throw $break;});return result;},any: function(iterator, context) {iterator = iterator ? iterator.bind(context) : Prototype.K;var result = false;this.each(function(value, index) {if (result = !!iterator(value, index))throw $break;});return result;},collect: function(iterator, context) {iterator = iterator ? iterator.bind(context) : Prototype.K;var results = [];this.each(function(value, index) {results.push(iterator(value, index));});return results;},detect: function(iterator, context) {iterator = iterator.bind(context);var result;this.each(function(value, index) {if (iterator(value, index)) {result = value;throw $break;}});return result;},findAll: function(iterator, context) {iterator = iterator.bind(context);var results = [];this.each(function(value, index) {if (iterator(value, index))results.push(value);});return results;},grep: function(filter, iterator, context) {iterator = iterator ? iterator.bind(context) : Prototype.K;var results = [];if (Object.isString(filter))filter = new RegExp(filter);this.each(function(value, index) {if (filter.match(value))results.push(iterator(value, index));});return results;},include: function(object) {if (Object.isFunction(this.indexOf))if (this.indexOf(object) != -1) return true;var found = false;this.each(function(value) {if (value == object) {found = true;throw $break;}});return found;},inGroupsOf: function(number, fillWith) {fillWith = fillWith === undefined ? null : fillWith;return this.eachSlice(number, function(slice) {while(slice.length < number) slice.push(fillWith);return slice;});},inject: function(memo, iterator, context) {iterator = iterator.bind(context);this.each(function(value, index) {memo = iterator(memo, value, index);});return memo;},invoke: function(method) {var args = $A(arguments).slice(1);return this.map(function(value) {return value[method].apply(value, args);});},max: function(iterator, context) {iterator = iterator ? iterator.bind(context) : Prototype.K;var result;this.each(function(value, index) {value = iterator(value, index);if (result == undefined || value >= result)result = value;});return result;},min: function(iterator, context) {iterator = iterator ? iterator.bind(context) : Prototype.K;var result;this.each(function(value, index) {value = iterator(value, index);if (result == undefined || value < result)result = value;});return result;},partition: function(iterator, context) {iterator = iterator ? iterator.bind(context) : Prototype.K;var trues = [], falses = [];this.each(function(value, index) {(iterator(value, index) ?trues : falses).push(value);});return [trues, falses];},pluck: function(property) {var results = [];this.each(function(value) {results.push(value[property]);});return results;},reject: function(iterator, context) {iterator = iterator.bind(context);var results = [];this.each(function(value, index) {if (!iterator(value, index))results.push(value);});return results;},sortBy: function(iterator, context) {iterator = iterator.bind(context);return this.map(function(value, index) {return {value: value, criteria: iterator(value, index)};}).sort(function(left, right) {var a = left.criteria, b = right.criteria;return a < b ? -1 : a > b ? 1 : 0;}).pluck('value');},toArray: function() {return this.map();},zip: function() {var iterator = Prototype.K, args = $A(arguments);if (Object.isFunction(args.last()))iterator = args.pop();var collections = [this].concat(args).map($A);return this.map(function(value, index) {return iterator(collections.pluck(index));});},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(iterable) {if (!iterable) return [];if (iterable.toArray) return iterable.toArray();var length = iterable.length, results = new Array(length);while (length--) results[length] = iterable[length];return results;}if (Prototype.Browser.WebKit) {function $A(iterable) {if (!iterable) return [];if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') &&iterable.toArray) return iterable.toArray();var length = iterable.length, results = new Array(length);while (length--) results[length] = iterable[length];return results;}}Array.from = $A;Object.extend(Array.prototype, Enumerable);if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;Object.extend(Array.prototype, {_each: function(iterator) {for (var i = 0, length = this.length; i < length; i++)iterator(this[i]);},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(value) {return value != null;});},flatten: function() {return this.inject([], function(array, value) {return array.concat(Object.isArray(value) ?value.flatten() : [value]);});},without: function() {var values = $A(arguments);return this.select(function(value) {return !values.include(value);});},reverse: function(inline) {return (inline !== false ? this : this.toArray())._reverse();},reduce: function() {return this.length > 1 ? this : this[0];},uniq: function(sorted) {return this.inject([], function(array, value, index) {if (0 == index || (sorted ? array.last() != value : !array.include(value)))array.push(value);return array;});},intersect: function(array) {return this.uniq().findAll(function(item) {return array.detect(function(value) { return item === value });});},clone: function() {return [].concat(this);},size: function() {return this.length;},inspect: function() {return '[' + this.map(Object.inspect).join(', ') + ']';},toJSON: function() {var results = [];this.each(function(object) {var value = Object.toJSON(object);if (value !== undefined) results.push(value);});return '[' + results.join(', ') + ']';}});if (Object.isFunction(Array.prototype.forEach))Array.prototype._each = Array.prototype.forEach;if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {i || (i = 0);var length = this.length;if (i < 0) i = length + i;for (; i < length; i++)if (this[i] === item) return i;return -1;};if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;var n = this.slice(0, i).reverse().indexOf(item);return (n < 0) ? n : i - n - 1;};Array.prototype.toArray = Array.prototype.clone;function $w(string) {if (!Object.isString(string)) return [];string = string.strip();return string ? string.split(/\s+/) : [];}if (Prototype.Browser.Opera){Array.prototype.concat = function() {var array = [];for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);for (var i = 0, length = arguments.length; i < length; i++) {if (Object.isArray(arguments[i])) {for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)array.push(arguments[i][j]);} else {array.push(arguments[i]);}}return array;};}Object.extend(Number.prototype, {toColorPart: function() {return this.toPaddedString(2, 16);},succ: function() {return this + 1;},times: function(iterator) {$R(0, this, true).each(iterator);return this;},toPaddedString: function(length, radix) {var string = this.toString(radix || 10);return '0'.times(length - string.length) + string;},toJSON: function() {return isFinite(this) ? this.toString() : 'null';}});$w('abs round ceil floor').each(function(method){Number.prototype[method] = Math[method].methodize();});function $H(object) {return new Hash(object);};var Hash = Class.create(Enumerable, (function() {if (function() {var i = 0, Test = function(value) { this.key = value };Test.prototype.key = 'foo';for (var property in new Test('bar')) i++;return i > 1;}()) {function each(iterator) {var cache = [];for (var key in this._object) {var value = this._object[key];if (cache.include(key)) continue;cache.push(key);var pair = [key, value];pair.key = key;pair.value = value;iterator(pair);}}} else {function each(iterator) {for (var key in this._object) {var value = this._object[key], pair = [key, value];pair.key = key;pair.value = value;iterator(pair);}}}function toQueryPair(key, value) {if (Object.isUndefined(value)) return key;return key + '=' + encodeURIComponent(String.interpret(value));}return {initialize: function(object) {this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);},_each: each,set: function(key, value) {return this._object[key] = value;},get: function(key) {return this._object[key];},unset: function(key) {var value = this._object[key];delete this._object[key];return value;},toObject: function() {return Object.clone(this._object);},keys: function() {return this.pluck('key');},values: function() {return this.pluck('value');},index: function(value) {var match = this.detect(function(pair) {return pair.value === value;});return match && match.key;},merge: function(object) {return this.clone().update(object);},update: function(object) {return new Hash(object).inject(this, function(result, pair) {result.set(pair.key, pair.value);return result;});},toQueryString: function() {return this.map(function(pair) {var key = encodeURIComponent(pair.key), values = pair.value;if (values && typeof values == 'object') {if (Object.isArray(values))return values.map(toQueryPair.curry(key)).join('&');}return toQueryPair(key, values);}).join('&');},inspect: function() {return '#<Hash:{' + this.map(function(pair) {return pair.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(start, end, exclusive) {this.start = start;this.end = end;this.exclusive = exclusive;},_each: function(iterator) {var value = this.start;while (this.include(value)) {iterator(value);value = value.succ();}},include: function(value) {if (value < this.start)return false;if (this.exclusive)return value < this.end;return value <= this.end;}});var $R = function(start, end, exclusive) {return new ObjectRange(start, end, exclusive);};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(iterator) {this.responders._each(iterator);},register: function(responder) {if (!this.include(responder))this.responders.push(responder);},unregister: function(responder) {this.responders = this.responders.without(responder);},dispatch: function(callback, request, transport, json) {this.each(function(responder) {if (Object.isFunction(responder[callback])) {try {responder[callback].apply(responder, [request, transport, json]);} catch (e) { }}});}};Object.extend(Ajax.Responders, Enumerable);Ajax.Responders.register({onCreate: function() { Ajax.activeRequestCount++ },onComplete: function() { Ajax.activeRequestCount-- }});Ajax.Base = Class.create({initialize: function(options) {this.options = {method: 'post',asynchronous: true,contentType: 'application/x-www-form-urlencoded',encoding: 'UTF-8',parameters: '',evalJSON: true,evalJS: true};Object.extend(this.options, options || { });this.options.method = this.options.method.toLowerCase();if (Object.isString(this.options.parameters))this.options.parameters = this.options.parameters.toQueryParams();}});Ajax.Request = Class.create(Ajax.Base, {_complete: false,initialize: function($super, url, options) {$super(options);this.transport = Ajax.getTransport();this.request(url);},request: function(url) {this.url = url;this.method = this.options.method;var params = Object.clone(this.options.parameters);if (!['get', 'post'].include(this.method)) {params['_method'] = this.method;this.method = 'post';}this.parameters = params;if (params = Object.toQueryString(params)) {if (this.method == 'get')this.url += (this.url.include('?') ? '&' : '?') + params;else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))params += '&_=';}try {var response = new Ajax.Response(this);if (this.options.onCreate) this.options.onCreate(response);Ajax.Responders.dispatch('onCreate', this, response);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.body = this.method == 'post' ? (this.options.postBody || params) : null;this.transport.send(this.body);if (!this.options.asynchronous && this.transport.overrideMimeType)this.onStateChange();}catch (e) {this.dispatchException(e);}},onStateChange: function() {var readyState = this.transport.readyState;if (readyState > 1 && !((readyState == 4) && this._complete))this.respondToReadyState(this.transport.readyState);},setRequestHeaders: function() {var headers = {'X-Requested-With': 'XMLHttpRequest','X-Prototype-Version': Prototype.Version,'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'};if (this.method == 'post') {headers['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)headers['Connection'] = 'close';}if (typeof this.options.requestHeaders == 'object') {var extras = this.options.requestHeaders;if (Object.isFunction(extras.push))for (var i = 0, length = extras.length; i < length; i += 2)headers[extras[i]] = extras[i+1];else$H(extras).each(function(pair) { headers[pair.key] = pair.value });}for (var name in headers)this.transport.setRequestHeader(name, headers[name]);},success: function() {var status = this.getStatus();return !status || (status >= 200 && status < 300);},getStatus: function() {try {return this.transport.status || 0;} catch (e) { return 0 }},respondToReadyState: function(readyState) {var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);if (state == 'Complete') {try {this._complete = true;(this.options['on' + response.status]|| this.options['on' + (this.success() ? 'Success' : 'Failure')]|| Prototype.emptyFunction)(response, response.headerJSON);} catch (e) {this.dispatchException(e);}var contentType = response.getHeader('Content-type');if (this.options.evalJS == 'force'|| (this.options.evalJS && contentType&& contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))this.evalResponse();}try {(this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);} catch (e) {this.dispatchException(e);}if (state == 'Complete') {this.transport.onreadystatechange = Prototype.emptyFunction;}},getHeader: function(name) {try {return this.transport.getResponseHeader(name);} catch (e) { return null }},evalResponse: function() {try {return eval((this.transport.responseText || '').unfilterJSON());} catch (e) {this.dispatchException(e);}},dispatchException: function(exception) {(this.options.onException || Prototype.emptyFunction)(this, exception);Ajax.Responders.dispatch('onException', this, exception);}});Ajax.Request.Events =['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];Ajax.Response = Class.create({initialize: function(request){this.request = request;var transport = this.transport = request.transport,readyState = this.readyState = transport.readyState;if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {this.status = this.getStatus();this.statusText = this.getStatusText();this.responseText = String.interpret(transport.responseText);this.headerJSON = this._getHeaderJSON();}if(readyState == 4) {var xml = transport.responseXML;this.responseXML = xml === undefined ? null : xml;this.responseJSON = this._getResponseJSON();}},status: 0,statusText: '',getStatus: Ajax.Request.prototype.getStatus,getStatusText: function() {try {return this.transport.statusText || '';} catch (e) { return '' }},getHeader: Ajax.Request.prototype.getHeader,getAllHeaders: function() {try {return this.getAllResponseHeaders();} catch (e) { return null }},getResponseHeader: function(name) {return this.transport.getResponseHeader(name);},getAllResponseHeaders: function() {return this.transport.getAllResponseHeaders();},_getHeaderJSON: function() {var json = this.getHeader('X-JSON');if (!json) return null;json = decodeURIComponent(escape(json));try {return json.evalJSON(this.request.options.sanitizeJSON);} catch (e) {this.request.dispatchException(e);}},_getResponseJSON: function() {var options = this.request.options;if (!options.evalJSON || (options.evalJSON != 'force' &&!(this.getHeader('Content-type') || '').include('application/json')))return null;try {return this.transport.responseText.evalJSON(options.sanitizeJSON);} catch (e) {this.request.dispatchException(e);}}});Ajax.Updater = Class.create(Ajax.Request, {initialize: function($super, container, url, options) {this.container = {success: (container.success || container),failure: (container.failure || (container.success ? null : container))};options = options || { };var onComplete = options.onComplete;options.onComplete = (function(response, param) {this.updateContent(response.responseText);if (Object.isFunction(onComplete)) onComplete(response, param);}).bind(this);$super(url, options);},updateContent: function(responseText) {var receiver = this.container[this.success() ? 'success' : 'failure'],options = this.options;if (!options.evalScripts) responseText = responseText.stripScripts();if (receiver = $(receiver)) {if (options.insertion) {if (Object.isString(options.insertion)) {var insertion = { }; insertion[options.insertion] = responseText;receiver.insert(insertion);}else options.insertion(receiver, responseText);}else receiver.update(responseText);}if (this.success()) {if (this.onComplete) this.onComplete.bind(this).defer();}}});Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {initialize: function($super, container, url, options) {$super(options);this.onComplete = this.options.onComplete;this.frequency = (this.options.frequency || 2);this.decay = (this.options.decay || 1);this.updater = { };this.container = container;this.url = url;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(response) {if (this.options.decay) {this.decay = (response.responseText == this.lastText ?this.decay * this.options.decay : 1);this.lastText = response.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 $(element) {if (arguments.length > 1) {for (var i = 0, elements = [], length = arguments.length; i < length; i++)elements.push($(arguments[i]));return elements;}if (Object.isString(element))element = document.getElementById(element);return Element.extend(element);}if (Prototype.BrowserFeatures.XPath) {document._getElementsByXPath = function(expression, parentElement) {var results = [];var query = document.evaluate(expression, $(parentElement) || document,null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);for (var i = 0, length = query.snapshotLength; i < length; i++)results.push(Element.extend(query.snapshotItem(i)));return results;};}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 element = this.Element;this.Element = function(tagName, attributes) {attributes = attributes || { };tagName = tagName.toLowerCase();var cache = Element.cache;if (Prototype.Browser.IE && attributes.name) {tagName = '<' + tagName + ' name="' + attributes.name + '">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName), attributes);}if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);};Object.extend(this.Element, element || { });}).call(window);Element.cache = { };Element.Methods = {visible: function(element) {return $(element).style.display != 'none';},toggle: function(element) {element = $(element);Element[Element.visible(element) ? 'hide' : 'show'](element);return element;},hide: function(element) {$(element).style.display = 'none';return element;},show: function(element) {$(element).style.display = '';return element;},remove: function(element) {element = $(element);element.parentNode.removeChild(element);return element;},update: function(element, content) {element = $(element);if (content && content.toElement) content = content.toElement();if (Object.isElement(content)) return element.update().insert(content);content = Object.toHTML(content);element.innerHTML = content.stripScripts();content.evalScripts.bind(content).defer();return element;},replace: function(element, content) {element = $(element);if (content && content.toElement) content = content.toElement();else if (!Object.isElement(content)) {content = Object.toHTML(content);var range = element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content = range.createContextualFragment(content.stripScripts());}element.parentNode.replaceChild(content, element);return element;},insert: function(element, insertions) {element = $(element);if (Object.isString(insertions) || Object.isNumber(insertions) ||Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))insertions = {bottom:insertions};var content, t, range;for (position in insertions) {content = insertions[position];position = position.toLowerCase();t = Element._insertionTranslations[position];if (content && content.toElement) content = content.toElement();if (Object.isElement(content)) {t.insert(element, content);continue;}content = Object.toHTML(content);range = element.ownerDocument.createRange();t.initializeRange(element, range);t.insert(element, range.createContextualFragment(content.stripScripts()));content.evalScripts.bind(content).defer();}return element;},wrap: function(element, wrapper, attributes) {element = $(element);if (Object.isElement(wrapper))$(wrapper).writeAttribute(attributes || { });else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);else wrapper = new Element('div', wrapper);if (element.parentNode)element.parentNode.replaceChild(wrapper, element);wrapper.appendChild(element);return wrapper;},inspect: function(element) {element = $(element);var result = '<' + element.tagName.toLowerCase();$H({'id': 'id', 'className': 'class'}).each(function(pair) {var property = pair.first(), attribute = pair.last();var value = (element[property] || '').toString();if (value) result += ' ' + attribute + '=' + value.inspect(true);});return result + '>';},recursivelyCollect: function(element, property) {element = $(element);var elements = [];while (element = element[property])if (element.nodeType == 1)elements.push(Element.extend(element));return elements;},ancestors: function(element) {return $(element).recursivelyCollect('parentNode');},descendants: function(element) {return $A($(element).getElementsByTagName('*')).each(Element.extend);},firstDescendant: function(element) {element = $(element).firstChild;while (element && element.nodeType != 1) element = element.nextSibling;return $(element);},immediateDescendants: function(element) {if (!(element = $(element).firstChild)) return [];while (element && element.nodeType != 1) element = element.nextSibling;if (element) return [element].concat($(element).nextSiblings());return [];},previousSiblings: function(element) {return $(element).recursivelyCollect('previousSibling');},nextSiblings: function(element) {return $(element).recursivelyCollect('nextSibling');},siblings: function(element) {element = $(element);return element.previousSiblings().reverse().concat(element.nextSiblings());},match: function(element, selector) {if (Object.isString(selector))selector = new Selector(selector);return selector.match($(element));},up: function(element, expression, index) {element = $(element);if (arguments.length == 1) return $(element.parentNode);var ancestors = element.ancestors();return expression ? Selector.findElement(ancestors, expression, index) :ancestors[index || 0];},down: function(element, expression, index) {element = $(element);if (arguments.length == 1) return element.firstDescendant();var descendants = element.descendants();return expression ? Selector.findElement(descendants, expression, index) :descendants[index || 0];},previous: function(element, expression, index) {element = $(element);if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));var previousSiblings = element.previousSiblings();return expression ? Selector.findElement(previousSiblings, expression, index) :previousSiblings[index || 0];},next: function(element, expression, index) {element = $(element);if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));var nextSiblings = element.nextSiblings();return expression ? Selector.findElement(nextSiblings, expression, index) :nextSiblings[index || 0];},select: function() {var args = $A(arguments), element = $(args.shift());return Selector.findChildElements(element, args);},adjacent: function() {var args = $A(arguments), element = $(args.shift());return Selector.findChildElements(element.parentNode, args).without(element);},identify: function(element) {element = $(element);var id = element.readAttribute('id'), self = arguments.callee;if (id) return id;do { id = 'anonymous_element_' + self.counter++ } while ($(id));element.writeAttribute('id', id);return id;},readAttribute: function(element, name) {element = $(element);if (Prototype.Browser.IE) {var t = Element._attributeTranslations.read;if (t.values[name]) return t.values[name](element, name);if (t.names[name]) name = t.names[name];if (name.include(':')) {return (!element.attributes || !element.attributes[name]) ? null :element.attributes[name].value;}}return element.getAttribute(name);},writeAttribute: function(element, name, value) {element = $(element);var attributes = { }, t = Element._attributeTranslations.write;if (typeof name == 'object') attributes = name;else attributes[name] = value === undefined ? true : value;for (var attr in attributes) {var name = t.names[attr] || attr, value = attributes[attr];if (t.values[attr]) name = t.values[attr](element, value);if (value === false || value === null)element.removeAttribute(name);else if (value === true)element.setAttribute(name, name);else element.setAttribute(name, value);}return element;},getHeight: function(element) {return $(element).getDimensions().height;},getWidth: function(element) {return $(element).getDimensions().width;},classNames: function(element) {return new Element.ClassNames(element);},hasClassName: function(element, className) {if (!(element = $(element))) return;var elementClassName = element.className;return (elementClassName.length > 0 && (elementClassName == className ||new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));},addClassName: function(element, className) {if (!(element = $(element))) return;if (!element.hasClassName(className))element.className += (element.className ? ' ' : '') + className;return element;},removeClassName: function(element, className) {if (!(element = $(element))) return;element.className = element.className.replace(new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();return element;},toggleClassName: function(element, className) {if (!(element = $(element))) return;return element[element.hasClassName(className) ?'removeClassName' : 'addClassName'](className);},cleanWhitespace: function(element) {element = $(element);var node = element.firstChild;while (node) {var nextNode = node.nextSibling;if (node.nodeType == 3 && !/\S/.test(node.nodeValue))element.removeChild(node);node = nextNode;}return element;},empty: function(element) {return $(element).innerHTML.blank();},descendantOf: function(element, ancestor) {element = $(element), ancestor = $(ancestor);if (element.compareDocumentPosition)return (element.compareDocumentPosition(ancestor) & 8) === 8;if (element.sourceIndex && !Prototype.Browser.Opera) {var e = element.sourceIndex, a = ancestor.sourceIndex,nextAncestor = ancestor.nextSibling;if (!nextAncestor) {do { ancestor = ancestor.parentNode; }while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode);}if (nextAncestor) return (e > a && e < nextAncestor.sourceIndex);}while (element = element.parentNode)if (element == ancestor) return true;return false;},scrollTo: function(element) {element = $(element);var pos = element.cumulativeOffset();window.scrollTo(pos[0], pos[1]);return element;},getStyle: function(element, style) {element = $(element);style = style == 'float' ? 'cssFloat' : style.camelize();var value = element.style[style];if (!value) {var css = document.defaultView.getComputedStyle(element, null);value = css ? css[style] : null;}if (style == 'opacity') return value ? parseFloat(value) : 1.0;return value == 'auto' ? null : value;},getOpacity: function(element) {return $(element).getStyle('opacity');},setStyle: function(element, styles) {element = $(element);var elementStyle = element.style, match;if (Object.isString(styles)) {element.style.cssText += ';' + styles;return styles.include('opacity') ?element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;}for (var property in styles)if (property == 'opacity') element.setOpacity(styles[property]);elseelementStyle[(property == 'float' || property == 'cssFloat') ?(elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :property] = styles[property];return element;},setOpacity: function(element, value) {element = $(element);element.style.opacity = (value == 1 || value === '') ? '' :(value < 0.00001) ? 0 : value;return element;},getDimensions: function(element) {element = $(element);var display = $(element).getStyle('display');if (display != 'none' && display != null)return {width: element.offsetWidth, height: element.offsetHeight};var els = element.style;var originalVisibility = els.visibility;var originalPosition = els.position;var originalDisplay = els.display;els.visibility = 'hidden';els.position = 'absolute';els.display = 'block';var originalWidth = element.clientWidth;var originalHeight = element.clientHeight;els.display = originalDisplay;els.position = originalPosition;els.visibility = originalVisibility;return {width: originalWidth, height: originalHeight};},makePositioned: function(element) {element = $(element);var pos = Element.getStyle(element, 'position');if (pos == 'static' || !pos) {element._madePositioned = true;element.style.position = 'relative';if (window.opera) {element.style.top = 0;element.style.left = 0;}}return element;},undoPositioned: function(element) {element = $(element);if (element._madePositioned) {element._madePositioned = undefined;element.style.position =element.style.top =element.style.left =element.style.bottom =element.style.right = '';}return element;},makeClipping: function(element) {element = $(element);if (element._overflow) return element;element._overflow = Element.getStyle(element, 'overflow') || 'auto';if (element._overflow !== 'hidden')element.style.overflow = 'hidden';return element;},undoClipping: function(element) {element = $(element);if (!element._overflow) return element;element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;element._overflow = null;return element;},cumulativeOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop || 0;valueL += element.offsetLeft || 0;element = element.offsetParent;} while (element);return Element._returnOffset(valueL, valueT);},positionedOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop || 0;valueL += element.offsetLeft || 0;element = element.offsetParent;if (element) {if (element.tagName == 'BODY') break;var p = Element.getStyle(element, 'position');if (p == 'relative' || p == 'absolute') break;}} while (element);return Element._returnOffset(valueL, valueT);},absolutize: function(element) {element = $(element);if (element.getStyle('position') == 'absolute') return;var offsets = element.positionedOffset();var top = offsets[1];var left = offsets[0];var width = element.clientWidth;var height = element.clientHeight;element._originalLeft = left - parseFloat(element.style.left || 0);element._originalTop = top - parseFloat(element.style.top || 0);element._originalWidth = element.style.width;element._originalHeight = element.style.height;element.style.position = 'absolute';element.style.top = top + 'px';element.style.left = left + 'px';element.style.width = width + 'px';element.style.height = height + 'px';return element;},relativize: function(element) {element = $(element);if (element.getStyle('position') == 'relative') return;element.style.position = 'relative';var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);element.style.top = top + 'px';element.style.left = left + 'px';element.style.height = element._originalHeight;element.style.width = element._originalWidth;return element;},cumulativeScrollOffset: function(element) {var valueT = 0, valueL = 0;do {valueT += element.scrollTop || 0;valueL += element.scrollLeft || 0;element = element.parentNode;} while (element);return Element._returnOffset(valueL, valueT);},getOffsetParent: function(element) {if (element.offsetParent) return $(element.offsetParent);if (element == document.body) return $(element);while ((element = element.parentNode) && element != document.body && element != document)if (Element.getStyle(element, 'position') != 'static')return $(element);return $(document.body);},viewportOffset: function(forElement) {var valueT = 0, valueL = 0;var element = forElement;do {valueT += element.offsetTop || 0;valueL += element.offsetLeft || 0;if (element.offsetParent == document.body &&Element.getStyle(element, 'position') == 'absolute') break;} while (element = element.offsetParent);element = forElement;do {if (!Prototype.Browser.Opera || element.tagName == 'BODY') {valueT -= element.scrollTop || 0;valueL -= element.scrollLeft || 0;}} while (element = element.parentNode);return Element._returnOffset(valueL, valueT);},clonePosition: function(element, source) {var options = Object.extend({setLeft: true,setTop: true,setWidth: true,setHeight: true,offsetTop: 0,offsetLeft: 0}, arguments[2] || { });source = $(source);var p = source.viewportOffset();element = $(element);var delta = [0, 0];var parent = null;if (Element.getStyle(element, 'position') == 'absolute') {parent = element.getOffsetParent();delta = parent.viewportOffset();}if (parent == document.body) {delta[0] -= document.body.offsetLeft;delta[1] -= document.body.offsetTop;}if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';if (options.setWidth) element.style.width = source.offsetWidth + 'px';if (options.setHeight) element.style.height = source.offsetHeight + 'px';return element;}};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 (!document.createRange || Prototype.Browser.Opera) {Element.Methods.insert = function(element, insertions) {element = $(element);if (Object.isString(insertions) || Object.isNumber(insertions) ||Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))insertions = { bottom: insertions };var t = Element._insertionTranslations, content, position, pos, tagName;for (position in insertions) {content = insertions[position];position = position.toLowerCase();pos = t[position];if (content && content.toElement) content = content.toElement();if (Object.isElement(content)) {pos.insert(element, content);continue;}content = Object.toHTML(content);tagName = ((position == 'before' || position == 'after')? element.parentNode : element).tagName.toUpperCase();if (t.tags[tagName]) {var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());if (position == 'top' || position == 'after') fragments.reverse();fragments.each(pos.insert.curry(element));}else element.insertAdjacentHTML(pos.adjacency, content.stripScripts());content.evalScripts.bind(content).defer();}return element;};}if (Prototype.Browser.Opera) {Element.Methods._getStyle = Element.Methods.getStyle;Element.Methods.getStyle = function(element, style) {switch(style) {case 'left':case 'top':case 'right':case 'bottom':if (Element._getStyle(element, 'position') == 'static') return null;default: return Element._getStyle(element, style);}};Element.Methods._readAttribute = Element.Methods.readAttribute;Element.Methods.readAttribute = function(element, attribute) {if (attribute == 'title') return element.title;return Element._readAttribute(element, attribute);};}else if (Prototype.Browser.IE) {$w('positionedOffset getOffsetParent viewportOffset').each(function(method) {Element.Methods[method] = Element.Methods[method].wrap(function(proceed, element) {element = $(element);var position = element.getStyle('position');if (position != 'static') return proceed(element);element.setStyle({ position: 'relative' });var value = proceed(element);element.setStyle({ position: position });return value;});});Element.Methods.getStyle = function(element, style) {element = $(element);style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();var value = element.style[style];if (!value && element.currentStyle) value = element.currentStyle[style];if (style == 'opacity') {if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))if (value[1]) return parseFloat(value[1]) / 100;return 1.0;}if (value == 'auto') {if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))return element['offset' + style.capitalize()] + 'px';return null;}return value;};Element.Methods.setOpacity = function(element, value) {function stripAlpha(filter){return filter.replace(/alpha\([^\)]*\)/gi,'');}element = $(element);var currentStyle = element.currentStyle;if ((currentStyle && !currentStyle.hasLayout) ||(!currentStyle && element.style.zoom == 'normal'))element.style.zoom = 1;var filter = element.getStyle('filter'), style = element.style;if (value == 1 || value === '') {(filter = stripAlpha(filter)) ?style.filter = filter : style.removeAttribute('filter');return element;} else if (value < 0.00001) value = 0;style.filter = stripAlpha(filter) +'alpha(opacity=' + (value * 100) + ')';return element;};Element._attributeTranslations = {read: {names: {'class': 'className','for': 'htmlFor'},values: {_getAttr: function(element, attribute) {return element.getAttribute(attribute, 2);},_getAttrNode: function(element, attribute) {var node = element.getAttributeNode(attribute);return node ? node.value : "";},_getEv: function(element, attribute) {var attribute = element.getAttribute(attribute);return attribute ? attribute.toString().slice(23, -2) : null;},_flag: function(element, attribute) {return $(element).hasAttribute(attribute) ? attribute : null;},style: function(element) {return element.style.cssText.toLowerCase();},title: function(element) {return element.title;}}}};Element._attributeTranslations.write = {names: Object.clone(Element._attributeTranslations.read.names),values: {checked: function(element, value) {element.checked = !!value;},style: function(element, value) {element.style.cssText = value ? value : '';}}};Element._attributeTranslations.has = {};$w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +'encType maxLength readOnly longDesc').each(function(attr) {Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;Element._attributeTranslations.has[attr.toLowerCase()] = attr;});(function(v) {Object.extend(v, {href: v._getAttr,src: v._getAttr,type: v._getAttr,action: v._getAttrNode,disabled: v._flag,checked: v._flag,readonly: v._flag,multiple: v._flag,onload: v._getEv,onunload: v._getEv,onclick: v._getEv,ondblclick: v._getEv,onmousedown: v._getEv,onmouseup: v._getEv,onmouseover: v._getEv,onmousemove: v._getEv,onmouseout: v._getEv,onfocus: v._getEv,onblur: v._getEv,onkeypress: v._getEv,onkeydown: v._getEv,onkeyup: v._getEv,onsubmit: v._getEv,onreset: v._getEv,onselect: v._getEv,onchange: v._getEv});})(Element._attributeTranslations.read.values);}else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {Element.Methods.setOpacity = function(element, value) {element = $(element);element.style.opacity = (value == 1) ? 0.999999 :(value === '') ? '' : (value < 0.00001) ? 0 : value;return element;};}else if (Prototype.Browser.WebKit) {Element.Methods.setOpacity = function(element, value) {element = $(element);element.style.opacity = (value == 1 || value === '') ? '' :(value < 0.00001) ? 0 : value;if (value == 1)if(element.tagName == 'IMG' && element.width) {element.width++; element.width--;} else try {var n = document.createTextNode(' ');element.appendChild(n);element.removeChild(n);} catch (e) { }return element;};Element.Methods.cumulativeOffset = function(element) {var valueT = 0, valueL = 0;do {valueT += element.offsetTop || 0;valueL += element.offsetLeft || 0;if (element.offsetParent == document.body)if (Element.getStyle(element, 'position') == 'absolute') break;element = element.offsetParent;} while (element);return Element._returnOffset(valueL, valueT);};}if (Prototype.Browser.IE || Prototype.Browser.Opera) {Element.Methods.update = function(element, content) {element = $(element);if (content && content.toElement) content = content.toElement();if (Object.isElement(content)) return element.update().insert(content);content = Object.toHTML(content);var tagName = element.tagName.toUpperCase();if (tagName in Element._insertionTranslations.tags) {$A(element.childNodes).each(function(node) { element.removeChild(node) });Element._getContentFromAnonymousElement(tagName, content.stripScripts()).each(function(node) { element.appendChild(node) });}else element.innerHTML = content.stripScripts();content.evalScripts.bind(content).defer();return element;};}if (document.createElement('div').outerHTML) {Element.Methods.replace = function(element, content) {element = $(element);if (content && content.toElement) content = content.toElement();if (Object.isElement(content)) {element.parentNode.replaceChild(content, element);return element;}content = Object.toHTML(content);var parent = element.parentNode, tagName = parent.tagName.toUpperCase();if (Element._insertionTranslations.tags[tagName]) {var nextSibling = element.next();var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());parent.removeChild(element);if (nextSibling)fragments.each(function(node) { parent.insertBefore(node, nextSibling) });elsefragments.each(function(node) { parent.appendChild(node) });}else element.outerHTML = content.stripScripts();content.evalScripts.bind(content).defer();return element;};}Element._returnOffset = function(l, t) {var result = [l, t];result.left = l;result.top = t;return result;};Element._getContentFromAnonymousElement = function(tagName, html) {var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];div.innerHTML = t[0] + html + t[1];t[2].times(function() { div = div.firstChild });return $A(div.childNodes);};Element._insertionTranslations = {before: {adjacency: 'beforeBegin',insert: function(element, node) {element.parentNode.insertBefore(node, element);},initializeRange: function(element, range) {range.setStartBefore(element);}},top: {adjacency: 'afterBegin',insert: function(element, node) {element.insertBefore(node, element.firstChild);},initializeRange: function(element, range) {range.selectNodeContents(element);range.collapse(true);}},bottom: {adjacency: 'beforeEnd',insert: function(element, node) {element.appendChild(node);}},after: {adjacency: 'afterEnd',insert: function(element, node) {element.parentNode.insertBefore(node, element.nextSibling);},initializeRange: function(element, range) {range.setStartAfter(element);}},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() {this.bottom.initializeRange = this.top.initializeRange;Object.extend(this.tags, {THEAD: this.tags.TBODY,TFOOT: this.tags.TBODY,TH: this.tags.TD});}).call(Element._insertionTranslations);Element.Methods.Simulated = {hasAttribute: function(element, attribute) {attribute = Element._attributeTranslations.has[attribute] || attribute;var node = $(element).getAttributeNode(attribute);return node && node.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 Methods = { }, ByTag = Element.Methods.ByTag;var extend = Object.extend(function(element) {if (!element || element._extendedByPrototype ||element.nodeType != 1 || element == window) return element;var methods = Object.clone(Methods),tagName = element.tagName, property, value;if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);for (property in methods) {value = methods[property];if (Object.isFunction(value) && !(property in element))element[property] = value.methodize();}element._extendedByPrototype = Prototype.emptyFunction;return element;}, {refresh: function() {if (!Prototype.BrowserFeatures.ElementExtensions) {Object.extend(Methods, Element.Methods);Object.extend(Methods, Element.Methods.Simulated);}}});extend.refresh();return extend;})();Element.hasAttribute = function(element, attribute) {if (element.hasAttribute) return element.hasAttribute(attribute);return Element.Methods.Simulated.hasAttribute(element, attribute);};Element.addMethods = function(methods) {var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;if (!methods) {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 tagName = methods;methods = arguments[1];}if (!tagName) Object.extend(Element.Methods, methods || { });else {if (Object.isArray(tagName)) tagName.each(extend);else extend(tagName);}function extend(tagName) {tagName = tagName.toUpperCase();if (!Element.Methods.ByTag[tagName])Element.Methods.ByTag[tagName] = { };Object.extend(Element.Methods.ByTag[tagName], methods);}function copy(methods, destination, onlyIfAbsent) {onlyIfAbsent = onlyIfAbsent || false;for (var property in methods) {var value = methods[property];if (!Object.isFunction(value)) continue;if (!onlyIfAbsent || !(property in destination))destination[property] = value.methodize();}}function findDOMClass(tagName) {var klass;var trans = {"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 (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';if (window[klass]) return window[klass];klass = 'HTML' + tagName + 'Element';if (window[klass]) return window[klass];klass = 'HTML' + tagName.capitalize() + 'Element';if (window[klass]) return window[klass];window[klass] = { };window[klass].prototype = document.createElement(tagName).__proto__;return window[klass];}if (F.ElementExtensions) {copy(Element.Methods, HTMLElement.prototype);copy(Element.Methods.Simulated, HTMLElement.prototype, true);}if (F.SpecificElementExtensions) {for (var tag in Element.Methods.ByTag) {var klass = findDOMClass(tag);if (Object.isUndefined(klass)) continue;copy(T[tag], klass.prototype);}}Object.extend(Element, Element.Methods);delete Element.ByTag;if (Element.extend.refresh) Element.extend.refresh();Element.cache = { };};document.viewport = {getDimensions: function() {var dimensions = { };$w('width height').each(function(d) {var D = d.capitalize();dimensions[d] = self['inner' + D] ||(document.documentElement['client' + D] || document.body['client' + D]);});return dimensions;},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(expression) {this.expression = expression.strip();this.compileMatcher();},compileMatcher: function() {if (Prototype.BrowserFeatures.XPath && !(/(\[[\w-]*?:|:checked)/).test(this.expression))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, ps = Selector.patterns,x = Selector.xpath, le, m;if (Selector._cache[e]) {this.xpath = Selector._cache[e]; return;}this.matcher = ['.//*'];while (e && le != e && (/\S/).test(e)) {le = e;for (var i in ps) {if (m = e.match(ps[i])) {this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :new Template(x[i]).evaluate(m));e = e.replace(m[0], '');break;}}}this.xpath = this.matcher.join('');Selector._cache[this.expression] = this.xpath;},findElements: function(root) {root = root || document;if (this.xpath) return document._getElementsByXPath(this.xpath, root);return this.matcher(root);},match: function(element) {this.tokens = [];var e = this.expression, ps = Selector.patterns, as = Selector.assertions;var le, p, m;while (e && le !== e && (/\S/).test(e)) {le = e;for (var i in ps) {p = ps[i];if (m = e.match(p)) {if (as[i]) {this.tokens.push([i, Object.clone(m)]);e = e.replace(m[0], '');} else {return this.findElements(document).include(element);}}}}var match = true, name, matches;for (var i = 0, token; token = this.tokens[i]; i++) {name = token[0], matches = token[1];if (!Selector.assertions[name](element, matches)) {match = false; break;}}return match;},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(m) {if (m[1] == '*') return '';return "[local-name()='" + m[1].toLowerCase() +"' or local-name()='" + m[1].toUpperCase() + "']";},className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",id: "[@id='#{1}']",attrPresence: "[@#{1}]",attr: function(m) {m[3] = m[5] || m[6];return new Template(Selector.xpath.operators[m[2]]).evaluate(m);},pseudo: function(m) {var h = Selector.xpath.pseudos[m[1]];if (!h) return '';if (Object.isFunction(h)) return h(m);return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);},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(m) {var e = m[6], p = Selector.patterns,x = Selector.xpath, le, m, v;var exclusion = [];while (e && le != e && (/\S/).test(e)) {le = e;for (var i in p) {if (m = e.match(p[i])) {v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);exclusion.push("(" + v.substring(1, v.length - 1) + ")");e = e.replace(m[0], '');break;}}}return "[not(" + exclusion.join(" and ") + ")]";},'nth-child': function(m) {return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);},'nth-last-child': function(m) {return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);},'nth-of-type': function(m) {return Selector.xpath.pseudos.nth("position() ", m);},'nth-last-of-type': function(m) {return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);},'first-of-type': function(m) {m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);},'last-of-type': function(m) {m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);},'only-of-type': function(m) {var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);},nth: function(fragment, m) {var mm, formula = m[6], predicate;if (formula == 'even') formula = '2n+0';if (formula == 'odd') formula = '2n+1';if (mm = formula.match(/^(\d+)$/))return '[' + fragment + "= " + mm[1] + ']';if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) {if (mm[1] == "-") mm[1] = -1;var a = mm[1] ? Number(mm[1]) : 1;var b = mm[2] ? Number(mm[2]) : 0;predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +"((#{fragment} - #{b}) div #{a} >= 0)]";return new Template(predicate).evaluate({fragment: fragment, a: a, b: b });}}}},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 = false;',attr: function(m) {m[3] = (m[5] || m[6]);return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m);},pseudo: function(m) {if (m[6]) m[6] = m[6].replace(/"/g, '\\"');return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);},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(element, matches) {return matches[1].toUpperCase() == element.tagName.toUpperCase();},className: function(element, matches) {return Element.hasClassName(element, matches[1]);},id: function(element, matches) {return element.id === matches[1];},attrPresence: function(element, matches) {return Element.hasAttribute(element, matches[1]);},attr: function(element, matches) {var nodeValue = Element.readAttribute(element, matches[1]);return Selector.operators[matches[2]](nodeValue, matches[3]);}},handlers: {concat: function(a, b) {for (var i = 0, node; node = b[i]; i++)a.push(node);return a;},mark: function(nodes) {for (var i = 0, node; node = nodes[i]; i++)node._counted = true;return nodes;},unmark: function(nodes) {for (var i = 0, node; node = nodes[i]; i++)node._counted = undefined;return nodes;},index: function(parentNode, reverse, ofType) {parentNode._counted = true;if (reverse) {for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {var node = nodes[i];if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;}} else {for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;}},unique: function(nodes) {if (nodes.length == 0) return nodes;var results = [], n;for (var i = 0, l = nodes.length; i < l; i++)if (!(n = nodes[i])._counted) {n._counted = true;results.push(Element.extend(n));}return Selector.handlers.unmark(results);},descendant: function(nodes) {var h = Selector.handlers;for (var i = 0, results = [], node; node = nodes[i]; i++)h.concat(results, node.getElementsByTagName('*'));return results;},child: function(nodes) {var h = Selector.handlers;for (var i = 0, results = [], node; node = nodes[i]; i++) {for (var j = 0, children = [], child; child = node.childNodes[j]; j++)if (child.nodeType == 1 && child.tagName != '!') results.push(child);}return results;},adjacent: function(nodes) {for (var i = 0, results = [], node; node = nodes[i]; i++) {var next = this.nextElementSibling(node);if (next) results.push(next);}return results;},laterSibling: function(nodes) {var h = Selector.handlers;for (var i = 0, results = [], node; node = nodes[i]; i++)h.concat(results, Element.nextSiblings(node));return results;},nextElementSibling: function(node) {while (node = node.nextSibling)if (node.nodeType == 1) return node;return null;},previousElementSibling: function(node) {while (node = node.previousSibling)if (node.nodeType == 1) return node;return null;},tagName: function(nodes, root, tagName, combinator) {tagName = tagName.toUpperCase();var results = [], h = Selector.handlers;if (nodes) {if (combinator) {if (combinator == "descendant") {for (var i = 0, node; node = nodes[i]; i++)h.concat(results, node.getElementsByTagName(tagName));return results;} else nodes = this[combinator](nodes);if (tagName == "*") return nodes;}for (var i = 0, node; node = nodes[i]; i++)if (node.tagName.toUpperCase() == tagName) results.push(node);return results;} else return root.getElementsByTagName(tagName);},id: function(nodes, root, id, combinator) {var targetNode = $(id), h = Selector.handlers;if (!targetNode) return [];if (!nodes && root == document) return [targetNode];if (nodes) {if (combinator) {if (combinator == 'child') {for (var i = 0, node; node = nodes[i]; i++)if (targetNode.parentNode == node) return [targetNode];} else if (combinator == 'descendant') {for (var i = 0, node; node = nodes[i]; i++)if (Element.descendantOf(targetNode, node)) return [targetNode];} else if (combinator == 'adjacent') {for (var i = 0, node; node = nodes[i]; i++)if (Selector.handlers.previousElementSibling(targetNode) == node)return [targetNode];} else nodes = h[combinator](nodes);}for (var i = 0, node; node = nodes[i]; i++)if (node == targetNode) return [targetNode];return [];}return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];},className: function(nodes, root, className, combinator) {if (nodes && combinator) nodes = this[combinator](nodes);return Selector.handlers.byClassName(nodes, root, className);},byClassName: function(nodes, root, className) {if (!nodes) nodes = Selector.handlers.descendant([root]);var needle = ' ' + className + ' ';for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {nodeClassName = node.className;if (nodeClassName.length == 0) continue;if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))results.push(node);}return results;},attrPresence: function(nodes, root, attr) {if (!nodes) nodes = root.getElementsByTagName("*");var results = [];for (var i = 0, node; node = nodes[i]; i++)if (Element.hasAttribute(node, attr)) results.push(node);return results;},attr: function(nodes, root, attr, value, operator) {if (!nodes) nodes = root.getElementsByTagName("*");var handler = Selector.operators[operator], results = [];for (var i = 0, node; node = nodes[i]; i++) {var nodeValue = Element.readAttribute(node, attr);if (nodeValue === null) continue;if (handler(nodeValue, value)) results.push(node);}return results;},pseudo: function(nodes, name, value, root, combinator) {if (nodes && combinator) nodes = this[combinator](nodes);if (!nodes) nodes = root.getElementsByTagName("*");return Selector.pseudos[name](nodes, value, root);}},pseudos: {'first-child': function(nodes, value, root) {for (var i = 0, results = [], node; node = nodes[i]; i++) {if (Selector.handlers.previousElementSibling(node)) continue;results.push(node);}return results;},'last-child': function(nodes, value, root) {for (var i = 0, results = [], node; node = nodes[i]; i++) {if (Selector.handlers.nextElementSibling(node)) continue;results.push(node);}return results;},'only-child': function(nodes, value, root) {var h = Selector.handlers;for (var i = 0, results = [], node; node = nodes[i]; i++)if (!h.previousElementSibling(node) && !h.nextElementSibling(node))results.push(node);return results;},'nth-child': function(nodes, formula, root) {return Selector.pseudos.nth(nodes, formula, root);},'nth-last-child': function(nodes, formula, root) {return Selector.pseudos.nth(nodes, formula, root, true);},'nth-of-type': function(nodes, formula, root) {return Selector.pseudos.nth(nodes, formula, root, false, true);},'nth-last-of-type': function(nodes, formula, root) {return Selector.pseudos.nth(nodes, formula, root, true, true);},'first-of-type': function(nodes, formula, root) {return Selector.pseudos.nth(nodes, "1", root, false, true);},'last-of-type': function(nodes, formula, root) {return Selector.pseudos.nth(nodes, "1", root, true, true);},'only-of-type': function(nodes, formula, root) {var p = Selector.pseudos;return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);},getIndices: function(a, b, total) {if (a == 0) return b > 0 ? [b] : [];return $R(1, total).inject([], function(memo, i) {if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);return memo;});},nth: function(nodes, formula, root, reverse, ofType) {if (nodes.length == 0) return [];if (formula == 'even') formula = '2n+0';if (formula == 'odd') formula = '2n+1';var h = Selector.handlers, results = [], indexed = [], m;h.mark(nodes);for (var i = 0, node; node = nodes[i]; i++) {if (!node.parentNode._counted) {h.index(node.parentNode, reverse, ofType);indexed.push(node.parentNode);}}if (formula.match(/^\d+$/)) {formula = Number(formula);for (var i = 0, node; node = nodes[i]; i++)if (node.nodeIndex == formula) results.push(node);} else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) {if (m[1] == "-") m[1] = -1;var a = m[1] ? Number(m[1]) : 1;var b = m[2] ? Number(m[2]) : 0;var indices = Selector.pseudos.getIndices(a, b, nodes.length);for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {for (var j = 0; j < l; j++)if (node.nodeIndex == indices[j]) results.push(node);}}h.unmark(nodes);h.unmark(indexed);return results;},'empty': function(nodes, value, root) {for (var i = 0, results = [], node; node = nodes[i]; i++) {if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue;results.push(node);}return results;},'not': function(nodes, selector, root) {var h = Selector.handlers, selectorType, m;var exclusions = new Selector(selector).findElements(root);h.mark(exclusions);for (var i = 0, results = [], node; node = nodes[i]; i++)if (!node._counted) results.push(node);h.unmark(exclusions);return results;},'enabled': function(nodes, value, root) {for (var i = 0, results = [], node; node = nodes[i]; i++)if (!node.disabled) results.push(node);return results;},'disabled': function(nodes, value, root) {for (var i = 0, results = [], node; node = nodes[i]; i++)if (node.disabled) results.push(node);return results;},'checked': function(nodes, value, root) {for (var i = 0, results = [], node; node = nodes[i]; i++)if (node.checked) results.push(node);return results;}},operators: {'=': function(nv, v) { return nv == v; },'!=': function(nv, v) { return nv != v; },'^=': function(nv, v) { return nv.startsWith(v); },'$=': function(nv, v) { return nv.endsWith(v); },'*=': function(nv, v) { return nv.include(v); },'~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },'|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }},matchElements: function(elements, expression) {var matches = new Selector(expression).findElements(), h = Selector.handlers;h.mark(matches);for (var i = 0, results = [], element; element = elements[i]; i++)if (element._counted) results.push(element);h.unmark(matches);return results;},findElement: function(elements, expression, index) {if (Object.isNumber(expression)) {index = expression; expression = false;}return Selector.matchElements(elements, expression || '*')[index || 0];},findChildElements: function(element, expressions) {var exprs = expressions.join(','), expressions = [];exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {expressions.push(m[1].strip());});var results = [], h = Selector.handlers;for (var i = 0, l = expressions.length, selector; i < l; i++) {selector = new Selector(expressions[i].strip());h.concat(results, selector.findElements(element));}return (l > 1) ? h.unique(results) : results;}});function $$() {return Selector.findChildElements(document, $A(arguments));}var Form = {reset: function(form) {$(form).reset();return form;},serializeElements: function(elements, options) {if (typeof options != 'object') options = { hash: !!options };else if (options.hash === undefined) options.hash = true;var key, value, submitted = false, submit = options.submit;var data = elements.inject({ }, function(result, element) {if (!element.disabled && element.name) {key = element.name; value = $(element).getValue();if (value != null && (element.type != 'submit' || (!submitted &&submit !== false && (!submit || key == submit) && (submitted = true)))) {if (key in result) {if (!Object.isArray(result[key])) result[key] = [result[key]];result[key].push(value);}else result[key] = value;}}return result;});return options.hash ? data : Object.toQueryString(data);}};Form.Methods = {serialize: function(form, options) {return Form.serializeElements(Form.getElements(form), options);},getElements: function(form) {return $A($(form).getElementsByTagName('*')).inject([],function(elements, child) {if (Form.Element.Serializers[child.tagName.toLowerCase()])elements.push(Element.extend(child));return elements;});},getInputs: function(form, typeName, name) {form = $(form);var inputs = form.getElementsByTagName('input');if (!typeName && !name) return $A(inputs).map(Element.extend);for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {var input = inputs[i];if ((typeName && input.type != typeName) || (name && input.name != name))continue;matchingInputs.push(Element.extend(input));}return matchingInputs;},disable: function(form) {form = $(form);Form.getElements(form).invoke('disable');return form;},enable: function(form) {form = $(form);Form.getElements(form).invoke('enable');return form;},findFirstElement: function(form) {var elements = $(form).getElements().findAll(function(element) {return 'hidden' != element.type && !element.disabled;});var firstByIndex = elements.findAll(function(element) {return element.hasAttribute('tabIndex') && element.tabIndex >= 0;}).sortBy(function(element) { return element.tabIndex }).first();return firstByIndex ? firstByIndex : elements.find(function(element) {return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());});},focusFirstElement: function(form) {form = $(form);form.findFirstElement().activate();return form;},request: function(form, options) {form = $(form), options = Object.clone(options || { });var params = options.parameters, action = form.readAttribute('action') || '';if (action.blank()) action = window.location.href;options.parameters = form.serialize(true);if (params) {if (Object.isString(params)) params = params.toQueryParams();Object.extend(options.parameters, params);}if (form.hasAttribute('method') && !options.method)options.method = form.method;return new Ajax.Request(action, options);}};/*--------------------------------------------------------------------------*/Form.Element = {focus: function(element) {$(element).focus();return element;},select: function(element) {$(element).select();return element;}};Form.Element.Methods = {serialize: function(element) {element = $(element);if (!element.disabled && element.name) {var value = element.getValue();if (value != undefined) {var pair = { };pair[element.name] = value;return Object.toQueryString(pair);}}return '';},getValue: function(element) {element = $(element);var method = element.tagName.toLowerCase();return Form.Element.Serializers[method](element);},setValue: function(element, value) {element = $(element);var method = element.tagName.toLowerCase();Form.Element.Serializers[method](element, value);return element;},clear: function(element) {$(element).value = '';return element;},present: function(element) {return $(element).value != '';},activate: function(element) {element = $(element);try {element.focus();if (element.select && (element.tagName.toLowerCase() != 'input' ||!['button', 'reset', 'submit'].include(element.type)))element.select();} catch (e) { }return element;},disable: function(element) {element = $(element);element.blur();element.disabled = true;return element;},enable: function(element) {element = $(element);element.disabled = false;return element;}};/*--------------------------------------------------------------------------*/var Field = Form.Element;var $F = Form.Element.Methods.getValue;/*--------------------------------------------------------------------------*/Form.Element.Serializers = {input: function(element, value) {switch (element.type.toLowerCase()) {case 'checkbox':case 'radio':return Form.Element.Serializers.inputSelector(element, value);default:return Form.Element.Serializers.textarea(element, value);}},inputSelector: function(element, value) {if (value === undefined) return element.checked ? element.value : null;else element.checked = !!value;},textarea: function(element, value) {if (value === undefined) return element.value;else element.value = value;},select: function(element, index) {if (index === undefined)return this[element.type == 'select-one' ?'selectOne' : 'selectMany'](element);else {var opt, value, single = !Object.isArray(index);for (var i = 0, length = element.length; i < length; i++) {opt = element.options[i];value = this.optionValue(opt);if (single) {if (value == index) {opt.selected = true;return;}}else opt.selected = index.include(value);}}},selectOne: function(element) {var index = element.selectedIndex;return index >= 0 ? this.optionValue(element.options[index]) : null;},selectMany: function(element) {var values, length = element.length;if (!length) return null;for (var i = 0, values = []; i < length; i++) {var opt = element.options[i];if (opt.selected) values.push(this.optionValue(opt));}return values;},optionValue: function(opt) {return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;}};/*--------------------------------------------------------------------------*/Abstract.TimedObserver = Class.create(PeriodicalExecuter, {initialize: function($super, element, frequency, callback) {$super(callback, frequency);this.element = $(element);this.lastValue = this.getValue();},execute: function() {var value = this.getValue();if (Object.isString(this.lastValue) && Object.isString(value) ?this.lastValue != value : String(this.lastValue) != String(value)) {this.callback(this.element, value);this.lastValue = value;}}});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(element, callback) {this.element = $(element);this.callback = callback;this.lastValue = this.getValue();if (this.element.tagName.toLowerCase() == 'form')this.registerFormCallbacks();elsethis.registerCallback(this.element);},onElementEvent: function() {var value = this.getValue();if (this.lastValue != value) {this.callback(this.element, value);this.lastValue = value;}},registerFormCallbacks: function() {Form.getElements(this.element).each(this.registerCallback, this);},registerCallback: function(element) {if (element.type) {switch (element.type.toLowerCase()) {case 'checkbox':case 'radio':Event.observe(element, 'click', this.onElementEvent.bind(this));break;default:Event.observe(element, '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(event) {var element;switch(event.type) {case 'mouseover': element = event.fromElement; break;case 'mouseout': element = event.toElement; break;default: return null;}return Element.extend(element);}});Event.Methods = (function() {var isButton;if (Prototype.Browser.IE) {var buttonMap = { 0: 1, 1: 4, 2: 2 };isButton = function(event, code) {return event.button == buttonMap[code];};} else if (Prototype.Browser.WebKit) {isButton = function(event, code) {switch (code) {case 0: return event.which == 1 && !event.metaKey;case 1: return event.which == 1 && event.metaKey;default: return false;}};} else {isButton = function(event, code) {return event.which ? (event.which === code + 1) : (event.button === code);};}return {isLeftClick: function(event) { return isButton(event, 0) },isMiddleClick: function(event) { return isButton(event, 1) },isRightClick: function(event) { return isButton(event, 2) },element: function(event) {var node = Event.extend(event).target;return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node);},findElement: function(event, expression) {var element = Event.element(event);return element.match(expression) ? element : element.up(expression);},pointer: function(event) {return {x: event.pageX || (event.clientX +(document.documentElement.scrollLeft || document.body.scrollLeft)),y: event.pageY || (event.clientY +(document.documentElement.scrollTop || document.body.scrollTop))};},pointerX: function(event) { return Event.pointer(event).x },pointerY: function(event) { return Event.pointer(event).y },stop: function(event) {Event.extend(event);event.preventDefault();event.stopPropagation();event.stopped = true;}};})();Event.extend = (function() {var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {m[name] = Event.Methods[name].methodize();return m;});if (Prototype.Browser.IE) {Object.extend(methods, {stopPropagation: function() { this.cancelBubble = true },preventDefault: function() { this.returnValue = false },inspect: function() { return "[object Event]" }});return function(event) {if (!event) return false;if (event._extendedByPrototype) return event;event._extendedByPrototype = Prototype.emptyFunction;var pointer = Event.pointer(event);Object.extend(event, {target: event.srcElement,relatedTarget: Event.relatedTarget(event),pageX: pointer.x,pageY: pointer.y});return Object.extend(event, methods);};} else {Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__;Object.extend(Event.prototype, methods);return Prototype.K;}})();Object.extend(Event, (function() {var cache = Event.cache;function getEventID(element) {if (element._eventID) return element._eventID;arguments.callee.id = arguments.callee.id || 1;return element._eventID = ++arguments.callee.id;}function getDOMEventName(eventName) {if (eventName && eventName.include(':')) return "dataavailable";return eventName;}function getCacheForID(id) {return cache[id] = cache[id] || { };}function getWrappersForEventName(id, eventName) {var c = getCacheForID(id);return c[eventName] = c[eventName] || [];}function createWrapper(element, eventName, handler) {var id = getEventID(element);var c = getWrappersForEventName(id, eventName);if (c.pluck("handler").include(handler)) return false;var wrapper = function(event) {if (!Event || !Event.extend ||(event.eventName && event.eventName != eventName))return false;Event.extend(event);handler.call(element, event)};wrapper.handler = handler;c.push(wrapper);return wrapper;}function findWrapper(id, eventName, handler) {var c = getWrappersForEventName(id, eventName);return c.find(function(wrapper) { return wrapper.handler == handler });}function destroyWrapper(id, eventName, handler) {var c = getCacheForID(id);if (!c[eventName]) return false;c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));}function destroyCache() {for (var id in cache)for (var eventName in cache[id])cache[id][eventName] = null;}if (window.attachEvent) {window.attachEvent("onunload", destroyCache);}return {observe: function(element, eventName, handler) {element = $(element);var name = getDOMEventName(eventName);var wrapper = createWrapper(element, eventName, handler);if (!wrapper) return element;if (element.addEventListener) {element.addEventListener(name, wrapper, false);} else {element.attachEvent("on" + name, wrapper);}return element;},stopObserving: function(element, eventName, handler) {element = $(element);var id = getEventID(element), name = getDOMEventName(eventName);if (!handler && eventName) {getWrappersForEventName(id, eventName).each(function(wrapper) {element.stopObserving(eventName, wrapper.handler);});return element;} else if (!eventName) {Object.keys(getCacheForID(id)).each(function(eventName) {element.stopObserving(eventName);});return element;}var wrapper = findWrapper(id, eventName, handler);if (!wrapper) return element;if (element.removeEventListener) {element.removeEventListener(name, wrapper, false);} else {element.detachEvent("on" + name, wrapper);}destroyWrapper(id, eventName, handler);return element;},fire: function(element, eventName, memo) {element = $(element);if (element == document && document.createEvent && !element.dispatchEvent)element = document.documentElement;if (document.createEvent) {var event = document.createEvent("HTMLEvents");event.initEvent("dataavailable", true, true);} else {var event = document.createEventObject();event.eventType = "ondataavailable";}event.eventName = eventName;event.memo = memo || { };if (document.createEvent) {element.dispatchEvent(event);} else {element.fireEvent(event.eventType, event);}return event;}};})());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()});(function() {/* Support for the DOMContentLoaded event is based on work by Dan Webb,Matthias Miller, Dean Edwards and John Resig. */var timer, fired = false;function fireContentLoadedEvent() {if (fired) return;if (timer) window.clearInterval(timer);document.fire("dom:loaded");fired = true;}if (document.addEventListener) {if (Prototype.Browser.WebKit) {timer = window.setInterval(function() {if (/loaded|complete/.test(document.readyState))fireContentLoadedEvent();}, 0);Event.observe(window, "load", fireContentLoadedEvent);} else {document.addEventListener("DOMContentLoaded",fireContentLoadedEvent, false);}} else {document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");$("__onDOMContentLoaded").onreadystatechange = function() {if (this.readyState == "complete") {this.onreadystatechange = null;fireContentLoadedEvent();}};}})();Hash.toQueryString = Object.toQueryString;var Toggle = { display: Element.toggle };Element.Methods.childOf = Element.Methods.descendantOf;var Insertion = {Before: function(element, content) {return Element.insert(element, {before:content});},Top: function(element, content) {return Element.insert(element, {top:content});},Bottom: function(element, content) {return Element.insert(element, {bottom:content});},After: function(element, content) {return Element.insert(element, {after:content});}};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(element, x, y) {if (this.includeScrollOffsets)return this.withinIncludingScrolloffsets(element, x, y);this.xcomp = x;this.ycomp = y;this.offset = Element.cumulativeOffset(element);return (y >= this.offset[1] &&y < this.offset[1] + element.offsetHeight &&x >= this.offset[0] &&x < this.offset[0] + element.offsetWidth);},withinIncludingScrolloffsets: function(element, x, y) {var offsetcache = Element.cumulativeScrollOffset(element);this.xcomp = x + offsetcache[0] - this.deltaX;this.ycomp = y + offsetcache[1] - this.deltaY;this.offset = Element.cumulativeOffset(element);return (this.ycomp >= this.offset[1] &&this.ycomp < this.offset[1] + element.offsetHeight &&this.xcomp >= this.offset[0] &&this.xcomp < this.offset[0] + element.offsetWidth);},overlap: function(mode, element) {if (!mode) return 0;if (mode == 'vertical')return ((this.offset[1] + element.offsetHeight) - this.ycomp) /element.offsetHeight;if (mode == 'horizontal')return ((this.offset[0] + element.offsetWidth) - this.xcomp) /element.offsetWidth;},cumulativeOffset: Element.Methods.cumulativeOffset,positionedOffset: Element.Methods.positionedOffset,absolutize: function(element) {Position.prepare();return Element.absolutize(element);},relativize: function(element) {Position.prepare();return Element.relativize(element);},realOffset: Element.Methods.cumulativeScrollOffset,offsetParent: Element.Methods.getOffsetParent,page: Element.Methods.viewportOffset,clone: function(source, target, options) {options = options || { };return Element.clonePosition(target, source, options);}};if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){function iter(name) {return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";}instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?function(element, className) {className = className.toString().strip();var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);return cond ? document._getElementsByXPath('.//*' + cond, element) : [];} : function(element, className) {className = className.toString().strip();var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);if (!classNames && !className) return elements;var nodes = $(element).getElementsByTagName('*');className = ' ' + className + ' ';for (var i = 0, child, cn; child = nodes[i]; i++) {if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||(classNames && classNames.all(function(name) {return !name.toString().blank() && cn.include(' ' + name + ' ');}))))elements.push(Element.extend(child));}return elements;};return function(className, parentElement) {return $(parentElement || document.body).getElementsByClassName(className);};}(Element.Methods);/*--------------------------------------------------------------------------*/Element.ClassNames = Class.create();Element.ClassNames.prototype = {initialize: function(element) {this.element = $(element);},_each: function(iterator) {this.element.className.split(/\s+/).select(function(name) {return name.length > 0;})._each(iterator);},set: function(className) {this.element.className = className;},add: function(classNameToAdd) {if (this.include(classNameToAdd)) return;this.set($A(this).concat(classNameToAdd).join(' '));},remove: function(classNameToRemove) {if (!this.include(classNameToRemove)) return;this.set($A(this).without(classNameToRemove).join(' '));},toString: function() {return $A(this).join(' ');}};Object.extend(Element.ClassNames.prototype, Enumerable);/*--------------------------------------------------------------------------*/Element.addMethods();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({fontSize: (percent/100) + 'em'});if (Prototype.Browser.WebKit) window.scrollBy(0,0);return element;};Element.getInlineOpacity = function(element){return $(element).style.opacity || '';};Element.forceRerendering = function(element) {try {element = $(element);var n = document.createTextNode(' ');element.appendChild(n);element.removeChild(n);} catch(e) { }};/*--------------------------------------------------------------------------*/var Effect = {_elementDoesNotExistError: {name: 'ElementDoesNotExistError',message: 'The specified DOM element does not exist, but is required for this effect to operate'},Transitions: {linear: Prototype.K,sinoidal: function(pos) {return (-Math.cos(pos*Math.PI)/2) + 0.5;},reverse: function(pos) {return 1-pos;},flicker: function(pos) {var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;return pos > 1 ? 1 : pos;},wobble: function(pos) {return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;},pulse: function(pos, pulses) {pulses = pulses || 5;return (((pos % (1/pulses)) * pulses).round() == 0 ?((pos * pulses * 2) - (pos * pulses * 2).floor()) :1 - ((pos * pulses * 2) - (pos * pulses * 2).floor()));},spring: function(pos) {return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));},none: function(pos) {return 0;},full: function(pos) {return 1;}},DefaultOptions: {duration: 1.0, // secondsfps: 100, // 100= assume 66fps max.sync: false, // true for combiningfrom: 0.0,to: 1.0,delay: 0.0,queue: 'parallel'},tagifyText: function(element) {var tagifyStyle = 'position:relative';if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';element = $(element);$A(element.childNodes).each( function(child) {if (child.nodeType==3) {child.nodeValue.toArray().each( function(character) {element.insertBefore(new Element('span', {style: tagifyStyle}).update(character == ' ' ? String.fromCharCode(160) : character),child);});Element.remove(child);}});},multiple: function(element, effect) {var elements;if (((typeof element == 'object') ||Object.isFunction(element)) &&(element.length))elements = element;elseelements = $(element).childNodes;var options = Object.extend({speed: 0.1,delay: 0.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);}};Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;/* ------------- core effects ------------- */Effect.ScopedQueue = Class.create(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 = Object.isString(effect.options.queue) ?effect.options.queue : effect.options.queue.position;switch(position) {case 'front':// move unstarted effects after this effectthis.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {e.startOn += effect.finishOn;e.finishOn += effect.finishOn;});break;case 'with-last':timestamp = this.effects.pluck('startOn').max() || timestamp;break;case 'end':// start effect after last queued effect has finishedtimestamp = this.effects.pluck('finishOn').max() || timestamp;break;}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), 15);},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();for(var i=0, len=this.effects.length;i<len;i++)this.effects[i] && this.effects[i].loop(timePos);}});Effect.Queues = {instances: $H(),get: function(queueName) {if (!Object.isString(queueName)) return queueName;return this.instances.get(queueName) ||this.instances.set(queueName, new Effect.ScopedQueue());}};Effect.Queue = Effect.Queues.get('global');Effect.Base = Class.create({position: null,start: function(options) {function codeForEvent(options,eventName){return ((options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +(options[eventName] ? 'this.options.'+eventName+'(this);' : ''));}if (options && options.transition === false) options.transition = Effect.Transitions.linear;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.fromToDelta = this.options.to-this.options.from;this.totalTime = this.finishOn-this.startOn;this.totalFrames = this.options.fps*this.options.duration;eval('this.render = function(pos){ '+'if (this.state=="idle"){this.state="running";'+codeForEvent(this.options,'beforeSetup')+(this.setup ? 'this.setup();':'')+codeForEvent(this.options,'afterSetup')+'};if (this.state=="running"){'+'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+'this.position=pos;'+codeForEvent(this.options,'beforeUpdate')+(this.update ? 'this.update(pos);':'')+codeForEvent(this.options,'afterUpdate')+'}}');this.event('beforeStart');if (!this.options.sync)Effect.Queues.get(Object.isString(this.options.queue) ?'global' : this.options.queue.scope).add(this);},loop: function(timePos) {if (timePos >= this.startOn) {if (timePos >= this.finishOn) {this.render(1.0);this.cancel();this.event('beforeFinish');if (this.finish) this.finish();this.event('afterFinish');return;}var pos = (timePos - this.startOn) / this.totalTime,frame = (pos * this.totalFrames).round();if (frame > this.currentFrame) {this.render(pos);this.currentFrame = frame;}}},cancel: function() {if (!this.options.sync)Effect.Queues.get(Object.isString(this.options.queue) ?'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() {var data = $H();for(property in this)if (!Object.isFunction(this[property])) data.set(property, this[property]);return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';}});Effect.Parallel = Class.create(Effect.Base, {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.0);effect.cancel();effect.event('beforeFinish');if (effect.finish) effect.finish(position);effect.event('afterFinish');});}});Effect.Tween = Class.create(Effect.Base, {initialize: function(object, from, to) {object = Object.isString(object) ? $(object) : object;var args = $A(arguments), method = args.last(),options = args.length == 5 ? args[3] : null;this.method = Object.isFunction(method) ? method.bind(object) :Object.isFunction(object[method]) ? object[method].bind(object) :function(value) { object[method] = value };this.start(Object.extend({ from: from, to: to }, options || { }));},update: function(position) {this.method(position);}});Effect.Event = Class.create(Effect.Base, {initialize: function() {this.start(Object.extend({ duration: 0 }, arguments[0] || { }));},update: Prototype.emptyFunction});Effect.Opacity = Class.create(Effect.Base, {initialize: function(element) {this.element = $(element);if (!this.element) throw(Effect._elementDoesNotExistError);// make this work on IE on elements without 'layout'if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))this.element.setStyle({zoom: 1});var options = Object.extend({from: this.element.getOpacity() || 0.0,to: 1.0}, arguments[1] || { });this.start(options);},update: function(position) {this.element.setOpacity(position);}});Effect.Move = Class.create(Effect.Base, {initialize: function(element) {this.element = $(element);if (!this.element) throw(Effect._elementDoesNotExistError);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).round() + 'px',top: (this.options.y * position + this.originalTop).round() + 'px'});}});// for backwards compatibilityEffect.MoveBy = function(element, toTop, toLeft) {return new Effect.Move(element,Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));};Effect.Scale = Class.create(Effect.Base, {initialize: function(element, percent) {this.element = $(element);if (!this.element) throw(Effect._elementDoesNotExistError);var options = Object.extend({scaleX: true,scaleY: true,scaleContent: true,scaleFromCenter: false,scaleMode: 'box', // 'box' or 'contents' or { } with provided valuesscaleFrom: 100.0,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','%','pt'].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.0) + (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.round() + 'px';if (this.options.scaleY) d.height = height.round() + '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(Effect.Base, {initialize: function(element) {this.element = $(element);if (!this.element) throw(Effect._elementDoesNotExistError);var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });this.start(options);},setup: function() {// Prevent executing on elements not in the layout flowif (this.element.getStyle('display')=='none') { this.cancel(); return; }// Disable background image during the effectthis.oldStyle = { };if (!this.options.keepBackgroundImage) {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');// init color calculations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+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });},finish: function() {this.element.setStyle(Object.extend(this.oldStyle, {backgroundColor: this.options.restorecolor}));}});Effect.ScrollTo = function(element) {var options = arguments[1] || { },scrollOffsets = document.viewport.getScrollOffsets(),elementOffsets = $(element).cumulativeOffset(),max = (window.height || document.body.scrollHeight) - document.viewport.getHeight();if (options.offset) elementOffsets[1] += options.offset;return new Effect.Tween(null,scrollOffsets.top,elementOffsets[1] > max ? max : elementOffsets[1],options,function(p){ scrollTo(scrollOffsets.left, p.round()) });};/* ------------- combination effects ------------- */Effect.Fade = function(element) {element = $(element);var oldOpacity = element.getInlineOpacity();var options = Object.extend({from: element.getOpacity() || 1.0,to: 0.0,afterFinishInternal: function(effect) {if (effect.options.to!=0) return;effect.element.hide().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.0 : element.getOpacity() || 0.0),to: 1.0,// force Safari to render floated elements properlyafterFinishInternal: function(effect) {effect.element.forceRerendering();},beforeSetup: function(effect) {effect.element.setOpacity(effect.options.from).show();}}, arguments[1] || { });return new Effect.Opacity(element,options);};Effect.Puff = function(element) {element = $(element);var oldStyle = {opacity: element.getInlineOpacity(),position: element.getStyle('position'),top: element.style.top,left: element.style.left,width: element.style.width,height: element.style.height};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.0 } ) ],Object.extend({ duration: 1.0,beforeSetupInternal: function(effect) {Position.absolutize(effect.effects[0].element)},afterFinishInternal: function(effect) {effect.effects[0].element.hide().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().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().setStyle({height: '0px'}).show();},afterFinishInternal: function(effect) {effect.element.undoClipping();}}, arguments[1] || { }));};Effect.SwitchOff = function(element) {element = $(element);var oldOpacity = element.getInlineOpacity();return new Effect.Appear(element, Object.extend({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().makeClipping();},afterFinishInternal: function(effect) {effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});}})}}, arguments[1] || { }));};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.0 }) ],Object.extend({ duration: 0.5,beforeSetup: function(effect) {effect.effects[0].element.makePositioned();},afterFinishInternal: function(effect) {effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);}}, arguments[1] || { }));};Effect.Shake = function(element) {element = $(element);var options = Object.extend({distance: 20,duration: 0.5}, arguments[1] || {});var distance = parseFloat(options.distance);var split = parseFloat(options.duration) / 10.0;var oldStyle = {top: element.getStyle('top'),left: element.getStyle('left') };return new Effect.Move(element,{ x: distance, y: 0, duration: split, afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {new Effect.Move(effect.element,{ x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {effect.element.undoPositioned().setStyle(oldStyle);}}) }}) }}) }}) }}) }});};Effect.SlideDown = function(element) {element = $(element).cleanWhitespace();// SlideDown need to have the content of the element wrapped in a container element with fixed height!var oldInnerBottom = element.down().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.down().makePositioned();if (window.opera) effect.element.setStyle({top: ''});effect.element.makeClipping().setStyle({height: '0px'}).show();},afterUpdateInternal: function(effect) {effect.element.down().setStyle({bottom:(effect.dims[0] - effect.element.clientHeight) + 'px' });},afterFinishInternal: function(effect) {effect.element.undoClipping().undoPositioned();effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }}, arguments[1] || { }));};Effect.SlideUp = function(element) {element = $(element).cleanWhitespace();var oldInnerBottom = element.down().getStyle('bottom');var elementDimensions = element.getDimensions();return new Effect.Scale(element, window.opera ? 0 : 1,Object.extend({ scaleContent: false,scaleX: false,scaleMode: 'box',scaleFrom: 100,scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},restoreAfterFinish: true,afterSetup: function(effect) {effect.element.makePositioned();effect.element.down().makePositioned();if (window.opera) effect.element.setStyle({top: ''});effect.element.makeClipping().show();},afterUpdateInternal: function(effect) {effect.element.down().setStyle({bottom:(effect.dims[0] - effect.element.clientHeight) + 'px' });},afterFinishInternal: function(effect) {effect.element.hide().undoClipping().undoPositioned();effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});}}, arguments[1] || { }));};// Bug in opera makes the TD containing this element expand for a instance after finishEffect.Squish = function(element) {return new Effect.Scale(element, window.opera ? 1 : 0, {restoreAfterFinish: true,beforeSetup: function(effect) {effect.element.makeClipping();},afterFinishInternal: function(effect) {effect.element.hide().undoClipping();}});};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;}return new Effect.Move(element, {x: initialMoveX,y: initialMoveY,duration: 0.01,beforeSetup: function(effect) {effect.element.hide().makeClipping().makePositioned();},afterFinishInternal: function(effect) {new Effect.Parallel([ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.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'}).show();},afterFinishInternal: function(effect) {effect.effects[0].element.undoClipping().undoPositioned().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;}return new Effect.Parallel([ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, 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().makeClipping();},afterFinishInternal: function(effect) {effect.effects[0].element.hide().undoClipping().undoPositioned().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, options.pulses)) };reverser.bind(transition);return new Effect.Opacity(element,Object.extend(Object.extend({ duration: 2.0, 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();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().undoClipping().setStyle(oldStyle);} });}}, arguments[1] || { }));};Effect.Morph = Class.create(Effect.Base, {initialize: function(element) {this.element = $(element);if (!this.element) throw(Effect._elementDoesNotExistError);var options = Object.extend({style: { }}, arguments[1] || { });if (!Object.isString(options.style)) this.style = $H(options.style);else {if (options.style.include(':'))this.style = options.style.parseStyle();else {this.element.addClassName(options.style);this.style = $H(this.element.getStyles());this.element.removeClassName(options.style);var css = this.element.getStyles();this.style = this.style.reject(function(style) {return style.value == css[style.key];});options.afterFinishInternal = function(effect) {effect.element.addClassName(effect.options.style);effect.transforms.each(function(transform) {effect.element.style[transform.style] = '';});}}}this.start(options);},setup: function(){function parseColor(color){if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';color = color.parseColor();return $R(0,2).map(function(i){return parseInt( color.slice(i*2+1,i*2+3), 16 )});}this.transforms = this.style.map(function(pair){var property = pair[0], value = pair[1], unit = null;if (value.parseColor('#zzzzzz') != '#zzzzzz') {value = value.parseColor();unit = 'color';} else if (property == 'opacity') {value = parseFloat(value);if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))this.element.setStyle({zoom: 1});} else if (Element.CSS_LENGTH.test(value)) {var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);value = parseFloat(components[1]);unit = (components.length == 3) ? components[2] : null;}var originalValue = this.element.getStyle(property);return {style: property.camelize(),originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),targetValue: unit=='color' ? parseColor(value) : value,unit: unit};}.bind(this)).reject(function(transform){return ((transform.originalValue == transform.targetValue) ||(transform.unit != 'color' &&(isNaN(transform.originalValue) || isNaN(transform.targetValue))))});},update: function(position) {var style = { }, transform, i = this.transforms.length;while(i--)style[(transform = this.transforms[i]).style] =transform.unit=='color' ? '#'+(Math.round(transform.originalValue[0]+(transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +(Math.round(transform.originalValue[1]+(transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +(Math.round(transform.originalValue[2]+(transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :(transform.originalValue +(transform.targetValue - transform.originalValue) * position).toFixed(3) +(transform.unit === null ? '' : transform.unit);this.element.setStyle(style, true);}});Effect.Transform = Class.create({initialize: function(tracks){this.tracks = [];this.options = arguments[1] || { };this.addTracks(tracks);},addTracks: function(tracks){tracks.each(function(track){track = $H(track);var data = track.values().first();this.tracks.push($H({ids: track.keys().first(),effect: Effect.Morph,options: { style: data }}));}.bind(this));return this;},play: function(){return new Effect.Parallel(this.tracks.map(function(track){var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');var elements = [$(ids) || $$(ids)].flatten();return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });}).flatten(),this.options);}});Element.CSS_PROPERTIES = $w('backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +'fontSize fontWeight height left letterSpacing lineHeight ' +'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +'right textIndent top width wordSpacing zIndex');Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;String.__parseStyleElement = document.createElement('div');String.prototype.parseStyle = function(){var style, styleRules = $H();if (Prototype.Browser.WebKit)style = new Element('div',{style:this}).style;else {String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';style = String.__parseStyleElement.childNodes[0].style;}Element.CSS_PROPERTIES.each(function(property){if (style[property]) styleRules.set(property, style[property]);});if (Prototype.Browser.IE && this.include('opacity'))styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);return styleRules;};if (document.defaultView && document.defaultView.getComputedStyle) {Element.getStyles = function(element) {var css = document.defaultView.getComputedStyle($(element), null);return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {styles[property] = css[property];return styles;});};} else {Element.getStyles = function(element) {element = $(element);var css = element.currentStyle, styles;styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {results[property] = css[property];return results;});if (!styles.opacity) styles.opacity = element.getOpacity();return styles;};};Effect.Methods = {morph: function(element, style) {element = $(element);new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));return element;},visualEffect: function(element, effect, options) {element = $(element)var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);new Effect[klass](element, options);return element;},highlight: function(element, options) {element = $(element);new Effect.Highlight(element, options);return element;}};$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+'pulsate shake puff squish switchOff dropOut').each(function(effect) {Effect.Methods[effect] = function(element, options){element = $(element);Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);return element;}});$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(function(f) { Effect.Methods[f] = Element[f]; });Element.addMethods(Effect.Methods);if(typeof Effect == 'undefined')throw("controls.js requires including script.aculo.us effects.js library");var Autocompleter = { }Autocompleter.Base = Class.create({baseInitialize: function(element, update, options) {element = $(element)this.element = element;this.update = $(update);this.hasFocus = false;this.changed = false;this.active = false;this.index = 0;this.entryCount = 0;this.oldElementValue = this.element.value;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);if (!this.options.tokens.include('\n'))this.options.tokens.push('\n');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, 'keydown', this.onKeyPress.bindAsEventListener(this));},show: function() {if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);if(!this.iefix &&(Prototype.Browser.IE) &&(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, {setTop:(!this.update.style.height)});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();Event.stop(event);return;case Event.KEY_DOWN:this.markNext();this.render();Event.stop(event);return;}elseif(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||(Prototype.Browser.WebKit > 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;this.getEntry(this.index).scrollIntoView(true);},markNext: function() {if(this.index < this.entryCount-1) this.index++else this.index = 0;this.getEntry(this.index).scrollIntoView(false);},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;}var value = '';if (this.options.select) {var nodes = $(selectedElement).select('.' + this.options.select) || [];if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);} elsevalue = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');var bounds = this.getTokenBounds();if (bounds[0] != -1) {var newValue = this.element.value.substr(0, bounds[0]);var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);if (whitespace)newValue += whitespace[0];this.element.value = newValue + value + this.element.value.substr(bounds[1]);} else {this.element.value = value;}this.oldElementValue = this.element.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.down());if(this.update.firstChild && this.update.down().childNodes) {this.entryCount =this.update.down().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;if(this.entryCount==1 && this.options.autoSelect) {this.selectEntry();this.hide();} else {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;this.tokenBounds = null;if(this.getToken().length>=this.options.minChars) {this.getUpdatedChoices();} else {this.active = false;this.hide();}this.oldElementValue = this.element.value;},getToken: function() {var bounds = this.getTokenBounds();return this.element.value.substring(bounds[0], bounds[1]).strip();},getTokenBounds: function() {if (null != this.tokenBounds) return this.tokenBounds;var value = this.element.value;if (value.strip().empty()) return [-1, 0];var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);var offset = (diff == this.oldElementValue.length ? 1 : 0);var prevTokenPos = -1, nextTokenPos = value.length;var tp;for (var index = 0, l = this.options.tokens.length; index < l; ++index) {tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);if (tp > prevTokenPos) prevTokenPos = tp;tp = value.indexOf(this.options.tokens[index], diff + offset);if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;}return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);}});Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {var boundary = Math.min(newS.length, oldS.length);for (var index = 0; index < boundary; ++index)if (newS[index] != oldS[index])return index;return boundary;};Ajax.Autocompleter = Class.create(Autocompleter.Base, {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() {this.startIndicator();var entry = encodeURIComponent(this.options.paramName) + '=' +encodeURIComponent(this.getToken());this.options.parameters = this.options.callback ?this.options.callback(this.element, entry) : entry;if(this.options.defaultParams)this.options.parameters += '&' + this.options.defaultParams;new Ajax.Request(this.url, this.options);},onComplete: function(request) {this.updateChoices(request.responseText);}});Autocompleter.Local = Class.create(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({initialize: function(element, url, options) {this.url = url;this.element = element = $(element);this.prepareOptions();this._controls = { };arguments.callee.dealWithDeprecatedOptions(options);Object.extend(this.options, options || { });if (!this.options.formId && this.element.id) {this.options.formId = this.element.id + '-inplaceeditor';if ($(this.options.formId))this.options.formId = '';}if (this.options.externalControl)this.options.externalControl = $(this.options.externalControl);if (!this.options.externalControl)this.options.externalControlOnly = false;this._originalBackground = this.element.getStyle('background-color') || 'transparent';this.element.title = this.options.clickToEditText;this._boundCancelHandler = this.handleFormCancellation.bind(this);this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);this._boundFailureHandler = this.handleAJAXFailure.bind(this);this._boundSubmitHandler = this.handleFormSubmission.bind(this);this._boundWrapperHandler = this.wrapUp.bind(this);this.registerListeners();},checkForEscapeOrReturn: function(e) {if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;if (Event.KEY_ESC == e.keyCode)this.handleFormCancellation(e);else if (Event.KEY_RETURN == e.keyCode)this.handleFormSubmission(e);},createControl: function(mode, handler, extraClasses) {var control = this.options[mode + 'Control'];var text = this.options[mode + 'Text'];if ('button' == control) {var btn = document.createElement('input');btn.type = 'submit';btn.value = text;btn.className = 'editor_' + mode + '_button';if ('cancel' == mode)btn.onclick = this._boundCancelHandler;this._form.appendChild(btn);this._controls[mode] = btn;} else if ('link' == control) {var link = document.createElement('a');link.href = '#';link.appendChild(document.createTextNode(text));link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;link.className = 'editor_' + mode + '_link';if (extraClasses)link.className += ' ' + extraClasses;this._form.appendChild(link);this._controls[mode] = link;}},createEditField: function() {var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());var fld;if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {fld = document.createElement('input');fld.type = 'text';var size = this.options.size || this.options.cols || 0;if (0 < size) fld.size = size;} else {fld = document.createElement('textarea');fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);fld.cols = this.options.cols || 40;}fld.name = this.options.paramName;fld.value = text;fld.className = 'editor_field';if (this.options.submitOnBlur)fld.onblur = this._boundSubmitHandler;this._controls.editor = fld;if (this.options.loadTextURL)this.loadExternalText();this._form.appendChild(this._controls.editor);},createForm: function() {var ipe = this;function addText(mode, condition) {var text = ipe.options['text' + mode + 'Controls'];if (!text || condition === false) return;ipe._form.appendChild(document.createTextNode(text));};this._form = $(document.createElement('form'));this._form.id = this.options.formId;this._form.addClassName(this.options.formClassName);this._form.onsubmit = this._boundSubmitHandler;this.createEditField();if ('textarea' == this._controls.editor.tagName.toLowerCase())this._form.appendChild(document.createElement('br'));if (this.options.onFormCustomization)this.options.onFormCustomization(this, this._form);addText('Before', this.options.okControl || this.options.cancelControl);this.createControl('ok', this._boundSubmitHandler);addText('Between', this.options.okControl && this.options.cancelControl);this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');addText('After', this.options.okControl || this.options.cancelControl);},destroy: function() {if (this._oldInnerHTML)this.element.innerHTML = this._oldInnerHTML;this.leaveEditMode();this.unregisterListeners();},enterEditMode: function(e) {if (this._saving || this._editing) return;this._editing = true;this.triggerCallback('onEnterEditMode');if (this.options.externalControl)this.options.externalControl.hide();this.element.hide();this.createForm();this.element.parentNode.insertBefore(this._form, this.element);if (!this.options.loadTextURL)this.postProcessEditField();if (e) Event.stop(e);},enterHover: function(e) {if (this.options.hoverClassName)this.element.addClassName(this.options.hoverClassName);if (this._saving) return;this.triggerCallback('onEnterHover');},getText: function() {return this.element.innerHTML;},handleAJAXFailure: function(transport) {this.triggerCallback('onFailure', transport);if (this._oldInnerHTML) {this.element.innerHTML = this._oldInnerHTML;this._oldInnerHTML = null;}},handleFormCancellation: function(e) {this.wrapUp();if (e) Event.stop(e);},handleFormSubmission: function(e) {var form = this._form;var value = $F(this._controls.editor);this.prepareSubmission();var params = this.options.callback(form, value) || '';if (Object.isString(params))params = params.toQueryParams();params.editorId = this.element.id;if (this.options.htmlResponse) {var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);Object.extend(options, {parameters: params,onComplete: this._boundWrapperHandler,onFailure: this._boundFailureHandler});new Ajax.Updater({ success: this.element }, this.url, options);} else {var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);Object.extend(options, {parameters: params,onComplete: this._boundWrapperHandler,onFailure: this._boundFailureHandler});new Ajax.Request(this.url, options);}if (e) Event.stop(e);},leaveEditMode: function() {this.element.removeClassName(this.options.savingClassName);this.removeForm();this.leaveHover();this.element.style.backgroundColor = this._originalBackground;this.element.show();if (this.options.externalControl)this.options.externalControl.show();this._saving = false;this._editing = false;this._oldInnerHTML = null;this.triggerCallback('onLeaveEditMode');},leaveHover: function(e) {if (this.options.hoverClassName)this.element.removeClassName(this.options.hoverClassName);if (this._saving) return;this.triggerCallback('onLeaveHover');},loadExternalText: function() {this._form.addClassName(this.options.loadingClassName);this._controls.editor.disabled = true;var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);Object.extend(options, {parameters: 'editorId=' + encodeURIComponent(this.element.id),onComplete: Prototype.emptyFunction,onSuccess: function(transport) {this._form.removeClassName(this.options.loadingClassName);var text = transport.responseText;if (this.options.stripLoadedTextTags)text = text.stripTags();this._controls.editor.value = text;this._controls.editor.disabled = false;this.postProcessEditField();}.bind(this),onFailure: this._boundFailureHandler});new Ajax.Request(this.options.loadTextURL, options);},postProcessEditField: function() {var fpc = this.options.fieldPostCreation;if (fpc)$(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();},prepareOptions: function() {this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);[this._extraDefaultOptions].flatten().compact().each(function(defs) {Object.extend(this.options, defs);}.bind(this));},prepareSubmission: function() {this._saving = true;this.removeForm();this.leaveHover();this.showSaving();},registerListeners: function() {this._listeners = { };var listener;$H(Ajax.InPlaceEditor.Listeners).each(function(pair) {listener = this[pair.value].bind(this);this._listeners[pair.key] = listener;if (!this.options.externalControlOnly)this.element.observe(pair.key, listener);if (this.options.externalControl)this.options.externalControl.observe(pair.key, listener);}.bind(this));},removeForm: function() {if (!this._form) return;this._form.remove();this._form = null;this._controls = { };},showSaving: function() {this._oldInnerHTML = this.element.innerHTML;this.element.innerHTML = this.options.savingText;this.element.addClassName(this.options.savingClassName);this.element.style.backgroundColor = this._originalBackground;this.element.show();},triggerCallback: function(cbName, arg) {if ('function' == typeof this.options[cbName]) {this.options[cbName](this, arg);}},unregisterListeners: function() {$H(this._listeners).each(function(pair) {if (!this.options.externalControlOnly)this.element.stopObserving(pair.key, pair.value);if (this.options.externalControl)this.options.externalControl.stopObserving(pair.key, pair.value);}.bind(this));},wrapUp: function(transport) {this.leaveEditMode();this._boundComplete(transport, this.element);}});Object.extend(Ajax.InPlaceEditor.prototype, {dispose: Ajax.InPlaceEditor.prototype.destroy});Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {initialize: function($super, element, url, options) {this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;$super(element, url, options);},createEditField: function() {var list = document.createElement('select');list.name = this.options.paramName;list.size = 1;this._controls.editor = list;this._collection = this.options.collection || [];if (this.options.loadCollectionURL)this.loadCollection();elsethis.checkForExternalText();this._form.appendChild(this._controls.editor);},loadCollection: function() {this._form.addClassName(this.options.loadingClassName);this.showLoadingText(this.options.loadingCollectionText);var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);Object.extend(options, {parameters: 'editorId=' + encodeURIComponent(this.element.id),onComplete: Prototype.emptyFunction,onSuccess: function(transport) {var js = transport.responseText.strip();if (!/^\[.*\]$/.test(js))throw 'Server returned an invalid collection representation.';this._collection = eval(js);this.checkForExternalText();}.bind(this),onFailure: this.onFailure});new Ajax.Request(this.options.loadCollectionURL, options);},showLoadingText: function(text) {this._controls.editor.disabled = true;var tempOption = this._controls.editor.firstChild;if (!tempOption) {tempOption = document.createElement('option');tempOption.value = '';this._controls.editor.appendChild(tempOption);tempOption.selected = true;}tempOption.update((text || '').stripScripts().stripTags());},checkForExternalText: function() {this._text = this.getText();if (this.options.loadTextURL)this.loadExternalText();elsethis.buildOptionList();},loadExternalText: function() {this.showLoadingText(this.options.loadingText);var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);Object.extend(options, {parameters: 'editorId=' + encodeURIComponent(this.element.id),onComplete: Prototype.emptyFunction,onSuccess: function(transport) {this._text = transport.responseText.strip();this.buildOptionList();}.bind(this),onFailure: this.onFailure});new Ajax.Request(this.options.loadTextURL, options);},buildOptionList: function() {this._form.removeClassName(this.options.loadingClassName);this._collection = this._collection.map(function(entry) {return 2 === entry.length ? entry : [entry, entry].flatten();});var marker = ('value' in this.options) ? this.options.value : this._text;var textFound = this._collection.any(function(entry) {return entry[0] == marker;}.bind(this));this._controls.editor.update('');var option;this._collection.each(function(entry, index) {option = document.createElement('option');option.value = entry[0];option.selected = textFound ? entry[0] == marker : 0 == index;option.appendChild(document.createTextNode(entry[1]));this._controls.editor.appendChild(option);}.bind(this));this._controls.editor.disabled = false;Field.scrollFreeActivate(this._controls.editor);}});Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {if (!options) return;function fallback(name, expr) {if (name in options || expr === undefined) return;options[name] = expr;};fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :options.cancelLink == options.cancelButton == false ? false : undefined)));fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :options.okLink == options.okButton == false ? false : undefined)));fallback('highlightColor', options.highlightcolor);fallback('highlightEndColor', options.highlightendcolor);};Object.extend(Ajax.InPlaceEditor, {DefaultOptions: {ajaxOptions: { },autoRows: 3,cancelControl: 'link',cancelText: 'cancel',clickToEditText: 'Click to edit',externalControl: null,externalControlOnly: false,fieldPostCreation: 'activate',formClassName: 'inplaceeditor-form',formId: null,highlightColor: '#ffff99',highlightEndColor: '#ffffff',hoverClassName: '',htmlResponse: true,loadingClassName: 'inplaceeditor-loading',loadingText: 'Loading...',okControl: 'button',okText: 'ok',paramName: 'value',rows: 1,savingClassName: 'inplaceeditor-saving',savingText: 'Saving...',size: 0,stripLoadedTextTags: false,submitOnBlur: false,textAfterControls: '',textBeforeControls: '',textBetweenControls: ''},DefaultCallbacks: {callback: function(form) {return Form.serialize(form);},onComplete: function(transport, element) {new Effect.Highlight(element, {startcolor: this.options.highlightColor, keepBackgroundImage: true });},onEnterEditMode: null,onEnterHover: function(ipe) {ipe.element.style.backgroundColor = ipe.options.highlightColor;if (ipe._effect)ipe._effect.cancel();},onFailure: function(transport, ipe) {alert('Error communication with the server: ' + transport.responseText.stripTags());},onFormCustomization: null,onLeaveEditMode: null,onLeaveHover: function(ipe) {ipe._effect = new Effect.Highlight(ipe.element, {startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,restorecolor: ipe._originalBackground, keepBackgroundImage: true});}},Listeners: {click: 'enterEditMode',keydown: 'checkForEscapeOrReturn',mouseover: 'enterHover',mouseout: 'leaveHover'}});Ajax.InPlaceCollectionEditor.DefaultOptions = {loadingCollectionText: 'Loading options...'};Form.Element.DelayedObserver = Class.create({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));}});if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a,_b){if(!document.getElementById){return;}this.DETECT_KEY=_b?_b:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);if(_8+""!=""){this.addParam("base",_8);}this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _d=(_9)?_9:window.location;this.setAttribute("xiRedirectUrl",_d);this.setAttribute("redirectUrl","");if(_a){this.setAttribute("redirectUrl",_a);}};deconcept.SWFObject.prototype={useExpressInstall:function(_e){this.xiSWFPath=!_e?"expressinstall.swf":_e;this.setAttribute("useExpressInstall",true);},setAttribute:function(_f,_10){this.attributes[_f]=_10;},getAttribute:function(_11){return this.attributes[_11];},addParam:function(_12,_13){this.params[_12]=_13;},getParams:function(){return this.params;},addVariable:function(_14,_15){this.variables[_14]=_15;},getVariable:function(_16){return this.variables[_16];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _17=new Array();var key;var _19=this.getVariables();for(key in _19){_17[_17.length]=key+"="+_19[key];}return _17;},getSWFHTML:function(){var _1a="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_1a="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\"";_1a+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";var _1b=this.getParams();for(var key in _1b){_1a+=[key]+"=\""+_1b[key]+"\" ";}var _1d=this.getVariablePairs().join("&");if(_1d.length>0){_1a+="flashvars=\""+_1d+"\"";}_1a+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_1a="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\">";_1a+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";var _1b=this.getParams();for(var key in _1b){_1a+="<param name=\""+key+"\" value=\""+_1b[key]+"\" />";}var _1d=this.getVariablePairs().join("&");if(_1d.length>0){_1a+="<param name=\"flashvars\" value=\""+_1d+"\" />";}_1a+="</object>";}return _1a;},write:function(_1e){if(this.getAttribute("useExpressInstall")){var _1f=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_1f)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _1e=="string")?document.getElementById(_1e):_1e;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _21=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_21=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _24=3;while(axo){try{_24++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_24);_21=new deconcept.PlayerVersion([_24,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_21=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_21.major==6){return _21;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_21=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _21;};deconcept.PlayerVersion=function(_25){this.major=_25[0]!=null?parseInt(_25[0]):0;this.minor=_25[1]!=null?parseInt(_25[1]):0;this.rev=_25[2]!=null?parseInt(_25[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.major<fv.major){return false;}if(this.major>fv.major){return true;}if(this.minor<fv.minor){return false;}if(this.minor>fv.minor){return true;}if(this.rev<fv.rev){return false;}return true;};deconcept.util={getRequestParameter:function(_27){var q=document.location.search||document.location.hash;if(_27==null){return q;}if(q){var _29=q.substring(1).split("&");for(var i=0;i<_29.length;i++){if(_29[i].substring(0,_29[i].indexOf("="))==_27){return _29[i].substring((_29[i].indexOf("=")+1));}}}return "";}};deconcept.SWFObjectUtil.cleanupSWFs=function(){var _2b=document.getElementsByTagName("OBJECT");for(var i=_2b.length-1;i>=0;i--){_2b[i].style.display="none";for(var x in _2b[i]){if(typeof _2b[i][x]=="function"){_2b[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;if (!window.Silverlight){window.Silverlight = { };}Silverlight._silverlightCount = 0;Silverlight.onGetSilverlight = null;Silverlight.onSilverlightInstalled = function () {try{s_initS();s.linkTrackVars='prop45,prop16';s.linkTrackEvents='None';s.prop45='SL_4_InstallSuccess';s.tl(this,'e','SL_4_InstallSuccess');}catch(e){}window.location.href=window.location.href+(window.location.href.indexOf("?")>0?"&":"?")+"forcereload=true";};Silverlight.isInstalled = function(version){var isVersionSupported=false;var container = null;try{var control = null;try{control = new ActiveXObject('AgControl.AgControl');if ( version == null ){isVersionSupported = true;}else if ( control.IsVersionSupported(version) ){isVersionSupported = true;}control = null;}catch (e){var plugin = navigator.plugins["Silverlight Plug-In"] ;if ( plugin ){if ( version === null ){isVersionSupported = true;}else{var actualVer = plugin.description;if ( actualVer === "1.0.30226.2")actualVer = "2.0.30226.2";var actualVerArray =actualVer.split(".");while ( actualVerArray.length > 3){actualVerArray.pop();}while ( actualVerArray.length < 4){actualVerArray.push(0);}var reqVerArray = version.split(".");while ( reqVerArray.length > 4){reqVerArray.pop();}var requiredVersionPart ;var actualVersionPartvar index = 0;do{requiredVersionPart = parseInt(reqVerArray[index]);actualVersionPart = parseInt(actualVerArray[index]);index++;}while (index < reqVerArray.length && requiredVersionPart === actualVersionPart);if ( requiredVersionPart <= actualVersionPart && !isNaN(requiredVersionPart) ){isVersionSupported = true;}}}}}catch (e){isVersionSupported = false;}if (container){document.body.removeChild(container);}return isVersionSupported;}Silverlight.WaitForInstallCompletion = function(){if ( ! Silverlight.isBrowserRestartRequired && Silverlight.onSilverlightInstalled ){try{navigator.plugins.refresh();}catch(e){}if ( Silverlight.isInstalled(null) ){Silverlight.onSilverlightInstalled();}else{setTimeout(Silverlight.WaitForInstallCompletion, 3000);}}}Silverlight.__startup = function(){Silverlight.isBrowserRestartRequired = Silverlight.isInstalled(null);//(!window.ActiveXObject || Silverlight.isInstalled(null));if ( !Silverlight.isBrowserRestartRequired){Silverlight.WaitForInstallCompletion();}if (window.removeEventListener) {window.removeEventListener('load', Silverlight.__startup , false);}else {window.detachEvent('onload', Silverlight.__startup );}}if (window.addEventListener){window.addEventListener('load', Silverlight.__startup , false);}else{window.attachEvent('onload', Silverlight.__startup );}Silverlight.createObject = function(source, parentElement, id, properties, events, initParams, userContext){var slPluginHelper = new Object();var slProperties = properties;var slEvents = events;slPluginHelper.version = slProperties.version;slProperties.source = source;slPluginHelper.alt = slProperties.alt;if ( initParams )slProperties.initParams = initParams;if ( slProperties.isWindowless && !slProperties.windowless)slProperties.windowless = slProperties.isWindowless;if ( slProperties.framerate && !slProperties.maxFramerate)slProperties.maxFramerate = slProperties.framerate;if ( id && !slProperties.id)slProperties.id = id;delete slProperties.ignoreBrowserVer;delete slProperties.inplaceInstallPrompt;delete slProperties.version;delete slProperties.isWindowless;delete slProperties.framerate;delete slProperties.data;delete slProperties.src;delete slProperties.alt;if (Silverlight.isInstalled(slPluginHelper.version)){for (var name in slEvents){if ( slEvents[name]){if ( name == "onLoad" && typeof slEvents[name] == "function" && slEvents[name].length != 1 ){var onLoadHandler = slEvents[name];slEvents[name]=function (sender){ return onLoadHandler(document.getElementById(id), userContext, sender)};}var handlerName = Silverlight.__getHandlerName(slEvents[name]);if ( handlerName != null ){slProperties[name] = handlerName;slEvents[name] = null;}else{throw "typeof events."+name+" must be 'function' or 'string'";}}}slPluginHTML = Silverlight.buildHTML(slProperties);}else{slPluginHTML = Silverlight.buildPromptHTML(slPluginHelper);}if(parentElement){parentElement.innerHTML = slPluginHTML;}else{return slPluginHTML;}}Silverlight.buildHTML = function( slProperties){var htmlBuilder = [];htmlBuilder.push('<object type=\"application/x-silverlight\" data="data:application/x-silverlight,"');if ( slProperties.id != null ){htmlBuilder.push(' id="' + slProperties.id + '"');}if ( slProperties.width != null ){htmlBuilder.push(' width="' + slProperties.width+ '"');}if ( slProperties.height != null ){htmlBuilder.push(' height="' + slProperties.height + '"');}htmlBuilder.push(' >');delete slProperties.id;delete slProperties.width;delete slProperties.height;for (var name in slProperties){if (slProperties[name]){htmlBuilder.push('<param name="'+Silverlight.HtmlAttributeEncode(name)+'" value="'+Silverlight.HtmlAttributeEncode(slProperties[name])+'" />');}}htmlBuilder.push('<\/object>');return htmlBuilder.join('');}Silverlight.createObjectEx = function(params){var parameters = params;var html = Silverlight.createObject(parameters.source, parameters.parentElement, parameters.id, parameters.properties, parameters.events, parameters.initParams, parameters.context);if (parameters.parentElement == null){return html;}}Silverlight.buildPromptHTML = function(slPluginHelper){var slPluginHTML = "";var urlRoot = Silverlight.fwlinkRoot;var shortVer = slPluginHelper.version ;if ( slPluginHelper.alt ){slPluginHTML = slPluginHelper.alt;}else{if (! shortVer ){shortVer="";}slPluginHTML = "<a href='javascript:Silverlight.getSilverlight(\"{1}\");' style='text-decoration: none;'><img src='{2}' alt='Get Microsoft Silverlight' style='border-style: none'/></a>";slPluginHTML = slPluginHTML.replace('{1}', shortVer );slPluginHTML = slPluginHTML.replace('{2}', urlRoot + '108181');}return slPluginHTML;}Silverlight.getSilverlight = function(version){if (Silverlight.onGetSilverlight ){Silverlight.onGetSilverlight();}var shortVer = "";var reqVerArray = String(version).split(".");if (reqVerArray.length > 1){var majorNum = parseInt(reqVerArray[0] );if ( isNaN(majorNum) || majorNum < 2 ){shortVer = "1.0";}else{shortVer = reqVerArray[0]+'.'+reqVerArray[1];}}var verArg = "";if (shortVer.match(/^\d+\056\d+$/) ){verArg = "&v="+shortVer;}Silverlight.followFWLink("114576" + verArg);}Silverlight.followFWLink = function(linkid){top.location=Silverlight.fwlinkRoot+String(linkid);}Silverlight.HtmlAttributeEncode = function( strInput ){var c;var retVal = '';if(strInput == null){return null;}for(var cnt = 0; cnt < strInput.length; cnt++){c = strInput.charCodeAt(cnt);if (( ( c > 96 ) && ( c < 123 ) ) ||( ( c > 64 ) && ( c < 91 ) ) ||( ( c > 43 ) && ( c < 58 ) && (c!=47)) ||( c == 95 )){retVal = retVal + String.fromCharCode(c);}else{retVal = retVal + '&#' + c + ';';}}return retVal;}Silverlight.default_error_handler = function (sender, args){var iErrorCode;var errorType = args.ErrorType;iErrorCode = args.ErrorCode;var errMsg = "\nSilverlight error message   \n" ;errMsg += "ErrorCode: "+ iErrorCode + "\n";errMsg += "ErrorType: " + errorType + "    \n";errMsg += "Message: " + args.ErrorMessage + "   \n";if (errorType == "ParserError"){errMsg += "XamlFile: " + args.xamlFile + "   \n";errMsg += "Line: " + args.lineNumber + "   \n";errMsg += "Position: " + args.charPosition + "   \n";}else if (errorType == "RuntimeError"){if (args.lineNumber != 0){errMsg += "Line: " + args.lineNumber + "   \n";errMsg += "Position: " + args.charPosition + "   \n";}errMsg += "MethodName: " + args.methodName + "   \n";}alert (errMsg);}Silverlight.__cleanup = function (){for (var i = Silverlight._silverlightCount - 1; i >= 0; i--) {window['__slEvent' + i] = null;}Silverlight._silverlightCount = 0;if (window.removeEventListener) {window.removeEventListener('unload', Silverlight.__cleanup , false);}else {window.detachEvent('onunload', Silverlight.__cleanup );}}Silverlight.__getHandlerName = function (handler){var handlerName = "";if ( typeof handler == "string"){handlerName = handler;}else if ( typeof handler == "function" ){if (Silverlight._silverlightCount == 0){if (window.addEventListener){window.addEventListener('onunload', Silverlight.__cleanup , false);}else{window.attachEvent('onunload', Silverlight.__cleanup );}}var count = Silverlight._silverlightCount++;handlerName = "__slEvent"+count;window[handlerName]=handler;}else{handlerName = null;}return handlerName;}if (!this.JSON) {JSON = function () {function f(n) {return n < 10 ? '0' + n : n;}Date.prototype.toJSON = function () {return this.getUTCFullYear()  + '-' +f(this.getUTCMonth() + 1) + '-' +f(this.getUTCDate())   + 'T' +f(this.getUTCHours())   + ':' +f(this.getUTCMinutes())  + ':' +f(this.getUTCSeconds())  + 'Z';};var m = {'\b': '\\b','\t': '\\t','\n': '\\n','\f': '\\f','\r': '\\r','"' : '\\"','\\': '\\\\'};function stringify(value, whitelist) {var a,i,k,l,r = /["\\\x00-\x1f\x7f-\x9f]/g,v;switch (typeof value) {case 'string':return r.test(value) ?'"' + value.replace(r, function (a) {var c = m[a];if (c) {return c;}c = a.charCodeAt();return '\\u00' + Math.floor(c / 16).toString(16) +(c % 16).toString(16);}) + '"' :'"' + value + '"';case 'number':return isFinite(value) ? String(value) : 'null';case 'boolean':case 'null':return String(value);case 'object':if (!value) {return 'null';}if (typeof value.toJSON === 'function') {return stringify(value.toJSON());}a = [];if (typeof value.length === 'number' &&!(value.propertyIsEnumerable('length'))) {l = value.length;for (i = 0; i < l; i += 1) {a.push(stringify(value[i], whitelist) || 'null');}return '[' + a.join(',') + ']';}if (whitelist) {l = whitelist.length;for (i = 0; i < l; i += 1) {k = whitelist[i];if (typeof k === 'string') {v = stringify(value[k], whitelist);if (v) {a.push(stringify(k) + ':' + v);}}}} else {for (k in value) {if (typeof k === 'string') {v = stringify(value[k], whitelist);if (v) {a.push(stringify(k) + ':' + v);}}}}return '{' + a.join(',') + '}';}}return {stringify: stringify,parse: function (text, filter) {var j;function walk(k, v) {var i, n;if (v && typeof v === 'object') {for (i in v) {if (Object.prototype.hasOwnProperty.apply(v, [i])) {n = walk(i, v[i]);if (n !== undefined) {v[i] = n;}}}}return filter(k, v);}if (/^[\],:{}\s]*$/.test(text.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {j = eval('(' + text + ')');return typeof filter === 'function' ? walk('', j) : j;}throw new SyntaxError('parseJSON');}};}();}var Cookie={setRaw:function(n,v,daysToExp,pg){var ex='';if(daysToExp!=undefined){var d=new Date();d.setTime(d.getTime()+(86400000*parseFloat(daysToExp)));ex='; expires='+d.toGMTString();}if(pg!=undefined){if(pg!='.')ex+='; path='+pg;}else {ex+='; path=/';}if(cookieDomain!=null&&cookieDomain!=undefined&&cookieDomain.length>0)ex +=";domain="+cookieDomain;return(document.cookie=escape(n)+'='+(v||'')+ex);},set:function(n,v,daysToExp,pg){return this.setRaw(n,escape(v||''),daysToExp,pg);},get:function(n){var c=document.cookie.match(new RegExp('(^|;)\\s*'+escape(n)+'=([^;\\s]*)'));return(c?unescape(c[2]):null);},erase:function(n,pg){var c=Cookie.get(n)||true;Cookie.set(n,'',-1,pg);return c;},accept:function(){if(typeof(navigator.cookieEnabled)=='boolean'){return navigator.cookieEnabled;}Cookie.set('_t','1');return(Cookie.erase('_t')==='1');}};var advManager={m_lastOrder:0,m_lastTag:"",setVideoOverrideSettings:function(settings){this.m_VideoOverrideSettings=settings;},isVideoOverrided:function(){if(this.m_VideoOverrideSettings!==undefined&&this.m_VideoOverrideSettings!=null&&this.m_VideoOverrideSettings!='')return true;return false;},render:function(divID,refresh){var v=undefined;var d=$(divID);if(d===undefined||d==null) return;try{v=eval(divID);}catch (e){}if(v===undefined||v==null)return;if(refresh===undefined||refresh==null)refresh=false;if(v.mode===undefined||v.mode==null||v.mode=="")v.mode="adj";if(refresh)v.mode="adi"if(v.usefollow===undefined||v.usefollow==null)v.usefollow=0;if(v.usefollow==1)v=advManager.updateFollow(v);if(dcSite===undefined||dcSite==null||dcSite=='')dcSite="nbcu.olympics";var u;if(IsSecureURL()){u="https://ad.doubleclick.net/"+v.mode+"/"+dcSite+"/"+v.zone+v.keys+";ord="+this.getRandom().toString()+"?";}else{u="http://ad.doubleclick.net/"+v.mode+"/"+dcSite+"/"+v.zone+v.keys+";ord="+this.getRandom().toString()+"?";}if(v.mode=="adj"&&refresh==false){var s="<scr"+"ipt type='text/javascript' src='"+u+"'></scr"+"ipt>";document.write(s);}else{var ifrm=$("ifrm"+divID);if(ifrm===undefined||ifrm==null){var s="<iframe id='ifrm"+divID+"' src='' height='"+v.height+"' width='"+v.width+"' marginwidth='0' marginheight='0' hspace='0' vspace='0' frameborder='0' scrolling='no' bordercolor='#000000'>";s+="</iframe>";d.innerHTML=s;}ifrm=$("ifrm"+divID);if(ifrm!==undefined&&ifrm!=null){ifrm.src=u;}}},refresh:function(divID){this._generateRnd();if(divID===undefined||divID==null){var that=this;$$('.DoubleClickRefreshable').each(function(elem){that.render(elem.id,true);});}elsethis.render(divID,true);},refreshPopupVideo:function(advTag,bStart,divClass){var that=this;$$("."+divClass).each(function(elem){that.renderPopupVideo(elem.id,advTag,bStart);});},renderPopupVideo:function(id,advTag,bStart){var d=$(id);if(d===undefined||d==null) return;var bLB=d.hasClassName('LBOARD');advTag=advManager._removeKey(advTag,'sz') advTag=advManager._addKey(advTag,"sz="+(bLB?"728":"300")+"x"+(bLB?"90":"250"));this._renderIFrame(id,(bLB?90:250),(bLB?728:300),advTag);},refreshEmbeddedVideo:function(cTag,olContent){var bIH=false;var bC=falseif(cTag!=''){this.m_lastTag=cTag;if($$('CompanionAdv').length==1){this._setAdvert($$('CompanionAdv')[0].id,cTag);}else{var that=this;var mrec="",lb="",wsky="";$$('.DoubleClick').each(function(elem){var v=undefined;try{v=eval(elem.id);}catch (e){}if(v===undefined||v==null)return;if(v.width=="300"){mrec=elem.id}if(v.width=="728"){lb=elem.id}if(v.width=="160"){wsky=elem.id}});if(mrec!=""){this._setAdvert(mrec,cTag);}else if(lb!=""){this._setAdvert(lb,cTag);}else if(wsky!=""){this._setAdvert(wsky,cTag);}}}else{var that=this;$$('.DoubleClick').each(function(elem){var v=undefined;try{v=eval(elem.id);}catch (e){}if(v===undefined||v==null)return;if(v.width=="300"||v.width=="728"||v.width=="160"){var u;if(IsSecureURL()){u="https:/"+"/ad.doubleclick.net/adi/nbcu.olympics;sz="+v.width+"x"+v.height+";ord="+advManager.getRandom()+"?"}else{u="http:/"+"/ad.doubleclick.net/adi/nbcu.olympics;sz="+v.width+"x"+v.height+";ord="+advManager.getRandom()+"?"}var ifrm=$("ifrm"+elem.id);if(ifrm===undefined||ifrm==null){var s="<iframe id='ifrm"+elem.id+"' src='' height='"+v.height+"' width='"+v.width+"' marginwidth='0' marginheight='0' hspace='0' vspace='0' frameborder='0' scrolling='no' bordercolor='#000000'>";s+="</iframe>";$(elem.id).innerHTML=s;}ifrm=$("ifrm"+elem.id);if(ifrm!==undefined&&ifrm!=null){ifrm.src=u;}}});}},_setAdvert:function(divID,tag){var v=undefined;try{v=eval(divID);}catch (e){}if(v===undefined||v==null)return;var u=advManager._removeKey(tag,"sz");u=advManager._addKey(tag,"sz="+v.width+"x"+v.height);var ifrm=$("ifrm"+divID);if(ifrm===undefined||ifrm==null){var s="<iframe id='ifrm"+divID+"' src='"+u+"' height='"+v.height+"' width='"+v.width+"' marginwidth='0' marginheight='0' hspace='0' vspace='0' frameborder='0' scrolling='no' bordercolor='#000000'>";s+="</iframe>";$(divID).innerHTML=s;}else{ifrm.src=u;}},_renderIFrame:function(id,h,w,u){var d=$(id);var ifrm=$("ifrm"+id);if(ifrm===undefined||ifrm==null){var s="<iframe id='ifrm"+id+"' src='' height='"+h+"' width='"+w+"' marginwidth='0' marginheight='0' hspace='0' vspace='0' frameborder='0' scrolling='no' bordercolor='#000000'>";s+="</iframe>";d.innerHTML=s;}ifrm=$("ifrm"+id);if(ifrm!==undefined&&ifrm!=null){ifrm.src=u;}},_getHouse:function(u){return this._removeKey(this._removeKey(u,"dc_seed"),"ord")},_removeKey:function(u,k){var uci=u.toLowerCase();var b=uci.indexOf(k.toLowerCase());if(b<=0)return u;var e=uci.indexOf(';',b);var bs=u.substr(0,b),es="";if(e>b)try {es=u.substr(e+1)}catch(ex){};var r=bs+es;if(r.charAt(r.length-1)==";"){r=r.substr(0,r.length-1)}return r;},_addKey:function(u,k){var uci=u.toLowerCase();var b=uci.indexOf('ord='.toLowerCase());var l=u;var r='';if(b>0){l=u.substring(0,b);r=u.substring(b);}if(l.charAt(l.length-1)!=";")l=l+';'var rs=l+k;if(rs.charAt(r.length-1)!=";")rs=rs+';'return rs+r;},_generateRnd:function(){var r=Math.random()*10000000000000000;this.m_lastOrder=r;DBClickOrd=r;return r;},getRandom:function(){return this.m_lastOrder;},updateFollow:function(v){var dc=new DblFollowCookie();if(v.follow>0){dc.zone=v.zone;dc.keys=v.keys;dc.follow=v.follow;dc.saveCookie();}else{if(dc.isValid()){var nK=dc.keys;nK=advManager._removeKey(nK,'sz');nK=advManager._addKey(nK,"sz="+v.size);v.zone=dc.zone;v.keys=nK;}}return v;},checkFollow:function(){var dc=new DblFollowCookie();if(dc.follow>0){dc.follow-=1;dc.saveCookie();}else{dc.eraseCookie();}}};var DblFollowCookie=Class.create({initialize:function(){this.zone='';this.keys='';this.follow=-1;var c=Cookie.get('DBFL');if(c!=null&&c!=undefined){var cV=c.toQueryParams();if(cV.z!=null&&cV.z!==undefined)this.zone=cV.zif(cV.k!=null&&cV.k!==undefined)this.keys=cV.k;if(cV.f!=null&&cV.f!==undefined)this.follow=parseInt(cV.f);}},isValid:function(){return (this.follow>=0&&this.keys!=''&&this.zone!='');},saveCookie:function(){var dblThis=this;var cInfo=Object.toQueryString({z:dblThis.zone,k:dblThis.keys,f:dblThis.follow});Cookie.setRaw('DBFL',cInfo);},eraseCookie:function(){Cookie.erase('DBFL');}});DBClickOrd=advManager._generateRnd();advManager.checkFollow();function PhotoGalleryRefreshAds(photoID){if(pagePlayer===undefined||pagePlayer==null){advManager.refresh();if(arguments.length>0&&photoID!==undefined&&photoID!=null&&photoID!=''){s.prop42=photoID;s.t();}}}if(parent.frames.length>0) {top.location.href=self.location.href;}if(!window.console||!console.firebug){var names=["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];window.console={};for(var i=0;i<names.length;++i)window.console[names[i]]=function(){}}function getHostName(){var s=document.location.href;s=s.replace(/(^[a-zA-z0-9]*:\/\/)/,'');s=s.replace(/(\/.*)/,'');return s;}function getUrlParams(){var s=document.location.href;if(s.indexOf('?')!=-1)return s.substring(s.indexOf('?')+1);if(s.indexOf('#')!=-1)return s.substring(s.indexOf('#')+1);return '';}function fnClearInput(inp,ot){if(inp.value.toLowerCase()==ot.toLowerCase())inp.value='';}function getRadioValue(n){return $$('*[name="'+n+'"]:checked').invoke('getValue').reduce();}function getCurrentTime(){var ct=new Date();var h=ct.getHours();var m=ct.getMinutes();var s="AM";if(h>=12){s="PM";h-=12;}if(h==0)h=12;if(m<10)m="0"+m;return "<b>"+h+":"+m+" "+s+"</b>";}function cleanEmptyBlock(id) {if($(id).innerHTML.length<4){$(id).up().hide();}}var ResCodeUtil={scompose:function(a){if(a===undefined||a==null||a=='')return'';a=a.toString();var t='',i,c=0,l=a.length;for(i=0;i<l;i++){t+=a.charAt(i);c++;if(c==4){c=0;t+='/';}}return t;}};function IsSecureURL(){if(document.location.href.indexOf("https://")==-1){return false;}else{return true;}}function qcTrack(){_qoptions={qacct:"p-9eJ8k4iSzux46"};if(typeof s!='undefined'&&typeof s.prop2=='string'){if(s.prop2=='Sports Hub'&&typeof s.prop7=='string'){_qoptions.labels='Sports.' + s.prop7;} else{_qoptions.labels=s.prop2;}}else{_qoptions.labels="bad";}if(IsSecureURL()) {}else{document.write('<' + 'script language="javascript" type="text/javascript" src="http://edge.quantserve.com/quant.js" ' + '>' +'</' + 'script'+ '>');}insertSafeCountTag();}function insertSafeCountTag(){if(IsSecureURL()){}else{document.write('<' + 'script type="text/javascript" src="http://content.dl-rms.com/rms/mother/18987/nodetag.js" ' + '>' +'</' + 'script'+ '>');}}function insertFooterMetrics(){if(IsSecureURL()){}else{document.write('<' + 'script type="text/javascript" src="http://core.insightexpressai.com/adServer/adServerESI.aspx?bannerID=33959" ' + '>' +'</' + 'script'+ '>');}}function onAthleteBrowserClick (evName){var s=s_gi('nbcuolympicsprodbu');s.prop2="Teamusa";s.prop3="Main Site";s.prop5="Browser";s.prop6="CocaCola_Browser";s.pageName=evName;s.t();advManager.refresh();}var countDownFlash={m_so:undefined,loadFlash:function(opt){var locInfo=Localization.loadCookie();var stationInfo=new StationInfo(locInfo.station);var curtimeZone='ET';if(stationInfo.timezone!=''&&stationInfo.timezone!=undefined){curtimeZone=stationInfo.timezone;}var lang=opt.lang;var utcString='201002130200'countDownFlash.m_so=new SWFObject("/code/flash/countdown.swf?cd_date=" + utcString + "&timezone=" + curtimeZone + "&lang=" + lang,"objCountDownFlash","261","41","9","#FFFFFF");countDownFlash.m_so.addParam('wmode','transparent');countDownFlash.m_so.write("boxCountdownClockFlash");$('boxCountdownClockFlash').show();}};var NewsComment={newsId:0,allComments:false,init:function(newsId){NewsComment.newsId=newsId;$('c_comment').value='';NewsComment.viewComments();},viewComments:function(){NewsComment.allComments=false;var u="/newscenter/comment/id="+NewsComment.newsId+".html";var a=new Ajax.Request(u,{method:'get',onComplete:NewsComment.displayComments});},viewAllComments:function(){NewsComment.allComments=true;var u="/newscenter/allcomment/id="+NewsComment.newsId+".html";var a=new Ajax.Request(u,{method:'get',onComplete:NewsComment.displayComments});},displayComments:function(r){var d=$('commentsList');d.update(r.responseText);if(r.responseText!='')d.show();},addComment:function(newsid){var info=new VisitorInfo();if(info.isValid()){$('commentPostResult').hide();$('frmInsertComment').toggle();$('SPCommentsPost').hide();}else{$('SPCommentsNeedLogin').show();}},checkLength:function(objTextArea,maxLength,event){if(objTextArea!=null)if(objTextArea.value.length>maxLength)objTextArea.value=objTextArea.value.substring(0,maxLength+1);},submitComment:function(){var comment=$('c_comment').value.strip();if(comment!='') {$('commentPostResult').hide();var u="/library/addcomments/_addcomments.htmx?a=save&n="+NewsComment.newsId+"&c="+ escape(comment);var a=new Ajax.Request(encodeURI(u),{method:'get',onComplete:NewsComment.onSaveComments});}},onSaveComments:function(originalResponse){var d=$('commentPostResult');if(originalResponse.responseText.indexOf('error')!=-1){var s=originalResponse.responseText.toQueryParams().error.gsub('\'','');d.update(s);d.writeAttribute("class","error");d.show();}else if(originalResponse.responseText.indexOf('warning')!=-1){NewsComment.closeForm();$('c_comment').value='';var s=originalResponse.responseText.toQueryParams().warning.gsub('\'','');d.writeAttribute("class","warning");d.update(s);d.show();}else{NewsComment.closeForm();$('c_comment').value='';}},closeForm:function(){$('frmInsertComment').hide();$('SPCommentsPost').show();}};function showLiveResults(flag){try{var el=$('sportFrontFlashModule');if(el!==undefined&&el!=null){if(flag)el.show();elseel.hide();}}catch(e){}}function openwindowsafe(u){window.open(u,"outlink");event.stopPropagation();}var HashListener=Class.create();HashListener.prototype={getHash:function(){try{return location.hash.substring(1)}catch (e){return '';}},initialize:function(){var t=this;t.l=new Array();t.cE=false;t.h=t.getHash();t.tm=setInterval(t.onTimer.bind(t),200);},addListner:function(lf){this.l.push(lf);},onTimer:function(){var t=this;if(!t.cE){try {if(t.h!=t.getHash()&&t.getHash()!=''){t.h=t.getHash();t.cE=true;t.l.each(function(n){n(t.h);});}} finally {t.cE=false;}}}}var HashUpdater=Class.create();HashUpdater.prototype={initialize:function(tID,buildPathFunc,beforeChangeFunc,opt,afterChangeFunc){var t=this;t.tID=tID;t.bPF=buildPathFunc;t.bCF=beforeChangeFunc;t.aCF=afterChangeFunc;t.opt=opt;t.hel=new Array();},addHash:function(h){this.hel.push(h);},onHash:function(h) {var t=this;t.h=h;try{t.bCF(t);}catch(e){};var u=t.bPF(h,t);if(u==null||u==undefined||u.length==0) return;new Ajax.Updater({success:t.tID},u,{method:'get',evalScripts:true,onComplete:t.onComplete.bind(t)});},onComplete:function() {try{this.aCF(this);}catch (e) {}},checkHash:function(h) {for (var i=0;i<this.hel.length;i++)if(this.hel[i]==h)return true;return false;},start:function(sH) {var t=this;t.hl=new HashListener();t.hl.addListner(t.onHash.bind(t));var h=t.hl.getHash();if((h===undefined||h==null||h=='')&&t.hel.length>1){if(sH!=null&&sH!=undefined&&sH.length>0)h=sH;else{var i=Math.ceil(((Math.random()+0.1)*t.hel.length)-1);if(i<0||i>=t.hel.length) i=0;h =t.hel[i];}}else if((h===undefined||h==null||h=='')&&t.hel.length==1){h=t.hel[0];}try{t.bCF(t);}catch(e){};t.onHash(h);}}var poll={Vote:function(id,ThanksText,ThanksUrl){var f=$('f_poll'+id);var d='dynamic_'+id;var rdAnId=getRadioValue("i_answers");if(rdAnId==null){alert(f.message.value);return false;}elsenew Ajax.Updater(d,'/polls/pollid='+id+'/vote.htmx?ThanksText='+ThanksText+'&ThanksUrl='+ThanksUrl+'&rnd='+Math.random(),{method:'get',parameters:{AnswerId:rdAnId} });}}var FormValidate=Class.create();FormValidate.prototype={initialize:function(p){this.params=p;for(i=0;i<p.length;i++){var e=p[i];if(this.isRequired(e))$(e.label).addClassName('required');}this.erList=new Array();this.errClass='validateError';},checkSpecialCharacter:function(v,chkSpecial){if(!chkSpecial) return false;var p=new RegExp("[^A-Za-z_ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿĀāĂăĄąĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥħĨĩĪīĬĭĮįİıĲĳĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňŉŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽž0-9.\\'\\.\\-]","g");patmatch=p.test(v);return patmatch;},checkText:function(id,required,chkSpecial,minL,maxL){if(minL<0) minL=0;if(required&&minL<1) minL=1;var v=$F(id);if(required){if(v==null||v==undefined)return false;else{if(v.length<minL)return false;if(v.length>maxL)return false;if(this.checkSpecialCharacter(v,chkSpecial))return false;}}else{if(v!=null&&v!=undefined&&v.length>0){if(v.length>maxL)return false;if(this.checkSpecialCharacter(v,chkSpecial))return false;}}return true;},checkNumber:function(id,required,onlyInt,minV,maxV){var v=$F(id);if(required||v.length>0){if(v==undefined||v==null||isNaN(v)||v!=parseFloat(v))return false;else{if(onlyInt&&(parseInt(v)!=v||v.indexOf('.')!=-1)) return false;if(v<minV) return false;if(v>maxV) return false;}}return true;},checkEmail:function(id,required){var v=$F(id);var moreExt=new Array("info","aero","museum","name");if(required||v.length>0){var p=new RegExp("^(\\w|-|\\.)+@(\\w|-|\\.)+\\.[a-z]{2,3}$","i");pMatch=p.test(v);if(pMatch)return true;else{for(var i=0;i<moreExt.length;i++){p.compile("^(\\w|-|\\.)+@(\\w|-|\\.)+\\." + moreExt[i] +"$");pMatch=p.test(v);if(pMatch)return true;}}return false;}return true;},checkZip:function(id,required){var v=$F(id);if(v!=null)v=v.strip();if(required||v.length>0){if(v==null||v.length!=5)return false;else{var numericExpression=/^[0-9]+$/;if(v.match(numericExpression))return true;elsereturn false;}}return true;},checkEmailString:function(emailAddress){var p=new RegExp("^(\\w|-|\\.)+@(\\w|-|\\.)+\\.[a-z]{2,3}$","i");return p.test(emailAddress);},checkDate:function(idD,idM,idY){var vD=$F(idD);var vM=$F(idM);var vY=$F(idY);var v=vD+'/'+vM+'/'+vY;var re= /(\d{1,2})(-|\/)+(\d{1,2})(-|\/)+(\d{4}|\d{2})/;if(!re.test(v))return false;var res=null;if(v.match(/\-/)!=null)res=v.split(/\-/);elseres=v.gsub("/","-").split(/\-/);if(res!=null){if(res.length!=3) return false;var d=new Date(vY,vM-1,vD);if(d.getDate()!=vD||d.getMonth()!=vM-1||d.getFullYear()!=vY) return false;return true;}return false;},checkCompare:function(e){if(e.idCompare==null||e.idCompare==undefined) return true;if($F(e.id)!=$F(e.idCompare)) return false;return true;},checkOption:function(id){if($(id).selectedIndex>0) return true;return false;},isRequired:function(e){if(e.required==null||e.required==undefined) return true;return e.required;},min:function(e){if(e.min==null||e.min==undefined) return Number.MIN_VALUE;return e.min;},max:function(e){if(e.max==null||e.max==undefined) return Number.MAX_VALUE;return e.max;},setError:function(e){var t=this;t.valid=false;t.erList.push(e.message);try {if(!$(e.label).hasClassName(t.errClass)) $(e.label).addClassName(t.errClass)if(e.type=='date'){if(!$(e.idD).hasClassName(t.errClass)) $(e.idD).addClassName(t.errClass)if(!$(e.idM).hasClassName(t.errClass)) $(e.idM).addClassName(t.errClass)if(!$(e.idY).hasClassName(t.errClass)) $(e.idY).addClassName(t.errClass)}elseif(!$(e.id).hasClassName(t.errClass)) $(e.id).addClassName(t.errClass)}catch(e){};},setErrorCompare:function(e){var t=this;t.valid=false;t.erList.push(e.messageCompare);try {if(!$(e.label).hasClassName(t.errClass)) $(e.label).addClassName(t.errClass)if(!$(e.id).hasClassName(t.errClass)) $(e.id).addClassName(t.errClass)if(!$(e.idCompare).hasClassName(t.errClass)) $(e.idCompare).addClassName(t.errClass)if(!$(e.labelCompare).hasClassName(t.errClass)) $(e.labelCompare).addClassName(t.errClass)}catch(e){};},cleanError:function(e){var t=this;try{if($(e.label).hasClassName(t.errClass)) $(e.label).removeClassName(t.errClass)if(e.type=='date'){if($(e.idD).hasClassName(t.errClass)) $(e.idD).removeClassName(t.errClass)if($(e.idM).hasClassName(t.errClass)) $(e.idM).removeClassName(t.errClass)if($(e.idY).hasClassName(t.errClass)) $(e.idY).removeClassName(t.errClass)}elseif($(e.id).hasClassName(t.errClass)) $(e.id).removeClassName(t.errClass)}catch(e){};},addErrorMessage:function(msg){this.erList.push(msg);},setErrorClass:function(id){if(!$(id).hasClassName(this.errClass)) $(id).addClassName(this.errClass)},resetErrorClass:function(id){if($(id).hasClassName(this.errClass)) $(id).removeClassName(this.errClass)},setErrorState:function(){this.valid=false;},getValidationStatus:function(){return this.valid;},getValidationErrorList:function(){var el=this.erList;if(el==null||el==undefined||el.length==0) return '';var t='<ul>';for (i=0;i<el.length;i++)t +='<li>'+el[i]+'</li>';t+='</ul>';return t;},validate:function(){var t=this;var p=t.params;t.valid=true;t.erList=new Array();for(i=0;i<p.length;i++){var e=p[i];switch (e.type){case 'text':{if(!t.checkText(e.id,t.isRequired(e),true,t.min(e),t.max(e))) t.setError(e)else if(!t.checkCompare(e)) t.setErrorCompare(e)elset.cleanError(e);}break;case 'any-text':{if(!t.checkText(e.id,t.isRequired(e),false,t.min(e),t.max(e))) t.setError(e)else if(!t.checkCompare(e)) t.setErrorCompare(e)elset.cleanError(e);}break;case 'int':{if(!t.checkNumber(e.id,t.isRequired(e),true,t.min(e),t.max(e))) t.setError(e)else if(!t.checkCompare(e)) t.setErrorCompare(e)elset.cleanError(e);}break;case 'number':{if(!t.checkNumber(e.id,t.isRequired(e),false,t.min(e),t.max(e))) t.setError(e)else if(!t.checkCompare(e)) t.setErrorCompare(e)elset.cleanError(e);}break;case 'date':{if(t.isRequired(e)&&(!t.checkDate(e.idD,e.idM,e.idY))) t.setError(e)else if(!t.checkCompare(e)) t.setErrorCompare(e)elset.cleanError(e);}break;case 'email':{if(!t.checkEmail(e.id,t.isRequired(e))) t.setError(e)else if(!t.checkCompare(e)) t.setErrorCompare(e)elset.cleanError(e);}break;case 'zip':{if(!t.checkZip(e.id,t.isRequired(e))) t.setError(e)else if(!t.checkCompare(e)) t.setErrorCompare(e)elset.cleanError(e);}break;case 'option':{if(t.isRequired(e)&&(!t.checkOption(e.id))) t.setError(e)elset.cleanError(e);}break;case 'check':{if(t.isRequired(e)){if($F(e.id)==null) t.setError(e)elset.cleanError(e)}elset.cleanError(e);}break;}}return t.valid;}}var Tab={id:'',tab:0,Change:function(id,url,tab){Tab.id=id;Tab.tab=tab;var p=$(id);var a=new Ajax.Updater({success:id+'_content'},url,{method:'get',evalScripts:true,onComplete:Tab.Refresh()});},Refresh:function(){var d=$(this.id).descendants();for(i=0;i<d.length;i++){try {$(d[i].id).removeClassName('current');if(d[i].id==this.id+'_'+this.tab)$(d[i].id).addClassName('current');}catch(e){}}}};var ResultsTab ={changeTab:function(tab,tabC,rsc,status){if(typeof rsc=="undefined") {rsc=null;}if(typeof status=="undefined") {status=null;}$$('#ResultTab .Tab').invoke('removeClassName','current');$(tab).addClassName('current');$$('#ResultTab .TabContent').invoke('hide');if(rsc!=null&&status==7){location.href="/trackandfield/resultsandschedules/rsc=" + rsc + "/standings.html";}$(tabC).show();}};var _ObjectBrowsers=Class.create();_ObjectBrowsers.prototype={initialize:function(){this.oba=new Array();this.obh=new Array();},add:function(ob){this.oba.push(ob);},store:function(bname,ob){var x=this.getBrowserPair(bname);if(x)x.ob=ob;else this.obh.push({bname:bname,ob:ob});},getBrowserPair:function(bname){for (var i=0;i<this.obh.length;i++)if(this.obh[i].bname==bname)return this.obh[i];return null;},getBrowser:function(bname){for (var i=0;i<this.obh.length;i++)if(this.obh[i].bname==bname)return this.obh[i].ob;return null;},stopAll:function(){this.oba.each(function(n){n.stop();});},moveLeft:function(bname){try{this.getBrowser(bname).moveLeft();}catch(e){}},moveRight:function(bname){try{this.getBrowser(bname).moveRight();}catch(e){}},moveTo:function(bname,i){try{this.getBrowser(bname).moveTo(i);}catch(e){}}}var ObjectBrowsers=new _ObjectBrowsers();var BaseObjectBrowser=Class.create();BaseObjectBrowser.prototype={baseInit:function(leftArrowID,rightArrowID,bulletID){var t=this;t.firstInt=10;t.othInt=10;t.state=0t.e=new Array();t.eC=0;t.c=0;t.arrowL=leftArrowID;t.arrowR=rightArrowID;t.bullet=bulletID;ObjectBrowsers.add(t);},onTimer:function(){var t=this;t.moveNext();if(this.state==1){t.pe.stop();t.state=2;t.pe=new PeriodicalExecuter(t.onTimer.bind(t),t.othInt);t.pe.ob=t;}},start:function(){var t=this;t.state=1var s=0;if(arguments&&arguments.length>0) s=arguments[0];if(s==-1)s=Math.ceil(Math.random()*(t.eC-1));t.c=s;t.moveElement();},stop:function(){},moveRight:function(i){var t=this;t.c++;if(t.c>=t.eC)t.c=0;t.moveElement();},moveLeft:function(idx){var t=this;t.c--;if(t.c<0)t.c=t.eC-1;t.moveElement();},moveTo:function(i){var t=this;t.c=i;t.moveElement();},moveNext:function(){var t=this;t.c++;if(t.c>=t.eC)t.c=0;t.moveElement();},refreshControls:function(){var t=this;for (var l=0;l<t.eC;l++) {$(t.bullet+l).className='';}$(t.bullet+t.c).className='nbSel';$(t.pos).innerHTML=t.c+1;}};ArticlePhotoBrowser=Class.create();Object.extend(Object.extend(ArticlePhotoBrowser.prototype,BaseObjectBrowser.prototype),{initialize:function(iID,cID,lAID,rAID,bID,uID,pID) {var t=this;t.baseInit(lAID,rAID,bID);t.img=iID;t.credit=cID;t.gotoURL=uID;t.pos=pID;},addElement:function(src,h,w,alt,altClear,c,url) {this.eC=this.e.push({src:src,h:h,w:w,alt:alt,altClear:altClear,c:c,url:url});},moveElement:function() {var t=this;var el=t.e[t.c];$(t.img).src=unescape(el.src);$(t.img).height=el.h;$(t.img).width=el.w;$(t.img).alt=unescape(el.altClear);$(t.credit).update(unescape(el.alt));$(t.gotoURL).href =el.url;t.refreshControls();}});ArticlePhotoBrowserTitle=Class.create();Object.extend(Object.extend(ArticlePhotoBrowserTitle.prototype,BaseObjectBrowser.prototype),{initialize:function(iID,cID,lAID,rAID,bID,uID,pID,pTit) {var t=this;t.baseInit(lAID,rAID,bID);t.img=iID;t.credit=cID;t.gotoURL=uID;t.pos=pID;t.Title=pTit;},addElement:function(src,h,w,alt,altClear,c,url,tit) {this.eC=this.e.push({src:src,h:h,w:w,alt:alt,altClear:altClear,c:c,url:url,tit:tit});},moveElement:function() {var t=this;var el=t.e[t.c];$(t.img).src=unescape(el.src);$(t.img).height=el.h;$(t.img).width=el.w;$(t.img).alt=unescape(el.altClear);$(t.credit).update(unescape(el.alt));$(t.gotoURL).href =el.url;$(t.Title).update(unescape(el.tit));t.refreshControls();}});NewsBrowser=Class.create();Object.extend(Object.extend(NewsBrowser.prototype,BaseObjectBrowser.prototype),{initialize:function(pS,nC,cID,lID,rID,bID){var t=this;t.baseInit(lID,rID,bID);t.cID=cID;t.pS=pS;t.eC=(((nC%t.pS)==1?nC-1:nC)/t.pS)+((nC%t.pS)==1?1:0);},addElement:function(){},moveElement:function(){var t=this;var xhtml='';var i,b=t.c*t.pS;for(i=0;i<t.pS;i++){try {xhtml+="<li>"+$('newsRollerE'+(i+b)).innerHTML+"</li>";}catch(e){}}$(t.cID).update(xhtml);t.refreshControls();}});PhotoBrowser=Class.create();Object.extend(Object.extend(PhotoBrowser.prototype,BaseObjectBrowser.prototype),{initialize:function(pS,nC,cID,lID,rID,bID){var t=this;t.baseInit(lID,rID,bID);t.cID=cID;t.pS=pS;t.eC=(((nC%t.pS)==1?nC-1:nC)/t.pS)+((nC%t.pS)==1?1:0);},addElement:function(){},moveElement:function(){var t=this;var xhtml='';var i,b=t.c*t.pS;for(i=0;i<t.pS;i++){try {xhtml+="<li>"+$('photoRollerE'+(i+b)).innerHTML+"</li>";}catch(e){}}$(t.cID).update(xhtml);t.refreshControls();}});TriviaBrowser=Class.create();Object.extend(Object.extend(TriviaBrowser.prototype,BaseObjectBrowser.prototype),{initialize:function(pS,nC,cID,lID,rID,bID){var t=this;t.baseInit(lID,rID,bID);t.cID=cID;t.pS=pS;t.eC=(((nC%t.pS)==1?nC-1:nC)/t.pS)+((nC%t.pS)==1?1:0);t.updateCounter();},addElement:function(){},moveElement:function(){var t=this;var xhtml='';var i,b=t.c*t.pS;for(i=0;i<t.pS;i++){try {xhtml+="<li>"+$('triviaRollerE'+(i+b)).innerHTML+"</li>";}catch(e){}}$(t.cID).update(xhtml);},onTimer:function(){var t=this;t.moveNext();if(this.state==1){t.pe.stop();t.state=2;t.pe=new PeriodicalExecuter(t.onTimer.bind(t),t.othInt);t.pe.ob=t;}t.updateCounter();},updateCounter:function(){var t=this;$('triviaCounter').update(t.c+1);}});ArticleVideoBrowser=Class.create();Object.extend(Object.extend(ArticleVideoBrowser.prototype,BaseObjectBrowser.prototype),{initialize:function(iID,cID,lAID,rAID,bID,uID,pID) {var t=this;t.baseInit(lAID,rAID,bID);t.img=iID;t.credit=cID;t.gotoURL=uID;t.pos=pID;},addElement:function(src,h,w,alt,altClear,c,url) {this.eC=this.e.push({src:src,h:h,w:w,alt:alt,altClear:altClear,c:c,url:url});},moveElement:function() {var t=this;var el=t.e[t.c];$(t.img).src=unescape(el.src);$(t.img).height=el.h;$(t.img).width=el.w;$(t.img).alt=unescape(el.altClear);$(t.credit).update(unescape(el.alt));$(t.gotoURL).href=el.url;t.refreshControls();}});Effect.ShrinkD3=function(element) {element=$(element);var options=Object.extend({direction:'top-right',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=22;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;}return new Effect.Parallel([ new Effect.Opacity(element,{ sync:true,to:0.0,from:1.0,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().makeClipping();},afterFinishInternal:function(effect) {effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }},options));};var Rating={getRatingElement:function(newsID){return $('cRating'+newsID);},getStarElement:function(newsID,startId){return $('star'+startId + '_' + newsID);},getRating:function(newsID){var val=Rating.getRatingElement(newsID).innerHTML;return parseInt(val);},loadRate:function(newsId){var u="/newscenter/rating/_,id="+newsId+".html";var a=new Ajax.Request(u,{method:'get',onComplete:function(response){Rating.onCallBack(response,newsId);}});},isAlreadyRated:function(newsId){var c=Cookie.get("rate");if(c==null)return false;var v=eval('c.toQueryParams().v'+newsId);return(v==1);},rate:function(newsId,idx){if(newsId>0&&idx>0&&Rating.isAlreadyRated(newsId))return;if(idx==0)return;var u="/newscenter/rating/rnd="+Math.random()+"/_,id="+newsId+".htmx?v="+idx;var a=new Ajax.Request(u,{method:'get',onComplete:function(response){Rating.onCallBack(response,newsId);}});var c=Cookie.get("rate");if(c!=null){c+='&';}else{c='';}c+='v'+newsId+'=1';Cookie.set('rate',c,1,'.');},onCallBack:function(response,newsId){if(response.responseText=='') return;var tx=parseFloat(response.responseText.toQueryParams().avg);Rating.getRatingElement(newsId).update(tx);Rating.unhover(newsId);},getIconPath:function(icon){return "/imgml/icons/"+icon;},hover:function(newsId,idx){if(Rating.isAlreadyRated(newsId))return;var i;for(i=1;i<=5;i++){var src=Rating.getIconPath("starv.gif");if(i<=idx)src=Rating.getIconPath("starvs.gif");Rating.getStarElement(newsId,i).setAttribute("src",src);}},unhover:function(newsId){var i;var cVal=Rating.getRating(newsId);for(i=1;i<=5;i++){var im=(cVal>=i)?"star1.gif":"star0.gif";Rating.getStarElement(newsId,i).setAttribute("src",this.getIconPath(im));}}}var Comment={newsId:0,init:function(newsId){this.newsId=newsId;var u="/newscenter/comment/id="+this.newsId+".html";var a=new Ajax.Request(u,{method:'get',onComplete:Comment.displayComments});},viewAllComments:function(){var u="/newscenter/allcomment/id="+this.newsId+".html";var a=new Ajax.Request(u,{method:'get',onComplete:Comment.displayComments});},displayComments:function(originalResponse){var d=$('comments_'+Comment.newsId);d.update(originalResponse.responseText);if(originalResponse.responseText='')$('listComment').hide();},addComments:function(newsid){var u='/library/addcomments/newsid=' + newsid + '/_addcomments.html';var a=new Ajax.Request(u,{method:'get',onComplete:Comment.displayCommentsForm});},displayCommentsForm:function(originalResponse){var d=$('form_comments_'+Comment.newsId);d.update(originalResponse.responseText);$('form_comments_'+Comment.newsId).show();},submitComments:function(){var u="/library/addcomments/_addcomments.htmx?btn_Save=save&n="+this.newsId+"&c_comment="+ escape($('c_comment').value);var a=new Ajax.Request(encodeURI(u),{method:'get',onComplete:Comment.onSaveComments});},onSaveComments:function(originalResponse){if(originalResponse.responseText.indexOf('error')!=-1){var d=$('form_comments_'+Comment.newsId);var s='<div class="commentError"><div class="cEIC">';s+=originalResponse.responseText.toQueryParams().error.gsub('\'','');s+='</div></div>'d.update(s);d.show();}else if(originalResponse.responseText.indexOf('warning')!=-1){Comment.closeCommentsForm();var d=$('form_comments_'+Comment.newsId);var s='<div class="commentWarn"><div class="cEIC">';s+=originalResponse.responseText.toQueryParams().warning.gsub('\'','');s+='</div></div>'d.update(s);d.show();}else{Comment.closeCommentsForm();var u="/newscenter/comment/id="+Comment.newsId+".htmx";var a=new Ajax.Request(u,{method:'get',onComplete:Comment.displayComments});}},closeCommentsForm:function(){$('form_comments_'+Comment.newsId).hide();}}var AskAthlete={verify:function(){$$('.AskAthleteForm').invoke('removeClassName','error');if(($F('nameAskAthlete')!='')&&($F('cityAskAthlete')!='')&&($F('stateAskAthlete')!='')&&($F('questionAskAthlete')!='')){return true;}else{if($F('nameAskAthlete')==''){$('nameAskAthlete').addClassName('error');}if($F('cityAskAthlete')==''){$('cityAskAthlete').addClassName('error');}if($F('stateAskAthlete')==''){$('stateAskAthlete').addClassName('error');}if($F('questionAskAthlete')==''){$('questionAskAthlete').addClassName('error');}return false;}return false;},send:function(){if(AskAthlete.verify()){var u="/library/sendmail/_askathlete.htmx?" + $('AskAthleteForm').serialize()var a=new Ajax.Request(encodeURI(u),{method:'get',onComplete:AskAthlete.sendConfirmation});}},sendConfirmation:function(originalResponse){if(originalResponse.responseText=='OK'){$('AskAthleteOk').show();}else {$('AskAthleteKo').show();}$('nameAskAthlete').value='';$('cityAskAthlete').value='';$('questionAskAthlete').innerHTML='';}}var AskExpert={verify:function(){$$('.belaForm').invoke('removeClassName','error');if(($F('nameBela')!='')&&($F('cityBela')!='')&&($F('stateBela')!='')&&($F('questionBela')!='')){return true;}else{if($F('nameBela')==''){$('nameBela').addClassName('error');}if($F('cityBela')==''){$('cityBela').addClassName('error');}if($F('stateBela')==''){$('stateBela').addClassName('error');}if($F('questionBela')==''){$('questionBela').addClassName('error');}return false;}return false;},send:function(){if(Bela.verify()){var u="/library/sendmail/_askexpert.htmx?" + $('belaForm').serialize()var a=new Ajax.Request(encodeURI(u),{method:'get',onComplete:AskExpert.sendConfirmation});}},sendConfirmation:function(originalResponse){if(originalResponse.responseText=='OK'){$('belaOk').show();}else {$('belaKo').show();}$('nameBela').value='';$('cityBela').value='';$('questionBela').innerHTML='';}}var Bela={verify:function(){$$('.belaForm').invoke('removeClassName','error');if(($F('nameBela')!='')&&($F('cityBela')!='')&&($F('stateBela')!='')&&($F('questionBela')!='')){return true;}else{if($F('nameBela')==''){$('nameBela').addClassName('error');}if($F('cityBela')==''){$('cityBela').addClassName('error');}if($F('stateBela')==''){$('stateBela').addClassName('error');}if($F('questionBela')==''){$('questionBela').addClassName('error');}return false;}return false;},send:function(){if(Bela.verify()){var u="/library/sendmail/_belaemail.htmx?" + $('belaForm').serialize()var a=new Ajax.Request(encodeURI(u),{method:'get',onComplete:Bela.sendConfirmation});}},sendConfirmation:function(originalResponse){if(originalResponse.responseText=='OK'){$('belaOk').show();}else {$('belaKo').show();}$('nameBela').value='';$('cityBela').value='';$('questionBela').innerHTML='';}}var Email={idNews:'',d:'',dMsg:'',viewFrmEmail:function(newsid,dN,dMsgName){if(Email.d!='')$(Email.d).hide();Email.idNews=newsid;Email.d=dN;Email.dMsg=dMsgName;var u='/library/sendmail/newsid=' + Email.idNews + '/_email.html';var a=new Ajax.Request(u,{method:'get',evalScripts:true,onComplete:Email.displayFrmEmail});},displayFrmEmail:function(originalResponse){$(Email.d).update(originalResponse.responseText);$('c_urln').value=document.location.href;$(Email.d).show();},sendEmail:function(){Email.clearAllErrors();if(($('c_from').value=='')||($('c_fromname').value=='')||($('c_to').value=='')||($('c_message').value=='')){$('c_errorMsg').show();return;}var frm=new FormValidate(new Array(0));if(!frm.checkEmail('c_from',true)){if($('c_errorMsgEmailFrom')!=null){$('c_errorMsgEmailFrom').show();}return;}var strTo=$F('c_to');if(strTo.lastIndexOf(',')==strTo.length-1){strTo=strTo.substring(0,strTo.length-1);$('c_to').value=strTo;}var toArr=strTo.split(',');for(var i=0;i<toArr.length;i++){if(!frm.checkEmailString(toArr[i])){if($('c_errorMsgEmailTo')!=null){$('c_errorMsgEmailTo').show();}return;}}var u="/library/sendmail/_email.htmx?" + $('f_sendEmail').serialize()var a=new Ajax.Request(encodeURI(u),{method:'get',onComplete:Email.emailSendConfirmation});},emailSendConfirmation:function(originalResponse){try{s.prop49="share";s.events="event3";s.tl("","o","share");}catch(e){ }Email.clsForm();if(Email.dMsg!=undefined){$(Email.dMsg).show();}},clsForm:function(){$(this.d).hide();},clearAllErrors:function(){$('c_errorMsg').hide();if($('c_errorMsgEmailFrom')!=null){$('c_errorMsgEmailFrom').hide();}if($('c_errorMsgEmailTo')!=null){$('c_errorMsgEmailTo').hide();}},hideConfirm:function(){if(Email.dMsg!=undefined){$(Email.dMsg).hide();}}}function showTeam(formName){box=document.forms[formName].selectTeam;destination=box.options[box.selectedIndex].value;var allTeams=$$('.teamElement');var allTeams=$$('.teamElement');for(var i=0; i<allTeams.length; i++){allTeams[i].hide();}if(destination!="") {var str="Team"+destination;$(str).show(); }}var Scroller=Class.create();Scroller.prototype={leftArrow:null,rightArrow:null,divScroller:null,maxScroll:null,upContainer:null,eW:null,eC:null,destinationClick:null,initialize:function(elemCount,div,elemWidth,left,right,upCont,destinationClick){t=this;t.eW=elemWidth;t.eC=elemCount;t.leftArrow=$(left);t.rightArrow=$(right);t.divScroller=$(div);t.upContainer=upCont;t.maxScroll=(elemWidth * elemCount) - upCont;t.destinationClick=destinationClick;t.divScroller.style.width=elemCount * elemWidth + "px";if(elemCount<9){$(left).hide();$(right).hide();}t.leftArrow.onclick=t.scrollLeft.bind(this);t.rightArrow.onclick=t.scrollRight.bind(this);},scrollLeft:function(){var scrollLength=this.upContainer;var minOffset=this.upContainer - (this.eW * this.eC);var newOffset=this.divScroller.offsetLeft - scrollLength;if(newOffset<=minOffset){scrollLength=scrollLength + (newOffset - minOffset);}new Effect.Move(this.divScroller,{x:- scrollLength,y:0});return false;},scrollRight:function(){var scrollLength=this.upContainer;var maxOffset=0;var newOffset=this.divScroller.offsetLeft + scrollLength;if(newOffset>=maxOffset){scrollLength=scrollLength + (maxOffset - newOffset);}new Effect.Move(this.divScroller,{x:scrollLength,y:0});return false;},change:function(who,where){if($(who).hasClassName('on')){return;}else{$$('li').invoke('removeClassName','on');$(who).addClassName('on');new Ajax.Updater(this.destinationClick,where,{method:'get',evalScripts:true});}}};s_linkInternalFilters="javascript:,nbcolympics.com";s_parsedQueryString=false;var s;function s_initS(){s=s_gi(s_account);s.currencyCode="USD"s.trackDownloadLinks=trues.trackExternalLinks=trues.trackInlineStats=trues.linkDownloadFileTypes="exe,zip,wav,mp3,mov,mpg,avi,wmv,doc,pdf,xls"s.linkLeaveQueryString=falses.linkTrackVars="None"s.linkTrackEvents="None"s.visitorNamespace="nbcuniversal"s.siteID="";s.defaultPage="index.html";s.queryVarsList="";s.pathExcludeDelim=";";s.pathConcatDelim=":";s.usePlugins=trues.pageName=document.title;var q=window.location.toString().toQueryParams()['q'];if((q+'')!=''){s.prop14=q};}function omnTrackMetrics(){if(s.prop2=='<null>')s.prop2='';}function s_setProp(i,v){var tmp='s.prop'+i.toString()+' ="'+v.toString()+'"';eval(tmp);}s_initS();function s_doPlugins(s) {var nbcou=Cookie.get('NBCOU');if(nbcou==''||nbcou==null||nbcou===undefined){s.prop1='Unregistered';}else{s.prop1='Registered';}var l=Cookie.get('LOCS');if(l!==undefined&&l!=null&&l!=''&&s.prop16==''){s.prop16=l;}if(s.prop16!==undefined&&s.prop16!=null&&s.prop16!=''){s.prop16=s.prop16.toLowerCase();}if(!s.pageType&&!s.pageName) {s.pageName=s.getPageName();}s.linkInternalFilters=s_linkInternalFilters;if(!s_parsedQueryString) {}s.eVar17=s.getQueryParam("sky");if(s.eVar17){s.c_w('evarseventeen',s.eVar17,0);}if(s.c_r('evarseventeen')){s.eVar17=s.c_r('evarseventeen')}s.campaign=s.getQueryParam('cid,__source',':');if(s.campaign){s.c_w('campaignname',s.campaign,0);}if(s.c_r('campaignname')){s.prop17=s.c_r('campaignname') + ":"s.prop17=s.eVar17 + s.prop3;}s.eVar43=s.getQueryParam("_source");s.eVar2=s.prop2;s.eVar3=s.prop3;s.eVar4=s.prop4;s.eVar5=s.prop5;s.eVar6=s.prop6;s.eVar7=s.prop7;s.eVar8=s.prop8;s.eVar9=s.prop9;s.eVar10=s.prop10;s.eVar11=s.prop11;s.eVar12=s.prop12;s.eVar13=s.prop13;s.eVar14=s.prop14;s.prop15=unescape(unescape(window.location.href));s.eVar15=s.prop15;s.eVar16=s.prop16;s.eVar18=s.prop18;s.eVar19=s.prop19;s.eVar20=s.prop20;s.eVar21=s.prop21;s.prop22=s.prop7+'|'+s.prop2;s.prop23=s.prop7+'|'+s.prop8;s.prop24=s.prop7+'|'+ s.prop10;s.prop25=s.prop10+'|'+s.prop7;s.eVar22=s.prop22;s.eVar23=s.prop23;s.eVar24=s.prop24;s.eVar25=s.prop25;s.eVar26=s.prop26;s.eVar27=s.prop27;s.eVar28=s.prop28;s.eVar29=s.prop29;s.eVar30=s.prop30;s.eVar31=s.prop31;s.prop34=s.getTimeParting('h','-5','2008');s.prop33=s.getTimeParting('d','-5','2008');s.prop32=s.getTimeParting('w','-5','2008');s.eVar32=s.prop32;s.eVar33=s.prop33;s.eVar34=s.prop34;s.prop35=s.getPreviousPage();s.eVar35=s.prop35;s.eVar36=s.pageName;s.prop36=s.eVar35;s.prop38=s.getNewRepeat();s.eVar38=s.prop38;s.prop39=s.getDaysSinceLastVisit('s_lv');s.eVar39=s.prop39;s.prop46=s.prop2+'|'+s.prop16;s.eVar46=s.prop46;s.prop15=unescape(unescape(window.location.href)); s.hier2=s.prop2+'|'+s.prop10+'|'+s.prop3+'|'+s.prop4;s.hier3=set_h3();if(s.events) {if(s.events.indexOf('event1')==-1) {s.events=s.events + ",event1";}} else {s.events="event1";}if(s.campaign) {if(s.campaign.match('widget')){s.eVar45="Olympics";}} else {s.eVar45='';}}s.doPlugins=s_doPlugins;s.getQueryParam=new Function("qp","d",""+"var s=this,v='',i,t;d=d?d:'';while(qp){i=qp.indexOf(',');i=i<0?qp.l"+"ength:i;t=s.gcgi(qp.substring(0,i));if(t)v+=v?d+t:t;qp=qp.substring"+"(i==qp.length?i:i+1)}return v");s.gcgi=new Function("k",""+"var v='',s=this;if(k&&s.wd.location.search){var q=s.wd.location.sea"+"rch.toLowerCase(),qq=q.indexOf('?');q=qq<0?q:q.substring(qq+1);v=s."+"pt(q,'&','cgif',k.toLowerCase())}return v");s.cgif=new Function("t","k",""+"if(t){var s=this,i=t.indexOf('='),sk=i<0?t:t.substring(0,i),sv=i<0?"+"'True':t.substring(i+1);if(sk.toLowerCase()==k)return s.epa(sv)}ret"+"urn ''");s.split=new Function("str","sep",""+"var si=0,sa=new Array(),i;while((str.length>0)&&(sep.length>0)){"+"i=str.indexOf(sep);if((!i)&&(sep!=str.substring(0,sep.length)))"+"break;if(i==-1){sa[si++] = str;break;}sa[si++]=str.substring(0,i);"+"str=str.substring(i+sep.length,str.length)}return sa");s.ia=new Function("ar","v",""+"for(var i=0;i<ar.length;i++){if(ar[i]==v)return i}return -1");s.getPageName=new Function(""+"var s=this,pn=(s.siteID&&(''+s.siteID).length>0)?''+s.siteID:"+"'',l=location,dp=(s.defaultPage)?''+s.defaultPage:'',e="+"(s.pathExcludeDelim)?s.pathExcludeDelim:'',cs=(s.pathConcatDelim)?"+"s.pathConcatDelim:'',q=l.search.substring(1),"+"p=l.pathname.substring(1),x=p.indexOf(e);p=((x<0)?p:p.substring(0,"+"x)).split('/');for(j=0;j<p.length;j++){if(p[j].length>0){if(pn."+"length>0)pn+=cs;pn+=p[j]}else{if(dp.length>0){if(pn.length>0)pn+="+"cs;pn+=dp}}}if(q.length>0){if(s.queryVarsList){var qpa=new Array()"+",qv=s.split(s.queryVarsList,','),qp=s.split(q,'&'),tmp,idx;for(i="+"0;i<qp.length;i++){tmp=s.split(qp[i],'=');qpa[i]=tmp[0]}for(i=0;"+"i<qv.length;i++){idx=s.ia(qpa,qv[i]);if(idx>=0){if(pn.length"+">0)pn+=cs;pn+=qp[idx]}}}}return pn");function set_h3(){h3=new String(document.location.host+document.location.pathname);if(h3.charAt(h3.length-1)=="/"){var temp=new String();for(var i=0;i<h3.length-1;i++){temp+=h3.charAt(i);}h3=temp;}var intIndexOfMatch=h3.indexOf("/");while(intIndexOfMatch!=-1){h3=h3.replace("/","|");intIndexOfMatch=h3.indexOf("/");}return h3;}s.getPreviousPage=new Function("el",""+"var s=this,pid,i,j,e;if(el){if(s.events){while(el){if(pid){break;}i"+"=el.indexOf(',');i=i<0?el.length:i;e=s.events;while(e){j=e.indexOf("+"',');j=j<0?e.length:j;if(e.substring(0,j)==el.substring(0,i)){pid=s"+".p_gpp();}e=e.substring(j==e.length?j:j+1);}el=el.substring(i==el.l"+"ength?i:i+1);}}}else{pid=s.p_gpp();}return pid;");s.p_gpp=new Function(""+"var s=this,p,i;p=s.rq(s.un);i=p.indexOf('pid=')+4;p=p.substring(i,p"+".length);i=p.indexOf('&');p=p.substring(0,i);p=unescape(p);return p"+";");s.getTimeParting=new Function("t","z","y",""+"dc=new Date('1/1/2000');f=15;ne=8;if(dc.getDay()!=6||"+"dc.getMonth()!=0){return'Data Not Available'}else{;z=parseInt(z);"+"if(y=='2009'){f=8;ne=1};gmar=new Date('3/1/'+y);dsts=f-gmar.getDay("+");gnov=new Date('11/1/'+y);dste=ne-gnov.getDay();spr=new Date('3/'"+"+dsts+'/'+y);fl=new Date('11/'+dste+'/'+y);cd=new Date();"+"if(cd>spr&&cd<fl){z=z+1}else{z=z};utc=cd.getTime()+(cd.getTimezoneO"+"ffset()*60000);tz=new Date(utc + (3600000*z));thisy=tz.getFullYear("+");var days=['Sunday','Monday','Tuesday','Wednesday','Thursday','Fr"+"iday','Saturday'];if(thisy!=y){return'Data Not Available'}else{;thi"+"sh=tz.getHours();thismin=tz.getMinutes();thisd=tz.getDay();var dow="+"days[thisd];var ap='AM';var dt='Weekday';var mint='00';if(thismin>3"+"0){mint='30'}if(thish>=12){ap='PM';thish=thish-12};if (thish==0){th"+"ish=12};if(thisd==6||thisd==0){dt='Weekend'};var timestring=thish+'"+":'+mint+ap;var daystring=dow;var endstring=dt;if(t=='h'){return tim"+"estring}if(t=='d'){return daystring};if(t=='w'){return en"+"dstring}}};");//s.getPreviousPage=new Function("el",""//+"var s=this,pid,i,j,e;if(el){if(s.events){while(el){if(pid){break;}i"//+"=el.indexOf(',');i=i<0?el.length:i;e=s.events;while(e){j=e.indexOf("//+"',');j=j<0?e.length:j;if(e.substring(0,j)==el.substring(0,i)){pid=s"//+".p_gpp();}e=e.substring(j==e.length?j:j+1);}el=el.substring(i==el.l"//+"ength?i:i+1);}}}else{pid=s.p_gpp();}return pid;");s.getDaysSinceLastVisit=new Function("c",""+"var s=this,e=new Date(),es=new Date(),cval,cval_s,cval_ss,ct=e.getT"+"ime(),day=24*60*60*1000,f1,f2,f3,f4,f5;e.setTime(ct+3*365*day);es.s"+"etTime(ct+30*60*1000);f0='Cookies Not Supported';f1='First Visit';f"+"2='More than 30 days';f3='More than 7 days';f4='Less than 7 days';f"+"5='Less than 1 day';cval=s.c_r(c);if(cval.length==0){s.c_w(c,ct,e);"+"s.c_w(c+'_s',f1,es);}else{var d=ct-cval;if(d>30*60*1000){if(d>30*da"+"y){s.c_w(c,ct,e);s.c_w(c+'_s',f2,es);}else if(d<30*day+1 && d>7*day"+"){s.c_w(c,ct,e);s.c_w(c+'_s',f3,es);}else if(d<7*day+1 && d>day){s."+"c_w(c,ct,e);s.c_w(c+'_s',f4,es);}else if(d<day+1){s.c_w(c,ct,e);s.c"+"_w(c+'_s',f5,es);}}else{s.c_w(c,ct,e);cval_ss=s.c_r(c+'_s');s.c_w(c"+"+'_s',cval_ss,es);}}cval_s=s.c_r(c+'_s');if(cval_s.length==0) retur"+"n f0;else if(cval_s!=f1&&cval_s!=f2&&cval_s!=f3&&cval_s!=f4&&cval_s"+"!=f5) return '';else return cval_s;");s.getNewRepeat=new Function(""+"var s=this,e=new Date(),cval,ct=e.getTime(),y=e.getYear();e.setTime"+"(ct+30*24*60*60*1000);cval=s.c_r('s_nr');if(cval.length==0){s.c_w("+"'s_nr',ct,e);return 'New';}if(cval.length!=0&&ct-cval<30*60*1000){s"+".c_w('s_nr',ct,e);return 'New';}if(cval<1123916400001){e.setTime(cv"+"al+30*24*60*60*1000);s.c_w('s_nr',ct,e);return 'Repeat';}else retur"+"n 'Repeat';");var s_objectID;function s_c2fe(f){var x='',s=0,e,a,b,c;while(1){e=f.indexOf('"',s);b=f.indexOf('\\',s);c=f.indexOf("\n",s);if(e<0||(b>=0&&b<e))e=b;if(e<0||(c>=0&&c<e))e=c;if(e>=0){x+=(e>s?f.substring(s,e):'')+(e==c?'\\n':'\\'+f.substring(e,e+1));s=e+1}else return x+f.substring(s)}return f}function s_c2fa(f){var s=f.indexOf('(')+1,e=f.indexOf(')'),a='',c;while(s>=0&&s<e){c=f.substring(s,s+1);if(c==',')a+='","';else if(("\n\r\t ").indexOf(c)<0)a+=c;s++}return a?'"'+a+'"':a}function s_c2f(cc){cc=''+cc;var fc='var f=new Function(',s=cc.indexOf(';',cc.indexOf('{')),e=cc.lastIndexOf('}'),o,a,d,q,c,f,h,xfc+=s_c2fa(cc)+',"var s=new Object;';c=cc.substring(s+1,e);s=c.indexOf('function');while(s>=0){d=1;q='';x=0;f=c.substring(s);a=s_c2fa(f);e=o=c.indexOf('{',s);e++;while(d>0){h=c.substring(e,e+1);if(q){if(h==q&&!x)q='';if(h=='\\')x=x?0:1;else x=0}else{if(h=='"'||h=="'")q=h;if(h=='{')d++;if(h=='}')d--}if(d>0)e++}c=c.substring(0,s)+'new Function('+(a?a+',':'')+'"'+s_c2fe(c.substring(o+1,e))+'")'+c.substring(e+1);s=c.indexOf('function')}fc+=s_c2fe(c)+';return s");'eval(fc);return f}function s_gi(un,pg,ss){var c="function s_c(un,pg,s"+"s){var s=this;s.wd=window;if(!s.wd.s_c_in){s.wd.s_c_il=new Array;s."+"wd.s_c_in=0;}s._il=s.wd.s_c_il;s._in=s.wd.s_c_in;s._il[s._in]=s;s.w"+"d.s_c_in++;s.m=function(m){return (''+m).indexOf('{')<0};s.fl=funct"+"ion(x,l){return x?(''+x).substring(0,l):x};s.co=function(o){if(!o)r"+"eturn o;var n=new Object,x;for(x in o)if(x.indexOf('select')<0&&x.i"+"ndexOf('filter')<0)n[x]=o[x];return n};s.num=function(x){x=''+x;for"+"(var p=0;p<x.length;p++)if(('0123456789').indexOf(x.substring(p,p+1"+"))<0)return 0;return 1};s.rep=function(x,o,n){var i=x.indexOf(o),l="+"n.length>0?n.length:1;while(x&&i>=0){x=x.substring(0,i)+n+x.substri"+"ng(i+o.length);i=x.indexOf(o,i+l)}return x};s.ape=function(x){var s"+"=this,i;x=x?s.rep(escape(''+x),'+','%2B'):x;if(x&&s.charSet&&s.em=="+"1&&x.indexOf('%u')<0&&x.indexOf('%U')<0){i=x.indexOf('%');while(i>="+"0){i++;if(('89ABCDEFabcdef').indexOf(x.substring(i,i+1))>=0)return "+"x.substring(0,i)+'u00'+x.substring(i);i=x.indexOf('%',i)}}return x}"+";s.epa=function(x){var s=this;return x?unescape(s.rep(''+x,'+',' ')"+"):x};s.pt=function(x,d,f,a){var s=this,t=x,z=0,y,r;while(t){y=t.ind"+"exOf(d);y=y<0?t.length:y;t=t.substring(0,y);r=s.m(f)?s[f](t,a):f(t,"+"a);if(r)return r;z+=y+d.length;t=x.substring(z,x.length);t=z<x.leng"+"th?t:''}return ''};s.isf=function(t,a){var c=a.indexOf(':');if(c>=0"+")a=a.substring(0,c);if(t.substring(0,2)=='s_')t=t.substring(2);retu"+"rn (t!=''&&t==a)};s.fsf=function(t,a){var s=this;if(s.pt(a,',','isf"+"',t))s.fsg+=(s.fsg!=''?',':'')+t;return 0};s.fs=function(x,f){var s"+"=this;s.fsg='';s.pt(x,',','fsf',f);return s.fsg};s.c_d='';s.c_gdf=f"+"unction(t,a){var s=this;if(!s.num(t))return 1;return 0};s.c_gd=func"+"tion(){var s=this,d=s.wd.location.hostname,n=s.cookieDomainPeriods,"+"p;if(d&&!s.c_d){n=n?parseInt(n):2;n=n>2?n:2;p=d.lastIndexOf('.');wh"+"ile(p>=0&&n>1){p=d.lastIndexOf('.',p-1);n--}s.c_d=p>0&&s.pt(d,'.','"+"c_gdf',0)?d.substring(p):''}return s.c_d};s.c_r=function(k){var s=t"+"his;k=s.ape(k);var c=' '+s.d.cookie,i=c.indexOf(' '+k+'='),e=i<0?i:"+"c.indexOf(';',i),v=i<0?'':s.epa(c.substring(i+2+k.length,e<0?c.leng"+"th:e));return v!='[[B]]'?v:''};s.c_w=function(k,v,e){var s=this,d=s"+".c_gd(),l=s.cookieLifetime,t;v=''+v;l=l?(''+l).toUpperCase():'';if("+"e&&l!='SESSION'&&l!='NONE'){t=(v!=''?parseInt(l?l:0):-60);if(t){e=n"+"ew Date;e.setTime(e.getTime()+(t*1000))}}if(k&&l!='NONE'){s.d.cooki"+"e=k+'='+s.ape(v!=''?v:'[[B]]')+'; path=/;'+(e&&l!='SESSION'?' expir"+"es='+e.toGMTString()+';':'')+(d?' domain='+d+';':'');return s.c_r(k"+")==v}return 0};s.eh=function(o,e,r,f){var s=this,b='s_'+e+'_'+s._in"+",n=-1,l,i,x;if(!s.ehl)s.ehl=new Array;l=s.ehl;for(i=0;i<l.length&&n"+"<0;i++){if(l[i].o==o&&l[i].e==e)n=i}if(n<0){n=i;l[n]=new Object}x=l"+"[n];x.o=o;x.e=e;f=r?x.b:f;if(r||f){x.b=r?0:o[e];x.o[e]=f}if(x.b){x."+"o[b]=x.b;return b}return 0};s.cet=function(f,a,t,o,b){var s=this,r;"+"if(s.isie&&a.apv>=5)eval('try{r=s.m(f)?s[f](a):f(a)}catch(e){r=s.m("+"t)?s[t](e):t(e)}');else{if(s.ismac&&s.u.indexOf('MSIE 4')>=0)r=s.m("+"b)?s[b](a):b(a);else{s.eh(s.wd,'onerror',0,o);r=s.m(f)?s[f](a):f(a)"+";s.eh(s.wd,'onerror',1)}}return r};s.gtfset=function(e){var s=this;"+"return s.tfs};s.gtfsoe=new Function('e','var s=s_c_il['+s._in+'];s."+"eh(window,\"onerror\",1);s.etfs=1;var c=s.t();if(c)s.d.write(c);s.e"+"tfs=0;return true');s.gtfsfb=function(a){return window};s.gtfsf=fun"+"ction(w){var s=this,p=w.parent,l=w.location;s.tfs=w;if(p&&p.locatio"+"n!=l&&p.location.host==l.host){s.tfs=p;return s.gtfsf(s.tfs)}return"+" s.tfs};s.gtfs=function(){var s=this;if(!s.tfs){s.tfs=s.wd;if(!s.et"+"fs)s.tfs=s.cet('gtfsf',s.tfs,'gtfset',s.gtfsoe,'gtfsfb')}return s.t"+"fs};s.ca=function(){var s=this,imn='s_i_'+s.fun;if(s.d.images&&s.ap"+"v>=3&&!s.isopera&&(s.ns6<0||s.apv>=6.1)){s.ios=1;if(!s.d.images[imn"+"]&&(!s.isns||(s.apv<4||s.apv>=5))){s.d.write('<im'+'g name=\"'+imn+"+"'\" height=1 width=1 border=0 alt=\"\">');if(!s.d.images[imn])s.ios"+"=0}}};s.mr=function(sess,q,ta){var s=this,ns=s.visitorNamespace,unc"+"=s.rep(s.fun,'_','-'),imn='s_i_'+s.fun,im,b,e,rs='http'+(s.ssl?'s':"+"'')+'://'+(s.ssl?'osimg':'oimg')+'.nbcuni.com/b/ss/'+s.un+'/1/H"+".2-pdv-2/'+sess+'?[AQB]&ndh=1'+(q?q:'')+(s.q?s.q:'')+'&[AQE]';if(s."+"isie&&!s.ismac){if(s.apv>5.5)rs=s.fl(rs,4095);else rs=s.fl(rs,2047)"+"}if(s.ios){im=s.wd[imn]?s.wd[imn]:s.d.images[imn];if(!im)im=s.wd[im"+"n]=new Image;im.src=rs;if(rs.indexOf('&pe=')>=0&&(!ta||ta=='_self'|"+"|ta=='_top'||(s.wd.name&&ta==s.wd.name))){b=e=new Date;while(e.getT"+"ime()-b.getTime()<500)e=new Date}return ''}return '<im'+'g sr'+'c="+"\"'+rs+'\" width=1 height=1 border=0 alt=\"\">'};s.gg=function(v){v"+"ar s=this;return s.wd['s_'+v]};s.glf=function(t,a){if(t.substring(0"+",2)=='s_')t=t.substring(2);var s=this,v=s.gg(t);if(v)s[t]=v};s.gl=f"+"unction(v){var s=this;s.pt(v,',','glf',0)};s.gv=function(v){var s=t"+"his;return s['vpm_'+v]?s['vpv_'+v]:s[v]};s.havf=function(t,a){var s"+"=this,b=t.substring(0,4),x=t.substring(4),n=parseInt(x),k='g_'+t,m="+"'vpm_'+t,q=t,v=s.linkTrackVars,e=s.linkTrackEvents;s[k]=s.gv(t);if("+"s.lnk||s.eo){v=v?v+','+s.vl_l:'';if(v&&!s.pt(v,',','isf',t))s[k]=''"+";if(t=='events'&&e)s[k]=s.fs(s[k],e)}s[m]=0;if(t=='pageURL')q='g';e"+"lse if(t=='referrer')q='r';else if(t=='vmk')q='vmt';else if(t=='cha"+"rSet'){q='ce';if(s[k]&&s.em==2)s[k]='UTF-8'}else if(t=='visitorName"+"space')q='ns';else if(t=='cookieDomainPeriods')q='cdp';else if(t=='"+"cookieLifetime')q='cl';else if(t=='visitVariableProvider')q='vvp';e"+"lse if(t=='currencyCode')q='cc';else if(t=='channel')q='ch';else if"+"(t=='campaign')q='v0';else if(s.num(x)) {if(b=='prop')q='c'+n;else "+"if(b=='eVar')q='v'+n;else if(b=='hier'){q='h'+n;s[k]=s.fl(s[k],255)"+"}}if(s[k]&&t!='linkName'&&t!='linkType')s.qav+='&'+q+'='+s.ape(s[k]"+");return ''};s.hav=function(){var s=this;s.qav='';s.pt(s.vl_t,',','"+"havf',0);return s.qav};s.lnf=function(t,h){t=t?t.toLowerCase():'';h"+"=h?h.toLowerCase():'';var te=t.indexOf('=');if(t&&te>0&&h.indexOf(t"+".substring(te+1))>=0)return t.substring(0,te);return ''};s.ln=funct"+"ion(h){var s=this,n=s.linkNames;if(n)return s.pt(n,',','lnf',h);ret"+"urn ''};s.ltdf=function(t,h){t=t?t.toLowerCase():'';h=h?h.toLowerCa"+"se():'';var qi=h.indexOf('?');h=qi>=0?h.substring(0,qi):h;if(t&&h.s"+"ubstring(h.length-(t.length+1))=='.'+t)return 1;return 0};s.ltef=fu"+"nction(t,h){t=t?t.toLowerCase():'';h=h?h.toLowerCase():'';if(t&&h.i"+"ndexOf(t)>=0)return 1;return 0};s.lt=function(h){var s=this,lft=s.l"+"inkDownloadFileTypes,lef=s.linkExternalFilters,lif=s.linkInternalFi"+"lters;lif=lif?lif:s.wd.location.hostname;h=h.toLowerCase();if(s.tra"+"ckDownloadLinks&&lft&&s.pt(lft,',','ltdf',h))return 'd';if(s.trackE"+"xternalLinks&&(lef||lif)&&(!lef||s.pt(lef,',','ltef',h))&&(!lif||!s"+".pt(lif,',','ltef',h)))return 'e';return ''};s.lc=new Function('e',"+"'var s=s_c_il['+s._in+'],b=s.eh(this,\"onclick\");s.lnk=s.co(this);"+"s.t();s.lnk=0;if(b)return this[b](e);return true');s.bc=new Functio"+"n('e','var s=s_c_il['+s._in+'];if(s.d&&s.d.all&&s.d.all.cppXYctnr)r"+"eturn;s.eo=e.srcElement?e.srcElement:e.target;s.t();s.eo=0');s.ot=f"+"unction(o){var a=o.type,b=o.tagName;return (a&&a.toUpperCase?a:b&&b"+".toUpperCase?b:o.href?'A':'').toUpperCase()};s.oid=function(o){var "+"s=this,t=s.ot(o),p=o.protocol,c=o.onclick,n='',x=0;if(!o.s_oid){if("+"o.href&&(t=='A'||t=='AREA')&&(!c||!p||p.toLowerCase().indexOf('java"+"script')<0))n=o.href;else if(c){n=s.rep(s.rep(s.rep(s.rep(''+c,\"\\"+"r\",''),\"\\n\",''),\"\\t\",''),' ','');x=2}else if(o.value&&(t=='I"+"NPUT'||t=='SUBMIT')){n=o.value;x=3}else if(o.src&&t=='IMAGE')n=o.sr"+"c;if(n){o.s_oid=s.fl(n,100);o.s_oidt=x}}return o.s_oid};s.rqf=funct"+"ion(t,un){var s=this,e=t.indexOf('='),u=e>=0?','+t.substring(0,e)+'"+",':'';return u&&u.indexOf(','+un+',')>=0?s.epa(t.substring(e+1)):''"+"};s.rq=function(un){var s=this,c=un.indexOf(','),v=s.c_r('s_sq'),q="+"'';if(c<0)return s.pt(v,'&','rqf',un);return s.pt(un,',','rq',0)};s"+".sqp=function(t,a){var s=this,e=t.indexOf('='),q=e<0?'':s.epa(t.sub"+"string(e+1));s.sqq[q]='';if(e>=0)s.pt(t.substring(0,e),',','sqs',q)"+";return 0};s.sqs=function(un,q){var s=this;s.squ[un]=q;return 0};s."+"sq=function(q){var s=this,k='s_sq',v=s.c_r(k),x,c=0;s.sqq=new Objec"+"t;s.squ=new Object;s.sqq[q]='';s.pt(v,'&','sqp',0);s.pt(s.un,',','s"+"qs',q);v='';for(x in s.squ)s.sqq[s.squ[x]]+=(s.sqq[s.squ[x]]?',':''"+")+x;for(x in s.sqq)if(x&&s.sqq[x]&&(x==q||c<2)){v+=(v?'&':'')+s.sqq"+"[x]+'='+s.ape(x);c++}return s.c_w(k,v,0)};s.wdl=new Function('e','v"+"ar s=s_c_il['+s._in+'],r=true,b=s.eh(s.wd,\"onload\"),i,o,oc;if(b)r"+"=this[b](e);for(i=0;i<s.d.links.length;i++){o=s.d.links[i];oc=o.onc"+"lick?\"\"+o.onclick:\"\";if((oc.indexOf(\"s_gs(\")<0||oc.indexOf(\""+".s_oc(\")>=0)&&oc.indexOf(\".tl(\")<0)s.eh(o,\"onclick\",0,s.lc);}r"+"eturn r');s.wds=function(){var s=this;if(s.apv>3&&(!s.isie||!s.isma"+"c||s.apv>=5)){if(s.b&&s.b.attachEvent)s.b.attachEvent('onclick',s.b"+"c);else if(s.b&&s.b.addEventListener)s.b.addEventListener('click',s"+".bc,false);else s.eh(s.wd,'onload',0,s.wdl)}};s.vs=function(x){var "+"s=this,v=s.visitorSampling,g=s.visitorSamplingGroup,k='s_vsn_'+s.un"+"+(g?'_'+g:''),n=s.c_r(k),e=new Date,y=e.getYear();e.setYear(y+10+(y"+"<1900?1900:0));if(v){v*=100;if(!n){if(!s.c_w(k,x,e))return 0;n=x}if"+"(n%10000>v)return 0}return 1};s.dyasmf=function(t,m){if(t&&m&&m.ind"+"exOf(t)>=0)return 1;return 0};s.dyasf=function(t,m){var s=this,i=t?"+"t.indexOf('='):-1,n,x;if(i>=0&&m){var n=t.substring(0,i),x=t.substr"+"ing(i+1);if(s.pt(x,',','dyasmf',m))return n}return 0};s.uns=functio"+"n(){var s=this,x=s.dynamicAccountSelection,l=s.dynamicAccountList,m"+"=s.dynamicAccountMatch,n,i;s.un.toLowerCase();if(x&&l){if(!m)m=s.wd"+".location.host;if(!m.toLowerCase)m=''+m;l=l.toLowerCase();m=m.toLow"+"erCase();n=s.pt(l,';','dyasf',m);if(n)s.un=n}i=s.un.indexOf(',');s."+"fun=i<0?s.un:s.un.substring(0,i)};s.t=function(){var s=this,trk=1,t"+"m=new Date,sed=Math&&Math.random?Math.floor(Math.random()*100000000"+"00000):tm.getTime(),sess='s'+Math.floor(tm.getTime()/10800000)%10+s"+"ed,yr=tm.getYear(),vt=tm.getDate()+'/'+tm.getMonth()+'/'+(yr<1900?y"+"r+1900:yr)+' '+tm.getHours()+':'+tm.getMinutes()+':'+tm.getSeconds("+")+' '+tm.getDay()+' '+tm.getTimezoneOffset(),tfs=s.gtfs(),ta='',q='"+"',qs='';s.uns();if(!s.q){var tl=tfs.location,x='',c='',v='',p='',bw"+"='',bh='',j='1.0',k=s.c_w('s_cc','true',0)?'Y':'N',hp='',ct='',pn=0"+",ps;if(s.apv>=4)x=screen.width+'x'+screen.height;if(s.isns||s.isope"+"ra){if(s.apv>=3){j='1.1';v=s.n.javaEnabled()?'Y':'N';if(s.apv>=4){j"+"='1.2';c=screen.pixelDepth;bw=s.wd.innerWidth;bh=s.wd.innerHeight;i"+"f(s.apv>=4.06)j='1.3'}}s.pl=s.n.plugins}else if(s.isie){if(s.apv>=4"+"){v=s.n.javaEnabled()?'Y':'N';j='1.2';c=screen.colorDepth;if(s.apv>"+"=5){bw=s.d.documentElement.offsetWidth;bh=s.d.documentElement.offse"+"tHeight;j='1.3';if(!s.ismac&&s.b){s.b.addBehavior('#default#homePag"+"e');hp=s.b.isHomePage(tl)?\"Y\":\"N\";s.b.addBehavior('#default#cli"+"entCaps');ct=s.b.connectionType}}}else r=''}if(s.pl)while(pn<s.pl.l"+"ength&&pn<30){ps=s.fl(s.pl[pn].name,100)+';';if(p.indexOf(ps)<0)p+="+"ps;pn++}s.q=(x?'&s='+s.ape(x):'')+(c?'&c='+s.ape(c):'')+(j?'&j='+j:"+"'')+(v?'&v='+v:'')+(k?'&k='+k:'')+(bw?'&bw='+bw:'')+(bh?'&bh='+bh:'"+"')+(ct?'&ct='+s.ape(ct):'')+(hp?'&hp='+hp:'')+(p?'&p='+s.ape(p):'')"+"}if(s.usePlugins)s.doPlugins(s);var l=s.wd.location,r=tfs.document."+"referrer;if(!s.pageURL)s.pageURL=s.fl(l?l:'',255);if(!s.referrer)s."+"referrer=s.fl(r?r:'',255);if(s.lnk||s.eo){var o=s.eo?s.eo:s.lnk;if("+"!o)return '';var p=s.gv('pageName'),w=1,t=s.ot(o),n=s.oid(o),x=o.s_"+"oidt,h,l,i,oc;if(s.eo&&o==s.eo){while(o&&!n&&t!='BODY'){o=o.parentE"+"lement?o.parentElement:o.parentNode;if(!o)return '';t=s.ot(o);n=s.o"+"id(o);x=o.s_oidt}oc=o.onclick?''+o.onclick:'';if((oc.indexOf(\"s_gs"+"(\")>=0&&oc.indexOf(\".s_oc(\")<0)||oc.indexOf(\".tl(\")>=0)return "+"''}ta=o.target;h=o.href?o.href:'';i=h.indexOf('?');h=s.linkLeaveQue"+"ryString||i<0?h:h.substring(0,i);l=s.linkName?s.linkName:s.ln(h);t="+"s.linkType?s.linkType.toLowerCase():s.lt(h);if(t&&(h||l))q+='&pe=ln"+"k_'+(t=='d'||t=='e'?s.ape(t):'o')+(h?'&pev1='+s.ape(h):'')+(l?'&pev"+"2='+s.ape(l):'');else trk=0;if(s.trackInlineStats){if(!p){p=s.gv('p"+"ageURL');w=0}t=s.ot(o);i=o.sourceIndex;if(s.gg('objectID')){n=s.gg("+"'objectID');x=1;i=1}if(p&&n&&t)qs='&pid='+s.ape(s.fl(p,255))+(w?'&p"+"idt='+w:'')+'&oid='+s.ape(s.fl(n,100))+(x?'&oidt='+x:'')+'&ot='+s.a"+"pe(t)+(i?'&oi='+i:'')}}if(!trk&&!qs)return '';var code='';if(trk&&s"+".vs(sed))code=s.mr(sess,(vt?'&t='+s.ape(vt):'')+s.hav()+q+(qs?qs:s."+"rq(s.un)),ta);s.sq(trk?'':qs);s.lnk=s.eo=s.linkName=s.linkType=s.wd"+".s_objectID='';return code};s.tl=function(o,t,n){var s=this;s.lnk=s"+".co(o);s.linkType=t;s.linkName=n;s.t()};s.ssl=(s.wd.location.protoc"+"ol.toLowerCase().indexOf('https')>=0);s.d=document;s.b=s.d.body;s.n"+"=navigator;s.u=s.n.userAgent;s.ns6=s.u.indexOf('Netscape6/');var ap"+"n=s.n.appName,v=s.n.appVersion,ie=v.indexOf('MSIE '),i;if(v.indexOf"+"('Opera')>=0||s.u.indexOf('Opera')>=0)apn='Opera';s.isie=(apn=='Mic"+"rosoft Internet Explorer');s.isns=(apn=='Netscape');s.isopera=(apn="+"='Opera');s.ismac=(s.u.indexOf('Mac')>=0);if(ie>0){s.apv=parseInt(i"+"=v.substring(ie+5));if(s.apv>3)s.apv=parseFloat(i)}else if(s.ns6>0)"+"s.apv=parseFloat(s.u.substring(s.ns6+10));else s.apv=parseFloat(v);"+"s.em=0;if(String.fromCharCode){i=escape(String.fromCharCode(256)).t"+"oUpperCase();s.em=(i=='%C4%80'?2:(i=='%U0100'?1:0))}s.un=un;s.uns()"+";s.vl_l='vmk,charSet,visitorNamespace,cookieDomainPeriods,cookieLif"+"etime,visitVariableProvider,pageName,pageURL,referrer,currencyCode,"+"purchaseID';s.vl_t=s.vl_l+',channel,server,pageType,campaign,state,"+"zip,events,products,linkName,linkType';for(var n=1;n<51;n++)s.vl_t+"+"=',prop'+n+',eVar'+n+',hier'+n;s.vl_g=s.vl_t+',trackDownloadLinks,t"+"rackExternalLinks,trackInlineStats,linkLeaveQueryString,linkDownloa"+"dFileTypes,linkExternalFilters,linkInternalFilters,linkNames';if(pg"+")s.gl(s.vl_g);if(!ss){s.wds();s.ca()}}",l=window.s_c_il,n=navigator,u=n.userAgent,v=n.appVersion,e=v.indexOf('MSIE '),m=u.indexOf('Netscape6/'),a,i,s;if(l)for(i=0;i<l.length;i++){s=l[i];s.uns();if(s.un==un)return s;else if(s.pt(s.un,',','isf',un)){s=s.co(s);s.un=un;s.uns();return s}}if(e>0){a=parseInt(i=v.substring(e+5));if(a>3)a=parseFloat(i)}else if(m>0)a=parseFloat(u.substring(m+10));else a=parseFloat(v);if(a>=5&&v.indexOf('Opera')<0&&u.indexOf('Opera')<0){eval(c);return new s_c(un,pg,ss)}else s=s_c2f(c);return s(un,pg,ss)}var Results={changeTableVis:function(id,tableClass){if($(id)){var paras=$A($$('.tohide'));paras.each(Element.hide);$(id).show();}},hideClass:function(){var paras=$A($$('.tohide'));paras.each(Element.hide);},showTables:function(par) {$('a1').show();$('a2').show();$('a13').show();var opt=$('maledropdown').options[$('maledropdown').selectedIndex].value;var countRowXTable1,countRowXTable2,countRowXTable3=0;for(i=0;i<par;i++){if(opt=='MP') {$$('.MF').invoke('hide');$$('.MP').invoke('show');countRowXTable2--;countRowXTable3--;}else if(opt=='MF') {$$('.MP').invoke('hide');$$('.MF').invoke('show');countRowXTable1--;countRowXTable3--;}else {countRowXTable3--;}}if(countRowXTable1==par){$('a1').hide();}if(countRowXTable2==par){$('a2').hide();}if(countRowXTable3==par){$('a13').hide();}}};function advtoggleImgStat(obj,img1,img2) {if(obj.src.indexOf(img1)>0) {obj.src=img2;} else {obj.src=img1;}}function openStat(num){var tdid='cap'+num;$(tdid).toggle();tdid= 'expColl'+num;advtoggleImgStat($(tdid),'/imgml/icons/alertscollapse.gif','/imgml/icons/alertsexpand.gif');}var Statistics={filter:function(){box=document.forms[0].TeamPicker;team=box.options[box.selectedIndex].value;if(team){if(team=='all'){$$('.Statistics').invoke('show');}else{$$('.Statistics').invoke('hide');$(team).show();}}}};var VideoPlayerLocalization={m_enabled:false,m_banned:false,m_cb:undefined,r:'',isEnabled:function(){return this.m_enabled},isBanned:function(){return this.m_banned},initialize:function(postponed,callback) {var vb=Cookie.get('VB');if(vb!==undefined&&vb!=null&&vb!=''){this.m_banned=true;this.m_enabled=false;return true;}var pa=Cookie.get('PA');if(pa!==undefined&&pa!=null&&pa!=''){if(pa=='1')this.m_enabled=true;elsethis.m_enabled=false;return true;}this.m_cb=callback;if(this.analizeReferrer())return true;if(postponed===undefined||postponed==null)postponed=false;var cv=Cookie.get('LOCI');if(cv===undefined||cv==null||cv==''){this.m_enabled=false;return true;}else{var li=Localization.loadCookie();var pi=new ProviderInfo(li.provider);if(pi.id===undefined||pi.id==null)return true;if(postponed){setTimeout(this.requestAuthorization.bind(this,pi.id),1000);return true;}else{this.requestAuthorization(pi.id);return false;}}return true;},analizeReferrer:function(){var t=this;t.r='';try{t.r=window.document.referrer.toLowerCase();}catch(e){}if(t.r===undefined||t.r==null||t.r=='')return false;if(t.r.indexOf(".nbcolympics.com")!=-1)return false;if(t.checkReferrer("www.hargrayolympics.com","02620"))return true;if(t.checkReferrer("homepage.bresnan.net/olympics","09540"))return true;if(t.checkReferrer("www.onelinkpr.net/index.php","17746"))return true;return false;},checkReferrer:function(u,m){if(this.r.indexOf(u)!=-1){this.m_enabled=true;Cookie.set('PA','1');Cookie.set('MSO',m);return true;}return false;},requestAuthorization:function(id){new Ajax.Request('/getlocal/library/provider='+id+'/_status.html',{method:'get',onComplete:this.onInitCB.bind(this)});},onInitCB:function(t){try{if(200==t.status&&t.responseText.indexOf('1')==0){this.m_enabled=true;Cookie.set('PA','1',50);try{Cookie.set('MSO',t.responseText.gsub('\n','').gsub('\r','').split(';')[1],50)}catch(e){}}}catch(e){}if(this.m_cb!==undefined&&this.m_cb!=null)this.m_cb();}}
