var s_account = 'ctvolympicsglobal,ctvolympicsfr';
var dcSite = 'ctv.ctvolympics.ca';
var cookieDomain = '.ctvolympics.ca';
var s_linkInternalFilters = 'javascript:,ctvolympics.ca';
var fb_apiKey = 'a59a2af36e749f7f592e42b7569d6618';
var css_browser_selector = function() {
    var t = this; var ua = navigator.userAgent.toLowerCase(); var is = function(x) { return ua.indexOf(x) != -1; };
    var h = document.getElementsByTagName('html')[0]
    var b = (ua.indexOf("opera/9") > -1) ? 'opera opera9' : (ua.indexOf("opera 8") > -1) ? 'opera opera8' : (ua.indexOf("opera 7") > -1) ? 'opera opera7' : (ua.indexOf("msie 8") > -1) ? 'ie ie8 ie7 ' : (ua.indexOf("msie 7") > -1) ? 'ie ie7' : (ua.indexOf("msie 6") > -1) ? 'ie ie6' : (ua.indexOf("msie 5.5") > -1) ? 'ie ie55' : (ua.indexOf("msie 5.23") > -1) ? 'ie ie523' : (ua.indexOf("msie 5.0") > -1) ? 'ie ie5' : (ua.indexOf("chrome") > -1) ? 'safari chrome' : (ua.indexOf("safari") > -1 && ua.indexOf("version/3.") > -1 && ua.indexOf("version/3.") < ua.indexOf("safari")) ? 'safari safari3' : (ua.indexOf("safari") > -1) ? 'safari safari2' : (ua.indexOf("seamonkey") > -1) ? 'seamonkey gecko' : (ua.indexOf("netscape") > -1) ? 'netscape gecko' : (ua.indexOf("firefox") > -1) ? 'firefox gecko' : (ua.indexOf("gecko") > -1) ? 'gecko' : '', os = (is('x11') || is('linux')) ? ' linux' : is('mac') ? ' mac' : is('win') ? ' win' : '';
    var c = b + os + ' js'; h.className += h.className ? ' ' + c : c;
    t.ver = navigator.appVersion; t.agent = navigator.userAgent; t.mac = ua.indexOf("mac") > -1; t.pc = ua.indexOf("win") > -1; t.opera = ua.indexOf("opera") > -1;
    t.opera9 = ua.indexOf("opera/9") > -1; t.opera8 = ua.indexOf("opera 8") > -1; t.opera7 = ua.indexOf("opera 7") > -1; t.ie8 = (ua.indexOf("msie 8") > -1 && !t.opera) ? 1 : 0; t.ie7 = (ua.indexOf("msie 7") > -1 && !t.opera) ? 1 : 0; t.ie6 = (ua.indexOf("msie 6") > -1 && !t.opera) ? 1 : 0; t.ie55 = (ua.indexOf("msie 5.5") > -1 && !t.opera) ? 1 : 0; t.ie523 = (ua.indexOf("msie 5.23") > -1) ? 1 : 0; t.ie4 = (ua.indexOf("msie 4") > -1) ? 1 : 0; t.ie3 = (ua.indexOf("msie 3") > -1) ? 1 : 0; t.ie5 = (ua.indexOf("msie 5.0") > -1 && !t.ie55 && !t.ie523) ? 1 : 0; t.ns71 = (ua.indexOf("netscape/7.1") > -1) ? 1 : 0; t.safari3 = (ua.indexOf("safari") > -1 && ua.indexOf("version/3.") > -1 && ua.indexOf("version/3.") < ua.indexOf("safari")) ? 1 : 0; t.safari2 = (ua.indexOf("safari") > -1 && ua.indexOf("version/") == -1) ? 1 : 0; t.chrome = (ua.indexOf("chrome") > -1) ? 1 : 0; t.safari = (t.safari2 || t.safari3); t.ie = (t.ie8 || t.ie7 || t.ie55 || t.ie5 || t.ie6 || t.ie523 || t.ie4 || t.ie3); t.gecko = (ua.indexOf("gecko") > -1 & !t.ie) ? 1 : 0; t.ns = (t.ns71); t.ieOld = (t.ie55 || t.ie5 || t.ie523 || t.ie4 || t.ie3); t.ajaxaware = (t.opera || t.ie8 || t.ie7 || t.ie6 || t.safari || t.gecko || t.chrome) ? 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(A) { return A } }; if (Prototype.Browser.MobileSafari) { Prototype.BrowserFeatures.SpecificElementExtensions = false } if (Prototype.Browser.WebKit) { Prototype.BrowserFeatures.XPath = false } var Class = { create: function() { var E = null, D = $A(arguments); if (Object.isFunction(D[0])) { E = D.shift() } function A() { this.initialize.apply(this, arguments) } Object.extend(A, Class.Methods); A.superclass = E; A.subclasses = []; if (E) { var B = function() { }; B.prototype = E.prototype; A.prototype = new B; E.subclasses.push(A) } for (var C = 0; C < D.length; C++) { A.addMethods(D[C]) } if (!A.prototype.initialize) { A.prototype.initialize = Prototype.emptyFunction } A.prototype.constructor = A; return A } }; Class.Methods = { addMethods: function(G) { var C = this.superclass && this.superclass.prototype; var B = Object.keys(G); if (!Object.keys({ toString: true }).length) { B.push("toString", "valueOf") } for (var A = 0, D = B.length; A < D; A++) { var F = B[A], E = G[F]; if (C && Object.isFunction(E) && E.argumentNames().first() == "$super") { var H = E, E = Object.extend((function(I) { return function() { return C[I].apply(this, arguments) } })(F).wrap(H), { valueOf: function() { return H }, toString: function() { return H.toString() } }) } this.prototype[F] = E } return this } }; var Abstract = {}; Object.extend = function(A, C) { for (var B in C) { A[B] = C[B] } return A }; Object.extend(Object, { inspect: function(A) { try { if (A === undefined) { return "undefined" } if (A === null) { return "null" } return A.inspect ? A.inspect() : A.toString() } catch (B) { if (B instanceof RangeError) { return "..." } throw B } }, toJSON: function(A) { var C = typeof A; switch (C) { case "undefined": case "function": case "unknown": return; case "boolean": return A.toString() } if (A === null) { return "null" } if (A.toJSON) { return A.toJSON() } if (Object.isElement(A)) { return } var B = []; for (var E in A) { var D = Object.toJSON(A[E]); if (D !== undefined) { B.push(E.toJSON() + ": " + D) } } return "{" + B.join(", ") + "}" }, toQueryString: function(A) { return $H(A).toQueryString() }, toHTML: function(A) { return A && A.toHTML ? A.toHTML() : String.interpret(A) }, keys: function(A) { var B = []; for (var C in A) { B.push(C) } return B }, values: function(B) { var A = []; for (var C in B) { A.push(B[C]) } return A }, clone: function(A) { return Object.extend({}, A) }, isElement: function(A) { return A && A.nodeType == 1 }, isArray: function(A) { return A && A.constructor === Array }, isHash: function(A) { return A instanceof Hash }, isFunction: function(A) { return typeof A == "function" }, isString: function(A) { return typeof A == "string" }, isNumber: function(A) { return typeof A == "number" }, isUndefined: function(A) { return typeof A == "undefined" } }); Object.extend(Function.prototype, { argumentNames: function() { var A = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip"); return A.length == 1 && !A[0] ? [] : A }, bind: function() { if (arguments.length < 2 && arguments[0] === undefined) { return this } var A = this, C = $A(arguments), B = C.shift(); return function() { return A.apply(B, C.concat($A(arguments))) } }, bindAsEventListener: function() { var A = this, C = $A(arguments), B = C.shift(); return function(D) { return A.apply(B, [D || window.event].concat(C)) } }, curry: function() { if (!arguments.length) { return this } var A = this, B = $A(arguments); return function() { return A.apply(this, B.concat($A(arguments))) } }, delay: function() { var A = this, B = $A(arguments), C = B.shift() * 1000; return window.setTimeout(function() { return A.apply(A, B) }, C) }, wrap: function(B) { var A = this; return function() { return B.apply(this, [A.bind(this)].concat($A(arguments))) } }, methodize: function() { if (this._methodized) { return this._methodized } var A = this; return this._methodized = function() { return A.apply(null, [this].concat($A(arguments))) } } }); Function.prototype.defer = Function.prototype.delay.curry(0.01); Date.prototype.toJSON = function() { return '"' + this.getUTCFullYear() + "-" + (this.getUTCMonth() + 1).toPaddedString(2) + "-" + this.getUTCDate().toPaddedString(2) + "T" + this.getUTCHours().toPaddedString(2) + ":" + this.getUTCMinutes().toPaddedString(2) + ":" + this.getUTCSeconds().toPaddedString(2) + 'Z"' }; var Try = { these: function() { var C; for (var B = 0, D = arguments.length; B < D; B++) { var A = arguments[B]; try { C = A(); break } catch (E) { } } return C } }; RegExp.prototype.match = RegExp.prototype.test; RegExp.escape = function(A) { return String(A).replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1") }; var PeriodicalExecuter = Class.create({ initialize: function(B, A) { this.callback = B; this.frequency = A; this.currentlyExecuting = false; this.registerCallback() }, registerCallback: function() { this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000) }, execute: function() { this.callback(this) }, stop: function() { if (!this.timer) { return } clearInterval(this.timer); this.timer = null }, onTimerEvent: function() { if (!this.currentlyExecuting) { try { this.currentlyExecuting = true; this.execute() } finally { this.currentlyExecuting = false } } } }); Object.extend(String, { interpret: function(A) { return A == null ? "" : String(A) }, specialChar: { "\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", "\\": "\\\\"} }); Object.extend(String.prototype, { gsub: function(E, C) { var A = "", D = this, B; C = arguments.callee.prepareReplacement(C); while (D.length > 0) { if (B = D.match(E)) { A += D.slice(0, B.index); A += String.interpret(C(B)); D = D.slice(B.index + B[0].length) } else { A += D, D = "" } } return A }, sub: function(C, A, B) { A = this.gsub.prepareReplacement(A); B = B === undefined ? 1 : B; return this.gsub(C, function(D) { if (--B < 0) { return D[0] } return A(D) }) }, scan: function(B, A) { this.gsub(B, A); return String(this) }, truncate: function(B, A) { B = B || 30; A = A === undefined ? "..." : A; return this.length > B ? this.slice(0, B - A.length) + A : String(this) }, strip: function() { return this.replace(/^\s+/, "").replace(/\s+$/, "") }, stripTags: function() { return this.replace(/<\/?[^>]+>/gi, "") }, stripScripts: function() { return this.replace(new RegExp(Prototype.ScriptFragment, "img"), "") }, extractScripts: function() { var B = new RegExp(Prototype.ScriptFragment, "img"); var A = new RegExp(Prototype.ScriptFragment, "im"); return (this.match(B) || []).map(function(C) { return (C.match(A) || ["", ""])[1] }) }, evalScripts: function() { return this.extractScripts().map(function(script) { return eval(script) }) }, escapeHTML: function() { var A = arguments.callee; A.text.data = this; return A.div.innerHTML }, unescapeHTML: function() { var A = new Element("div"); A.innerHTML = this.stripTags(); return A.childNodes[0] ? (A.childNodes.length > 1 ? $A(A.childNodes).inject("", function(B, C) { return B + C.nodeValue }) : A.childNodes[0].nodeValue) : "" }, toQueryParams: function(B) { var A = this.strip().match(/([^?#]*)(#.*)?$/); if (!A) { return {} } return A[1].split(B || "&").inject({}, function(E, F) { if ((F = F.split("="))[0]) { var C = decodeURIComponent(F.shift()); var D = F.length > 1 ? F.join("=") : F[0]; if (D != undefined) { D = decodeURIComponent(D) } if (C in E) { if (!Object.isArray(E[C])) { E[C] = [E[C]] } E[C].push(D) } else { E[C] = D } } return E }) }, toArray: function() { return this.split("") }, succ: function() { return this.slice(0, this.length - 1) + String.fromCharCode(this.charCodeAt(this.length - 1) + 1) }, times: function(A) { return A < 1 ? "" : new Array(A + 1).join(this) }, camelize: function() { var D = this.split("-"), A = D.length; if (A == 1) { return D[0] } var C = this.charAt(0) == "-" ? D[0].charAt(0).toUpperCase() + D[0].substring(1) : D[0]; for (var B = 1; B < A; B++) { C += D[B].charAt(0).toUpperCase() + D[B].substring(1) } return C }, capitalize: function() { return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase() }, underscore: function() { return this.gsub(/::/, "/").gsub(/([A-Z]+)([A-Z][a-z])/, "#{1}_#{2}").gsub(/([a-z\d])([A-Z])/, "#{1}_#{2}").gsub(/-/, "_").toLowerCase() }, dasherize: function() { return this.gsub(/_/, "-") }, inspect: function(B) { var A = this.gsub(/[\x00-\x1f\\]/, function(C) { var D = String.specialChar[C[0]]; return D ? D : "\\u00" + C[0].charCodeAt().toPaddedString(2, 16) }); if (B) { return '"' + A.replace(/"/g, '\\"') + '"' } return "'" + A.replace(/'/g, "\\'") + "'" }, toJSON: function() { return this.inspect(true) }, unfilterJSON: function(A) { return this.sub(A || Prototype.JSONFilter, "#{1}") }, isJSON: function() { var A = this.replace(/\\./g, "@").replace(/"[^"\\\n\r]*"/g, ""); return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(A) }, evalJSON: function(sanitize) { var json = this.unfilterJSON(); try { if (!sanitize || json.isJSON()) { return eval("(" + json + ")") } } catch (e) { } throw new SyntaxError("Badly formed JSON string: " + this.inspect()) }, include: function(A) { return this.indexOf(A) > -1 }, startsWith: function(A) { return this.indexOf(A) === 0 }, endsWith: function(A) { var B = this.length - A.length; return B >= 0 && this.lastIndexOf(A) === B }, empty: function() { return this == "" }, blank: function() { return /^\s*$/.test(this) }, interpolate: function(A, B) { return new Template(this, B).evaluate(A) } }); if (Prototype.Browser.WebKit || Prototype.Browser.IE) { Object.extend(String.prototype, { escapeHTML: function() { return this.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;") }, unescapeHTML: function() { return this.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">") } }) } String.prototype.gsub.prepareReplacement = function(B) { if (Object.isFunction(B)) { return B } var A = new Template(B); return function(C) { return A.evaluate(C) } }; String.prototype.parseQuery = String.prototype.toQueryParams; Object.extend(String.prototype.escapeHTML, { div: document.createElement("div"), text: document.createTextNode("") }); with (String.prototype.escapeHTML) { div.appendChild(text) } var Template = Class.create({ initialize: function(A, B) { this.template = A.toString(); this.pattern = B || Template.Pattern }, evaluate: function(A) { if (Object.isFunction(A.toTemplateReplacements)) { A = A.toTemplateReplacements() } return this.template.gsub(this.pattern, function(D) { if (A == null) { return "" } var F = D[1] || ""; if (F == "\\") { return D[2] } var B = A, G = D[3]; var E = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/, D = E.exec(G); if (D == null) { return F } while (D != null) { var C = D[1].startsWith("[") ? D[2].gsub("\\\\]", "]") : D[1]; B = B[C]; if (null == B || "" == D[3]) { break } G = G.substring("[" == D[3] ? D[1].length : D[0].length); D = E.exec(G) } return F + String.interpret(B) } .bind(this)) } }); Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; var $break = {}; var Enumerable = { each: function(C, B) { var A = 0; C = C.bind(B); try { this._each(function(E) { C(E, A++) }) } catch (D) { if (D != $break) { throw D } } return this }, eachSlice: function(D, C, B) { C = C ? C.bind(B) : Prototype.K; var A = -D, E = [], F = this.toArray(); while ((A += D) < F.length) { E.push(F.slice(A, A + D)) } return E.collect(C, B) }, all: function(C, B) { C = C ? C.bind(B) : Prototype.K; var A = true; this.each(function(E, D) { A = A && !!C(E, D); if (!A) { throw $break } }); return A }, any: function(C, B) { C = C ? C.bind(B) : Prototype.K; var A = false; this.each(function(E, D) { if (A = !!C(E, D)) { throw $break } }); return A }, collect: function(C, B) { C = C ? C.bind(B) : Prototype.K; var A = []; this.each(function(E, D) { A.push(C(E, D)) }); return A }, detect: function(C, B) { C = C.bind(B); var A; this.each(function(E, D) { if (C(E, D)) { A = E; throw $break } }); return A }, findAll: function(C, B) { C = C.bind(B); var A = []; this.each(function(E, D) { if (C(E, D)) { A.push(E) } }); return A }, grep: function(D, C, B) { C = C ? C.bind(B) : Prototype.K; var A = []; if (Object.isString(D)) { D = new RegExp(D) } this.each(function(F, E) { if (D.match(F)) { A.push(C(F, E)) } }); return A }, include: function(A) { if (Object.isFunction(this.indexOf)) { if (this.indexOf(A) != -1) { return true } } var B = false; this.each(function(C) { if (C == A) { B = true; throw $break } }); return B }, inGroupsOf: function(B, A) { A = A === undefined ? null : A; return this.eachSlice(B, function(C) { while (C.length < B) { C.push(A) } return C }) }, inject: function(A, C, B) { C = C.bind(B); this.each(function(E, D) { A = C(A, E, D) }); return A }, invoke: function(B) { var A = $A(arguments).slice(1); return this.map(function(C) { return C[B].apply(C, A) }) }, max: function(C, B) { C = C ? C.bind(B) : Prototype.K; var A; this.each(function(E, D) { E = C(E, D); if (A == undefined || E >= A) { A = E } }); return A }, min: function(C, B) { C = C ? C.bind(B) : Prototype.K; var A; this.each(function(E, D) { E = C(E, D); if (A == undefined || E < A) { A = E } }); return A }, partition: function(D, B) { D = D ? D.bind(B) : Prototype.K; var C = [], A = []; this.each(function(F, E) { (D(F, E) ? C : A).push(F) }); return [C, A] }, pluck: function(B) { var A = []; this.each(function(C) { A.push(C[B]) }); return A }, reject: function(C, B) { C = C.bind(B); var A = []; this.each(function(E, D) { if (!C(E, D)) { A.push(E) } }); return A }, sortBy: function(B, A) { B = B.bind(A); return this.map(function(D, C) { return { value: D, criteria: B(D, C)} }).sort(function(F, E) { var D = F.criteria, C = E.criteria; return D < C ? -1 : D > C ? 1 : 0 }).pluck("value") }, toArray: function() { return this.map() }, zip: function() { var B = Prototype.K, A = $A(arguments); if (Object.isFunction(A.last())) { B = A.pop() } var C = [this].concat(A).map($A); return this.map(function(E, D) { return B(C.pluck(D)) }) }, size: function() { return this.toArray().length }, inspect: function() { return "#<Enumerable:" + this.toArray().inspect() + ">" } }; Object.extend(Enumerable, { map: Enumerable.collect, find: Enumerable.detect, select: Enumerable.findAll, filter: Enumerable.findAll, member: Enumerable.include, entries: Enumerable.toArray, every: Enumerable.all, some: Enumerable.any }); function $A(C) { if (!C) { return [] } if (C.toArray) { return C.toArray() } var B = C.length, A = new Array(B); while (B--) { A[B] = C[B] } return A } if (Prototype.Browser.WebKit) { function $A(C) { if (!C) { return [] } if (!(Object.isFunction(C) && C == "[object NodeList]") && C.toArray) { return C.toArray() } var B = C.length, A = new Array(B); while (B--) { A[B] = C[B] } return A } } Array.from = $A; Object.extend(Array.prototype, Enumerable); if (!Array.prototype._reverse) { Array.prototype._reverse = Array.prototype.reverse } Object.extend(Array.prototype, { _each: function(B) { for (var A = 0, C = this.length; A < C; A++) { B(this[A]) } }, clear: function() { this.length = 0; return this }, first: function() { return this[0] }, last: function() { return this[this.length - 1] }, compact: function() { return this.select(function(A) { return A != null }) }, flatten: function() { return this.inject([], function(B, A) { return B.concat(Object.isArray(A) ? A.flatten() : [A]) }) }, without: function() { var A = $A(arguments); return this.select(function(B) { return !A.include(B) }) }, reverse: function(A) { return (A !== false ? this : this.toArray())._reverse() }, reduce: function() { return this.length > 1 ? this : this[0] }, uniq: function(A) { return this.inject([], function(D, C, B) { if (0 == B || (A ? D.last() != C : !D.include(C))) { D.push(C) } return D }) }, intersect: function(A) { return this.uniq().findAll(function(B) { return A.detect(function(C) { return B === C }) }) }, clone: function() { return [].concat(this) }, size: function() { return this.length }, inspect: function() { return "[" + this.map(Object.inspect).join(", ") + "]" }, toJSON: function() { var A = []; this.each(function(B) { var C = Object.toJSON(B); if (C !== undefined) { A.push(C) } }); return "[" + A.join(", ") + "]" } }); if (Object.isFunction(Array.prototype.forEach)) { Array.prototype._each = Array.prototype.forEach } if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(C, A) { A || (A = 0); var B = this.length; if (A < 0) { A = B + A } for (; A < B; A++) { if (this[A] === C) { return A } } return -1 } } if (!Array.prototype.lastIndexOf) { Array.prototype.lastIndexOf = function(B, A) { A = isNaN(A) ? this.length : (A < 0 ? this.length + A : A) + 1; var C = this.slice(0, A).reverse().indexOf(B); return (C < 0) ? C : A - C - 1 } } Array.prototype.toArray = Array.prototype.clone; function $w(A) { if (!Object.isString(A)) { return [] } A = A.strip(); return A ? A.split(/\s+/) : [] } if (Prototype.Browser.Opera) { Array.prototype.concat = function() { var E = []; for (var B = 0, C = this.length; B < C; B++) { E.push(this[B]) } for (var B = 0, C = arguments.length; B < C; B++) { if (Object.isArray(arguments[B])) { for (var A = 0, D = arguments[B].length; A < D; A++) { E.push(arguments[B][A]) } } else { E.push(arguments[B]) } } return E } } Object.extend(Number.prototype, { toColorPart: function() { return this.toPaddedString(2, 16) }, succ: function() { return this + 1 }, times: function(A) { $R(0, this, true).each(A); return this }, toPaddedString: function(C, B) { var A = this.toString(B || 10); return "0".times(C - A.length) + A }, toJSON: function() { return isFinite(this) ? this.toString() : "null" } }); $w("abs round ceil floor").each(function(A) { Number.prototype[A] = Math[A].methodize() }); function $H(A) { return new Hash(A) } var Hash = Class.create(Enumerable, (function() { if (function() { var C = 0, E = function(F) { this.key = F }; E.prototype.key = "foo"; for (var D in new E("bar")) { C++ } return C > 1 } ()) { function B(E) { var C = []; for (var D in this._object) { var F = this._object[D]; if (C.include(D)) { continue } C.push(D); var G = [D, F]; G.key = D; G.value = F; E(G) } } } else { function B(D) { for (var C in this._object) { var E = this._object[C], F = [C, E]; F.key = C; F.value = E; D(F) } } } function A(C, D) { if (Object.isUndefined(D)) { return C } return C + "=" + encodeURIComponent(String.interpret(D)) } return { initialize: function(C) { this._object = Object.isHash(C) ? C.toObject() : Object.clone(C) }, _each: B, set: function(C, D) { return this._object[C] = D }, get: function(C) { return this._object[C] }, unset: function(C) { var D = this._object[C]; delete this._object[C]; return D }, toObject: function() { return Object.clone(this._object) }, keys: function() { return this.pluck("key") }, values: function() { return this.pluck("value") }, index: function(D) { var C = this.detect(function(E) { return E.value === D }); return C && C.key }, merge: function(C) { return this.clone().update(C) }, update: function(C) { return new Hash(C).inject(this, function(D, E) { D.set(E.key, E.value); return D }) }, toQueryString: function() { return this.map(function(E) { var D = encodeURIComponent(E.key), C = E.value; if (C && typeof C == "object") { if (Object.isArray(C)) { return C.map(A.curry(D)).join("&") } } return A(D, C) }).join("&") }, inspect: function() { return "#<Hash:{" + this.map(function(C) { return C.map(Object.inspect).join(": ") }).join(", ") + "}>" }, toJSON: function() { return Object.toJSON(this.toObject()) }, clone: function() { return new Hash(this) } } })()); Hash.prototype.toTemplateReplacements = Hash.prototype.toObject; Hash.from = $H; var ObjectRange = Class.create(Enumerable, { initialize: function(C, A, B) { this.start = C; this.end = A; this.exclusive = B }, _each: function(A) { var B = this.start; while (this.include(B)) { A(B); B = B.succ() } }, include: function(A) { if (A < this.start) { return false } if (this.exclusive) { return A < this.end } return A <= this.end } }); var $R = function(C, A, B) { return new ObjectRange(C, A, B) }; var Ajax = { getTransport: function() { return Try.these(function() { return new XMLHttpRequest() }, function() { return new ActiveXObject("Msxml2.XMLHTTP") }, function() { return new ActiveXObject("Microsoft.XMLHTTP") }) || false }, activeRequestCount: 0 }; Ajax.Responders = { responders: [], _each: function(A) { this.responders._each(A) }, register: function(A) { if (!this.include(A)) { this.responders.push(A) } }, unregister: function(A) { this.responders = this.responders.without(A) }, dispatch: function(D, B, C, A) { this.each(function(E) { if (Object.isFunction(E[D])) { try { E[D].apply(E, [B, C, A]) } catch (F) { } } }) } }; Object.extend(Ajax.Responders, Enumerable); Ajax.Responders.register({ onCreate: function() { Ajax.activeRequestCount++ }, onComplete: function() { Ajax.activeRequestCount-- } }); Ajax.Base = Class.create({ initialize: function(A) { this.options = { method: "post", asynchronous: true, contentType: "application/x-www-form-urlencoded", encoding: "UTF-8", parameters: "", evalJSON: true, evalJS: true }; Object.extend(this.options, A || {}); this.options.method = this.options.method.toLowerCase(); if (Object.isString(this.options.parameters)) { this.options.parameters = this.options.parameters.toQueryParams() } } }); Ajax.Request = Class.create(Ajax.Base, { _complete: false, initialize: function($super, B, A) { $super(A); this.transport = Ajax.getTransport(); this.request(B) }, request: function(B) { this.url = B; this.method = this.options.method; var D = Object.clone(this.options.parameters); if (!["get", "post"].include(this.method)) { D._method = this.method; this.method = "post" } this.parameters = D; if (D = Object.toQueryString(D)) { if (this.method == "get") { this.url += (this.url.include("?") ? "&" : "?") + D } else { if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) { D += "&_=" } } } try { var A = new Ajax.Response(this); if (this.options.onCreate) { this.options.onCreate(A) } Ajax.Responders.dispatch("onCreate", this, A); this.transport.open(this.method.toUpperCase(), this.url, this.options.asynchronous); if (this.options.asynchronous) { this.respondToReadyState.bind(this).defer(1) } this.transport.onreadystatechange = this.onStateChange.bind(this); this.setRequestHeaders(); this.body = this.method == "post" ? (this.options.postBody || D) : null; this.transport.send(this.body); if (!this.options.asynchronous && this.transport.overrideMimeType) { this.onStateChange() } } catch (C) { this.dispatchException(C) } }, onStateChange: function() { var A = this.transport.readyState; if (A > 1 && !((A == 4) && this._complete)) { this.respondToReadyState(this.transport.readyState) } }, setRequestHeaders: function() { var E = { "X-Requested-With": "XMLHttpRequest", "X-Prototype-Version": Prototype.Version, Accept: "text/javascript, text/html, application/xml, text/xml, */*" }; if (this.method == "post") { E["Content-type"] = this.options.contentType + (this.options.encoding ? "; charset=" + this.options.encoding : ""); if (this.transport.overrideMimeType && (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0, 2005])[1] < 2005) { E.Connection = "close" } } if (typeof this.options.requestHeaders == "object") { var C = this.options.requestHeaders; if (Object.isFunction(C.push)) { for (var B = 0, D = C.length; B < D; B += 2) { E[C[B]] = C[B + 1] } } else { $H(C).each(function(F) { E[F.key] = F.value }) } } for (var A in E) { this.transport.setRequestHeader(A, E[A]) } }, success: function() { var A = this.getStatus(); return !A || (A >= 200 && A < 300) }, getStatus: function() { try { return this.transport.status || 0 } catch (A) { return 0 } }, respondToReadyState: function(A) { var C = Ajax.Request.Events[A], B = new Ajax.Response(this); if (C == "Complete") { try { this._complete = true; (this.options["on" + B.status] || this.options["on" + (this.success() ? "Success" : "Failure")] || Prototype.emptyFunction)(B, B.headerJSON) } catch (D) { this.dispatchException(D) } var E = B.getHeader("Content-type"); if (this.options.evalJS == "force" || (this.options.evalJS && E && E.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) { this.evalResponse() } } try { (this.options["on" + C] || Prototype.emptyFunction)(B, B.headerJSON); Ajax.Responders.dispatch("on" + C, this, B, B.headerJSON) } catch (D) { this.dispatchException(D) } if (C == "Complete") { this.transport.onreadystatechange = Prototype.emptyFunction } }, getHeader: function(A) { try { return this.transport.getResponseHeader(A) } catch (B) { return null } }, evalResponse: function() { try { return eval((this.transport.responseText || "").unfilterJSON()) } catch (e) { this.dispatchException(e) } }, dispatchException: function(A) { (this.options.onException || Prototype.emptyFunction)(this, A); Ajax.Responders.dispatch("onException", this, A) } }); Ajax.Request.Events = ["Uninitialized", "Loading", "Loaded", "Interactive", "Complete"]; Ajax.Response = Class.create({ initialize: function(C) { this.request = C; var D = this.transport = C.transport, A = this.readyState = D.readyState; if ((A > 2 && !Prototype.Browser.IE) || A == 4) { this.status = this.getStatus(); this.statusText = this.getStatusText(); this.responseText = String.interpret(D.responseText); this.headerJSON = this._getHeaderJSON() } if (A == 4) { var B = D.responseXML; this.responseXML = B === undefined ? null : B; this.responseJSON = this._getResponseJSON() } }, status: 0, statusText: "", getStatus: Ajax.Request.prototype.getStatus, getStatusText: function() { try { return this.transport.statusText || "" } catch (A) { return "" } }, getHeader: Ajax.Request.prototype.getHeader, getAllHeaders: function() { try { return this.getAllResponseHeaders() } catch (A) { return null } }, getResponseHeader: function(A) { return this.transport.getResponseHeader(A) }, getAllResponseHeaders: function() { return this.transport.getAllResponseHeaders() }, _getHeaderJSON: function() { var A = this.getHeader("X-JSON"); if (!A) { return null } A = decodeURIComponent(escape(A)); try { return A.evalJSON(this.request.options.sanitizeJSON) } catch (B) { this.request.dispatchException(B) } }, _getResponseJSON: function() { var A = this.request.options; if (!A.evalJSON || (A.evalJSON != "force" && !(this.getHeader("Content-type") || "").include("application/json"))) { return null } try { return this.transport.responseText.evalJSON(A.sanitizeJSON) } catch (B) { this.request.dispatchException(B) } } }); Ajax.Updater = Class.create(Ajax.Request, { initialize: function($super, A, C, B) { this.container = { success: (A.success || A), failure: (A.failure || (A.success ? null : A)) }; B = B || {}; var D = B.onComplete; B.onComplete = (function(E, F) { this.updateContent(E.responseText); if (Object.isFunction(D)) { D(E, F) } }).bind(this); $super(C, B) }, updateContent: function(D) { var C = this.container[this.success() ? "success" : "failure"], A = this.options; if (!A.evalScripts) { D = D.stripScripts() } if (C = $(C)) { if (A.insertion) { if (Object.isString(A.insertion)) { var B = {}; B[A.insertion] = D; C.insert(B) } else { A.insertion(C, D) } } else { C.update(D) } } if (this.success()) { if (this.onComplete) { this.onComplete.bind(this).defer() } } } }); Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { initialize: function($super, A, C, B) { $super(B); this.onComplete = this.options.onComplete; this.frequency = (this.options.frequency || 2); this.decay = (this.options.decay || 1); this.updater = {}; this.container = A; this.url = C; this.start() }, start: function() { this.options.onComplete = this.updateComplete.bind(this); this.onTimerEvent() }, stop: function() { this.updater.options.onComplete = undefined; clearTimeout(this.timer); (this.onComplete || Prototype.emptyFunction).apply(this, arguments) }, updateComplete: function(A) { if (this.options.decay) { this.decay = (A.responseText == this.lastText ? this.decay * this.options.decay : 1); this.lastText = A.responseText } this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency) }, onTimerEvent: function() { this.updater = new Ajax.Updater(this.container, this.url, this.options) } }); function $(B) { if (arguments.length > 1) { for (var A = 0, D = [], C = arguments.length; A < C; A++) { D.push($(arguments[A])) } return D } if (Object.isString(B)) { B = document.getElementById(B) } return Element.extend(B) } if (Prototype.BrowserFeatures.XPath) { document._getElementsByXPath = function(F, A) { var C = []; var E = document.evaluate(F, $(A) || document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var B = 0, D = E.snapshotLength; B < D; B++) { C.push(Element.extend(E.snapshotItem(B))) } return C } } if (!window.Node) { var Node = {} } if (!Node.ELEMENT_NODE) { Object.extend(Node, { ELEMENT_NODE: 1, ATTRIBUTE_NODE: 2, TEXT_NODE: 3, CDATA_SECTION_NODE: 4, ENTITY_REFERENCE_NODE: 5, ENTITY_NODE: 6, PROCESSING_INSTRUCTION_NODE: 7, COMMENT_NODE: 8, DOCUMENT_NODE: 9, DOCUMENT_TYPE_NODE: 10, DOCUMENT_FRAGMENT_NODE: 11, NOTATION_NODE: 12 }) } (function() { var A = this.Element; this.Element = function(D, C) { C = C || {}; D = D.toLowerCase(); var B = Element.cache; if (Prototype.Browser.IE && C.name) { D = "<" + D + ' name="' + C.name + '">'; delete C.name; return Element.writeAttribute(document.createElement(D), C) } if (!B[D]) { B[D] = Element.extend(document.createElement(D)) } return Element.writeAttribute(B[D].cloneNode(false), C) }; Object.extend(this.Element, A || {}) }).call(window); Element.cache = {}; Element.Methods = { visible: function(A) { return $(A).style.display != "none" }, toggle: function(A) { A = $(A); Element[Element.visible(A) ? "hide" : "show"](A); return A }, hide: function(A) { $(A).style.display = "none"; return A }, show: function(A) { $(A).style.display = ""; return A }, remove: function(A) { A = $(A); A.parentNode.removeChild(A); return A }, update: function(A, B) { A = $(A); if (B && B.toElement) { B = B.toElement() } if (Object.isElement(B)) { return A.update().insert(B) } B = Object.toHTML(B); A.innerHTML = B.stripScripts(); B.evalScripts.bind(B).defer(); return A }, replace: function(B, C) { B = $(B); if (C && C.toElement) { C = C.toElement() } else { if (!Object.isElement(C)) { C = Object.toHTML(C); var A = B.ownerDocument.createRange(); A.selectNode(B); C.evalScripts.bind(C).defer(); C = A.createContextualFragment(C.stripScripts()) } } B.parentNode.replaceChild(C, B); return B }, insert: function(C, E) { C = $(C); if (Object.isString(E) || Object.isNumber(E) || Object.isElement(E) || (E && (E.toElement || E.toHTML))) { E = { bottom: E} } var D, B, A; for (position in E) { D = E[position]; position = position.toLowerCase(); B = Element._insertionTranslations[position]; if (D && D.toElement) { D = D.toElement() } if (Object.isElement(D)) { B.insert(C, D); continue } D = Object.toHTML(D); A = C.ownerDocument.createRange(); B.initializeRange(C, A); B.insert(C, A.createContextualFragment(D.stripScripts())); D.evalScripts.bind(D).defer() } return C }, wrap: function(B, C, A) { B = $(B); if (Object.isElement(C)) { $(C).writeAttribute(A || {}) } else { if (Object.isString(C)) { C = new Element(C, A) } else { C = new Element("div", C) } } if (B.parentNode) { B.parentNode.replaceChild(C, B) } C.appendChild(B); return C }, inspect: function(B) { B = $(B); var A = "<" + B.tagName.toLowerCase(); $H({ id: "id", className: "class" }).each(function(F) { var E = F.first(), C = F.last(); var D = (B[E] || "").toString(); if (D) { A += " " + C + "=" + D.inspect(true) } }); return A + ">" }, recursivelyCollect: function(A, C) { A = $(A); var B = []; while (A = A[C]) { if (A.nodeType == 1) { B.push(Element.extend(A)) } } return B }, ancestors: function(A) { return $(A).recursivelyCollect("parentNode") }, descendants: function(A) { return $A($(A).getElementsByTagName("*")).each(Element.extend) }, firstDescendant: function(A) { A = $(A).firstChild; while (A && A.nodeType != 1) { A = A.nextSibling } return $(A) }, immediateDescendants: function(A) { if (!(A = $(A).firstChild)) { return [] } while (A && A.nodeType != 1) { A = A.nextSibling } if (A) { return [A].concat($(A).nextSiblings()) } return [] }, previousSiblings: function(A) { return $(A).recursivelyCollect("previousSibling") }, nextSiblings: function(A) { return $(A).recursivelyCollect("nextSibling") }, siblings: function(A) { A = $(A); return A.previousSiblings().reverse().concat(A.nextSiblings()) }, match: function(B, A) { if (Object.isString(A)) { A = new Selector(A) } return A.match($(B)) }, up: function(B, D, A) { B = $(B); if (arguments.length == 1) { return $(B.parentNode) } var C = B.ancestors(); return D ? Selector.findElement(C, D, A) : C[A || 0] }, down: function(B, C, A) { B = $(B); if (arguments.length == 1) { return B.firstDescendant() } var D = B.descendants(); return C ? Selector.findElement(D, C, A) : D[A || 0] }, previous: function(B, D, A) { B = $(B); if (arguments.length == 1) { return $(Selector.handlers.previousElementSibling(B)) } var C = B.previousSiblings(); return D ? Selector.findElement(C, D, A) : C[A || 0] }, next: function(C, D, B) { C = $(C); if (arguments.length == 1) { return $(Selector.handlers.nextElementSibling(C)) } var A = C.nextSiblings(); return D ? Selector.findElement(A, D, B) : A[B || 0] }, select: function() { var A = $A(arguments), B = $(A.shift()); return Selector.findChildElements(B, A) }, adjacent: function() { var A = $A(arguments), B = $(A.shift()); return Selector.findChildElements(B.parentNode, A).without(B) }, identify: function(B) { B = $(B); var C = B.readAttribute("id"), A = arguments.callee; if (C) { return C } do { C = "anonymous_element_" + A.counter++ } while ($(C)); B.writeAttribute("id", C); return C }, readAttribute: function(C, A) { C = $(C); if (Prototype.Browser.IE) { var B = Element._attributeTranslations.read; if (B.values[A]) { return B.values[A](C, A) } if (B.names[A]) { A = B.names[A] } if (A.include(":")) { return (!C.attributes || !C.attributes[A]) ? null : C.attributes[A].value } } return C.getAttribute(A) }, writeAttribute: function(E, C, F) { E = $(E); var B = {}, D = Element._attributeTranslations.write; if (typeof C == "object") { B = C } else { B[C] = F === undefined ? true : F } for (var A in B) { var C = D.names[A] || A, F = B[A]; if (D.values[A]) { C = D.values[A](E, F) } if (F === false || F === null) { E.removeAttribute(C) } else { if (F === true) { E.setAttribute(C, C) } else { E.setAttribute(C, F) } } } return E }, getHeight: function(A) { return $(A).getDimensions().height }, getWidth: function(A) { return $(A).getDimensions().width }, classNames: function(A) { return new Element.ClassNames(A) }, hasClassName: function(A, B) { if (!(A = $(A))) { return } var C = A.className; return (C.length > 0 && (C == B || new RegExp("(^|\\s)" + B + "(\\s|$)").test(C))) }, addClassName: function(A, B) { if (!(A = $(A))) { return } if (!A.hasClassName(B)) { A.className += (A.className ? " " : "") + B } return A }, removeClassName: function(A, B) { if (!(A = $(A))) { return } A.className = A.className.replace(new RegExp("(^|\\s+)" + B + "(\\s+|$)"), " ").strip(); return A }, toggleClassName: function(A, B) { if (!(A = $(A))) { return } return A[A.hasClassName(B) ? "removeClassName" : "addClassName"](B) }, cleanWhitespace: function(B) { B = $(B); var C = B.firstChild; while (C) { var A = C.nextSibling; if (C.nodeType == 3 && !/\S/.test(C.nodeValue)) { B.removeChild(C) } C = A } return B }, empty: function(A) { return $(A).innerHTML.blank() }, descendantOf: function(D, C) { D = $(D), C = $(C); if (D.compareDocumentPosition) { return (D.compareDocumentPosition(C) & 8) === 8 } if (D.sourceIndex && !Prototype.Browser.Opera) { var E = D.sourceIndex, B = C.sourceIndex, A = C.nextSibling; if (!A) { do { C = C.parentNode } while (!(A = C.nextSibling) && C.parentNode) } if (A) { return (E > B && E < A.sourceIndex) } } while (D = D.parentNode) { if (D == C) { return true } } return false }, scrollTo: function(A) { A = $(A); var B = A.cumulativeOffset(); window.scrollTo(B[0], B[1]); return A }, getStyle: function(B, C) { B = $(B); C = C == "float" ? "cssFloat" : C.camelize(); var D = B.style[C]; if (!D) { var A = document.defaultView.getComputedStyle(B, null); D = A ? A[C] : null } if (C == "opacity") { return D ? parseFloat(D) : 1 } return D == "auto" ? null : D }, getOpacity: function(A) { return $(A).getStyle("opacity") }, setStyle: function(B, C) { B = $(B); var E = B.style, A; if (Object.isString(C)) { B.style.cssText += ";" + C; return C.include("opacity") ? B.setOpacity(C.match(/opacity:\s*(\d?\.?\d*)/)[1]) : B } for (var D in C) { if (D == "opacity") { B.setOpacity(C[D]) } else { E[(D == "float" || D == "cssFloat") ? (E.styleFloat === undefined ? "cssFloat" : "styleFloat") : D] = C[D] } } return B }, setOpacity: function(A, B) { A = $(A); A.style.opacity = (B == 1 || B === "") ? "" : (B < 0.00001) ? 0 : B; return A }, getDimensions: function(C) { C = $(C); var G = $(C).getStyle("display"); if (G != "none" && G != null) { return { width: C.offsetWidth, height: C.offsetHeight} } var B = C.style; var F = B.visibility; var D = B.position; var A = B.display; B.visibility = "hidden"; B.position = "absolute"; B.display = "block"; var H = C.clientWidth; var E = C.clientHeight; B.display = A; B.position = D; B.visibility = F; return { width: H, height: E} }, makePositioned: function(A) { A = $(A); var B = Element.getStyle(A, "position"); if (B == "static" || !B) { A._madePositioned = true; A.style.position = "relative"; if (window.opera) { A.style.top = 0; A.style.left = 0 } } return A }, undoPositioned: function(A) { A = $(A); if (A._madePositioned) { A._madePositioned = undefined; A.style.position = A.style.top = A.style.left = A.style.bottom = A.style.right = "" } return A }, makeClipping: function(A) { A = $(A); if (A._overflow) { return A } A._overflow = Element.getStyle(A, "overflow") || "auto"; if (A._overflow !== "hidden") { A.style.overflow = "hidden" } return A }, undoClipping: function(A) { A = $(A); if (!A._overflow) { return A } A.style.overflow = A._overflow == "auto" ? "" : A._overflow; A._overflow = null; return A }, cumulativeOffset: function(B) { var A = 0, C = 0; do { A += B.offsetTop || 0; C += B.offsetLeft || 0; B = B.offsetParent } while (B); return Element._returnOffset(C, A) }, positionedOffset: function(B) { var A = 0, D = 0; do { A += B.offsetTop || 0; D += B.offsetLeft || 0; B = B.offsetParent; if (B) { if (B.tagName == "BODY") { break } var C = Element.getStyle(B, "position"); if (C == "relative" || C == "absolute") { break } } } while (B); return Element._returnOffset(D, A) }, absolutize: function(B) { B = $(B); if (B.getStyle("position") == "absolute") { return } var D = B.positionedOffset(); var F = D[1]; var E = D[0]; var C = B.clientWidth; var A = B.clientHeight; B._originalLeft = E - parseFloat(B.style.left || 0); B._originalTop = F - parseFloat(B.style.top || 0); B._originalWidth = B.style.width; B._originalHeight = B.style.height; B.style.position = "absolute"; B.style.top = F + "px"; B.style.left = E + "px"; B.style.width = C + "px"; B.style.height = A + "px"; return B }, relativize: function(A) { A = $(A); if (A.getStyle("position") == "relative") { return } A.style.position = "relative"; var C = parseFloat(A.style.top || 0) - (A._originalTop || 0); var B = parseFloat(A.style.left || 0) - (A._originalLeft || 0); A.style.top = C + "px"; A.style.left = B + "px"; A.style.height = A._originalHeight; A.style.width = A._originalWidth; return A }, cumulativeScrollOffset: function(B) { var A = 0, C = 0; do { A += B.scrollTop || 0; C += B.scrollLeft || 0; B = B.parentNode } while (B); return Element._returnOffset(C, A) }, getOffsetParent: function(A) { if (A.offsetParent) { return $(A.offsetParent) } if (A == document.body) { return $(A) } while ((A = A.parentNode) && A != document.body) { if (Element.getStyle(A, "position") != "static") { return $(A) } } return $(document.body) }, viewportOffset: function(D) { var A = 0, C = 0; var B = D; do { A += B.offsetTop || 0; C += B.offsetLeft || 0; if (B.offsetParent == document.body && Element.getStyle(B, "position") == "absolute") { break } } while (B = B.offsetParent); B = D; do { if (!Prototype.Browser.Opera || B.tagName == "BODY") { A -= B.scrollTop || 0; C -= B.scrollLeft || 0 } } while (B = B.parentNode); return Element._returnOffset(C, A) }, clonePosition: function(B, D) { var A = Object.extend({ setLeft: true, setTop: true, setWidth: true, setHeight: true, offsetTop: 0, offsetLeft: 0 }, arguments[2] || {}); D = $(D); var E = D.viewportOffset(); B = $(B); var F = [0, 0]; var C = null; if (Element.getStyle(B, "position") == "absolute") { C = B.getOffsetParent(); F = C.viewportOffset() } if (C == document.body) { F[0] -= document.body.offsetLeft; F[1] -= document.body.offsetTop } if (A.setLeft) { B.style.left = (E[0] - F[0] + A.offsetLeft) + "px" } if (A.setTop) { B.style.top = (E[1] - F[1] + A.offsetTop) + "px" } if (A.setWidth) { B.style.width = D.offsetWidth + "px" } if (A.setHeight) { B.style.height = D.offsetHeight + "px" } return B } }; Element.Methods.identify.counter = 1; Object.extend(Element.Methods, { getElementsBySelector: Element.Methods.select, childElements: Element.Methods.immediateDescendants }); Element._attributeTranslations = { write: { names: { className: "class", htmlFor: "for" }, values: {}} }; if (!document.createRange || Prototype.Browser.Opera) { Element.Methods.insert = function(E, G) { E = $(E); if (Object.isString(G) || Object.isNumber(G) || Object.isElement(G) || (G && (G.toElement || G.toHTML))) { G = { bottom: G} } var D = Element._insertionTranslations, F, B, H, C; for (B in G) { F = G[B]; B = B.toLowerCase(); H = D[B]; if (F && F.toElement) { F = F.toElement() } if (Object.isElement(F)) { H.insert(E, F); continue } F = Object.toHTML(F); C = ((B == "before" || B == "after") ? E.parentNode : E).tagName.toUpperCase(); if (D.tags[C]) { var A = Element._getContentFromAnonymousElement(C, F.stripScripts()); if (B == "top" || B == "after") { A.reverse() } A.each(H.insert.curry(E)) } else { E.insertAdjacentHTML(H.adjacency, F.stripScripts()) } F.evalScripts.bind(F).defer() } return E } } if (Prototype.Browser.Opera) { Element.Methods._getStyle = Element.Methods.getStyle; Element.Methods.getStyle = function(A, B) { switch (B) { case "left": case "top": case "right": case "bottom": if (Element._getStyle(A, "position") == "static") { return null } default: return Element._getStyle(A, B) } }; Element.Methods._readAttribute = Element.Methods.readAttribute; Element.Methods.readAttribute = function(A, B) { if (B == "title") { return A.title } return Element._readAttribute(A, B) } } else { if (Prototype.Browser.IE) { $w("positionedOffset getOffsetParent viewportOffset").each(function(A) { Element.Methods[A] = Element.Methods[A].wrap(function(D, C) { C = $(C); var B = C.getStyle("position"); if (B != "static") { return D(C) } C.setStyle({ position: "relative" }); var E = D(C); C.setStyle({ position: B }); return E }) }); Element.Methods.getStyle = function(A, B) { A = $(A); B = (B == "float" || B == "cssFloat") ? "styleFloat" : B.camelize(); var C = A.style[B]; if (!C && A.currentStyle) { C = A.currentStyle[B] } if (B == "opacity") { if (C = (A.getStyle("filter") || "").match(/alpha\(opacity=(.*)\)/)) { if (C[1]) { return parseFloat(C[1]) / 100 } } return 1 } if (C == "auto") { if ((B == "width" || B == "height") && (A.getStyle("display") != "none")) { return A["offset" + B.capitalize()] + "px" } return null } return C }; Element.Methods.setOpacity = function(B, E) { function F(G) { return G.replace(/alpha\([^\)]*\)/gi, "") } B = $(B); var A = B.currentStyle; if ((A && !A.hasLayout) || (!A && B.style.zoom == "normal")) { B.style.zoom = 1 } var D = B.getStyle("filter"), C = B.style; if (E == 1 || E === "") { (D = F(D)) ? C.filter = D : C.removeAttribute("filter"); return B } else { if (E < 0.00001) { E = 0 } } C.filter = F(D) + "alpha(opacity=" + (E * 100) + ")"; return B }; Element._attributeTranslations = { read: { names: { "class": "className", "for": "htmlFor" }, values: { _getAttr: function(A, B) { return A.getAttribute(B, 2) }, _getAttrNode: function(A, C) { var B = A.getAttributeNode(C); return B ? B.value : "" }, _getEv: function(A, B) { var B = A.getAttribute(B); return B ? B.toString().slice(23, -2) : null }, _flag: function(A, B) { return $(A).hasAttribute(B) ? B : null }, style: function(A) { return A.style.cssText.toLowerCase() }, title: function(A) { return A.title } }} }; Element._attributeTranslations.write = { names: Object.clone(Element._attributeTranslations.read.names), values: { checked: function(A, B) { A.checked = !!B }, style: function(A, B) { A.style.cssText = B ? B : "" } } }; Element._attributeTranslations.has = {}; $w("colSpan rowSpan vAlign dateTime accessKey tabIndex encType maxLength readOnly longDesc").each(function(A) { Element._attributeTranslations.write.names[A.toLowerCase()] = A; Element._attributeTranslations.has[A.toLowerCase()] = A }); (function(A) { Object.extend(A, { href: A._getAttr, src: A._getAttr, type: A._getAttr, action: A._getAttrNode, disabled: A._flag, checked: A._flag, readonly: A._flag, multiple: A._flag, onload: A._getEv, onunload: A._getEv, onclick: A._getEv, ondblclick: A._getEv, onmousedown: A._getEv, onmouseup: A._getEv, onmouseover: A._getEv, onmousemove: A._getEv, onmouseout: A._getEv, onfocus: A._getEv, onblur: A._getEv, onkeypress: A._getEv, onkeydown: A._getEv, onkeyup: A._getEv, onsubmit: A._getEv, onreset: A._getEv, onselect: A._getEv, onchange: A._getEv }) })(Element._attributeTranslations.read.values) } else { if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) { Element.Methods.setOpacity = function(A, B) { A = $(A); A.style.opacity = (B == 1) ? 0.999999 : (B === "") ? "" : (B < 0.00001) ? 0 : B; return A } } else { if (Prototype.Browser.WebKit) { Element.Methods.setOpacity = function(A, B) { A = $(A); A.style.opacity = (B == 1 || B === "") ? "" : (B < 0.00001) ? 0 : B; if (B == 1) { if (A.tagName == "IMG" && A.width) { A.width++; A.width-- } else { try { var D = document.createTextNode(" "); A.appendChild(D); A.removeChild(D) } catch (C) { } } } return A }; Element.Methods.cumulativeOffset = function(B) { var A = 0, C = 0; do { A += B.offsetTop || 0; C += B.offsetLeft || 0; if (B.offsetParent == document.body) { if (Element.getStyle(B, "position") == "absolute") { break } } B = B.offsetParent } while (B); return Element._returnOffset(C, A) } } } } } if (Prototype.Browser.IE || Prototype.Browser.Opera) { Element.Methods.update = function(B, C) { B = $(B); if (C && C.toElement) { C = C.toElement() } if (Object.isElement(C)) { return B.update().insert(C) } C = Object.toHTML(C); var A = B.tagName.toUpperCase(); if (A in Element._insertionTranslations.tags) { $A(B.childNodes).each(function(D) { B.removeChild(D) }); Element._getContentFromAnonymousElement(A, C.stripScripts()).each(function(D) { B.appendChild(D) }) } else { B.innerHTML = C.stripScripts() } C.evalScripts.bind(C).defer(); return B } } if (document.createElement("div").outerHTML) { Element.Methods.replace = function(C, E) { C = $(C); if (E && E.toElement) { E = E.toElement() } if (Object.isElement(E)) { C.parentNode.replaceChild(E, C); return C } E = Object.toHTML(E); var D = C.parentNode, B = D.tagName.toUpperCase(); if (Element._insertionTranslations.tags[B]) { var F = C.next(); var A = Element._getContentFromAnonymousElement(B, E.stripScripts()); D.removeChild(C); if (F) { A.each(function(G) { D.insertBefore(G, F) }) } else { A.each(function(G) { D.appendChild(G) }) } } else { C.outerHTML = E.stripScripts() } E.evalScripts.bind(E).defer(); return C } } Element._returnOffset = function(B, C) { var A = [B, C]; A.left = B; A.top = C; return A }; Element._getContentFromAnonymousElement = function(C, B) { var D = new Element("div"), A = Element._insertionTranslations.tags[C]; D.innerHTML = A[0] + B + A[1]; A[2].times(function() { D = D.firstChild }); return $A(D.childNodes) }; Element._insertionTranslations = { before: { adjacency: "beforeBegin", insert: function(A, B) { A.parentNode.insertBefore(B, A) }, initializeRange: function(B, A) { A.setStartBefore(B) } }, top: { adjacency: "afterBegin", insert: function(A, B) { A.insertBefore(B, A.firstChild) }, initializeRange: function(B, A) { A.selectNodeContents(B); A.collapse(true) } }, bottom: { adjacency: "beforeEnd", insert: function(A, B) { A.appendChild(B) } }, after: { adjacency: "afterEnd", insert: function(A, B) { A.parentNode.insertBefore(B, A.nextSibling) }, initializeRange: function(B, A) { A.setStartAfter(B) } }, 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(A, C) { C = Element._attributeTranslations.has[C] || C; var B = $(A).getAttributeNode(C); return B && B.specified } }; Element.Methods.ByTag = {}; Object.extend(Element, Element.Methods); if (!Prototype.BrowserFeatures.ElementExtensions && document.createElement("div").__proto__) { window.HTMLElement = {}; window.HTMLElement.prototype = document.createElement("div").__proto__; Prototype.BrowserFeatures.ElementExtensions = true } Element.extend = (function() { if (Prototype.BrowserFeatures.SpecificElementExtensions) { return Prototype.K } var A = {}, B = Element.Methods.ByTag; var C = Object.extend(function(F) { if (!F || F._extendedByPrototype || F.nodeType != 1 || F == window) { return F } var D = Object.clone(A), E = F.tagName, H, G; if (B[E]) { Object.extend(D, B[E]) } for (H in D) { G = D[H]; if (Object.isFunction(G) && !(H in F)) { F[H] = G.methodize() } } F._extendedByPrototype = Prototype.emptyFunction; return F }, { refresh: function() { if (!Prototype.BrowserFeatures.ElementExtensions) { Object.extend(A, Element.Methods); Object.extend(A, Element.Methods.Simulated) } } }); C.refresh(); return C })(); Element.hasAttribute = function(A, B) { if (A.hasAttribute) { return A.hasAttribute(B) } return Element.Methods.Simulated.hasAttribute(A, B) }; Element.addMethods = function(C) { var I = Prototype.BrowserFeatures, D = Element.Methods.ByTag; if (!C) { Object.extend(Form, Form.Methods); Object.extend(Form.Element, Form.Element.Methods); Object.extend(Element.Methods.ByTag, { FORM: Object.clone(Form.Methods), INPUT: Object.clone(Form.Element.Methods), SELECT: Object.clone(Form.Element.Methods), TEXTAREA: Object.clone(Form.Element.Methods) }) } if (arguments.length == 2) { var B = C; C = arguments[1] } if (!B) { Object.extend(Element.Methods, C || {}) } else { if (Object.isArray(B)) { B.each(H) } else { H(B) } } function H(F) { F = F.toUpperCase(); if (!Element.Methods.ByTag[F]) { Element.Methods.ByTag[F] = {} } Object.extend(Element.Methods.ByTag[F], C) } function A(L, K, F) { F = F || false; for (var N in L) { var M = L[N]; if (!Object.isFunction(M)) { continue } if (!F || !(N in K)) { K[N] = M.methodize() } } } function E(L) { var F; var K = { OPTGROUP: "OptGroup", TEXTAREA: "TextArea", P: "Paragraph", FIELDSET: "FieldSet", UL: "UList", OL: "OList", DL: "DList", DIR: "Directory", H1: "Heading", H2: "Heading", H3: "Heading", H4: "Heading", H5: "Heading", H6: "Heading", Q: "Quote", INS: "Mod", DEL: "Mod", A: "Anchor", IMG: "Image", CAPTION: "TableCaption", COL: "TableCol", COLGROUP: "TableCol", THEAD: "TableSection", TFOOT: "TableSection", TBODY: "TableSection", TR: "TableRow", TH: "TableCell", TD: "TableCell", FRAMESET: "FrameSet", IFRAME: "IFrame" }; if (K[L]) { F = "HTML" + K[L] + "Element" } if (window[F]) { return window[F] } F = "HTML" + L + "Element"; if (window[F]) { return window[F] } F = "HTML" + L.capitalize() + "Element"; if (window[F]) { return window[F] } window[F] = {}; window[F].prototype = document.createElement(L).__proto__; return window[F] } if (I.ElementExtensions) { A(Element.Methods, HTMLElement.prototype); A(Element.Methods.Simulated, HTMLElement.prototype, true) } if (I.SpecificElementExtensions) { for (var J in Element.Methods.ByTag) { var G = E(J); if (Object.isUndefined(G)) { continue } A(D[J], G.prototype) } } Object.extend(Element, Element.Methods); delete Element.ByTag; if (Element.extend.refresh) { Element.extend.refresh() } Element.cache = {} }; document.viewport = { getDimensions: function() { var A = {}; $w("width height").each(function(C) { var B = C.capitalize(); A[C] = self["inner" + B] || (document.documentElement["client" + B] || document.body["client" + B]) }); return A }, getWidth: function() { return this.getDimensions().width }, getHeight: function() { return this.getDimensions().height }, getScrollOffsets: function() { return Element._returnOffset(window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop) } }; var Selector = Class.create({ initialize: function(A) { this.expression = A.strip(); this.compileMatcher() }, 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, F = Selector.patterns, B = Selector.xpath, D, A; if (Selector._cache[E]) { this.xpath = Selector._cache[E]; return } this.matcher = [".//*"]; while (E && D != E && (/\S/).test(E)) { D = E; for (var C in F) { if (A = E.match(F[C])) { this.matcher.push(Object.isFunction(B[C]) ? B[C](A) : new Template(B[C]).evaluate(A)); E = E.replace(A[0], ""); break } } } this.xpath = this.matcher.join(""); Selector._cache[this.expression] = this.xpath }, findElements: function(A) { A = A || document; if (this.xpath) { return document._getElementsByXPath(this.xpath, A) } return this.matcher(A) }, match: function(H) { this.tokens = []; var L = this.expression, A = Selector.patterns, E = Selector.assertions; var B, D, F; while (L && B !== L && (/\S/).test(L)) { B = L; for (var I in A) { D = A[I]; if (F = L.match(D)) { if (E[I]) { this.tokens.push([I, Object.clone(F)]); L = L.replace(F[0], "") } else { return this.findElements(document).include(H) } } } } var K = true, C, J; for (var I = 0, G; G = this.tokens[I]; I++) { C = G[0], J = G[1]; if (!Selector.assertions[C](H, J)) { K = false; break } } return K }, toString: function() { return this.expression }, inspect: function() { return "#<Selector:" + this.expression.inspect() + ">" } }); Object.extend(Selector, { _cache: {}, xpath: { descendant: "//*", child: "/*", adjacent: "/following-sibling::*[1]", laterSibling: "/following-sibling::*", tagName: function(A) { if (A[1] == "*") { return "" } return "[local-name()='" + A[1].toLowerCase() + "' or local-name()='" + A[1].toUpperCase() + "']" }, className: "[contains(concat(' ', @class, ' '), ' #{1} ')]", id: "[@id='#{1}']", attrPresence: "[@#{1}]", attr: function(A) { A[3] = A[5] || A[6]; return new Template(Selector.xpath.operators[A[2]]).evaluate(A) }, pseudo: function(A) { var B = Selector.xpath.pseudos[A[1]]; if (!B) { return "" } if (Object.isFunction(B)) { return B(A) } return new Template(Selector.xpath.pseudos[A[1]]).evaluate(A) }, operators: { "=": "[@#{1}='#{3}']", "!=": "[@#{1}!='#{3}']", "^=": "[starts-with(@#{1}, '#{3}')]", "$=": "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']", "*=": "[contains(@#{1}, '#{3}')]", "~=": "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]", "|=": "[contains(concat('-', @#{1}, '-'), '-#{3}-')]" }, pseudos: { "first-child": "[not(preceding-sibling::*)]", "last-child": "[not(following-sibling::*)]", "only-child": "[not(preceding-sibling::* or following-sibling::*)]", empty: "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]", checked: "[@checked]", disabled: "[@disabled]", enabled: "[not(@disabled)]", not: function(B) { var H = B[6], G = Selector.patterns, A = Selector.xpath, E, B, C; var F = []; while (H && E != H && (/\S/).test(H)) { E = H; for (var D in G) { if (B = H.match(G[D])) { C = Object.isFunction(A[D]) ? A[D](B) : new Template(A[D]).evaluate(B); F.push("(" + C.substring(1, C.length - 1) + ")"); H = H.replace(B[0], ""); break } } } return "[not(" + F.join(" and ") + ")]" }, "nth-child": function(A) { return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", A) }, "nth-last-child": function(A) { return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", A) }, "nth-of-type": function(A) { return Selector.xpath.pseudos.nth("position() ", A) }, "nth-last-of-type": function(A) { return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", A) }, "first-of-type": function(A) { A[6] = "1"; return Selector.xpath.pseudos["nth-of-type"](A) }, "last-of-type": function(A) { A[6] = "1"; return Selector.xpath.pseudos["nth-last-of-type"](A) }, "only-of-type": function(A) { var B = Selector.xpath.pseudos; return B["first-of-type"](A) + B["last-of-type"](A) }, nth: function(E, C) { var F, G = C[6], B; if (G == "even") { G = "2n+0" } if (G == "odd") { G = "2n+1" } if (F = G.match(/^(\d+)$/)) { return "[" + E + "= " + F[1] + "]" } if (F = G.match(/^(-?\d*)?n(([+-])(\d+))?/)) { if (F[1] == "-") { F[1] = -1 } var D = F[1] ? Number(F[1]) : 1; var A = F[2] ? Number(F[2]) : 0; B = "[((#{fragment} - #{b}) mod #{a} = 0) and ((#{fragment} - #{b}) div #{a} >= 0)]"; return new Template(B).evaluate({ fragment: E, a: D, b: A }) } } } }, criteria: { tagName: 'n = h.tagName(n, r, "#{1}", c);  c = false;', className: 'n = h.className(n, r, "#{1}", c); c = false;', id: 'n = h.id(n, r, "#{1}", c);    c = false;', attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;', attr: function(A) { A[3] = (A[5] || A[6]); return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(A) }, pseudo: function(A) { if (A[6]) { A[6] = A[6].replace(/"/g, '\\"') } return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(A) }, descendant: 'c = "descendant";', child: 'c = "child";', adjacent: 'c = "adjacent";', laterSibling: 'c = "laterSibling";' }, patterns: { laterSibling: /^\s*~\s*/, child: /^\s*>\s*/, adjacent: /^\s*\+\s*/, descendant: /^\s/, tagName: /^\s*(\*|[\w\-]+)(\b|$)?/, id: /^#([\w\-\*]+)(\b|$)/, className: /^\.([\w\-\*]+)(\b|$)/, pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s)|(?=:))/, attrPresence: /^\[([\w]+)\]/, attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ }, assertions: { tagName: function(A, B) { return B[1].toUpperCase() == A.tagName.toUpperCase() }, className: function(A, B) { return Element.hasClassName(A, B[1]) }, id: function(A, B) { return A.id === B[1] }, attrPresence: function(A, B) { return Element.hasAttribute(A, B[1]) }, attr: function(B, C) { var A = Element.readAttribute(B, C[1]); return Selector.operators[C[2]](A, C[3]) } }, handlers: { concat: function(B, A) { for (var C = 0, D; D = A[C]; C++) { B.push(D) } return B }, mark: function(A) { for (var B = 0, C; C = A[B]; B++) { C._counted = true } return A }, unmark: function(A) { for (var B = 0, C; C = A[B]; B++) { C._counted = undefined } return A }, index: function(A, D, G) { A._counted = true; if (D) { for (var B = A.childNodes, E = B.length - 1, C = 1; E >= 0; E--) { var F = B[E]; if (F.nodeType == 1 && (!G || F._counted)) { F.nodeIndex = C++ } } } else { for (var E = 0, C = 1, B = A.childNodes; F = B[E]; E++) { if (F.nodeType == 1 && (!G || F._counted)) { F.nodeIndex = C++ } } } }, unique: function(B) { if (B.length == 0) { return B } var D = [], E; for (var C = 0, A = B.length; C < A; C++) { if (!(E = B[C])._counted) { E._counted = true; D.push(Element.extend(E)) } } return Selector.handlers.unmark(D) }, descendant: function(A) { var D = Selector.handlers; for (var C = 0, B = [], E; E = A[C]; C++) { D.concat(B, E.getElementsByTagName("*")) } return B }, child: function(A) { var F = Selector.handlers; for (var E = 0, D = [], G; G = A[E]; E++) { for (var B = 0, C = [], H; H = G.childNodes[B]; B++) { if (H.nodeType == 1 && H.tagName != "!") { D.push(H) } } } return D }, adjacent: function(A) { for (var C = 0, B = [], E; E = A[C]; C++) { var D = this.nextElementSibling(E); if (D) { B.push(D) } } return B }, laterSibling: function(A) { var D = Selector.handlers; for (var C = 0, B = [], E; E = A[C]; C++) { D.concat(B, Element.nextSiblings(E)) } return B }, nextElementSibling: function(A) { while (A = A.nextSibling) { if (A.nodeType == 1) { return A } } return null }, previousElementSibling: function(A) { while (A = A.previousSibling) { if (A.nodeType == 1) { return A } } return null }, tagName: function(B, A, E, H) { E = E.toUpperCase(); var D = [], F = Selector.handlers; if (B) { if (H) { if (H == "descendant") { for (var C = 0, G; G = B[C]; C++) { F.concat(D, G.getElementsByTagName(E)) } return D } else { B = this[H](B) } if (E == "*") { return B } } for (var C = 0, G; G = B[C]; C++) { if (G.tagName.toUpperCase() == E) { D.push(G) } } return D } else { return A.getElementsByTagName(E) } }, id: function(B, A, H, F) { var G = $(H), D = Selector.handlers; if (!G) { return [] } if (!B && A == document) { return [G] } if (B) { if (F) { if (F == "child") { for (var C = 0, E; E = B[C]; C++) { if (G.parentNode == E) { return [G] } } } else { if (F == "descendant") { for (var C = 0, E; E = B[C]; C++) { if (Element.descendantOf(G, E)) { return [G] } } } else { if (F == "adjacent") { for (var C = 0, E; E = B[C]; C++) { if (Selector.handlers.previousElementSibling(G) == E) { return [G] } } } else { B = D[F](B) } } } } for (var C = 0, E; E = B[C]; C++) { if (E == G) { return [G] } } return [] } return (G && Element.descendantOf(G, A)) ? [G] : [] }, className: function(B, A, C, D) { if (B && D) { B = this[D](B) } return Selector.handlers.byClassName(B, A, C) }, byClassName: function(C, B, F) { if (!C) { C = Selector.handlers.descendant([B]) } var H = " " + F + " "; for (var E = 0, D = [], G, A; G = C[E]; E++) { A = G.className; if (A.length == 0) { continue } if (A == F || (" " + A + " ").include(H)) { D.push(G) } } return D }, attrPresence: function(C, B, A) { if (!C) { C = B.getElementsByTagName("*") } var E = []; for (var D = 0, F; F = C[D]; D++) { if (Element.hasAttribute(F, A)) { E.push(F) } } return E }, attr: function(A, H, G, I, B) { if (!A) { A = H.getElementsByTagName("*") } var J = Selector.operators[B], D = []; for (var E = 0, C; C = A[E]; E++) { var F = Element.readAttribute(C, G); if (F === null) { continue } if (J(F, I)) { D.push(C) } } return D }, pseudo: function(B, C, E, A, D) { if (B && D) { B = this[D](B) } if (!B) { B = A.getElementsByTagName("*") } return Selector.pseudos[C](B, E, A) } }, pseudos: { "first-child": function(B, F, A) { for (var D = 0, C = [], E; E = B[D]; D++) { if (Selector.handlers.previousElementSibling(E)) { continue } C.push(E) } return C }, "last-child": function(B, F, A) { for (var D = 0, C = [], E; E = B[D]; D++) { if (Selector.handlers.nextElementSibling(E)) { continue } C.push(E) } return C }, "only-child": function(B, G, A) { var E = Selector.handlers; for (var D = 0, C = [], F; F = B[D]; D++) { if (!E.previousElementSibling(F) && !E.nextElementSibling(F)) { C.push(F) } } return C }, "nth-child": function(B, C, A) { return Selector.pseudos.nth(B, C, A) }, "nth-last-child": function(B, C, A) { return Selector.pseudos.nth(B, C, A, true) }, "nth-of-type": function(B, C, A) { return Selector.pseudos.nth(B, C, A, false, true) }, "nth-last-of-type": function(B, C, A) { return Selector.pseudos.nth(B, C, A, true, true) }, "first-of-type": function(B, C, A) { return Selector.pseudos.nth(B, "1", A, false, true) }, "last-of-type": function(B, C, A) { return Selector.pseudos.nth(B, "1", A, true, true) }, "only-of-type": function(B, D, A) { var C = Selector.pseudos; return C["last-of-type"](C["first-of-type"](B, D, A), D, A) }, getIndices: function(B, A, C) { if (B == 0) { return A > 0 ? [A] : [] } return $R(1, C).inject([], function(D, E) { if (0 == (E - A) % B && (E - A) / B >= 0) { D.push(E) } return D }) }, nth: function(A, L, N, K, C) { if (A.length == 0) { return [] } if (L == "even") { L = "2n+0" } if (L == "odd") { L = "2n+1" } var J = Selector.handlers, I = [], B = [], E; J.mark(A); for (var H = 0, D; D = A[H]; H++) { if (!D.parentNode._counted) { J.index(D.parentNode, K, C); B.push(D.parentNode) } } if (L.match(/^\d+$/)) { L = Number(L); for (var H = 0, D; D = A[H]; H++) { if (D.nodeIndex == L) { I.push(D) } } } else { if (E = L.match(/^(-?\d*)?n(([+-])(\d+))?/)) { if (E[1] == "-") { E[1] = -1 } var O = E[1] ? Number(E[1]) : 1; var M = E[2] ? Number(E[2]) : 0; var P = Selector.pseudos.getIndices(O, M, A.length); for (var H = 0, D, F = P.length; D = A[H]; H++) { for (var G = 0; G < F; G++) { if (D.nodeIndex == P[G]) { I.push(D) } } } } } J.unmark(A); J.unmark(B); return I }, empty: function(B, F, A) { for (var D = 0, C = [], E; E = B[D]; D++) { if (E.tagName == "!" || (E.firstChild && !E.innerHTML.match(/^\s*$/))) { continue } C.push(E) } return C }, not: function(A, D, I) { var G = Selector.handlers, J, C; var H = new Selector(D).findElements(I); G.mark(H); for (var F = 0, E = [], B; B = A[F]; F++) { if (!B._counted) { E.push(B) } } G.unmark(H); return E }, enabled: function(B, F, A) { for (var D = 0, C = [], E; E = B[D]; D++) { if (!E.disabled) { C.push(E) } } return C }, disabled: function(B, F, A) { for (var D = 0, C = [], E; E = B[D]; D++) { if (E.disabled) { C.push(E) } } return C }, checked: function(B, F, A) { for (var D = 0, C = [], E; E = B[D]; D++) { if (E.checked) { C.push(E) } } return C } }, operators: { "=": function(B, A) { return B == A }, "!=": function(B, A) { return B != A }, "^=": function(B, A) { return B.startsWith(A) }, "$=": function(B, A) { return B.endsWith(A) }, "*=": function(B, A) { return B.include(A) }, "~=": function(B, A) { return (" " + B + " ").include(" " + A + " ") }, "|=": function(B, A) { return ("-" + B.toUpperCase() + "-").include("-" + A.toUpperCase() + "-") } }, matchElements: function(F, G) { var E = new Selector(G).findElements(), D = Selector.handlers; D.mark(E); for (var C = 0, B = [], A; A = F[C]; C++) { if (A._counted) { B.push(A) } } D.unmark(E); return B }, findElement: function(B, C, A) { if (Object.isNumber(C)) { A = C; C = false } return Selector.matchElements(B, C || "*")[A || 0] }, findChildElements: function(E, G) { var H = G.join(","), G = []; H.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(I) { G.push(I[1].strip()) }); var D = [], F = Selector.handlers; for (var C = 0, B = G.length, A; C < B; C++) { A = new Selector(G[C].strip()); F.concat(D, A.findElements(E)) } return (B > 1) ? F.unique(D) : D } }); function $$() { return Selector.findChildElements(document, $A(arguments)) } var Form = { reset: function(A) { $(A).reset(); return A }, serializeElements: function(G, B) { if (typeof B != "object") { B = { hash: !!B} } else { if (B.hash === undefined) { B.hash = true } } var C, F, A = false, E = B.submit; var D = G.inject({}, function(H, I) { if (!I.disabled && I.name) { C = I.name; F = $(I).getValue(); if (F != null && (I.type != "submit" || (!A && E !== false && (!E || C == E) && (A = true)))) { if (C in H) { if (!Object.isArray(H[C])) { H[C] = [H[C]] } H[C].push(F) } else { H[C] = F } } } return H }); return B.hash ? D : Object.toQueryString(D) } }; Form.Methods = { serialize: function(B, A) { return Form.serializeElements(Form.getElements(B), A) }, getElements: function(A) { return $A($(A).getElementsByTagName("*")).inject([], function(B, C) { if (Form.Element.Serializers[C.tagName.toLowerCase()]) { B.push(Element.extend(C)) } return B }) }, getInputs: function(G, C, D) { G = $(G); var A = G.getElementsByTagName("input"); if (!C && !D) { return $A(A).map(Element.extend) } for (var E = 0, H = [], F = A.length; E < F; E++) { var B = A[E]; if ((C && B.type != C) || (D && B.name != D)) { continue } H.push(Element.extend(B)) } return H }, disable: function(A) { A = $(A); Form.getElements(A).invoke("disable"); return A }, enable: function(A) { A = $(A); Form.getElements(A).invoke("enable"); return A }, findFirstElement: function(B) { var C = $(B).getElements().findAll(function(D) { return "hidden" != D.type && !D.disabled }); var A = C.findAll(function(D) { return D.hasAttribute("tabIndex") && D.tabIndex >= 0 }).sortBy(function(D) { return D.tabIndex }).first(); return A ? A : C.find(function(D) { return ["input", "select", "textarea"].include(D.tagName.toLowerCase()) }) }, focusFirstElement: function(A) { A = $(A); A.findFirstElement().activate(); return A }, request: function(B, A) { B = $(B), A = Object.clone(A || {}); var D = A.parameters, C = B.readAttribute("action") || ""; if (C.blank()) { C = window.location.href } A.parameters = B.serialize(true); if (D) { if (Object.isString(D)) { D = D.toQueryParams() } Object.extend(A.parameters, D) } if (B.hasAttribute("method") && !A.method) { A.method = B.method } return new Ajax.Request(C, A) } }; Form.Element = { focus: function(A) { $(A).focus(); return A }, select: function(A) { $(A).select(); return A } }; Form.Element.Methods = { serialize: function(A) { A = $(A); if (!A.disabled && A.name) { var B = A.getValue(); if (B != undefined) { var C = {}; C[A.name] = B; return Object.toQueryString(C) } } return "" }, getValue: function(A) { A = $(A); var B = A.tagName.toLowerCase(); return Form.Element.Serializers[B](A) }, setValue: function(A, B) { A = $(A); var C = A.tagName.toLowerCase(); Form.Element.Serializers[C](A, B); return A }, clear: function(A) { $(A).value = ""; return A }, present: function(A) { return $(A).value != "" }, activate: function(A) { A = $(A); try { A.focus(); if (A.select && (A.tagName.toLowerCase() != "input" || !["button", "reset", "submit"].include(A.type))) { A.select() } } catch (B) { } return A }, disable: function(A) { A = $(A); A.blur(); A.disabled = true; return A }, enable: function(A) { A = $(A); A.disabled = false; return A } }; var Field = Form.Element; var $F = Form.Element.Methods.getValue; Form.Element.Serializers = { input: function(A, B) { switch (A.type.toLowerCase()) { case "checkbox": case "radio": return Form.Element.Serializers.inputSelector(A, B); default: return Form.Element.Serializers.textarea(A, B) } }, inputSelector: function(A, B) { if (B === undefined) { return A.checked ? A.value : null } else { A.checked = !!B } }, textarea: function(A, B) { if (B === undefined) { return A.value } else { A.value = B } }, select: function(D, A) { if (A === undefined) { return this[D.type == "select-one" ? "selectOne" : "selectMany"](D) } else { var C, F, G = !Object.isArray(A); for (var B = 0, E = D.length; B < E; B++) { C = D.options[B]; F = this.optionValue(C); if (G) { if (F == A) { C.selected = true; return } } else { C.selected = A.include(F) } } } }, selectOne: function(B) { var A = B.selectedIndex; return A >= 0 ? this.optionValue(B.options[A]) : null }, selectMany: function(D) { var A, E = D.length; if (!E) { return null } for (var C = 0, A = []; C < E; C++) { var B = D.options[C]; if (B.selected) { A.push(this.optionValue(B)) } } return A }, optionValue: function(A) { return Element.extend(A).hasAttribute("value") ? A.value : A.text } }; Abstract.TimedObserver = Class.create(PeriodicalExecuter, { initialize: function($super, A, B, C) { $super(C, B); this.element = $(A); this.lastValue = this.getValue() }, execute: function() { var A = this.getValue(); if (Object.isString(this.lastValue) && Object.isString(A) ? this.lastValue != A : String(this.lastValue) != String(A)) { this.callback(this.element, A); this.lastValue = A } } }); Form.Element.Observer = Class.create(Abstract.TimedObserver, { getValue: function() { return Form.Element.getValue(this.element) } }); Form.Observer = Class.create(Abstract.TimedObserver, { getValue: function() { return Form.serialize(this.element) } }); Abstract.EventObserver = Class.create({ initialize: function(A, B) { this.element = $(A); this.callback = B; this.lastValue = this.getValue(); if (this.element.tagName.toLowerCase() == "form") { this.registerFormCallbacks() } else { this.registerCallback(this.element) } }, onElementEvent: function() { var A = this.getValue(); if (this.lastValue != A) { this.callback(this.element, A); this.lastValue = A } }, registerFormCallbacks: function() { Form.getElements(this.element).each(this.registerCallback, this) }, registerCallback: function(A) { if (A.type) { switch (A.type.toLowerCase()) { case "checkbox": case "radio": Event.observe(A, "click", this.onElementEvent.bind(this)); break; default: Event.observe(A, "change", this.onElementEvent.bind(this)); break } } } }); Form.Element.EventObserver = Class.create(Abstract.EventObserver, { getValue: function() { return Form.Element.getValue(this.element) } }); Form.EventObserver = Class.create(Abstract.EventObserver, { getValue: function() { return Form.serialize(this.element) } }); if (!window.Event) { var Event = {} } Object.extend(Event, { KEY_BACKSPACE: 8, KEY_TAB: 9, KEY_RETURN: 13, KEY_ESC: 27, KEY_LEFT: 37, KEY_UP: 38, KEY_RIGHT: 39, KEY_DOWN: 40, KEY_DELETE: 46, KEY_HOME: 36, KEY_END: 35, KEY_PAGEUP: 33, KEY_PAGEDOWN: 34, KEY_INSERT: 45, cache: {}, relatedTarget: function(B) { var A; switch (B.type) { case "mouseover": A = B.fromElement; break; case "mouseout": A = B.toElement; break; default: return null } return Element.extend(A) } }); Event.Methods = (function() { var A; if (Prototype.Browser.IE) { var B = { 0: 1, 1: 4, 2: 2 }; A = function(D, C) { return D.button == B[C] } } else { if (Prototype.Browser.WebKit) { A = function(D, C) { switch (C) { case 0: return D.which == 1 && !D.metaKey; case 1: return D.which == 1 && D.metaKey; default: return false } } } else { A = function(D, C) { return D.which ? (D.which === C + 1) : (D.button === C) } } } return { isLeftClick: function(C) { return A(C, 0) }, isMiddleClick: function(C) { return A(C, 1) }, isRightClick: function(C) { return A(C, 2) }, element: function(D) { var C = Event.extend(D).target; return Element.extend(C.nodeType == Node.TEXT_NODE ? C.parentNode : C) }, findElement: function(D, E) { var C = Event.element(D); return C.match(E) ? C : C.up(E) }, pointer: function(C) { return { x: C.pageX || (C.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)), y: C.pageY || (C.clientY + (document.documentElement.scrollTop || document.body.scrollTop))} }, pointerX: function(C) { return Event.pointer(C).x }, pointerY: function(C) { return Event.pointer(C).y }, stop: function(C) { Event.extend(C); C.preventDefault(); C.stopPropagation(); C.stopped = true } } })(); Event.extend = (function() { var A = Object.keys(Event.Methods).inject({}, function(B, C) { B[C] = Event.Methods[C].methodize(); return B }); if (Prototype.Browser.IE) { Object.extend(A, { stopPropagation: function() { this.cancelBubble = true }, preventDefault: function() { this.returnValue = false }, inspect: function() { return "[object Event]" } }); return function(B) { if (!B) { return false } if (B._extendedByPrototype) { return B } B._extendedByPrototype = Prototype.emptyFunction; var C = Event.pointer(B); Object.extend(B, { target: B.srcElement, relatedTarget: Event.relatedTarget(B), pageX: C.x, pageY: C.y }); return Object.extend(B, A) } } else { Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__; Object.extend(Event.prototype, A); return Prototype.K } })(); Object.extend(Event, (function() { var B = Event.cache; function C(J) { if (J._eventID) { return J._eventID } arguments.callee.id = arguments.callee.id || 1; return J._eventID = ++arguments.callee.id } function G(J) { if (J && J.include(":")) { return "dataavailable" } return J } function A(J) { return B[J] = B[J] || {} } function F(L, J) { var K = A(L); return K[J] = K[J] || [] } function H(K, J, L) { var O = C(K); var N = F(O, J); if (N.pluck("handler").include(L)) { return false } var M = function(P) { if (!Event || !Event.extend || (P.eventName && P.eventName != J)) { return false } Event.extend(P); L.call(K, P) }; M.handler = L; N.push(M); return M } function I(M, J, K) { var L = F(M, J); return L.find(function(N) { return N.handler == K }) } function D(M, J, K) { var L = A(M); if (!L[J]) { return false } L[J] = L[J].without(I(M, J, K)) } function E() { for (var K in B) { for (var J in B[K]) { B[K][J] = null } } } if (window.attachEvent) { window.attachEvent("onunload", E) } return { observe: function(L, J, M) { L = $(L); var K = G(J); var N = H(L, J, M); if (!N) { return L } if (L.addEventListener) { L.addEventListener(K, N, false) } else { L.attachEvent("on" + K, N) } return L }, stopObserving: function(L, J, M) { L = $(L); var O = C(L), K = G(J); if (!M && J) { F(O, J).each(function(P) { L.stopObserving(J, P.handler) }); return L } else { if (!J) { Object.keys(A(O)).each(function(P) { L.stopObserving(P) }); return L } } var N = I(O, J, M); if (!N) { return L } if (L.removeEventListener) { L.removeEventListener(K, N, false) } else { L.detachEvent("on" + K, N) } D(O, J, M); return L }, fire: function(L, K, J) { L = $(L); if (L == document && document.createEvent && !L.dispatchEvent) { L = document.documentElement } if (document.createEvent) { var M = document.createEvent("HTMLEvents"); M.initEvent("dataavailable", true, true) } else { var M = document.createEventObject(); M.eventType = "ondataavailable" } M.eventName = K; M.memo = J || {}; if (document.createEvent) { L.dispatchEvent(M) } else { L.fireEvent(M.eventType, M) } return M } } })()); Object.extend(Event, Event.Methods); Element.addMethods({ fire: Event.fire, observe: Event.observe, stopObserving: Event.stopObserving }); Object.extend(document, { fire: Element.Methods.fire.methodize(), observe: Element.Methods.observe.methodize(), stopObserving: Element.Methods.stopObserving.methodize() }); (function() { var C, B = false; function A() { if (B) { return } if (C) { window.clearInterval(C) } document.fire("dom:loaded"); B = true } if (document.addEventListener) { if (Prototype.Browser.WebKit) { C = window.setInterval(function() { if (/loaded|complete/.test(document.readyState)) { A() } }, 0); Event.observe(window, "load", A) } else { document.addEventListener("DOMContentLoaded", A, false) } } else { document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>"); $("__onDOMContentLoaded").onreadystatechange = function() { if (this.readyState == "complete") { this.onreadystatechange = null; A() } } } })(); Hash.toQueryString = Object.toQueryString; var Toggle = { display: Element.toggle }; Element.Methods.childOf = Element.Methods.descendantOf; var Insertion = { Before: function(A, B) { return Element.insert(A, { before: B }) }, Top: function(A, B) { return Element.insert(A, { top: B }) }, Bottom: function(A, B) { return Element.insert(A, { bottom: B }) }, After: function(A, B) { return Element.insert(A, { after: B }) } }; var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); var Position = { includeScrollOffsets: false, prepare: function() { this.deltaX = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0; this.deltaY = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0 }, within: function(B, A, C) { if (this.includeScrollOffsets) { return this.withinIncludingScrolloffsets(B, A, C) } this.xcomp = A; this.ycomp = C; this.offset = Element.cumulativeOffset(B); return (C >= this.offset[1] && C < this.offset[1] + B.offsetHeight && A >= this.offset[0] && A < this.offset[0] + B.offsetWidth) }, withinIncludingScrolloffsets: function(B, A, D) { var C = Element.cumulativeScrollOffset(B); this.xcomp = A + C[0] - this.deltaX; this.ycomp = D + C[1] - this.deltaY; this.offset = Element.cumulativeOffset(B); return (this.ycomp >= this.offset[1] && this.ycomp < this.offset[1] + B.offsetHeight && this.xcomp >= this.offset[0] && this.xcomp < this.offset[0] + B.offsetWidth) }, overlap: function(B, A) { if (!B) { return 0 } if (B == "vertical") { return ((this.offset[1] + A.offsetHeight) - this.ycomp) / A.offsetHeight } if (B == "horizontal") { return ((this.offset[0] + A.offsetWidth) - this.xcomp) / A.offsetWidth } }, cumulativeOffset: Element.Methods.cumulativeOffset, positionedOffset: Element.Methods.positionedOffset, absolutize: function(A) { Position.prepare(); return Element.absolutize(A) }, relativize: function(A) { Position.prepare(); return Element.relativize(A) }, realOffset: Element.Methods.cumulativeScrollOffset, offsetParent: Element.Methods.getOffsetParent, page: Element.Methods.viewportOffset, clone: function(B, C, A) { A = A || {}; return Element.clonePosition(C, B, A) } }; if (!document.getElementsByClassName) { document.getElementsByClassName = function(B) { function A(C) { return C.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + C + " ')]" } B.getElementsByClassName = Prototype.BrowserFeatures.XPath ? function(C, E) { E = E.toString().strip(); var D = /\s/.test(E) ? $w(E).map(A).join("") : A(E); return D ? document._getElementsByXPath(".//*" + D, C) : [] } : function(E, F) { F = F.toString().strip(); var G = [], H = (/\s/.test(F) ? $w(F) : null); if (!H && !F) { return G } var C = $(E).getElementsByTagName("*"); F = " " + F + " "; for (var D = 0, J, I; J = C[D]; D++) { if (J.className && (I = " " + J.className + " ") && (I.include(F) || (H && H.all(function(K) { return !K.toString().blank() && I.include(" " + K + " ") })))) { G.push(Element.extend(J)) } } return G }; return function(D, C) { return $(C || document.body).getElementsByClassName(D) } } (Element.Methods) } Element.ClassNames = Class.create(); Element.ClassNames.prototype = { initialize: function(A) { this.element = $(A) }, _each: function(A) { this.element.className.split(/\s+/).select(function(B) { return B.length > 0 })._each(A) }, set: function(A) { this.element.className = A }, add: function(A) { if (this.include(A)) { return } this.set($A(this).concat(A).join(" ")) }, remove: function(A) { if (!this.include(A)) { return } this.set($A(this).without(A).join(" ")) }, toString: function() { return $A(this).join(" ") } }; Object.extend(Element.ClassNames.prototype, Enumerable); Element.addMethods();
var s = s_gi(s_account)
function s_rf(s) {
    s._rf_f = new Function('t', 'l', 'var s=this,i=t?t.indexOf("="):-1,n=(l.substring(0,1)=="!");l=n?l.substring(1):l;if(t){if(i>0){if((","+l+",").indexOf(","+t.substring(0,i)+",")>=0)t=n?""' + ':t;else t=n?t:""}if(t)s._rf_b+=(s._rf_b?"&":"")+t}'); s._rf = new Function('x', 'var s=this,y,i,h,a,b,l="q,ie,start,search_key,word,kw,cd";y=x=""+x;i=y.indexOf("?");if(i>=0){a="&"+y.substring(i+1)+"&";' + 'y=y.substring(0,i);h=y.toLowerCase();i=0;if(h.substring(0,7)=="http://")i+=7;else if(h.substring(0,8)=="https://")i+=8;h=h.substring(i);i=h.indexOf("/");if(i>0){h=h.substring(0,i);if(h.indexOf("goo' + 'gle")>=0&&(a.indexOf("&q=")>=0||a.indexOf("&ie=")>=0||a.indexOf("&start=")>=0||a.indexOf("&search_key=")>=0||a.indexOf("&word=")>=0||a.indexOf("&kw=")>=0||a.indexOf("&cd=")>=0)){s._rf_b="";s.pt(a,"' + '&","_rf_f",l);s.pt(a,"&","_rf_f","!"+l);b=s._rf_b;if(b!=a)return y+"?"+b}}}return x'); s._rf_fl = s.fl; s.fl = new Function('x', 'l', 'var s=this;if(x&&l==255)x=s._rf(x);return s._rf_fl(x,l)'); s._rf_hav = s.hav; s.hav = new Function('var s=this,x=s.referrer;if(x)s.referrer=s.fl(x,255);return s._rf_hav()')
} s_rf(s);
s.charSet = "UTF-8";
s.trackDownloadLinks = true
s.trackExternalLinks = true
s.trackInlineStats = true
s.linkDownloadFileTypes = "exe,zip,wav,mp3,mov,mpg,avi,wmv,pdf,doc,docx,xls,xlsx,ppt,pptx"
s.linkInternalFilters = s_linkInternalFilters
s.linkLeaveQueryString = false
s.linkTrackVars = "None"
s.linkTrackEvents = "None"
s.siteID = "";
s.defaultPage = "index.html";
s.queryVarsList = "";
s.pathExcludeDelim = ";";
s.pathConcatDelim = "|";
s.usePlugins = true
function s_doPlugins(s) {
    s.campaign = s.getQueryParam("cid");
    s.eVar24 = s.getNewRepeat();
    s.eVar28 = s.getTimeParting('h', '-5', '2009');
    s.eVar29 = s.getTimeParting('d', '-5', '2009');
    s.eVar30 = s.getTimeParting('w', '-5', '2009');
    if (s.eVar1) s.prop1 = s.eVar1;
    if (s.eVar2) s.prop2 = s.eVar2;
    if (s.eVar3) s.prop3 = s.eVar3;
    if (s.eVar4) s.prop4 = s.eVar4;
    if (s.eVar5) s.prop5 = s.eVar5;
    if (s.eVar6) s.prop6 = s.eVar6;
    if (s.eVar7) s.prop7 = s.eVar7;
    if (s.eVar8) s.prop8 = s.eVar8;
    if (s.eVar9) s.prop9 = s.eVar9;
    if (s.eVar10) s.prop10 = s.eVar10;
    if (s.eVar11) s.prop11 = s.eVar11;
    if (s.eVar12) s.prop12 = s.eVar12;
    if (s.eVar16) s.prop16 = s.eVar16;
    if (s.eVar17) s.prop17 = s.eVar17;
    if (s.eVar18) s.prop18 = s.eVar18;
    if (s.eVar19) s.prop19 = s.eVar19;
    if (s.eVar20) s.prop20 = s.eVar20;
    if (s.eVar21) s.prop21 = s.eVar21;
    if (s.eVar22) s.prop22 = s.eVar22;
    if (s.eVar23) s.prop23 = s.eVar23;
    if (s.eVar24) s.prop24 = s.eVar24;
    if (s.eVar27) s.prop27 = s.eVar27;
    if (s.eVar28) s.prop28 = s.eVar28;
    if (s.eVar29) s.prop29 = s.eVar29;
    if (s.eVar30) s.prop30 = s.eVar30;
    if (s.eVar31) s.prop31 = s.eVar31;
    if (s.eVar32) s.prop32 = s.eVar32;
    if (s.eVar33) s.prop33 = s.eVar33;
    if (s.channel) s.eVar38 = s.channel;
    if (s.campaign) s.prop35 = s.campaign;
    if ((!window.s.pageType) && (!window.s.pageName || s.pageName == "")) s.pageName = s.getPageName();
    if (s.pageName) s.eVar36 = s.pageName;
    s.prop20 = s.getAndPersistValue(s.prop20, "omtr_gapv20", 365);
    s.prop21 = s.getAndPersistValue(s.prop21, "omtr_gapv21", 365);
    s.prop22 = s.getAndPersistValue(s.prop22, "omtr_gapv22", 365);
    s.prop23 = s.getAndPersistValue(s.prop23, "omtr_gapv23", 365);
    s.prop24 = s.getAndPersistValue(s.prop24, "omtr_gapv24", 365);
    if (s.events) { if (s.events.indexOf("event6") == -1 && s.events.indexOf("event7") == -1 && s.events.indexOf("event8") == -1 && s.events.indexOf("event9") == -1 && s.events.indexOf("event10") == -1 && s.events.indexOf("event11") == -1 && s.events.indexOf("event12") == -1 && s.events.indexOf("event13") == -1) s.events = s.apl(s.events, "event1", ",", 2); } else s.events = s.apl(s.events, "event1", ",", 2);
    if (s.prop17)
        s.events = s.apl(s.events, "event14", ",", 2);
}
s.doPlugins = s_doPlugins
s.getPageName = new Function("u", "" + "var s=this,v=u?u:''+s.wd.location,x=v.indexOf(':'),y=v.indexOf('/'," + "x+4),z=v.indexOf('?'),c=s.pathConcatDelim,e=s.pathExcludeDelim,g=s." + "queryVarsList,d=s.siteID,n=d?d:'',q=z<0?'':v.substring(z+1),p=v.sub" + "string(y+1,q?z:v.length);z=p.indexOf('#');p=z<0?p:s.fl(p,z);x=e?p.i" + "ndexOf(e):-1;p=x<0?p:s.fl(p,x);p+=!p||p.charAt(p.length-1)=='/'?s.d" + "efaultPage:'';y=c?c:'/';while(p){x=p.indexOf('/');x=x<0?p.length:x;" + "z=s.fl(p,x);if(!s.pt(s.pathExcludeList,',','p_c',z))n+=n?y+z:z;p=p." + "substring(x+1)}y=c?c:'?';while(g){x=g.indexOf(',');x=x<0?g.length:x" + ";z=s.fl(g,x);z=s.pt(q,'&','p_c',z);if(z){n+=n?y+z:z;y=c?c:'&'}g=g.s" + "ubstring(x+1)}return n");
s.p_c = new Function("v", "c", "" + "var x=v.indexOf('=');return c.toLowerCase()==v.substring(0,x<0?v.le" + "ngth:x).toLowerCase()?v:0");
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';");
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.getAndPersistValue = new Function("v", "c", "e", "" + "var s=this,a=new Date;e=e?e:0;a.setTime(a.getTime()+e*86400000);if(" + "v)s.c_w(c,v,e?a:0);return s.c_r(c);");
s.getQueryParam = new Function("p", "d", "u", "" + "var s=this,v='',i,t;d=d?d:'';u=u?u:(s.pageURL?s.pageURL:s.wd.locati" + "on);if(u=='f')u=s.gtfs().location;while(p){i=p.indexOf(',');i=i<0?p" + ".length:i;t=s.p_gpv(p.substring(0,i),u+'');if(t){t=t.indexOf('#')>-" + "1?t.substring(0,t.indexOf('#')):t;}if(t)v+=v?d+t:t;p=p.substring(i=" + "=p.length?i:i+1)}return v");
s.p_gpv = new Function("k", "u", "" + "var s=this,v='',i=u.indexOf('?'),q;if(k&&i>-1){q=u.substring(i+1);v" + "=s.pt(q,'&','p_gvf',k)}return v");
s.p_gvf = new Function("t", "k", "" + "if(t){var s=this,i=t.indexOf('='),p=i<0?t:t.substring(0,i),v=i<0?'T" + "rue':t.substring(i+1);if(p.toLowerCase()==k.toLowerCase())return s." + "epa(v)}return ''");
s.getVisitStart = new Function("c", "" + "var s=this,v=1,t=new Date;t.setTime(t.getTime()+1800000);if(s.c_r(c" + ")){v=0}if(!s.c_w(c,1,t)){s.c_w(c,1,0)}if(!s.c_r(c)){v=0}return v;");
s.split = new Function("l", "d", "" + "var i,x=0,a=new Array;while(l){i=l.indexOf(d);i=i>-1?i:l.length;a[x" + "++]=l.substring(0,i);l=l.substring(i+d.length);}return a");
s.apl = new Function("l", "v", "d", "u", "" + "var s=this,m=0;if(!l)l='';if(u){var i,n,a=s.split(l,d);for(i=0;i<a." + "length;i++){n=a[i];m=m||(u==1?(n==v):(n.toLowerCase()==v.toLowerCas" + "e()));}}if(!m)l=l?l+d+v:v;return l");
s.p_gpv = new Function("k", "u", "" + "var s=this,v='',i=u.indexOf('?'),q;if(k&&i>-1){q=u.substring(i+1);v" + "=s.pt(q,'&','p_gvf',k)}return v");
s.p_gvf = new Function("t", "k", "" + "if(t){var s=this,i=t.indexOf('='),p=i<0?t:t.substring(0,i),v=i<0?'T" + "rue':t.substring(i+1);if(p.toLowerCase()==k.toLowerCase())return s." + "epa(v)}return ''");
s.visitorNamespace = "ctv"
s.trackingServer = "sc.ctvolympics.ca"
s.dc = 122
var s_code = '', s_objectID; function s_gi(un, pg, ss) {
    var c = "=fun^I(~){`Ls=^Z~$y ~.substring(~.indexOf(~;@u~`c@u~=new Fun^I(~.toLowerCase()~};s.~.length~s_c_il['+s@4n+']~=new Object~`ZMigrationServer~.toU" + "pperCase~){@u~`U$z=^O=s.`W`q=s.`W^c=`I^zobjectID=s.ppu=$9=$9v1=$9v2=$9v3=~','~s.wd~t^S~')q='~var ~s.pt(~=new Array~ookieDomainPeriods~.location~^KingServer~dynamicAccount~s.apv~BufferedRequests~);s" + ".~)@ux^w!Object$rObject.prototype$rObject.prototype[x])~link~s.m_~Element~visitor~$q@h~referrer~else ~.get#B()~}c#D(e){~.lastIndexOf(~.protocol~=new Date~=''~;@d^ss[k],255)}~javaEnabled~conne^I^c~^" + "zc_i~:'')~onclick~}@u~Name~ternalFilters~javascript~s.dl~@9s.b.addBehavior(\"# default# ~for(~=parseFloat(~'+tm.get~typeof(v)==\"~window~cookie~s.rep(~s.vl_g~tfs~s.un~&&s.~o^zoid~browser~.parent~do" + "cument~colorDepth~String~while(~.host~s.maxDelay~r=s.m(f)?s[f](~s.sq~parseInt(~ction~t=s.ot(o)~track~nload~j='1.~#NURL~s.eo~lugins~'){q='~dynamicVariablePrefix~=='~set#Bout(~Sampling~s.rc[un]~Event" + "~;i++)~');~this~resolution~}else{~Type~s.c_r(~s.c_w(~s.eh~s.isie~s.vl_l~s.vl_t~Secure~Height~t,h#Wt?t~tcf~isopera~ismac~escape(~.href~screen.~s.fl(~s=s_gi(~Version~harCode~&&(~_'+~variableProvider~" + ".s_~f',~){s.~)?'Y':'N'~:'';h=h?h~._i~e&&l!='SESSION'~s_sv(v,n[k],i)}~name~home#N~;try{~s.ssl~s.oun~s.rl[u~Width~o.type~\"m_\"+n~Lifetime~s.gg('objectID~sEnabled~.mrq($tun+'\"~ExternalLinks~charSet~" + "onerror~currencyCode~.src~disable~etYear(~MigrationKey~&&!~Opera~'s_~Math.~s.fsg~s.$z~s.ns6~InlineStats~&&l!='NONE'~Track~'0123456789~s[k]=~'+n+'~loadModule~+\"_c\"]~s.ape(~s.epa(~t.m_nl~m._d~n=s.o" + "id(o)~,'sqs',q);~LeaveQuery~(''+~')>=~'=')~){n=~\",''),~&&t!='~if(~vo)~s.sampled~=s.oh(o);~+(y<1900?~n]=~true~sess~campaign~lif~ in ~'http~,100)~s.co(~ffset~s.pe~'&pe~m._l~s.c_d~s.brl~s.nrs~s.gv(~s" + "[mn]~s.qav~,'vo~s.pl~=(apn~Listener~\"s_gs(\")~vo._t~b.attach~2o7.net'~d.create~=s.n.app~n){~t&&~)+'/~s()+'~){p=~():''~a):f(~'+n;~+1))~a['!'+t]~){v=s.n.~channel~.target~x.split~o.value~[\"s_\"+g~s_" + "si(t)~')dc='1~\".tl(\")~etscape~s_')t=t~omePage~s.d.get~')<~='+~||!~'||~\"'+~[b](e);~\"){n[k]~a+1,b):~m[t+1](~return~lnk~mobile~height~events~random~code~wd.~=un~un,~,pev~'MSIE ~rs,~Time~floor(~atc" + "h~s.num(~s.pg~m._e~s.c_gd~,'lt~.inner~transa~;s.gl(~',s.bc~page~Group,~.fromC~sByTag~?'&~+';'~&&o~1);~}}}}~){t=~[t]=~[n];~>=5)~[t](~!a[t])~~s._c=@Uc';`I=`z`5!`I`m$S`I`ml`N;`I`mn=0;}s@4l=`I`ml;s@4n=" + "`I`mn;s@4l[s@4@zs;`I`mn++;s.m`0m){`2@om)`4'{$p0`9fl`0x,l){`2x?@ox)`30,l):x`9co`0o`F!o)`2o;`Ln`C,x;`vx$4o)@ux`4'select$p0&&x`4'filter$p0)n[x]=o[x];`2n`9num`0x){x`i+x;`v`Lp=0;p<x`A;p++)@u(@c')`4x`3p," + "p$a<0)`20;`21`9rep=s_r;s.spf`0t,a){a[a`A]=t;`20`9sp`0x,d`1,a`N`5$f)a=$f(d);`c`Mx,d,'sp@0a);`2a`9ape`0x`1,h=@cABCDEF',i,c=s.@L,n,l,e,y`i;c=c?c`E$X`5x){x`i+x`5c^SAUTO'^w'').c^vAt){`vi=0;i<x`A^X{c=x`3" + "i,i+#Un=x.c^vAt(i)`5n>127){l=0;e`i;^Cn||l<4){e=h`3n%16,n%16+1)+e;n=(n-n%16)/16;l++}y+='%u'+e}`6c^S+')y+='%2B';`cy+=^pc)}x=y^bx=x?^1^p''+x),'+`H%2B'):x`5x&&c^5em==1&&x`4'%u$p0&&x`4'%U$p0){i=x`4'%^Y^" + "Ci>=0){i++`5h`38)`4x`3i,i+1)`E())>=0)`2x`30,i)+'u00'+x`3i);i=x`4'%',i)#V`2x`9epa`0x`1;`2x?un^p^1''+x,'+`H ')):x`9pt`0x,d,f,a`1,t=x,z=0,y,r;^Ct){y=t`4d);y=y<0?t`A:y;t=t`30,y);^Ft,$Yt,a)`5r)`2r;z+=y+" + "d`A;t=x`3z,x`A);t=z<x`A?t:''}`2''`9isf`0t,a){`Lc=a`4':')`5c>=0)a=a`30,c)`5t`30,2)^S$m`32);`2(t!`i&&t==a)`9fsf`0t,a`1`5`Ma,`H,'is@0t))@W+=(@W!`i?`H`n+t;`20`9fs`0x,f`1;@W`i;`Mx,`H,'fs@0f);`2@W`9si`0w" + "d`1,c`i+s_gi,a=c`4\"{\"),b=c`f\"}\"),m;c=s_fe(a>0&&b>0?c`3$w0)`5wd&&#5^9&&c){#5^T'fun^I s_sv(o,n,k){`Lv=o[k],i`5v`F`ystring\"||`ynumber\")n[k]=v;`cif (`yarray$v`N;`vi=0;i<v`A^X@6`cif (`yobject$v`C;" + "`vi$4v)@6}}fun^I $i{`Lwd=`z,s,i,j,c,a,b;wd^zgi`7\"un\",\"pg\",\"ss\",$tc+'\");#5^t$t@B+'\");s=#5s;s.sa($t^4+'\"`U^3=wd;`M^2,\",\",\"vo1\",t`G\\'\\'`5t.m_l&&@j)`vi=0;i<@j`A^X{n=@j[i]`5$Sm=t#Yc=t[@F]" + "`5m&&c){c=\"\"+c`5c`4\"fun^I\")>=0){a=c`4\"{\");b=c`f\"}\");c=a>0&&b>0?c`3$w0;s[@F@g=c`5#G)s.@f(n)`5s[n])`vj=0;j<$B`A;j++)s_sv(m,s[n],$B[j])#V}`Le,o,t@9o=`z.opener`5o#T^zgi#Wo^zgi($t^4+'\")`5t)$i}`" + "e}',1)}`9c_d`i;#Hf`0t,a`1`5!#Et))`21;`20`9c_gd`0`1,d=`I`P^D@7,n=s.fpC`O,p`5!n)n=s.c`O`5d@S$C@rn?^Hn):2;n=n>2?n:2;p=d`f'.')`5p>=0){^Cp>=0&&n>1$Wd`f'.',p-#Un--}$C=p>0&&`Md,'.`Hc_gd@00)?d`3p):d}}`2$C`" + "9c_r`0k`1;k=@hk);`Lc=' '+s.d.^0,i=c`4' '+k+@q,e=i<0?i:c`4';',i),v=i<0?'':@ic`3i+2+k`A,e<0?c`A:e));`2v!='[[B]]'?v:''`9c_w`0k,v,e`1,d=#H(),l=s.^0@G,t;v`i+v;l=l?@ol)`E$X`5@5@a#W(v!`i?^Hl?l:0):-60)`5t)" + "{e`h;e.set#B(e`d+(t*1000))}`pk@a@1d.^0=k+'`av!`i?v:'[[B]]')+'; path=/;'+(@5?' expires$qe.toGMT^B()#S`n+(d?' domain$qd#S`n;`2^dk)==v}`20`9eh`0o,e,r,f`1,b='s^xe+'^xs@4n,n=-1,l,i,x`5!^fl)^fl`N;l=^fl;`" + "vi=0;i<l`A&&n<0;i++`Fl[i].o==o&&l[i].e==e)n=i`pn<0@ri;l[n]`C}x=l#Yx.o=o;x.e=e;f=r?x.b:f`5r||f){x.b=r?0:o[e];x.o[e]=f`px.b){x.o[b]=x.b;`2b}`20`9cet`0f,a,t,o,b`1,r,^m`5`S>=5^w!s.^n||`S>=7)){^m`7's`Hf" + "`Ha`Ht`H`Le,r@9^F$Ya)`er=s.m(t)?s#ae):t(e)}`2r^Yr=^m(s,f,a,t)^b@us.^o^5u`4#94@p0)r=s.m(b)?s[b](a):b(a);else{^f(`I,'@M',0,o);^F$Ya`Ueh(`I,'@M',1)}}`2r`9g^3et`0e`1;`2s.^3`9g^3oe`7'e`H`Ls=`B,c;^f(`z," + "\"@M\",1`Ue^3=1;c=s.t()`5c)s.d.write(c`Ue^3=0;`2$0'`Ug^3fb`0a){`2`z`9g^3f`0w`1,p=w^8,l=w`P;s.^3=w`5p&&p`P!=l&&p`P^D==l^D@1^3=p;`2s.g^3f(s.^3)}`2s.^3`9g^3`0`1`5!s.^3@1^3=`I`5!s.e^3)s.^3=s.cet('g^3@0" + "s.^3,'g^3et',s.g^3oe,'g^3fb')}`2s.^3`9mrq`0u`1,l=@C],n,r;@C]=0`5l)`vn=0;n<l`A;n++){r=l#Ys.mr(0,0,r.r,0,r.t,r.u)}`9br`0id,rs`1`5s.@P`T$r^e@Ubr',rs))$D=rs`9flush`T`0`1;s.fbr(0)`9fbr`0id`1,br=^d@Ubr')" + "`5!br)br=$D`5br`F!s.@P`T)^e@Ubr`H'`Umr(0,0,br)}$D=0`9mr`0$1,q,#Aid,ta,u`1,dc=s.dc,t1=s.`Q,t2=s.`Q^j,tb=s.`QBase,p='.sc',ns=s.`Z`qspace,un=u?u:(ns?ns:s.fun),unc=^1#7'_`H-'),r`C,l,imn=@Ui^x(un),im,b," + "e`5!rs`Ft1`Ft2^5ssl)t1=t2^b@u!ns)ns#6c`5!tb)tb='$P`5dc)dc=@odc)`8;`cdc='d1'`5tb^S$P`Fdc^Sd1$j12';`6dc^Sd2$j22';p`i}t1=ns+'.'+dc+'.'+p+tb}rs=$5'+(@A?'s'`n+'://'+t1+'/b/ss/'+^4+'/'+(s.#0?'5.1':'1'$UH" + ".19.4/'+$1+'?AQB=1&ndh=1'+(q?q`n+'&AQE=1'`5^g@Ss.^o`F`S>5.5)rs=^s#A4095);`crs=^s#A2047)`pid@1br(id,rs);$y}`ps.d.images&&`S>=3^w!s.^n||`S>=7)^w@Y<0||`S>=6.1)`F!s.rc)s.rc`C`5!^V){^V=1`5!s.rl)s.rl`C;@" + "Cn]`N;^T'@u`z`ml)`z.`B@J)',750)^bl=@Cn]`5l){r.t=ta;r.u#6;r.r=rs;l[l`A]=r;`2''}imn+='^x^V;^V++}im=`I[imn]`5!im)im=`I[im@znew Image;im^zl=0;im.o^L`7'e`H^Z^zl=1;`Lwd=`z,s`5wd`ml){s=#5`B;s@J`Unrs--`5!$" + "E)`Xm(\"rr\")}')`5!$E@1nrs=1;`Xm('rs')}`c$E++;im@O=rs`5rs`4$A=@p0^w!ta||ta^S_self$sta^S_top$s(`I.@7&&ta==`I.@7))){b=e`h;^C!im^zl&&e`d-b`d<500)e`h}`2''}`2'<im'+'g sr'+'c=$trs+'\" width=1 #1=1 border" + "=0 alt=\"\">'`9gg`0v`1`5!`I['s^xv])`I['s^xv]`i;`2`I['s^xv]`9glf`0t,a`Ft`30,2)^S$m`32);`Ls=^Z,v=s.gg(t)`5v)s#Xv`9gl`0v`1`5#F)`Mv,`H,'gl@00)`9gv`0v`1;`2s['vpm^xv]?s['vpv^xv]:(s[v]?s[v]`n`9havf`0t,a`1" + ",b=t`30,4),x=t`34),n=^Hx),k='g^xt,m='vpm^xt,q=t,v=s.`W@bVa#Ae=s.`W@b^Ws,mn;@d$Ft)`5s[k]`F$9||@X||^O`F$9){mn=$9`30,1)`E()+$9`31)`5$G){v=$G.^KVars;e=$G.^K^Ws}}v=v?v+`H+^h+`H+^h2:''`5v@S`Mv,`H,'is@0t)" + ")s[k]`i`5`J#2'&&e)@ds.fs(s[k],e)}s[m]=0`5`J^R`KD';`6`J`ZID`Kvid';`6`J^N^Qg'`j`6`J`b^Qr'`j`6`Jvmk$s`J`Z@R`Kvmt';`6`J`D^Qvmf'`5@A^5`D^j)s[k]`i}`6`J`D^j^Qvmf'`5!@A^5`D)s[k]`i}`6`J@L^Qce'`5s[k]`E()^SAU" + "TO')@d'ISO8859-1';`6s.em==2)@d'UTF-8'}`6`J`Z`qspace`Kns';`6`Jc`O`Kcdp';`6`J^0@G`Kcl';`6`J^y`Kvvp';`6`J@N`Kcc';`6`J$d`Kch';`6`J#K^IID`Kxact';`6`J$2`Kv0';`6`J^a`Ks';`6`J^A`Kc';`6`J`s^u`Kj';`6`J`k`Kv'" + ";`6`J^0@I`Kk';`6`J^7@D`Kbw';`6`J^7^k`Kbh';`6`J`l`Kct';`6`J@8`Khp';`6`Jp^P`Kp';`6#Ex)`Fb^Sprop`Kc$Z`6b^SeVar`Kv$Z`6b^Slist`Kl$Z`6b^Shier^Qh'+n`j`ps[k]@t`W`q'@t`W^c')$H+='&'+q+'$q(t`30,3)!='pev'?@hs[" + "k]):s[k]);}`2''`9hav`0`1;$H`i;`M^i,`H,'hav@00);`2$H`9lnf`0^l`8@3`8:'';`Lte=t`4@q`5$Tte>0&&h`4t`3te$a>=0)`2t`30,te);`2''`9ln`0h`1,n=s.`W`qs`5n)`2`Mn,`H,'ln@0h);`2''`9ltdf`0^l`8@3`8:'';`Lqi=h`4'?^Yh=" + "qi>=0?h`30,qi):h`5$Th`3h`A-(t`A$a^S.'+t)`21;`20`9ltef`0^l`8@3`8:''`5$Th`4t)>=0)`21;`20`9lt`0h`1,lft=s.`WDow^LFile^cs,lef=s.`WEx`r,$3=s.`WIn`r;$3=$3?$3:`I`P^D@7;h=h`8`5s.^KDow^LLinks&&lf$T`Mlft,`H#I" + "d@0h))`2'd'`5s.^K@K&&h`30,1)!='# '^wlef||$3)^w!lef||`Mlef,`H#Ie@0h))^w!$3$r`M$3,`H#Ie@0h)))`2'e';`2''`9lc`7'e`H`Ls=`B,b=^f(^Z,\"`o\"`U$z=$7^Z`Ut(`U$z=0`5b)`2^Z$u`2$0'`Ubc`7'e`H`Ls=`B,f,^m`5s.d^5d.a" + "ll^5d.all.cppXYctnr)$y;^O=e@O`Y?e@O`Y:e$e;^m`7\"s\",\"`Le@9@u^O^w^O.tag`q||^O^8`Y||^O^8Node))s.t()`e}\");^m(s`Ueo=0'`Uoh`0o`1,l=`I`P,h=o^q?o^q:'',i,j,k,p;i=h`4':^Yj=h`4'?^Yk=h`4'/')`5h^wi<0||(j>=0&" + "&i>j)||(k>=0&&i>k))$Wo`g#T`g`A>1?o`g:(l`g?l`g`n;i=l.path@7`f'/^Yh=(p?p+'//'`n+(o^D?o^D:(l^D?l^D`n)+(h`30,1)!='/'?l.path@7`30,i<0?0:i$U'`n+h}`2h`9ot`0o){`Lt=o.tag`q;t=$Tt`E?t`E$X`5`JSHAPE')t`i`5t`F`" + "JINPUT'&&@E&&@E`E)t=@E`E();`6!$To^q)t='A';}`2t`9oid`0o`1,^J,p,c,n`i,x=0`5t@S^6$Wo`g;c=o.`o`5o^q^w`JA$s`JAREA')^w!c$rp||p`8`4'`s$p0))n@x`6c@r^1s.rep(^1s.rep@oc,\"\\r@s\"\\n@s\"\\t@s' `H^Yx=2}`6$g^w`" + "JINPUT$s`JSUBMIT')@r$g;x=3}`6o@O&&`JIMAGE')n=o@O`5$S^6=^sn$6;^6t=x}}`2^6`9rqf`0t,un`1,e=t`4@q,u=e>=0?`H+t`30,e)+`H:'';`2u&&u`4`H+un+`H)>=0?@it`3e$a:''`9rq`0un`1,c#6`4`H),v=^d@Usq'),q`i`5c<0)`2`Mv,'" + "&`Hrq@0un);`2`M#7`H,'rq',0)`9sqp`0t,a`1,e=t`4@q,q=e<0?'':@it`3e+1)`Usqq[q]`i`5e>=0)`Mt`30,e),`H@m`20`9sqs`0#7q`1;^Gu[u@zq;`20`9sq`0q`1,k=@Usq',v=^dk),x,c=0;^Gq`C;^Gu`C;^Gq[q]`i;`Mv,'&`Hsqp',0);`M^4" + ",`H@mv`i;`vx$4^Gu`V)^Gq[^Gu[x]]+=(^Gq[^Gu[x]]?`H`n+x;`vx$4^Gq`V^5sqq[x]^wx==q||c<2)){v+=(v#R'`n+^Gq[x]+'`ax);c++}`2^ek,v,0)`9wdl`7'e`H`Ls=`B,r=$0,b=^f(`I,\"o^L\"),i,o,oc`5b)r=^Z$u`vi=0;i<s.d.`Ws`A^" + "X{o=s.d.`Ws[i];oc=o.`o?\"\"+o.`o:\"\"`5(oc`4$M<0||oc`4\"^zoc(\")>=0)#Tc`4$k<0)^f(o,\"`o\",0,s.lc);}`2r^Y`Is`0`1`5`S>3^w!^g$rs.^o||`S#Z`Fs.b^5$O^W)s.$O^W('`o#M);`6s.b^5b.add^W$L)s.b.add^W$L('click#M" + ",false);`c^f(`I,'o^L',0,`Il)}`9vs`0x`1,v=s.`Z^U,g=s.`Z^U#Ok=@Uvsn^x^4+(g?'^xg`n,n=^dk),e`h,y=e.g@Q);e.s@Qy+10@y1900:0))`5v){v*=100`5!n`F!^ek,x,e))`20;n=x`pn%10000>v)`20}`21`9dyasmf`0t,m`F$Tm&&m`4t)" + ">=0)`21;`20`9dyasf`0t,m`1,i=t?t`4@q:-1,n,x`5i>=0&&m){`Ln=t`30,i),x=t`3i+1)`5`Mx,`H,'dyasm@0m))`2n}`20`9uns`0`1,x=s.`RSele^I,l=s.`RList,m=s.`RM#D,n,i;^4=^4`8`5x&&l`F!m)m=`I`P^D`5!m.toLowerCase)m`i+m" + ";l=l`8;m=m`8;n=`Ml,';`Hdyas@0m)`5n)^4=n}i=^4`4`H`Ufun=i<0?^4:^4`30,i)`9sa`0un`1;^4#6`5!@B)@B#6;`6(`H+@B+`H)`4un)<0)@B+=`H+un;^4s()`9m_i`0n,a`1,m,f=n`30,1),r,l,i`5!`Xl)`Xl`C`5!`Xnl)`Xnl`N;m=`Xl[n]`5" + "!a&&m&&#G@Sm@4)`Xa(n)`5!m){m`C,m._c=@Um';m@4n=`I`mn;m@4l=s@4l;m@4l[m@4@zm;`I`mn++;m.s=s;m._n=n;$B`N('_c`H_in`H_il`H_i`H_e`H_d`H_dl`Hs`Hn`H_r`H_g`H_g1`H_t`H_t1`H_x`H_x1`H_rs`H_rr`H_l'`Um_l[@zm;`Xnl[" + "`Xnl`A]=n}`6m._r@Sm._m){r=m._r;r._m=m;l=$B;`vi=0;i<l`A^X@um[l[i]])r[l[i]]=m[l[i]];r@4l[r@4@zr;m=`Xl[@zr`pf==f`E())s[@zm;`2m`9m_a`7'n`Hg`H@u!g)g=@F;`Ls=`B,c=s[g@g,m,x,f=0`5!c)c=`I$h@g`5c&&s_d)s[g]`7" + "\"s\",s_ft(s_d(c)));x=s[g]`5!x)x=s[g]=`I$h];m=`Xi(n,1)`5x){m@4=f=1`5(\"\"+x)`4\"fun^I\")>=0)x(s);`c`Xm(\"x\",n,x)}m=`Xi(n,1)`5@kl)@kl=@k=0;`tt();`2f'`Um_m`0t,n,d#W'^xt;`Ls=^Z,i,x,m,f='^xt`5`Xl&&`Xn" + "l)`vi=0;i<`Xnl`A^X{x=`Xnl[i]`5!n||x==$Sm=`Xi(x)`5m[t]`F`J_d')`21`5d)m#ad);`cm#a)`pm[t+1]@Sm[f]`Fd)$xd);`c$x)}m[f]=1}}`20`9@f`0n,u,d,l`1,m,i=n`4':'),g=i<0?@F:n`3i+1),o=0,f,c=s.h?s.h:s.b,^m`5i>=0)n=n" + "`30,i);m=`Xi(n)`5(l$r`Xa(n,g))&&u^5d&&c^5$Q`Y`Fd){@k=1;@kl=1`p@A)u=^1u,$5:`Hhttps:^Yf`7'e`H`B.m_a(\"@e\",$tg+'\")^Y^m`7's`Hf`Hu`Hc`H`Le,o=0@9o=s.$Q`Y(\"script\")`5o){@E=\"text/`s\"`5f)o.o^L=f;o@O=u" + ";c.appendChild(o)}`eo=0}`2o^Yo=^m(s,f,u,c)}`cm=`Xi(n);#G=1;`2m`9vo1`0t,a`Fa[t]||$b)^Z#Xa[t]`9vo2`0t,a`F#b{a#X^Z[t]`5#b$b=1}`9dlt`7'`Ls=`B,d`h,i,vo,f=0`5`tl)`vi=0;i<`tl`A^X{vo=`tl[i]`5vo`F!`Xm(\"d\"" + ")||d`d-$N>=^E){`tl[i]=0;s.t(@v}`cf=1}`p`ti)clear#Bout(`ti`Udli=0`5f`F!`ti)`ti=^T`tt,^E)}`c`tl=0'`Udl`0vo`1,d`h`5!@vvo`C;`M^2,`H$I2',@v;$N=d`d`5!`tl)`tl`N;`tl[`tl`A]=vo`5!^E)^E=250;`tt()`9t`0vo,id`1" + ",trk=1,tm`h,sed=Math&&@V#3?@V#C@V#3()*10000000000000):tm`d,$1='s'+@V#Ctm`d/10800000)%10+sed,y=tm.g@Q),vt=tm.getDate($U`xMonth($U'@yy+1900:y)+' `xHour$V:`xMinute$V:`xSecond$V `xDay()+' `x#BzoneO$8()" + ",^m,^3=s.g^3(),ta`i,q`i,qs`i,#4`i,vb`C#L^2`Uuns()`5!s.td){`Ltl=^3`P,a,o,i,x`i,c`i,v`i,p`i,bw`i,bh`i,^M0',k=^e@Ucc`H$0',0@2,hp`i,ct`i,pn=0,ps`5^B&&^B.prototype){^M1'`5j.m#D){^M2'`5tm.setUTCDate){^M3" + "'`5^g^5^o&&`S#Z^M4'`5pn.toPrecisio$S^M5';a`N`5a.forEach){^M6';i=0;o`C;^m`7'o`H`Le,i=0@9i=new Iterator(o)`e}`2i^Yi=^m(o)`5i&&i.next)^M7'#V`p`S>=4)x=^rwidth+'x'+^r#1`5s.isns||s.^n`F`S>=3$c`k(@2`5`S>=" + "4){c=^rpixelDepth;bw=`I#J@D;bh=`I#J^k}}$J=s.n.p^P}`6^g`F`S>=4$c`k(@2;c=^r^A`5`S#Z{bw=s.d.^9`Y.o$8@D;bh=s.d.^9`Y.o$8^k`5!s.^o^5b){^m`7's`Htl`H`Le,hp=0`uh$n\");hp=s.b.isH$n(tl)?\"Y\":\"N\"`e}`2hp^Yhp" + "=^m(s,tl);^m`7's`H`Le,ct=0`uclientCaps\");ct=s.b.`l`e}`2ct^Yct=^m(s)}}}`cr`i`p$J)^Cpn<$J`A&&pn<30){ps=^s$J[pn].@7$6#S`5p`4ps)<0)p+=ps;pn++}s.^a=x;s.^A=c;s.`s^u=j;s.`k=v;s.^0@I=k;s.^7@D=bw;s.^7^k=bh" + ";s.`l=ct;s.@8=hp;s.p^P=p;s.td=1`p@v{`M^2,`H$I2',vb);`M^2,`H$I1',@v`ps.useP^P)s.doP^P(s);`Ll=`I`P,r=^3.^9.`b`5!s.^N)s.^N=l^q?l^q:l`5!s.`b@Ss._1_`b@1`b=r;s._1_`b=1}`Xm('g')`5(vo&&$N)$r`Xm('d')`F@X||^" + "O){`Lo=^O?^O:@X`5!o)`2'';`Lp=$F'#N`q'),w=1,^J,@l,x=^6t,h,l,i,oc`5^O#T==^O){^Co@Sn@tBODY'){o=o^8`Y?o^8`Y:o^8Node`5!o)`2'';^J;@l;x=^6t}oc=o.`o?''+o.`o:''`5(oc`4$M>=0#Tc`4\"^zoc(\")<0)||oc`4$k>=0)`2''" + "}ta=n?o$e:1;h@xi=h`4'?^Yh=s.`W@n^B||i<0?h:h`30,i);l=s.`W`q?s.`W`q:s.ln(h);t=s.`W^c?s.`W^c`8:s.lt(h)`5t^wh||l))q+=$A=$z^x(`Jd$s`Je'?@ht):'o')+(h?$Av1`ah)`n+(l?$Av2`al)`n;`ctrk=0`5s.^K@Z`F!p$W$F'^N^Y" + "w=0}^J;i=o.sourceIndex`5@H')@r@H^Yx=1;i=1`pp&&n&&t)qs='&pid`a^sp,255))+(w#Rpidt$qw`n+'&oid`a^sn$6)+(x#Roidt$qx`n+'&ot`at)+(i#Roi$qi`n}`p!trk@Sqs)`2'';@w=s.vs(sed)`5trk`F@w)#4=s.mr($1,(vt#Rt`avt)`n+" + "s.hav()+q+(qs?qs:s.rq(^4)),0,id,ta);qs`i;`Xm('t')`5s.p_r)s.p_r(`U`b`i}^G(qs);^b`t(@v;`p@v`M^2,`H$I1',vb`G''`5#F)`I^z$z=`I^zeo=`I^z`W`q=`I^z`W^c`i`5!id@Ss.tc@1tc=1;s.flush`T()}`2#4`9tl`0o,t,n,vo`1;@" + "X=$7o`U`W^c=t;s.`W`q=n;s.t(@v}`5pg){`I^zco`0o){`L^t\"_\",1,#U`2$7o)`9wd^zgs`0u$S`L^t#71,#U`2s.t()`9wd^zdc`0u$S`L^t#7#U`2s.t()}}@A=(`I`P`g`8`4$5s@p0`Ud=^9;s.b=s.d.body`5$o`Y#Q`q@1h=$o`Y#Q`q('HEAD')`" + "5s.h)s.h=s.h[0]}s.n=navigator;s.u=s.n.userAgent;@Y=s.u`4'N$l6/^Y`Lapn$R`q,v$R^u,ie=v`4#9'),o=s.u`4'@T '),i`5v`4'@T@p0||o>0)apn='@T';^g$K^SMicrosoft Internet Explorer'`Uisns$K^SN$l'`U^n$K^S@T'`U^o=(" + "s.u`4'Mac@p0)`5o>0)`S`ws.u`3o+6));`6ie>0){`S=^Hi=v`3ie+5))`5`S>3)`S`wi)}`6@Y>0)`S`ws.u`3@Y+10));`c`S`wv`Uem=0`5^B#P^v){i=^p^B#P^v(256))`E(`Uem=(i^S%C4%80'?2:(i^S%U0100'?1:0))}s.sa(un`Uvl_l='^R,`ZID" + ",vmk,`Z@R,`D,`D^j,ppu,@L,`Z`qspace,c`O,^0@G,#N`q,^N,`b,@N';^i=^h+',^y,$d,server,#N^c,#K^IID,purchaseID,$2,state,zip,#2,products,`W`q,`W^c';`v`Ln=1;n<51;n++)^i+=',prop@e,eVar@e,hier@e,list$Z^h2=',tn" + "t,pe#81#82#83,^a,^A,`s^u,`k,^0@I,^7@D,^7^k,`l,@8,p^P';^i+=^h2;^2=^i+',`Q,`Q^j,`QBase,fpC`O,@P`T,#0,`Z^U,`Z^U#O`RSele^I,`RList,`RM#D,^KDow^LLinks,^K@K,^K@Z,`W@n^B,`WDow^LFile^cs,`WEx`r,`WIn`r,`W@bVa" + "#A`W@b^Ws,`W`qs,$z,eo,_1_`b';#F=pg#L^2)`5!ss)`Is()", w = window, l = w.s_c_il, n = navigator, u = n.userAgent, v = n.appVersion, e = v.indexOf('MSIE '), m = u.indexOf('Netscape6/'), a, i, s; if (un) { un = un.toLowerCase(); if (l) for (i = 0; i < l.length; i++) { s = l[i]; if (s._c == 's_c') { if (s.oun == un) return s; else if (s.fs && s.sa && s.fs(s.oun, un)) { s.sa(un); return s } } } }
    w.s_r = new Function("x", "o", "n", "var i=x.indexOf(o);if(i>=0&&x.split)x=(x.split(o)).join(n);else while(i>=0){x=x.substring(0,i)+n+x.substring(i+o.length);i=x.indexOf(o)}return x");
    w.s_d = new Function("x", "var t='`^@$#',l='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',d,n=0,b,k,w,i=x.lastIndexOf('~~');if(i>0){d=x.substring(0,i);x=x.substring(i+2);while(d){w=d;i" + "=d.indexOf('~');if(i>0){w=d.substring(0,i);d=d.substring(i+1)}else d='';b=(n-n%62)/62;k=n-b*62;k=t.substring(b,b+1)+l.substring(k,k+1);x=s_r(x,k,w);n++}for(i=0;i<5;i++){w=t.substring(i,i+1);x=s_r(x" + ",w+' ',w)}}return x");
    w.s_fe = new Function("c", "return s_r(s_r(s_r(c,'\\\\','\\\\\\\\'),'\"','\\\\\"'),\"\\n\",\"\\\\n\")");
    w.s_fa = new Function("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");
    w.s_ft = new Function("c", "c+='';var s,e,o,a,d,q,f,h,x;s=c.indexOf('=function(');while(s>=0){s++;d=1;q='';x=0;f=c.substring(s);a=s_fa(f);e=o=c.indexOf('{',s);e++;while(d>0){h=c.substring(e,e+1);if(q){i" + "f(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_fe(c.substring(o+1,e))+'\")" + "'+c.substring(e+1);s=c.indexOf('=function(')}return c;");
    c = s_d(c); 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) { w.s_c = new Function("un", "pg", "ss", "var s=this;" + c); return new s_c(un, pg, ss) } else s = new Function("un", "pg", "ss", "var s=new Object;" + s_ft(c) + ";return s"); return s(un, pg, ss)
}
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 (typeof cookieDomain != 'undefined') { 
        //        if (cookieDomain != null && cookieDomain.length > 0) { ex +=";domain="+cookieDomain; } 
        //    }
        if ((!(cookieDomain === undefined)) && cookieDomain != null && cookieDomain.length > 0)
            ex += ";domain=" + cookieDomain;
        // alert(escape(escape(n)+'='+(v||'')+ex));
        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;
        var _t = 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');
    },
    commentratecheck: function() {
        if (Cookie.get('PCKCTV') || Cookie.get('SCKCTV')) { }
        else { $$('.ctvo_rater').invoke('update', ''); }
    },

    setLoginCookie: function() {
        if (Cookie.get('LOGINURL') != null) {
            Cookie.erase('LOGINURL', '/');
        }
        Cookie.setRaw('LOGINURL', 'url=' + unescape(window.location.pathname + window.location.search), 0.06);
        window.location.href = '/login/login.html';
    },

    setLoginCookieNoRedirect: function() {
        if (Cookie.get('LOGINURL') != null) {
            Cookie.erase('LOGINURL', '/');
        }
        Cookie.setRaw('LOGINURL', 'url=' + unescape(window.location.pathname + window.location.search), 0.06);
    }
};
/* Remove surrounding frames if any */
if (parent.frames.length > 0) { top.location.href = self.location.href; }
/* simulate firebug for not FF browsers*/
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 = ''; }
/* 
Returns the value of the selected radio button,
name: is the name attribute of the radio button group
Require prototype to select the correct element.
*/
function getRadioValue(n) {
    /*Read the value of the selected radio button (by searching all the radio with the specified name)*/
    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 the code to an url
    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;
    }
}
/* add quantcast tags to each page */
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";
    }

}
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();

}
//Load countdown clock flash with user timezone
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 d = new Date()
        var utcYear = d.getUTCFullYear();
        var utcMonth = d.getUTCMonth() + 1;
        var utcDate = d.getUTCDate();
        var utcHour = d.getUTCHours();
        var utcMinutes = d.getUTCMinutes();


        (utcMonth < 10) ? utcMonth = '0' + utcMonth : utcMonth = utcMonth;
        (utcDate < 10) ? utcDate = '0' + utcDate : utcDate = utcDate;
        (utcHour < 10) ? utcHour = '0' + utcHour : utcHour = utcHour;
        (utcMinutes < 10) ? utcMinutes = '0' + utcMinutes : utcMinutes = utcMinutes;

        var utcString = utcYear + utcMonth + utcDate + utcHour + utcMinutes

        countDownFlash.m_so = new SWFObject("/code/flash/clock.swf?cd_date=" + utcString + "&timezone=" + curtimeZone + "&lang=" + lang,
	    "objCountDownFlash",
	    "200",
	    "35",
	    "9", "#FFFFFF");
        countDownFlash.m_so.addParam('wmode', 'transparent');
        countDownFlash.m_so.write("boxCountdownClockFlash");
        $('boxCountdownClockFlash').show();
    }
};
/*
Comment Global Object
*/
var NewsComment = {
    newsId: 0,
    allComments: false,

    init: function(newsId) {
        NewsComment.newsId = newsId;
        $('c_comment').value = '';
        NewsComment.viewComments();
    },
    viewComments: function() {
        NewsComment.allComments = false;
        var u = "/news-centre/comments/newsid=" + 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();
    },

    showLoginEmbedded: function() {
        var cp = Cookie.get('PCKCTV');
        var cs = Cookie.get('SCKCTV');
        //var url = '/library/login/_login.html';
        if (((cp == null) || (cp === undefined)) && ((cs == null) || (cs === undefined))) {
            $('ctvo_loginEmbedded').show();
        }
        else {
            $('ctvo_loginEmbedded').hide();
        }
    },
    showRegistration_mandatoryfields: function() {
        var cp = Cookie.get('PCKCTV');
        var cs = Cookie.get('SCKCTV');
        //var url = '/library/login/_login.html';
        if (((cp == null) || (cp === undefined)) && ((cs == null) || (cs === undefined))) {
            $('ctvo_registration_mandatoryfields_div').hide();
        }
        else {
            $('ctvo_registration_mandatoryfields_div').show();
        }
    }
};
var PagingAjax = {
    page: function(url, id) {
        new Ajax.Request(url, {
            method: 'get',
            onComplete: function(transport) {
                $(id).replace(transport.responseText);
            }
        });
    }
};
var PhotoSearch = {
    search: function(query) {
        var d = new Date();
        var t = this;
        var ar = new Ajax.Request("/search/library/photo/_search2.htmx?t=" + d.getTime() + "&q=" + query,
			{ method: 'post', evalScripts: true,
			    onComplete: PhotoSearch.displaySearch
			});
    },

    displaySearch: function(r) {
        var d = $('ctvo_photoLibrarySearchContent');
        d.update(r.responseText);
        if (r.responseText != '')
            d.show();
    },

    photo_prevnext: function(start, url) {
        url = url.replace("'", "");
        url = "/search/library/photo/_search2.htmx?q=" + url + "&start=" + start;
        new Ajax.Updater('photoResults', url, { method: 'get', evalScripts: true });
    }
};
var PhotoGallerySearch = {
    search: function(query) {
        var d = new Date();
        var t = this;
        var ar = new Ajax.Request("/search/library/photogallery/_search.htmx?t=" + d.getTime() + "&q=" + query,
    { method: 'post', evalScripts: true, onComplete: PhotoGallerySearch.displaySearch });
    },
    displaySearch: function(r) {
        var d = $('ctvo_photoGallerySearchContent');
        d.update(r.responseText);
        if (r.responseText != '') d.show();
    },
    photo_prevnext: function(start, url) {
        url = url.replace("'", "");
        url = "/search/library/photogallery/_search.htmx?q=" + url + "&start=" + start;
        new Ajax.Updater('photoGalleryResults', url, { method: 'get', evalScripts: true });
    }
};
function showLiveResults(flag) {
    try {
        var el = $('sportFrontFlashModule');
        if (el !== undefined && el != null) {
            if (flag)
                el.show();
            else
                el.hide();
        }
    }
    catch (e) { }
}
function CallTabbedPage(reload, url4, id, refreshADV) {
    new Ajax.Updater(reload, url4, { method: 'get' });
    $(id).up().up().siblings().invoke('down').invoke('removeClassName', 'ctvo_Selected');
    $(id).up().up().siblings().invoke('down').invoke('addClassName', 'ctvo_Unselected');
    $(id).up().removeClassName('ctvo_Unselected');
    $(id).up().addClassName('ctvo_Selected');
    if (refreshADV == '1') advManager.refresh();
}
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, zoneOverride) {
        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"
        //Check the follow parameter
        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 = "ctv.ctvolympics.ca";

        if (zoneOverride === undefined || zoneOverride == null || zoneOverride == "") zoneOverride = "";

        //override zone value if provided  
        if (zoneOverride != "") v.zone = zoneOverride;

        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 (typeof (log) != 'undefined') {
            log('doubleClick.source.js > u: ' + u);
        }

        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, zoneOverride) {

        this._generateRnd();

        if (zoneOverride === undefined || zoneOverride == null || zoneOverride == "") zoneOverride = "";

        if (divID === undefined || divID == null) {
            var that = this;
            $$('.DoubleClickRefreshable').each(function(elem) {
                that.render(elem.id, true, zoneOverride);
            });
        }
        else
            this.render(divID, true, zoneOverride);
    },
    refreshPopupVideo: function(advTag, bStart, divClass) {
        var that = this;
        $$("." + divClass).each(function(elem) {
            that.renderPopupVideo(elem.id, advTag, bStart);
        });
    },
    renderPopupVideo: function(id, advTag, bStart) {
        //debugger;
        var d = $(id);
        if (d === undefined || d == null) return;
        var bLB = d.hasClassName('LBOARD');
        advTag = advManager._removeKey(advTag, 'sz') //+";ord="+this._generateRnd();
        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;
            //cTag=this._getHouse(this.m_lastTag);
            $$('.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/ctv.ctvolympics.ca;sz=" + v.width + "x" + v.height + ";ord=" + advManager.getRandom() + "?"
                    }
                    else {
                        u = "http:/" + "/ad.doubleclick.net/adi/ctv.ctvolympics.ca;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) {
        /*remove the dc_seed & ord */
        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;
    },

    //Check if the double click data contains the follow value.
    // if follow > 0 then save the data in the cookie.
    // If otherwise follow <= 0 and there is already a cookie change the actual values
    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;
                //remove the size from the keys and add it again using the right value
                // because I must use the adv from the cookie but with the right size
                nK = advManager._removeKey(nK, 'sz');
                nK = advManager._addKey(nK, "sz=" + v.size);
                v.zone = dc.zone;
                v.keys = nK;
            }
        }
        return v;
    },

    //Decrement the follow variable
    // If 0 delete the cookie
    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() {
        // escape each parameter separatelty and use the setRaw
        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();
//Decrement the follow cookie using to remember the sponsored cookie for some clicks
advManager.checkFollow();
function PhotoGalleryRefreshAds() {
    //if (pagePlayer===undefined||pagePlayer==null){
    advManager.refresh();
}

function MedalsRefreshAds(params) {
    advManager.refresh();
    s.t();
}

function thirdpartyRefreshAd(adzone) {
    advManager.refresh(null, adType);
}
// JScript File
Event.observe(window, 'load', function() {
    Submenu.prepareSubMenus();

    Submenu.getOpenLinks().each(function(link) {
        Event.observe(link, 'mouseover', Submenu.open_Click);
    });

    Submenu.getCloseLinks().each(function(link) {
        Event.observe(link, 'click', Submenu.close_Click);
    });

});
//Static Submenu class with all the menu related methods
var Submenu =
{
    getOpenLinks: function() {
        return $$('a.ctvo_submenuOpen');

    },
    getCloseLinks: function() {
        return $$('a.ctvo_submenuClose');
    },
    // Search for the SubMenuHidden divs, remove the class and replace it with a display:none style,
    // otherwise I cannot use the scriptacoulous effect
    prepareSubMenus: function() {
        $$('.ctvo_subMenuHidden').each(function(elem) {
            elem.hide();
            elem.removeClassName('ctvo_subMenuHidden');
            elem.addClassName('ctvo_subMenu');
        });
    },
    open_Click: function(event) {
        //select the sibling div element
        var menu = event.element().up().down('div.ctvo_subMenu');

        var openMenuLink = menu.up().down('a.ctvo_submenuOpen');
        var TIMER_ID;
        openMenuLink.addClassName('ctvo_highlight');
        if (Submenu.isOpen(menu)) {
            //  Submenu.close(menu);
        }
        else {
            Submenu.open(menu);

            $$('.ie6 select').invoke('hide');

            /* Experimental Michele*/


            Event.observe(menu, 'mouseout', function() {
                clearTimeout(TIMER_ID);
                TIMER_ID = setTimeout(function() { Submenu.close(menu); }, 1)
            });

            Event.observe(menu.up(), 'mouseout', function() {
                clearTimeout(TIMER_ID);
                TIMER_ID = setTimeout(function() { Submenu.close(menu); }, 1)
            });

            Event.observe(menu.up(), 'mouseover', function() {
                clearTimeout(TIMER_ID);
            });

            /* end Experimental */


        };

        //Stop the default click
        event.preventDefault();
    },
    close_Click: function(event) {
        //select the parent div element
        var menu = event.element().up().up();

        Submenu.close(menu);

        //Stop the default click
        event.preventDefault();
    },
    isOpen: function(menu) {
        return menu.visible();
    },
    close: function(menu) {
        var openMenuLink = menu.up().down('a.ctvo_submenuOpen');
        menu.hide();
        //Effect.Fade(menu, {duration:0.5});
        openMenuLink.removeClassName('ctvo_highlight');
        $$('.ie6 select').invoke('show');
    },
    open: function(menu) {
        menu.show();
        // Effect.Appear(menu, {duration:0.5});
    }

    /*   showVideoSpotlight: function() {
    if($('HideAjax') != null) {
    
    Effect.SlideUp($('HideAjax'), {duration:2});
    var effettino = new Effect.Highlight($('VideoSpotlight'), 
    {startcolor: "#ffffff",
    endcolor: "#ffff66",
    restorecolor: "#ffffff", 
    duration:5});
     
    
    }
    }*/

};
/* Customized Menu */
var CustomizedMenu = Class.create();
CustomizedMenu.prototype =
{
    link: null,
    combos: null,
    startingValues: null,
    destination: null,

    initialize: function(link, destination, combos, values) {

        this.link = link;
        this.combos = combos;
        this.startingValues = values;
        this.destination = destination;

        $(link).onclick = this.open_Click.bind(this);

        this.populateCombos(this.getCookieValues());
        this.buildMenu();

    },

    buildMenu: function() {
        if (this.createMenu()) {
            $("ctvo_CustomizedContainer").show();
            $("ctvo_BtnResetChoice").show();
            $("ctvo_BtnUndoChoice").hide();
        }
    },

    createMenu: function() {
        var ret = false;

        if (Cookie.accept()) {
            var values = new Array();

            for (var i = 0; i < this.combos.length; i++) {
                values[i] = Cookie.get('ctvo_CustomizedShortcut' + i);
                if (values[i] != "" && values[i] != null) {
                    ret = true;
                    /* to use without ESI */
                    // new Ajax.Updater($('ctvo_CustomizedContainer' + i), '/library/menu/customized/selected=' + values[i] + '/_menu.html');
                    //  this.doChoice(combos[i]);

                }
            }
            /* to use with ESI */
            new Ajax.Updater($('ctvo_CustomizedContainer'), '/library/menu/customized/_esiMenu.html');
        }
        return ret;
    },


    populateCombos: function(valuesNotToShow) {
        for (var i = 0, len = this.combos.length; i < len; i++) {
            var tmp = "";
            // adds the selected value to it's combo
            if (document.getElementsByTagName('html')[0].lang == 'fr') {
                //alert('fr');
                tmp += '<option value="">choisir</option>';
            }
            else {
                //  alert($$('html').lang);
                tmp += '<option value="">choose</option>';
            }

            if (valuesNotToShow[i] != '') {
                tmp += '<option value="' + valuesNotToShow[i] + '" selected="selected">' + this.findValueDescription(valuesNotToShow[i], this.startingValues) + '</option>';
            }
            for (var j = 0, len2 = this.startingValues.length; j < len2; j++) {
                // adds the values that are to be shown
                if (valuesNotToShow.indexOf(this.startingValues[j].code) == -1) {
                    tmp += '<option value="' + this.startingValues[j].code + '">' + this.startingValues[j].description + '</option>';
                }
                $(this.combos[i]).update(tmp);
            }
        }

    },

    findValueDescription: function(value, startingValue) {
        for (var i = 0, len = startingValue.length; i < len; i++) {
            if (startingValue[i].code == value) {
                return startingValue[i].description;
            }
        }
        return "";
    },

    open_Click: function() {
        var menu = $(this.destination);

        if (this.isOpen(menu)) {
            this.close(menu);
        }
        else {
            this.open(menu);
        };

    },
    close_Click: function(event) {
        var menu = $(this.destination);

        this.close(menu);

        //Stop the default click
        event.preventDefault();
    },
    isOpen: function(menu) {
        return menu.visible();
    },
    close: function(menu) {
        var openMenuLink = $(this.link);
        menu.hide();

        $$('.ie6 select').invoke('show');
    },
    open: function(menu) {
        menu.show();
    },

    doChoice: function(who) {
        var values = this.getSelectedValues();
        this.populateCombos(values);
        $("ctvo_BtnUndoChoice").show();
    },

    undoChoice: function() {

        this.populateCombos(this.getCookieValues());

        $("ctvo_BtnUndoChoice").hide();

    },

    resetChoice: function() {
        if (Cookie.accept()) {
            var values = this.getSelectedValues();
            for (var i = 0; i < values.length; i++) {
                Cookie.erase('ctvo_CustomizedShortcut' + i, '/');
            }

            this.populateCombos(this.getCookieValues());

            $("ctvo_CustomizedContainer").hide();
            $("ctvo_BtnUndoChoice").hide();
            $("ctvo_BtnResetChoice").hide();
            $("ctvo_hiddenShortCut").hide();
            this.deleteMenu();
        }
    },

    deleteMenu: function() {
        for (var i = 0, len = this.combos.length; i < len; i++) {
            $('ctvo_CustomizedContainer' + i).update();
        }
    },

    saveComboShortcuts: function() {
        if (Cookie.accept()) {
            var values = this.getSelectedValues();
            values.sort();
            values.reverse();
            for (var i = 0; i < values.length; i++) {
                Cookie.setRaw('ctvo_CustomizedShortcut' + i, values[i], 20, '/');
            }


            if (this.createMenu()) {
                $("ctvo_CustomizedContainer").show();
                $("ctvo_BtnResetChoice").show();
                $("ctvo_BtnUndoChoice").hide();
                $("ctvo_hiddenShortCut").hide();
            }
        }


    },

    getCookieValues: function() {
        if (Cookie.accept()) {
            var values = new Array();
            for (var i = 0; i < this.combos.length; i++) {

                var v = Cookie.get('ctvo_CustomizedShortcut' + i);

                values[i] = (v == null) ? '' : v;
            }
            return values;
        }
        return new Array();
    },

    getSelectedValues: function() {
        var values = new Array();
        for (var i = 0, len = this.combos.length; i < len; i++) {
            var c = $(this.combos[i]);
            values[i] = c.options[c.selectedIndex].value;
        }
        return values;
    }



};
/**
* Stefano Liboni 12/12/2008
* this file manage the visitor info on the client browser
*/
var undefined;
var Visitor = new Object();
Visitor.switchUserUI = function(container) {
    var elForRegistered = container.select('.RegisteredUser');
    var elForInactives = container.select('.InactiveUser');
    var elForAnonymous = container.select('.AnonymousUser');

    var isFBLoggedIn = FBConnect.IsLoggedIn();

    var elForRegisteredFB = container.select('.RegisteredUserFB');
    var elForAnonymousFB = container.select('.AnonymousUserFB');

    var info = Visitor.getVisitorInfo();
    if (info.status == '1') {
        elForInactives.each(function(el) {
            var content = el.innerHTML;
            el.update(content.replace('@DISPLAYNAME', info.displayName.escapeHTML()));
        });
        elForInactives.invoke('show');
        elForAnonymous.invoke('hide');
        elForRegistered.invoke('hide');
    } else if (info.status == '2' || info.status == '5') {
        elForRegistered.each(function(el) {
            var content = el.innerHTML;
            el.update(content.replace('@DISPLAYNAME', info.displayName.escapeHTML()));
        });
        elForInactives.invoke('hide');
        elForAnonymous.invoke('hide');
        elForRegistered.invoke('show');
    } else {
        elForInactives.invoke('hide');
        elForRegistered.invoke('hide');
        elForAnonymous.invoke('hide');
        if (isFBLoggedIn) elForAnonymousFB.invoke('show');
        else elForAnonymous.invoke('show');
    }
    if (isFBLoggedIn) {
        $('fb_favicon_login').hide();
        $('fb_favicon_logout').show();
    }
}
Visitor.logout = function() {

    var isFBLoggedIn = FBConnect.IsLoggedIn();
    if (isFBLoggedIn) {
        FBConnect.Logout();
    }
    else {
        Visitor.deleteVisitorInfo();
        //document.location.href = '/index.html';
        document.location.reload();
    }

}
Visitor.getVisitorInfo = function() {
    var ret = new Object();
    var c = Cookie.get('PCKCTV');
    if ((c == null) || (c === undefined)) c = Cookie.get('SCKCTV');
    if ((c != null) && !(c === undefined)) {
        var cVals = c.toQueryParams();
        if ((cVals.UserID != null) && !(cVals.UserID === undefined)) ret.userID = cVals.UserID;
        if ((cVals.ActivationCode != null) && !(cVals.ActivationCode === undefined)) ret.activationCode = cVals.ActivationCode;
        if ((cVals.DisplayName != null) && !(cVals.DisplayName === undefined)) ret.displayName = cVals.DisplayName;
        if ((cVals.Status != null) && !(cVals.Status === undefined)) ret.status = cVals.Status;
        if ((cVals.Email != null) && !(cVals.Email === undefined)) ret.email = cVals.Email;
    }
    return ret;
}
Visitor.deleteVisitorInfo = function() {
    Cookie.erase('SCKCTV');
    Cookie.erase('PCKCTV');
}
// JScript File
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();
    },
    togglePrintPreviewX: function(xBtn, yBtn) {
        var currCSS = document.getElementsByTagName('link');
        var x = 0;
        while (x < currCSS.length) {
            if (currCSS[x].media == 'screen')
                currCSS[x].media = 'print';
            else currCSS[x].media = 'screen';
            x++;
        }
        $(yBtn).toggle();
        $(xBtn).toggle();
        window.scrollTo(0, 0);
    },
    togglePortfolioCss: function() {
        var currCSS = document.getElementsByTagName('link');
        var x = 0;
        while (x < currCSS.length) {
            if (currCSS[x].href.indexOf('portfolio.css') != -1) {
                currCSS[x].href = '/components/style/portfolio2.css';
            }
            else {
                if (currCSS[x].href.indexOf('portfolio2.css') != -1)
                    currCSS[x].href = '/components/style/portfolio.css';
            }
            x++;
        }
    },
    sendEmail: function() {
        // debugger
        Email.clearAllErrors();
        if (($('c_from').value == '') || ($('c_fromname').value == '') || ($('c_to').value == '') || ($('c_message').value == ''))
        { $('c_errorMsg').show(); return; }
        var frm = new FormValidate1(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) {
        //Call omniture for share
        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(); }
    }
};
var AskExpert = {
    captcha: null,

    trimAll: function(strValue) {
        var objRegExp = /^(\s*)$/;
        //check for all spaces
        if (objRegExp.test(strValue)) {
            strValue = strValue.replace(objRegExp, '');
            if (strValue.length == 0)
                return strValue;
        }
        //check for leading & trailing spaces
        objRegExp = /^(\s*)([\W\w]*)(\b\s*$)/;
        if (objRegExp.test(strValue)) {
            //remove leading and trailing whitespace characters
            strValue = strValue.replace(objRegExp, '$2');
        }
        return strValue;
    },
    validateNotEmpty: function(value) {
        var tmp = value;
        tmp = this.trimAll(tmp);
        return (tmp.length == 0);
    },

    verify: function() {
        $$('.askForm').invoke('removeClassName', 'error');
        if (!(AskExpert.validateNotEmpty($F('questionAsk'))) && !(AskExpert.validateNotEmpty($F('ctvo_askCaptcha')))) {
            // alert('true');
            return true;
        }
        else {
            if ($F('questionAsk') == '') { $('questionAsk').addClassName('error'); }
            return false;
        }
        return false;
    },

    send: function() {
        //alert("entro");
        if (AskExpert.verify()) {

            var u = "/library/sendmail/_askexpert.htmx?" + $('askForm').serialize()
            //alert(u);
            var a = new Ajax.Request(encodeURI(u), { method: 'get', onComplete: AskExpert.sendConfirmation });
        }
    },

    sendConfirmation: function(originalResponse) {
        if (originalResponse.responseText == 'OK') {
            // $('belaForm').hide();
            $('askOk').show();
        }
        else if (originalResponse.responseText == 'CaptchaNF' || originalResponse.responseText == 'CaptchaNV') {
            // alert('errore');
        }
        else {

            // $('belaForm').hide();
            $('askKo').show();
            //alert(originalResponse.responseText);
        }

        $('questionAsk').value = '';
        $('ctvo_askCaptcha').value = '';
        AskExpert.captcha.initCaptcha();
    }
};
var ContactUs = {

    captcha: null,

    trimAll: function(strValue) {
        var objRegExp = /^(\s*)$/;
        //check for all spaces
        if (objRegExp.test(strValue)) {
            strValue = strValue.replace(objRegExp, '');
            if (strValue.length == 0)
                return strValue;
        }
        //check for leading & trailing spaces
        objRegExp = /^(\s*)([\W\w]*)(\b\s*$)/;
        if (objRegExp.test(strValue)) {
            //remove leading and trailing whitespace characters
            strValue = strValue.replace(objRegExp, '$2');
        }
        return strValue;
    },
    validateNotEmpty: function(value) {
        var tmp = value;
        tmp = this.trimAll(tmp);
        return (tmp.length == 0);
    },

    validateEmail: function(value) {
        var p = new RegExp("^(\\w|-|\\.)+@(\\w|-|\\.)+\\.[a-z]{2,3}$", "i");
        return p.test(value);
    },

    verify: function() {
        $('ctvo_questionError').hide();
        $('ctvo_captchaError').hide();
        $('ctvo_emailError').hide();

        if (!(ContactUs.validateNotEmpty($F('questionAsk'))) && !(ContactUs.validateNotEmpty($F('ctvo_askCaptcha'))) && !(ContactUs.validateNotEmpty($F('nMailFrom'))) && (ContactUs.validateEmail($F('nMailFrom')))) {
            //alert('true');
            return true;
        }
        else {
            //alert('false');
            if (ContactUs.validateNotEmpty($F('questionAsk'))) {
                $('ctvo_questionError').show();
            }
            if (ContactUs.validateNotEmpty($F('ctvo_askCaptcha'))) {
                $('ctvo_captchaError').show();
            }
            if (ContactUs.validateNotEmpty($F('nMailFrom'))) {
                $('ctvo_emailError').show();
            }
            if (!ContactUs.validateEmail($F('nMailFrom'))) {
                $('ctvo_emailError').show();
            }
            return false;
        }
        return false;
    },

    send: function() {
        //alert("entro");
        if (ContactUs.verify()) {

            var u = "/library/sendmail/_contactus.htmx?" + $('askForm').serialize()
            //alert(u);
            var a = new Ajax.Request(encodeURI(u), { method: 'get', onComplete: ContactUs.sendConfirmation });
        }
    },

    sendConfirmation: function(originalResponse) {
        if (originalResponse.responseText == 'OK') {
            $('ctvo_AskForm').hide();
            $('askOk').show();
        }
        else if (originalResponse.responseText == 'CaptchaNF' || originalResponse.responseText == 'CaptchaNV') {
            $('ctvo_captchaError').show();
        }
        else {
            $('askKo').show();
            //alert(originalResponse.responseText);
        }

        $('questionAsk').value = '';
        $('ctvo_askCaptcha').value = '';
        ContactUs.captcha.initCaptcha();
    }
};
// JScript File
//Class used for rating 
// the code search for a span with the id "cRating[wNewsId]" and 5 spans for the stars with the id "star[x]_[wNewsId]"
// changed from the fifa code to support multiple rating elements on the same page
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));
        }
    },

    rateFMItem: function(userid, commentid, rating, apikey, vhost) {
        var _cookie = Cookie.get('PCKCTV');
        if ((_cookie == null) || (_cookie === undefined)) {
            _cookie = Cookie.get('SCKCTV');
        }
        if ((_cookie == null) || (_cookie === undefined)) {
            return;
        }
        var _cookieValues = _cookie.toQueryParams();
        userid = _cookieValues.FMUserID;
        //alert(userid);
        if (userid == 0 || commentid == 0 || userid === undefined)
            return;
        var b = "/contest/ratefile.htmx?APIKEY=" + apikey + "&vhost=" + vhost + "&mediaitemid=";
        var u = b + commentid + "&rating=" + rating + "&userid=" + userid;
        //var d = 'commentid'+newsid;
        var d = 'commentid' + commentid;
        //alert(u);
        //alert(d);
        var a = new Ajax.Updater(
                    d,
                    u,
                    { method: 'get',

                        onSuccess: function(gotsuccess) {
                            //Rating.onCallBack(response, newsid);
                            //alert('SU');
                        },
                        onComplete: function(gotcomplete) {
                            //Rating.onCallBack(response, newsid);
                            //alert('OK');
                        },

                        onFailure: function(gotfailure) {
                            //alert('KO');
                        }

                    });
    },

    GetFMUserId: function() {
        var _cookie = Cookie.get('PCKCTV');
        if ((_cookie == null) || (_cookie === undefined)) {
            _cookie = Cookie.get('SCKCTV');
        }
        var _cookieValues = _cookie.toQueryParams();
        return _cookieValues.FMUserID;
    },

    FMUserControl: function() {
        var _currentCookie = 'PCKCTV';
        var _cookie = Cookie.get(_currentCookie);
        var _exists;
        if ((_cookie == null) || (_cookie === undefined)) {
            _currentCookie = 'SCKCTV';
            _cookie = Cookie.get(_currentCookie);
        }
        if ((_cookie == null) || (_cookie === undefined)) {
            _exists = 'false';
            return _exists;
        }
        var _cookieValues = _cookie.toQueryParams();
        if ((_cookieValues.FMUserID != null) & !(_cookieValues.FMUserID === undefined)) {
            _exists = 'true'
            return _exists;
        }
        else {
            var _url = '/Registration/FileMobileGetKey.htmx?uVisitorID=' + _cookieValues.UserID;
            new Ajax.Request(_url, { method: 'get', onSuccess: function(transport) {
                _cookie = Cookie.get(_currentCookie);
                _cookieValues = _cookie.toQueryParams();
                if ((_cookieValues.FMUserID != null) & !(_cookieValues.FMUserID === undefined)) {
                    _exists = 'true'
                }
                else {
                    _exists = 'false';
                }
            }
            });
        }
        return _exists;
    }


}
var Comment = {


    init: function(newsId) {
        this.newsId = newsId;
        var u = "/news-centre/newsid=" + newsId + "/comments/allcomments.html";
        var a = new Ajax.Request(u, { method: 'get', onComplete: Comment.displayComments });
    },

    viewTotComments: function(newsId) {
        this.newsId = newsId;
        var u = "/news-centre/newsid=" + this.newsId + "/comments/addthiscomments.html";
        var a = new Ajax.Request(u, { method: 'get', onComplete: Comment.displayTotComments });
    },

    viewLatestComments: function() {
        var u = "/news-centre/newsid=" + NewsComment.newsId + "/comments/allcomments.html";
        var a = new Ajax.Request(u, { method: 'get', onComplete: Comment.displayComments });
    },

    viewAllComments: function(_divId) {
        var u = "/news-centre/newsid=" + this.newsId + "/comments/allcomments.html";
        var a = new Ajax.Request(u, { method: 'get', onComplete: function(response) { Comment.displayComments2(_divId, response) } });
    },

    viewVideoComments: function(_divId) {
        var u = "/news-centre/newsid=" + this.newsId + "/comments/videocomments.html";
        var a = new Ajax.Request(u, { method: 'get', onComplete: function(response) { Comment.displayComments2(_divId, response) } });
    },

    viewPhotoComments: function(_divId) {
        var u = "/news-centre/newsid=" + this.newsId + "/comments/photocomments.html";
        var a = new Ajax.Request(u, { method: 'get', onComplete: function(response) { Comment.displayComments2(_divId, response) } });
    },

    displayComments: function(originalResponse) {
        var d = $('comments_' + Comment.newsId);
        d.update(originalResponse.responseText);
        if (originalResponse.responseText = '')
            $('listComment').hide();
    },

    displayComments2: function(_divId, originalResponse) {
        var d = $(_divId);
        d.update(originalResponse.responseText);
        if (originalResponse.responseText = '')
            $('listComment').hide();
    },

    displayTotComments: function(originalResponse) {
        var d = $('totcomments_' + Comment.newsId);
        d.update(originalResponse.responseText);
    },

    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();
            /*alert(originalResponse.responseText.toQueryParams().error.gsub('\'',''));*/
        }
        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();
            /*alert(originalResponse.responseText.toQueryParams().warning.gsub('\'',''));*/
        }
        else {
            Comment.closeCommentsForm();
            var u = "/newsc-centre/comment/id=" + Comment.newsId + ".htmx";
            var a = new Ajax.Request(u, { method: 'get', onComplete: Comment.displayComments });
        }
    },

    closeCommentsForm: function() {
        $('form_comments_' + Comment.newsId).hide();
    }


}
// JScript File
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;
BrowserHistoryUtils = {
    addEvent: function(elm, evType, fn, useCapture) {
        useCapture = useCapture || false;
        if (elm.addEventListener) {
            elm.addEventListener(evType, fn, useCapture);
            return true;
        }
        else if (elm.attachEvent) {
            var r = elm.attachEvent('on' + evType, fn);
            return r;
        }
        else {
            elm['on' + evType] = fn;
        }
    }
}
BrowserHistory = (function() {
    // type of browser
    var browser = {
        ie: false,
        firefox: false,
        safari: false,
        opera: false,
        version: -1
    };
    // if setDefaultURL has been called, our first clue
    // that the SWF is ready and listening
    //var swfReady = false;
    // the URL we'll send to the SWF once it is ready
    //var pendingURL = '';
    // Default app state URL to use when no fragment ID present
    var defaultHash = '';
    // Last-known app state URL
    var currentHref = document.location.href;
    // Initial URL (used only by IE)
    var initialHref = document.location.href;
    // Initial URL (used only by IE)
    var initialHash = document.location.hash;
    // History frame source URL prefix (used only by IE)
    var historyFrameSourcePrefix = 'history/historyFrame.html?';
    // History maintenance (used only by Safari)
    var currentHistoryLength = -1;
    var historyHash = [];
    var initialState = createState(initialHref, initialHref + '#' + initialHash, initialHash);
    var backStack = [];
    var forwardStack = [];
    var currentObjectId = null;
    //UserAgent detection
    var useragent = navigator.userAgent.toLowerCase();
    if (useragent.indexOf("opera") != -1) {
        browser.opera = true;
    } else if (useragent.indexOf("msie") != -1) {
        browser.ie = true;
        browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4));
    } else if (useragent.indexOf("safari") != -1) {
        browser.safari = true;
        browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7));
    } else if (useragent.indexOf("gecko") != -1) {
        browser.firefox = true;
    }
    if (browser.ie == true && browser.version == 7) {
        window["_ie_firstload"] = false;
    }
    // Accessor functions for obtaining specific elements of the page.
    function getHistoryFrame() {
        return document.getElementById('ie_historyFrame');
    }
    function getAnchorElement() {
        return document.getElementById('firefox_anchorDiv');
    }
    function getFormElement() {
        return document.getElementById('safari_formDiv');
    }
    function getRememberElement() {
        return document.getElementById("safari_remember_field");
    }
    // Get the Flash player object for performing ExternalInterface callbacks.
    // Updated for changes to SWFObject2.
    function getPlayer(id) {
        if (id && document.getElementById(id)) {
            var r = document.getElementById(id);
            if (typeof r.SetVariable != "undefined") {
                return r;
            }
            else {
                var o = r.getElementsByTagName("object");
                var e = r.getElementsByTagName("embed");
                if (o.length > 0 && typeof o[0].SetVariable != "undefined") {
                    return o[0];
                }
                else if (e.length > 0 && typeof e[0].SetVariable != "undefined") {
                    return e[0];
                }
            }
        }
        else {
            var o = document.getElementsByTagName("object");
            var e = document.getElementsByTagName("embed");
            if (e.length > 0 && typeof e[0].SetVariable != "undefined") {
                return e[0];
            }
            else if (o.length > 0 && typeof o[0].SetVariable != "undefined") {
                return o[0];
            }
            else if (o.length > 1 && typeof o[1].SetVariable != "undefined") {
                return o[1];
            }
        }
        return undefined;
    }

    function getPlayers() {
        var players = [];
        if (players.length == 0) {
            var tmp = document.getElementsByTagName('object');
            players = tmp;
        }

        if (players.length == 0 || players[0].object == null) {
            var tmp = document.getElementsByTagName('embed');
            players = tmp;
        }
        return players;
    }
    function getIframeHash() {
        var doc = getHistoryFrame().contentWindow.document;
        var hash = String(doc.location.search);
        if (hash.length == 1 && hash.charAt(0) == "?") {
            hash = "";
        }
        else if (hash.length >= 2 && hash.charAt(0) == "?") {
            hash = hash.substring(1);
        }
        return hash;
    }
    /* Get the current location hash excluding the '#' symbol. */
    function getHash() {
        // It would be nice if we could use document.location.hash here,
        // but it's faulty sometimes.
        var idx = document.location.href.indexOf('#');
        return (idx >= 0) ? document.location.href.substr(idx + 1) : '';
    }
    /* Get the current location hash excluding the '#' symbol. */
    function setHash(hash) {
        // It would be nice if we could use document.location.hash here,
        // but it's faulty sometimes.
        if (hash == '') hash = '#'
        document.location.hash = hash;
    }
    function createState(baseUrl, newUrl, flexAppUrl) {
        return { 'baseUrl': baseUrl, 'newUrl': newUrl, 'flexAppUrl': flexAppUrl, 'title': null };
    }
    /* Add a history entry to the browser.
    *   baseUrl: the portion of the location prior to the '#'
    *   newUrl: the entire new URL, including '#' and following fragment
    *   flexAppUrl: the portion of the location following the '#' only
    */
    function addHistoryEntry(baseUrl, newUrl, flexAppUrl) {
        //delete all the history entries
        forwardStack = [];
        if (browser.ie) {
            //Check to see if we are being asked to do a navigate for the first
            //history entry, and if so ignore, because it's coming from the creation
            //of the history iframe
            if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) {
                currentHref = initialHref;
                return;
            }
            if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) {
                newUrl = baseUrl + '#' + defaultHash;
                flexAppUrl = defaultHash;
            } else {
                // for IE, tell the history frame to go somewhere without a '#'
                // in order to get this entry into the browser history.
                getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl;
            }
            setHash(flexAppUrl);
        } else {
            //ADR
            if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) {
                initialState = createState(baseUrl, newUrl, flexAppUrl);
            } else if (backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) {
                backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl);
            }
            if (browser.safari) {
                // for Safari, submit a form whose action points to the desired URL
                if (browser.version <= 419.3) {
                    var file = window.location.pathname.toString();
                    file = file.substring(file.lastIndexOf("/") + 1);
                    getFormElement().innerHTML = '<form name="historyForm" action="' + file + '#' + flexAppUrl + '" method="GET"></form>';
                    //get the current elements and add them to the form
                    var qs = window.location.search.substring(1);
                    var qs_arr = qs.split("&");
                    for (var i = 0; i < qs_arr.length; i++) {
                        var tmp = qs_arr[i].split("=");
                        var elem = document.createElement("input");
                        elem.type = "hidden";
                        elem.name = tmp[0];
                        elem.value = tmp[1];
                        document.forms.historyForm.appendChild(elem);
                    }
                    document.forms.historyForm.submit();
                } else {
                    top.location.hash = flexAppUrl;
                }
                // We also have to maintain the history by hand for Safari
                historyHash[history.length] = flexAppUrl;
                _storeStates();
            } else {
                // Otherwise, write an anchor into the page and tell the browser to go there
                addAnchor(flexAppUrl);
                setHash(flexAppUrl);
            }
        }
        backStack.push(createState(baseUrl, newUrl, flexAppUrl));
    }
    function _storeStates() {
        if (browser.safari) {
            getRememberElement().value = historyHash.join(",");
        }
    }
    function handleBackButton() {
        //The "current" page is always at the top of the history stack.
        var current = backStack.pop();
        if (!current) { return; }
        var last = backStack[backStack.length - 1];
        if (!last && backStack.length == 0) {
            last = initialState;
        }
        forwardStack.push(current);
    }
    function handleForwardButton() {
        //summary: private method. Do not call this directly.
        var last = forwardStack.pop();
        if (!last) { return; }
        backStack.push(last);
    }
    function handleArbitraryUrl() {
        //delete all the history entries
        forwardStack = [];
    }
    /* Called periodically to poll to see if we need to detect navigation that has occurred */
    function checkForUrlChange() {
        if (browser.ie) {
            if (currentHref != document.location.href && currentHref + '#' != document.location.href) {
                //This occurs when the user has navigated to a specific URL
                //within the app, and didn't use browser back/forward
                //IE seems to have a bug where it stops updating the URL it
                //shows the end-user at this point, but programatically it
                //appears to be correct.  Do a full app reload to get around
                //this issue.
                if (browser.version < 7) {
                    currentHref = document.location.href;
                    document.location.reload();
                } else {
                    if (getHash() != getIframeHash()) {
                        // this.iframe.src = this.blankURL + hash;
                        var sourceToSet = historyFrameSourcePrefix + getHash();
                        getHistoryFrame().src = sourceToSet;
                    }
                }
            }
        }
        if (browser.safari) {
            // For Safari, we have to check to see if history.length changed.
            if (currentHistoryLength >= 0 && history.length != currentHistoryLength) {
                //alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|"));
                // If it did change, then we have to look the old state up
                // in our hand-maintained array since document.location.hash
                // won't have changed, then call back into BrowserManager.
                currentHistoryLength = history.length;
                var flexAppUrl = historyHash[currentHistoryLength];
                if (flexAppUrl == '') {
                    //flexAppUrl = defaultHash;
                }
                //ADR: to fix multiple
                if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
                    var pl = getPlayers();
                    for (var i = 0; i < pl.length; i++) {
                        pl[i].browserURLChange(flexAppUrl);
                    }
                } else {
                    getPlayer().browserURLChange(flexAppUrl);
                }
                _storeStates();
            }
        }
        if (browser.firefox) {
            if (currentHref != document.location.href) {
                var bsl = backStack.length;
                var urlActions = {
                    back: false,
                    forward: false,
                    set: false
                }
                if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) {
                    urlActions.back = true;
                    // FIXME: could this ever be a forward button?
                    // we can't clear it because we still need to check for forwards. Ugg.
                    // clearInterval(this.locationTimer);
                    handleBackButton();
                }

                // first check to see if we could have gone forward. We always halt on
                // a no-hash item.
                if (forwardStack.length > 0) {
                    if (forwardStack[forwardStack.length - 1].flexAppUrl == getHash()) {
                        urlActions.forward = true;
                        handleForwardButton();
                    }
                }
                // ok, that didn't work, try someplace back in the history stack
                if ((bsl >= 2) && (backStack[bsl - 2])) {
                    if (backStack[bsl - 2].flexAppUrl == getHash()) {
                        urlActions.back = true;
                        handleBackButton();
                    }
                }

                if (!urlActions.back && !urlActions.forward) {
                    var foundInStacks = {
                        back: -1,
                        forward: -1
                    }
                    for (var i = 0; i < backStack.length; i++) {
                        if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {
                            arbitraryUrl = true;
                            foundInStacks.back = i;
                        }
                    }
                    for (var i = 0; i < forwardStack.length; i++) {
                        if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {
                            arbitraryUrl = true;
                            foundInStacks.forward = i;
                        }
                    }
                    handleArbitraryUrl();
                }
                // Firefox changed; do a callback into BrowserManager to tell it.
                currentHref = document.location.href;
                var flexAppUrl = getHash();
                if (flexAppUrl == '') {
                    //flexAppUrl = defaultHash;
                }
                //ADR: to fix multiple
                if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
                    var pl = getPlayers();
                    for (var i = 0; i < pl.length; i++) {
                        pl[i].browserURLChange(flexAppUrl);
                    }
                } else {
                    getPlayer().browserURLChange(flexAppUrl);
                }
            }
        }
        //setTimeout(checkForUrlChange, 50);
    }
    /* Write an anchor into the page to legitimize it as a URL for Firefox et al. */
    function addAnchor(flexAppUrl) {
        if (document.getElementsByName(flexAppUrl).length == 0) {
            getAnchorElement().innerHTML += "<a name='" + flexAppUrl + "'>" + flexAppUrl + "</a>";
        }
    }
    var _initialize = function() {
        if (browser.ie) {
            /*
            var scripts = document.getElementsByTagName('script');
            for (var i = 0, s; s = scripts[i]; i++) {
            if (s.src.indexOf("medals.js") > -1) {
            var iframe_location = (new String(s.src)).replace("medals.js", "historyFrame.html");
            }
            }
            historyFrameSourcePrefix = iframe_location + "?";
            var src = historyFrameSourcePrefix;
            var iframe = document.createElement("iframe");
            iframe.id = 'ie_historyFrame';
            iframe.name = 'ie_historyFrame';
            //iframe.src = historyFrameSourcePrefix;
            try {
            document.body.appendChild(iframe);
            } catch(e) {
            setTimeout(function() {
            document.body.appendChild(iframe);
            }, 0);
            }
            */
        }
        if (browser.safari) {
            var rememberDiv = document.createElement("div");
            rememberDiv.id = 'safari_rememberDiv';
            document.body.appendChild(rememberDiv);
            rememberDiv.innerHTML = '<input type="text" id="safari_remember_field" style="width: 500px;">';
            var formDiv = document.createElement("div");
            formDiv.id = 'safari_formDiv';
            document.body.appendChild(formDiv);
            var reloader_content = document.createElement('div');
            reloader_content.id = 'safarireloader';
            var scripts = document.getElementsByTagName('script');
            for (var i = 0, s; s = scripts[i]; i++) {
                if (s.src.indexOf("medals.js") > -1) {
                    html = (new String(s.src)).replace(".js", ".html");
                }
            }
            reloader_content.innerHTML = '<iframe id="safarireloader-iframe" src="about:blank" frameborder="no" scrolling="no"></iframe>';
            document.body.appendChild(reloader_content);
            reloader_content.style.position = 'absolute';
            reloader_content.style.left = reloader_content.style.top = '-9999px';
            iframe = reloader_content.getElementsByTagName('iframe')[0];
            if (document.getElementById("safari_remember_field").value != "") {
                historyHash = document.getElementById("safari_remember_field").value.split(",");
            }
        }
        if (browser.firefox) {
            var anchorDiv = document.createElement("div");
            anchorDiv.id = 'firefox_anchorDiv';
            document.body.appendChild(anchorDiv);
        }

        //setTimeout(checkForUrlChange, 50);
    }
    return {
        historyHash: historyHash,
        backStack: function() { return backStack; },
        forwardStack: function() { return forwardStack },
        getPlayer: getPlayer,
        initialize: function(src) {
            _initialize(src);
        },
        setURL: function(url) {
            document.location.href = url;
        },
        getURL: function() {
            return document.location.href;
        },
        getTitle: function() {
            return document.title;
        },
        setTitle: function(title) {
            try {
                backStack[backStack.length - 1].title = title;
            } catch (e) { }
            //if on safari, set the title to be the empty string. 
            if (browser.safari) {
                if (title == "") {
                    try {
                        var tmp = window.location.href.toString();
                        title = tmp.substring((tmp.lastIndexOf("/") + 1), tmp.lastIndexOf("#"));
                    } catch (e) {
                        title = "";
                    }
                }
            }
            document.title = title;
        },
        setDefaultURL: function(def) {
            defaultHash = def;
            def = getHash();
            //trailing ? is important else an extra frame gets added to the history
            //when navigating back to the first page.  Alternatively could check
            //in history frame navigation to compare # and ?.
            if (browser.ie) {
                window['_ie_firstload'] = true;
                var sourceToSet = historyFrameSourcePrefix + def;
                var func = function() {
                    getHistoryFrame().src = sourceToSet;
                    window.location.replace("#" + def);
                    setInterval(checkForUrlChange, 50);
                }
                try {
                    func();
                } catch (e) {
                    window.setTimeout(function() { func(); }, 0);
                }
            }
            if (browser.safari) {
                currentHistoryLength = history.length;
                if (historyHash.length == 0) {
                    historyHash[currentHistoryLength] = def;
                    var newloc = "#" + def;
                    window.location.replace(newloc);
                } else {
                    //alert(historyHash[historyHash.length-1]);
                }
                //setHash(def);
                setInterval(checkForUrlChange, 50);
            }


            if (browser.firefox || browser.opera) {
                var reg = new RegExp("#" + def + "$");
                if (window.location.href.match(reg)) {
                } else {
                    var newloc = "#" + def;
                    window.location.href.replace(newloc);
                }
                setInterval(checkForUrlChange, 50);
                //setHash(def);
            }
        },
        /* Set the current browser URL; called from inside BrowserManager to propagate
        * the application state out to the container.
        */
        setBrowserURL: function(flexAppUrl, objectId) {
            if (browser.ie && typeof objectId != "undefined") {
                currentObjectId = objectId;
            }
            //fromIframe = fromIframe || false;
            //fromFlex = fromFlex || false;
            //alert("setBrowserURL: " + flexAppUrl);
            //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ;
            var pos = document.location.href.indexOf('#');
            var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href;
            var newUrl = baseUrl + '#' + flexAppUrl;
            if (document.location.href != newUrl && document.location.href + '#' != newUrl) {
                currentHref = newUrl;
                addHistoryEntry(baseUrl, newUrl, flexAppUrl);
                currentHistoryLength = history.length;
            }
            return false;
        },
        browserURLChange: function(flexAppUrl) {
            var objectId = null;
            if (browser.ie && currentObjectId != null) {
                objectId = currentObjectId;
            }
            pendingURL = '';

            if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
                var pl = getPlayers();
                for (var i = 0; i < pl.length; i++) {
                    try {
                        pl[i].browserURLChange(flexAppUrl);
                    } catch (e) { }
                }
            } else {
                try {
                    getPlayer(objectId).browserURLChange(flexAppUrl);
                } catch (e) { }
            }
            currentObjectId = null;
        }
    }
})();
// Initialization
// Automated unit testing and other diagnostics
function setURL(url) {
    document.location.href = url;
}
function backButton() {
    history.back();
}
function forwardButton() {
    history.forward();
}
function goForwardOrBackInHistory(step) {
    history.go(step);
}
//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); });
(function(i) {
    var u = navigator.userAgent; var e = /*@cc_on!@*/false;
    var st = setTimeout;
    if (/webkit/i.test(u)) {
        st(function() {
            var dr = document.readyState;
            if (dr == "loaded" || dr == "complete") { i() }
            else { st(arguments.callee, 10); }
        }, 10);
    } else if ((/mozilla/i.test(u) && !/(compati)/.test(u)) || (/opera/i.test(u))) {
        document.addEventListener("DOMContentLoaded", i, false);
    } else if (e) {
        (function() {
            var t = document.createElement('doc:rdy');
            try {
                t.doScroll('left');
                i(); t = null;
            } catch (e) { st(arguments.callee, 0); }
        })();
    } else {
        window.onload = i;
    }
})(function() { BrowserHistory.initialize(); });
// class that handles the registration form
var CTVCaptchaHandler = Class.create();
CTVCaptchaHandler.prototype =
{
    initialize: function() {
        this.initCaptcha();
    },

    initCaptcha: function() {
        var t = this;
        var d = new Date();
        var ar = new Ajax.Request("/registration/captcha.htmx?t=" + d.getMilliseconds(),
                        { method: 'get',
                            onComplete: function(transport) {
                                t.getCaptchaImg(transport);
                                cs.invoke("show");
                            }
                        });
    },
    getCaptchaImg: function(originalResponse) {
        $('ctvo_registrationCaptchaEncodedID').value = originalResponse.responseText;
        this.refreshCaptchaImg();
    },

    refreshCaptchaImg: function() {
        var d = new Date();
        var imageURL = "/registration/captcha.htmx?=t" + d.getMilliseconds() + "&c=" + $F('ctvo_registrationCaptchaEncodedID');
        $('imgCaptchaID').src = imageURL;
        $('imgCaptchaID').show();
    }
};
String.prototype.parseColor = function() {
    var A = "#";
    if (this.slice(0, 4) == "rgb(") {
        var C = this.slice(4, this.length - 1).split(",");
        var B = 0;
        do {
            A += parseInt(C[B]).toColorPart()
        } while (++B < 3)
    } else {
        if (this.slice(0, 1) == "#") {
            if (this.length == 4) {
                for (var B = 1; B < 4; B++) {
                    A += (this.charAt(B) + this.charAt(B)).toLowerCase()
                }
            } if (this.length == 7) {
                A = this.toLowerCase()
            }
        }
    } return (A.length == 7 ? A : (arguments[0] || this))
};
Element.collectTextNodes = function(A) {
    return $A($(A).childNodes).collect(function(B) {
        return (B.nodeType == 3 ? B.nodeValue : (B.hasChildNodes() ? Element.collectTextNodes(B) : ""))
    }).flatten().join("")
};
Element.collectTextNodesIgnoreClass = function(A, B) {
    return $A($(A).childNodes).collect(function(C) {
        return (C.nodeType == 3 ? C.nodeValue : ((C.hasChildNodes() && !Element.hasClassName(C, B)) ? Element.collectTextNodesIgnoreClass(C, B) : ""))
    }).flatten().join("")
};
Element.setContentZoom = function(A, B) {
    A = $(A);
    A.setStyle({ fontSize: (B / 100) + "em" });
    if (Prototype.Browser.WebKit) {
        window.scrollBy(0, 0)
    } return A
};
Element.getInlineOpacity = function(A) {
    return $(A).style.opacity || ""
};
Element.forceRerendering = function(A) {
    try {
        A = $(A);
        var C = document.createTextNode(" ");
        A.appendChild(C);
        A.removeChild(C)
    } catch (B) { }
};
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(A) {
    return (-Math.cos(A * Math.PI) / 2) + 0.5
}, reverse: function(A) {
    return 1 - A
}, flicker: function(A) {
    var A = ((-Math.cos(A * Math.PI) / 4) + 0.75) + Math.random() / 4;
    return A > 1 ? 1 : A
}, wobble: function(A) {
    return (-Math.cos(A * Math.PI * (9 * A)) / 2) + 0.5
}, pulse: function(B, A) {
    A = A || 5;
    return (((B % (1 / A)) * A).round() == 0 ? ((B * A * 2) - (B * A * 2).floor()) : 1 - ((B * A * 2) - (B * A * 2).floor()))
}, spring: function(A) {
    return 1 - (Math.cos(A * 4.5 * Math.PI) * Math.exp(-A * 6))
}, none: function(A) {
    return 0
}, full: function(A) {
    return 1
}
}, DefaultOptions: { duration: 1, fps: 100, sync: false, from: 0, to: 1, delay: 0, queue: "parallel" }, tagifyText: function(A) {
    var B = "position:relative";
    if (Prototype.Browser.IE) {
        B += ";zoom:1"
    } A = $(A);
    $A(A.childNodes).each(function(C) {
        if (C.nodeType == 3) {
            C.nodeValue.toArray().each(function(D) {
                A.insertBefore(new Element("span", { style: B }).update(D == " " ? String.fromCharCode(160) : D), C)
            });
            Element.remove(C)
        }
    })
}, multiple: function(B, C) {
    var E;
    if (((typeof B == "object") || Object.isFunction(B)) && (B.length)) {
        E = B
    } else {
        E = $(B).childNodes
    } var A = Object.extend({ speed: 0.1, delay: 0 }, arguments[2] || {});
    var D = A.delay;
    $A(E).each(function(G, F) {
        new C(G, Object.extend(A, { delay: F * A.speed + D }))
    })
}, PAIRS: { slide: ["SlideDown", "SlideUp"], blind: ["BlindDown", "BlindUp"], appear: ["Appear", "Fade"] }, toggle: function(B, C) {
    B = $(B);
    C = (C || "appear").toLowerCase();
    var A = Object.extend({ queue: { position: "end", scope: (B.id || "global"), limit: 1} }, arguments[2] || {});
    Effect[B.visible() ? Effect.PAIRS[C][1] : Effect.PAIRS[C][0]](B, A)
}
};
Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;
Effect.ScopedQueue = Class.create(Enumerable, { initialize: function() {
    this.effects = [];
    this.interval = null
}, _each: function(A) {
    this.effects._each(A)
}, add: function(B) {
    var C = new Date().getTime();
    var A = Object.isString(B.options.queue) ? B.options.queue : B.options.queue.position;
    switch (A) {
        case "front": this.effects.findAll(function(D) {
            return D.state == "idle"
        }).each(function(D) {
            D.startOn += B.finishOn;
            D.finishOn += B.finishOn
        });
            break;
        case "with-last": C = this.effects.pluck("startOn").max() || C;
            break;
        case "end": C = this.effects.pluck("finishOn").max() || C;
            break
    } B.startOn += C;
    B.finishOn += C;
    if (!B.options.queue.limit || (this.effects.length < B.options.queue.limit)) {
        this.effects.push(B)
    } if (!this.interval) {
        this.interval = setInterval(this.loop.bind(this), 15)
    }
}, remove: function(A) {
    this.effects = this.effects.reject(function(B) {
        return B == A
    });
    if (this.effects.length == 0) {
        clearInterval(this.interval);
        this.interval = null
    }
}, loop: function() {
    var C = new Date().getTime();
    for (var B = 0, A = this.effects.length; B < A; B++) {
        this.effects[B] && this.effects[B].loop(C)
    }
}
});
Effect.Queues = { instances: $H(), get: function(A) {
    if (!Object.isString(A)) {
        return A
    } return this.instances.get(A) || this.instances.set(A, 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(C) {
    if (C >= this.startOn) {
        if (C >= this.finishOn) {
            this.render(1);
            this.cancel();
            this.event("beforeFinish");
            if (this.finish) {
                this.finish()
            } this.event("afterFinish");
            return
        } var B = (C - this.startOn) / this.totalTime, A = (B * this.totalFrames).round();
        if (A > this.currentFrame) {
            this.render(B);
            this.currentFrame = A
        }
    }
}, 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(A) {
    if (this.options[A + "Internal"]) {
        this.options[A + "Internal"](this)
    } if (this.options[A]) {
        this.options[A](this)
    }
}, inspect: function() {
    var A = $H();
    for (property in this) {
        if (!Object.isFunction(this[property])) {
            A.set(property, this[property])
        }
    } return "#<Effect:" + A.inspect() + ",options:" + $H(this.options).inspect() + ">"
}
});
Effect.Parallel = Class.create(Effect.Base, { initialize: function(A) {
    this.effects = A || [];
    this.start(arguments[1])
}, update: function(A) {
    this.effects.invoke("render", A)
}, finish: function(A) {
    this.effects.each(function(B) {
        B.render(1);
        B.cancel();
        B.event("beforeFinish");
        if (B.finish) {
            B.finish(A)
        } B.event("afterFinish")
    })
}
});
Effect.Tween = Class.create(Effect.Base, { initialize: function(C, F, E) {
    C = Object.isString(C) ? $(C) : C;
    var B = $A(arguments), D = B.last(), A = B.length == 5 ? B[3] : null;
    this.method = Object.isFunction(D) ? D.bind(C) : Object.isFunction(C[D]) ? C[D].bind(C) : function(G) {
        C[D] = G
    };
    this.start(Object.extend({ from: F, to: E }, A || {}))
}, update: function(A) {
    this.method(A)
}
});
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(B) {
    this.element = $(B);
    if (!this.element) {
        throw (Effect._elementDoesNotExistError)
    } if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout)) {
        this.element.setStyle({ zoom: 1 })
    } var A = Object.extend({ from: this.element.getOpacity() || 0, to: 1 }, arguments[1] || {});
    this.start(A);
}, update: function(A) {
    this.element.setOpacity(A)
}
});
Effect.Move = Class.create(Effect.Base, { initialize: function(B) {
    this.element = $(B);
    if (!this.element) {
        throw (Effect._elementDoesNotExistError)
    } var A = Object.extend({ x: 0, y: 0, mode: "relative" }, arguments[1] || {});
    this.start(A);
}, 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(A) {
    this.element.setStyle({ left: (this.options.x * A + this.originalLeft).round() + "px", top: (this.options.y * A + this.originalTop).round() + "px" })
}
});
Effect.MoveBy = function(B, A, C) {
    return new Effect.Move(B, Object.extend({ x: C, y: A }, arguments[3] || {}))
};
Effect.Scale = Class.create(Effect.Base, { initialize: function(B, C) {
    this.element = $(B);
    if (!this.element) {
        throw (Effect._elementDoesNotExistError)
    } var A = Object.extend({ scaleX: true, scaleY: true, scaleContent: true, scaleFromCenter: false, scaleMode: "box", scaleFrom: 100, scaleTo: C }, arguments[2] || {});
    this.start(A);
}, setup: function() {
    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
    this.elementPositioning = this.element.getStyle("position");
    this.originalStyle = {};
    ["top", "left", "width", "height", "fontSize"].each(function(B) {
        this.originalStyle[B] = this.element.style[B]
    } .bind(this));
    this.originalTop = this.element.offsetTop;
    this.originalLeft = this.element.offsetLeft;
    var A = this.element.getStyle("font-size") || "100%";
    ["em", "px", "%", "pt"].each(function(B) {
        if (A.indexOf(B) > 0) {
            this.fontSize = parseFloat(A);
            this.fontSizeType = B
        }
    } .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(A) {
    var B = (this.options.scaleFrom / 100) + (this.factor * A);
    if (this.options.scaleContent && this.fontSize) {
        this.element.setStyle({ fontSize: this.fontSize * B + this.fontSizeType })
    } this.setDimensions(this.dims[0] * B, this.dims[1] * B)
}, finish: function(A) {
    if (this.restoreAfterFinish) {
        this.element.setStyle(this.originalStyle)
    }
}, setDimensions: function(A, D) {
    var E = {};
    if (this.options.scaleX) {
        E.width = D.round() + "px"
    } if (this.options.scaleY) {
        E.height = A.round() + "px"
    } if (this.options.scaleFromCenter) {
        var C = (A - this.dims[0]) / 2;
        var B = (D - this.dims[1]) / 2;
        if (this.elementPositioning == "absolute") {
            if (this.options.scaleY) {
                E.top = this.originalTop - C + "px"
            } if (this.options.scaleX) {
                E.left = this.originalLeft - B + "px"
            }
        } else {
            if (this.options.scaleY) {
                E.top = -C + "px"
            } if (this.options.scaleX) {
                E.left = -B + "px"
            }
        }
    } this.element.setStyle(E)
}
});
Effect.Highlight = Class.create(Effect.Base, { initialize: function(B) {
    this.element = $(B);
    if (!this.element) {
        throw (Effect._elementDoesNotExistError)
    } var A = Object.extend({ startcolor: "#ffff99" }, arguments[1] || {});
    this.start(A);
}, setup: function() {
    if (this.element.getStyle("display") == "none") {
        this.cancel();
        return
    } 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")
    } this._base = $R(0, 2).map(function(A) {
        return parseInt(this.options.startcolor.slice(A * 2 + 1, A * 2 + 3), 16)
    } .bind(this));
    this._delta = $R(0, 2).map(function(A) {
        return parseInt(this.options.endcolor.slice(A * 2 + 1, A * 2 + 3), 16) - this._base[A]
    } .bind(this))
}, update: function(A) {
    this.element.setStyle({ backgroundColor: $R(0, 2).inject("#", function(B, C, D) {
        return B + ((this._base[D] + (this._delta[D] * A)).round().toColorPart())
    } .bind(this))
    })
}, finish: function() {
    this.element.setStyle(Object.extend(this.oldStyle, { backgroundColor: this.options.restorecolor }))
}
});
Effect.ScrollTo = function(D) {
    var C = arguments[1] || {}, B = document.viewport.getScrollOffsets(), E = $(D).cumulativeOffset(), A = (window.height || document.body.scrollHeight) - document.viewport.getHeight();
    if (C.offset) {
        E[1] += C.offset
    } return new Effect.Tween(null, B.top, E[1] > A ? A : E[1], C, function(F) {
        scrollTo(B.left, F.round())
    })
};
Effect.Fade = function(C) {
    C = $(C);
    var A = C.getInlineOpacity();
    var B = Object.extend({ from: C.getOpacity() || 1, to: 0, afterFinishInternal: function(D) {
        if (D.options.to != 0) {
            return
        } D.element.hide().setStyle({ opacity: A })
    }
    }, arguments[1] || {});
    return new Effect.Opacity(C, B)
};
Effect.Appear = function(B) {
    B = $(B);
    var A = Object.extend({ from: (B.getStyle("display") == "none" ? 0 : B.getOpacity() || 0), to: 1, afterFinishInternal: function(C) {
        C.element.forceRerendering()
    }, beforeSetup: function(C) {
        C.element.setOpacity(C.options.from).show()
    }
    }, arguments[1] || {});
    return new Effect.Opacity(B, A)
};
Effect.Puff = function(B) {
    B = $(B);
    var A = { opacity: B.getInlineOpacity(), position: B.getStyle("position"), top: B.style.top, left: B.style.left, width: B.style.width, height: B.style.height };
    return new Effect.Parallel([new Effect.Scale(B, 200, { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), new Effect.Opacity(B, { sync: true, to: 0 })], Object.extend({ duration: 1, beforeSetupInternal: function(C) {
        Position.absolutize(C.effects[0].element)
    }, afterFinishInternal: function(C) {
        C.effects[0].element.hide().setStyle(A)
    }
    }, arguments[1] || {}))
};
Effect.BlindUp = function(A) {
    A = $(A);
    A.makeClipping();
    return new Effect.Scale(A, 0, Object.extend({ scaleContent: false, scaleX: false, restoreAfterFinish: true, afterFinishInternal: function(B) {
        B.element.hide().undoClipping()
    }
    }, arguments[1] || {}))
};
Effect.BlindDown = function(B) {
    B = $(B);
    var A = B.getDimensions();
    return new Effect.Scale(B, 100, Object.extend({ scaleContent: false, scaleX: false, scaleFrom: 0, scaleMode: { originalHeight: A.height, originalWidth: A.width }, restoreAfterFinish: true, afterSetup: function(C) {
        C.element.makeClipping().setStyle({ height: "0px" }).show()
    }, afterFinishInternal: function(C) {
        C.element.undoClipping()
    }
    }, arguments[1] || {}))
};
Effect.SwitchOff = function(B) {
    B = $(B);
    var A = B.getInlineOpacity();
    return new Effect.Appear(B, Object.extend({ duration: 0.4, from: 0, transition: Effect.Transitions.flicker, afterFinishInternal: function(C) {
        new Effect.Scale(C.element, 1, { duration: 0.3, scaleFromCenter: true, scaleX: false, scaleContent: false, restoreAfterFinish: true, beforeSetup: function(D) {
            D.element.makePositioned().makeClipping()
        }, afterFinishInternal: function(D) {
            D.element.hide().undoClipping().undoPositioned().setStyle({ opacity: A })
        }
        })
    }
    }, arguments[1] || {}))
};
Effect.DropOut = function(B) {
    B = $(B);
    var A = { top: B.getStyle("top"), left: B.getStyle("left"), opacity: B.getInlineOpacity() };
    return new Effect.Parallel([new Effect.Move(B, { x: 0, y: 100, sync: true }), new Effect.Opacity(B, { sync: true, to: 0 })], Object.extend({ duration: 0.5, beforeSetup: function(C) {
        C.effects[0].element.makePositioned()
    }, afterFinishInternal: function(C) {
        C.effects[0].element.hide().undoPositioned().setStyle(A)
    }
    }, arguments[1] || {}))
};
Effect.Shake = function(D) {
    D = $(D);
    var B = Object.extend({ distance: 20, duration: 0.5 }, arguments[1] || {});
    var E = parseFloat(B.distance);
    var C = parseFloat(B.duration) / 10;
    var A = { top: D.getStyle("top"), left: D.getStyle("left") };
    return new Effect.Move(D, { x: E, y: 0, duration: C, afterFinishInternal: function(F) {
        new Effect.Move(F.element, { x: -E * 2, y: 0, duration: C * 2, afterFinishInternal: function(G) {
            new Effect.Move(G.element, { x: E * 2, y: 0, duration: C * 2, afterFinishInternal: function(H) {
                new Effect.Move(H.element, { x: -E * 2, y: 0, duration: C * 2, afterFinishInternal: function(I) {
                    new Effect.Move(I.element, { x: E * 2, y: 0, duration: C * 2, afterFinishInternal: function(J) {
                        new Effect.Move(J.element, { x: -E, y: 0, duration: C, afterFinishInternal: function(K) {
                            K.element.undoPositioned().setStyle(A)
                        }
                        })
                    }
                    })
                }
                })
            }
            })
        }
        })
    }
    })
};
Effect.SlideDown = function(C) {
    C = $(C).cleanWhitespace();
    var A = C.down().getStyle("bottom");
    var B = C.getDimensions();
    return new Effect.Scale(C, 100, Object.extend({ scaleContent: false, scaleX: false, scaleFrom: window.opera ? 0 : 1, scaleMode: { originalHeight: B.height, originalWidth: B.width }, restoreAfterFinish: true, afterSetup: function(D) {
        D.element.makePositioned();
        D.element.down().makePositioned();
        if (window.opera) {
            D.element.setStyle({ top: "" })
        } D.element.makeClipping().setStyle({ height: "0px" }).show()
    }, afterUpdateInternal: function(D) {
        D.element.down().setStyle({ bottom: (D.dims[0] - D.element.clientHeight) + "px" })
    }, afterFinishInternal: function(D) {
        D.element.undoClipping().undoPositioned();
        D.element.down().undoPositioned().setStyle({ bottom: A })
    }
    }, arguments[1] || {}))
};
Effect.SlideUp = function(C) {
    C = $(C).cleanWhitespace();
    var A = C.down().getStyle("bottom");
    var B = C.getDimensions();
    return new Effect.Scale(C, window.opera ? 0 : 1, Object.extend({ scaleContent: false, scaleX: false, scaleMode: "box", scaleFrom: 100, scaleMode: { originalHeight: B.height, originalWidth: B.width }, restoreAfterFinish: true, afterSetup: function(D) {
        D.element.makePositioned();
        D.element.down().makePositioned();
        if (window.opera) {
            D.element.setStyle({ top: "" })
        } D.element.makeClipping().show()
    }, afterUpdateInternal: function(D) {
        D.element.down().setStyle({ bottom: (D.dims[0] - D.element.clientHeight) + "px" })
    }, afterFinishInternal: function(D) {
        D.element.hide().undoClipping().undoPositioned();
        D.element.down().undoPositioned().setStyle({ bottom: A })
    }
    }, arguments[1] || {}))
};
Effect.Squish = function(A) {
    return new Effect.Scale(A, window.opera ? 1 : 0, { restoreAfterFinish: true, beforeSetup: function(B) {
        B.element.makeClipping()
    }, afterFinishInternal: function(B) {
        B.element.hide().undoClipping()
    }
    })
};
Effect.Grow = function(C) {
    C = $(C);
    var B = Object.extend({ direction: "center", moveTransition: Effect.Transitions.sinoidal, scaleTransition: Effect.Transitions.sinoidal, opacityTransition: Effect.Transitions.full }, arguments[1] || {});
    var A = { top: C.style.top, left: C.style.left, height: C.style.height, width: C.style.width, opacity: C.getInlineOpacity() };
    var G = C.getDimensions();
    var H, F;
    var E, D;
    switch (B.direction) {
        case "top-left": H = F = E = D = 0;
            break;
        case "top-right": H = G.width;
            F = D = 0;
            E = -G.width;
            break;
        case "bottom-left": H = E = 0;
            F = G.height;
            D = -G.height;
            break;
        case "bottom-right": H = G.width;
            F = G.height;
            E = -G.width;
            D = -G.height;
            break;
        case "center": H = G.width / 2;
            F = G.height / 2;
            E = -G.width / 2;
            D = -G.height / 2;
            break
    } return new Effect.Move(C, { x: H, y: F, duration: 0.01, beforeSetup: function(I) {
        I.element.hide().makeClipping().makePositioned()
    }, afterFinishInternal: function(I) {
        new Effect.Parallel([new Effect.Opacity(I.element, { sync: true, to: 1, from: 0, transition: B.opacityTransition }), new Effect.Move(I.element, { x: E, y: D, sync: true, transition: B.moveTransition }), new Effect.Scale(I.element, 100, { scaleMode: { originalHeight: G.height, originalWidth: G.width }, sync: true, scaleFrom: window.opera ? 1 : 0, transition: B.scaleTransition, restoreAfterFinish: true })], Object.extend({ beforeSetup: function(J) {
            J.effects[0].element.setStyle({ height: "0px" }).show()
        }, afterFinishInternal: function(J) {
            J.effects[0].element.undoClipping().undoPositioned().setStyle(A)
        }
        }, B))
    }
    })
};
Effect.Shrink = function(C) {
    C = $(C);
    var B = Object.extend({ direction: "center", moveTransition: Effect.Transitions.sinoidal, scaleTransition: Effect.Transitions.sinoidal, opacityTransition: Effect.Transitions.none }, arguments[1] || {});
    var A = { top: C.style.top, left: C.style.left, height: C.style.height, width: C.style.width, opacity: C.getInlineOpacity() };
    var F = C.getDimensions();
    var E, D;
    switch (B.direction) {
        case "top-left": E = D = 0;
            break;
        case "top-right": E = F.width;
            D = 0;
            break;
        case "bottom-left": E = 0;
            D = F.height;
            break;
        case "bottom-right": E = F.width;
            D = F.height;
            break;
        case "center": E = F.width / 2;
            D = F.height / 2;
            break
    } return new Effect.Parallel([new Effect.Opacity(C, { sync: true, to: 0, from: 1, transition: B.opacityTransition }), new Effect.Scale(C, window.opera ? 1 : 0, { sync: true, transition: B.scaleTransition, restoreAfterFinish: true }), new Effect.Move(C, { x: E, y: D, sync: true, transition: B.moveTransition })], Object.extend({ beforeStartInternal: function(G) {
        G.effects[0].element.makePositioned().makeClipping()
    }, afterFinishInternal: function(G) {
        G.effects[0].element.hide().undoClipping().undoPositioned().setStyle(A)
    }
    }, B))
};
Effect.Pulsate = function(C) {
    C = $(C);
    var B = arguments[1] || {};
    var A = C.getInlineOpacity();
    var E = B.transition || Effect.Transitions.sinoidal;
    var D = function(F) {
        return E(1 - Effect.Transitions.pulse(F, B.pulses))
    };
    D.bind(E);
    return new Effect.Opacity(C, Object.extend(Object.extend({ duration: 2, from: 0, afterFinishInternal: function(F) {
        F.element.setStyle({ opacity: A })
    }
    }, B), { transition: D }))
};
Effect.Fold = function(B) {
    B = $(B);
    var A = { top: B.style.top, left: B.style.left, width: B.style.width, height: B.style.height };
    B.makeClipping();
    return new Effect.Scale(B, 5, Object.extend({ scaleContent: false, scaleX: false, afterFinishInternal: function(C) {
        new Effect.Scale(B, 1, { scaleContent: false, scaleY: false, afterFinishInternal: function(D) {
            D.element.hide().undoClipping().setStyle(A)
        }
        })
    }
    }, arguments[1] || {}))
};
Effect.Morph = Class.create(Effect.Base, { initialize: function(C) {
    this.element = $(C);
    if (!this.element) {
        throw (Effect._elementDoesNotExistError)
    } var A = Object.extend({ style: {} }, arguments[1] || {});
    if (!Object.isString(A.style)) {
        this.style = $H(A.style)
    } else {
        if (A.style.include(":")) {
            this.style = A.style.parseStyle()
        } else {
            this.element.addClassName(A.style);
            this.style = $H(this.element.getStyles());
            this.element.removeClassName(A.style);
            var B = this.element.getStyles();
            this.style = this.style.reject(function(D) {
                return D.value == B[D.key]
            });
            A.afterFinishInternal = function(D) {
                D.element.addClassName(D.options.style);
                D.transforms.each(function(E) {
                    D.element.style[E.style] = ""
                })
            }
        }
    } this.start(A);
}, setup: function() {
    function A(B) {
        if (!B || ["rgba(0, 0, 0, 0)", "transparent"].include(B)) {
            B = "#ffffff"
        } B = B.parseColor();
        return $R(0, 2).map(function(C) {
            return parseInt(B.slice(C * 2 + 1, C * 2 + 3), 16)
        })
    } this.transforms = this.style.map(function(G) {
        var F = G[0], E = G[1], D = null;
        if (E.parseColor("#zzzzzz") != "#zzzzzz") {
            E = E.parseColor();
            D = "color"
        } else {
            if (F == "opacity") {
                E = parseFloat(E);
                if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout)) {
                    this.element.setStyle({ zoom: 1 })
                }
            } else {
                if (Element.CSS_LENGTH.test(E)) {
                    var C = E.match(/^([\+\-]?[0-9\.]+)(.*)$/);
                    E = parseFloat(C[1]);
                    D = (C.length == 3) ? C[2] : null
                }
            }
        } var B = this.element.getStyle(F);
        return { style: F.camelize(), originalValue: D == "color" ? A(B) : parseFloat(B || 0), targetValue: D == "color" ? A(E) : E, unit: D }
    } .bind(this)).reject(function(B) {
        return ((B.originalValue == B.targetValue) || (B.unit != "color" && (isNaN(B.originalValue) || isNaN(B.targetValue))))
    })
}, update: function(A) {
    var D = {}, B, C = this.transforms.length;
    while (C--) {
        D[(B = this.transforms[C]).style] = B.unit == "color" ? "#" + (Math.round(B.originalValue[0] + (B.targetValue[0] - B.originalValue[0]) * A)).toColorPart() + (Math.round(B.originalValue[1] + (B.targetValue[1] - B.originalValue[1]) * A)).toColorPart() + (Math.round(B.originalValue[2] + (B.targetValue[2] - B.originalValue[2]) * A)).toColorPart() : (B.originalValue + (B.targetValue - B.originalValue) * A).toFixed(3) + (B.unit === null ? "" : B.unit)
    } this.element.setStyle(D, true)
}
});
Effect.Transform = Class.create({ initialize: function(A) {
    this.tracks = [];
    this.options = arguments[1] || {};
    this.addTracks(A)
}, addTracks: function(A) {
    A.each(function(B) {
        B = $H(B);
        var C = B.values().first();
        this.tracks.push($H({ ids: B.keys().first(), effect: Effect.Morph, options: { style: C} }))
    } .bind(this));
    return this
}, play: function() {
    return new Effect.Parallel(this.tracks.map(function(A) {
        var D = A.get("ids"), C = A.get("effect"), B = A.get("options");
        var E = [$(D) || $$(D)].flatten();
        return E.map(function(F) {
            return new C(F, Object.extend({ sync: true }, B))
        })
    }).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 B, A = $H();
    if (Prototype.Browser.WebKit) {
        B = new Element("div", { style: this }).style
    } else {
        String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
        B = String.__parseStyleElement.childNodes[0].style
    } Element.CSS_PROPERTIES.each(function(C) {
        if (B[C]) {
            A.set(C, B[C])
        }
    });
    if (Prototype.Browser.IE && this.include("opacity")) {
        A.set("opacity", this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1])
    } return A
};
if (document.defaultView && document.defaultView.getComputedStyle) {
    Element.getStyles = function(B) {
        var A = document.defaultView.getComputedStyle($(B), null);
        return Element.CSS_PROPERTIES.inject({}, function(C, D) {
            C[D] = A[D];
            return C
        })
    }
} else {
    Element.getStyles = function(B) {
        B = $(B);
        var A = B.currentStyle, C;
        C = Element.CSS_PROPERTIES.inject({}, function(D, E) {
            D[E] = A[E];
            return D
        });
        if (!C.opacity) {
            C.opacity = B.getOpacity()
        } return C
    }
} Effect.Methods = { morph: function(A, B) {
    A = $(A);
    new Effect.Morph(A, Object.extend({ style: B }, arguments[2] || {}));
    return A
}, visualEffect: function(C, E, B) {
    C = $(C);
    var D = E.dasherize().camelize(), A = D.charAt(0).toUpperCase() + D.substring(1);
    new Effect[A](C, B);
    return C
}, highlight: function(B, A) {
    B = $(B);
    new Effect.Highlight(B, A);
    return B
}
};
$w("fade appear grow shrink fold blindUp blindDown slideUp slideDown pulsate shake puff squish switchOff dropOut").each(function(A) {
    Effect.Methods[A] = function(C, B) {
        C = $(C);
        Effect[A.charAt(0).toUpperCase() + A.substring(1)](C, B);
        return C
    }
});
$w("getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles").each(function(A) {
    Effect.Methods[A] = Element[A]
});
Element.addMethods(Effect.Methods);
/*
ModalBox - The pop-up window thingie with AJAX, based on prototype and script.aculo.us.
Copyright Andrey Okonetchnikov (andrej.okonetschnikow@gmail.com), 2006-2007
All rights reserved.
 
VERSION 1.6.0
Last Modified: 12/13/2007
*/
if (!window.Modalbox)
    var Modalbox = new Object();
Modalbox.Methods = {
    overrideAlert: false, // Override standard browser alert message with ModalBox
    focusableElements: new Array,
    currFocused: 0,
    initialized: false,
    active: true,
    options: {
        title: "ModalBox Window", // Title of the ModalBox window
        overlayClose: true, // Close modal box by clicking on overlay
        width: 500, // Default width in px
        height: 90, // Default height in px
        overlayOpacity: .65, // Default overlay opacity
        overlayDuration: .25, // Default overlay fade in/out duration in seconds
        slideDownDuration: .5, // Default Modalbox appear slide down effect in seconds
        slideUpDuration: .5, // Default Modalbox hiding slide up effect in seconds
        resizeDuration: .25, // Default resize duration seconds
        inactiveFade: true, // Fades MB window on inactive state
        transitions: true, // Toggles transition effects. Transitions are enabled by default
        loadingString: "Please wait. Loading...", // Default loading string message
        closeString: "Close window", // Default title attribute for close window link
        closeValue: "&times;", // Default string for close link in the header
        params: {},
        method: 'get', // Default Ajax request method
        autoFocusing: true, // Toggles auto-focusing for form elements. Disable for long text pages.
        aspnet: false // Should be use then using with ASP.NET costrols. Then true Modalbox window will be injected into the first form element.
    },
    _options: new Object,

    setOptions: function(options) {
        Object.extend(this.options, options || {});
    },

    _init: function(options) {
        // Setting up original options with default options
        Object.extend(this._options, this.options);
        this.setOptions(options);

        //Create the overlay
        this.MBoverlay = new Element("div", { id: "MB_overlay", opacity: "0" });

        //Create DOm for the window
        this.MBwindow = new Element("div", { id: "MB_window", style: "display: none" }).update(
			this.MBframe = new Element("div", { id: "MB_frame" }).update(
				this.MBheader = new Element("div", { id: "MB_header" }).update(
					this.MBcaption = new Element("div", { id: "MB_caption" })
				)
			)
		);
        this.MBclose = new Element("a", { id: "MB_close", title: this.options.closeString, href: "#" }).update("<span>" + this.options.closeValue + "</span>");
        this.MBheader.insert({ 'bottom': this.MBclose });

        this.MBcontent = new Element("div", { id: "MB_content" }).update(
			this.MBloading = new Element("div", { id: "MB_loading" }).update(this.options.loadingString)
		);
        this.MBframe.insert({ 'bottom': this.MBcontent });

        // Inserting into DOM. If parameter set and form element have been found will inject into it. Otherwise will inject into body as topmost element.
        // Be sure to set padding and marging to null via CSS for both body and (in case of asp.net) form elements. 
        var injectToEl = this.options.aspnet ? $(document.body).down('form') : $(document.body);
        injectToEl.insert({ 'top': this.MBwindow });
        injectToEl.insert({ 'top': this.MBoverlay });

        // Initial scrolling position of the window. To be used for remove scrolling effect during ModalBox appearing
        this.initScrollX = window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft;
        this.initScrollY = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;

        //Adding event observers
        this.hideObserver = this._hide.bindAsEventListener(this);
        this.kbdObserver = this._kbdHandler.bindAsEventListener(this);
        this._initObservers();
        this.initialized = true; // Mark as initialized
    },

    show: function(content, options) {
        if (!this.initialized) this._init(options); // Check for is already initialized

        this.content = content;
        this.setOptions(options);

        if (this.options.title) // Updating title of the MB
            $(this.MBcaption).update(this.options.title);
        else { // If title isn't given, the header will not displayed
            $(this.MBheader).hide();
            $(this.MBcaption).hide();
        }

        if (this.MBwindow.style.display == "none") { // First modal box appearing
            this._appear();
            this.event("onShow"); // Passing onShow callback
        }
        else { // If MB already on the screen, update it
            this._update();
            this.event("onUpdate"); // Passing onUpdate callback
        }
    },

    hide: function(options) { // External hide method to use from external HTML and JS
        if (this.initialized) {
            // Reading for options/callbacks except if event given as a pararmeter
            if (options && typeof options.element != 'function') Object.extend(this.options, options);
            // Passing beforeHide callback
            this.event("beforeHide");
            if (this.options.transitions)
                Effect.SlideUp(this.MBwindow, { duration: this.options.slideUpDuration, transition: Effect.Transitions.sinoidal, afterFinish: this._deinit.bind(this) });
            else {
                $(this.MBwindow).hide();
                this._deinit();
            }
        } else throw ("Modalbox is not initialized.");
    },

    _hide: function(event) { // Internal hide method to use with overlay and close link
        event.stop(); // Stop event propaganation for link elements
        /* Then clicked on overlay we'll check the option and in case of overlayClose == false we'll break hiding execution [Fix for #139] */
        if (event.element().id == 'MB_overlay' && !this.options.overlayClose) return false;
        this.hide();
    },

    alert: function(message) {
        var html = '<div class="MB_alert"><p>' + message + '</p><input type="button" onclick="Modalbox.hide()" value="OK" /></div>';
        Modalbox.show(html, { title: 'Alert: ' + document.title, width: 300 });
    },

    _appear: function() { // First appearing of MB
        if (Prototype.Browser.IE && !navigator.appVersion.match(/\b7.0\b/)) { // Preparing IE 6 for showing modalbox
            window.scrollTo(0, 0);
            this._prepareIE("100%", "hidden");
        }
        this._setWidth();
        this._setPosition();
        if (this.options.transitions) {
            $(this.MBoverlay).setStyle({ opacity: 0 });
            new Effect.Fade(this.MBoverlay, {
                from: 0,
                to: this.options.overlayOpacity,
                duration: this.options.overlayDuration,
                afterFinish: function() {
                    new Effect.SlideDown(this.MBwindow, {
                        duration: this.options.slideDownDuration,
                        transition: Effect.Transitions.sinoidal,
                        afterFinish: function() {
                            this._setPosition();
                            this.loadContent();
                        } .bind(this)
                    });
                } .bind(this)
            });
        } else {
            $(this.MBoverlay).setStyle({ opacity: this.options.overlayOpacity });
            $(this.MBwindow).show();
            this._setPosition();
            this.loadContent();
        }
        this._setWidthAndPosition = this._setWidthAndPosition.bindAsEventListener(this);
        Event.observe(window, "resize", this._setWidthAndPosition);
    },

    resize: function(byWidth, byHeight, options) { // Change size of MB without loading content
        var wHeight = $(this.MBwindow).getHeight();
        var wWidth = $(this.MBwindow).getWidth();
        var hHeight = $(this.MBheader).getHeight();
        var cHeight = $(this.MBcontent).getHeight();
        var newHeight = ((wHeight - hHeight + byHeight) < cHeight) ? (cHeight + hHeight - wHeight) : byHeight;
        if (options) this.setOptions(options); // Passing callbacks
        if (this.options.transitions) {
            new Effect.ScaleBy(this.MBwindow, byWidth, newHeight, {
                duration: this.options.resizeDuration,
                afterFinish: function() {
                    this.event("_afterResize"); // Passing internal callback
                    this.event("afterResize"); // Passing callback
                } .bind(this)
            });
        } else {
            this.MBwindow.setStyle({ width: wWidth + byWidth + "px", height: wHeight + newHeight + "px" });
            setTimeout(function() {
                this.event("_afterResize"); // Passing internal callback
                this.event("afterResize"); // Passing callback
            } .bind(this), 1);

        }

    },

    resizeToContent: function(options) {

        // Resizes the modalbox window to the actual content height.
        // This might be useful to resize modalbox after some content modifications which were changed ccontent height.

        var byHeight = this.options.height - this.MBwindow.offsetHeight;
        if (byHeight != 0) {
            if (options) this.setOptions(options); // Passing callbacks
            Modalbox.resize(0, byHeight);
        }
    },

    resizeToInclude: function(element, options) {

        // Resizes the modalbox window to the camulative height of element. Calculations are using CSS properties for margins and border.
        // This method might be useful to resize modalbox before including or updating content.

        var el = $(element);
        var elHeight = el.getHeight() + parseInt(el.getStyle('margin-top')) + parseInt(el.getStyle('margin-bottom')) + parseInt(el.getStyle('border-top-width')) + parseInt(el.getStyle('border-bottom-width'));
        if (elHeight > 0) {
            if (options) this.setOptions(options); // Passing callbacks
            Modalbox.resize(0, elHeight);
        }
    },

    _update: function() { // Updating MB in case of wizards
        $(this.MBcontent).update("");
        this.MBcontent.appendChild(this.MBloading);
        $(this.MBloading).update(this.options.loadingString);
        this.currentDims = [this.MBwindow.offsetWidth, this.MBwindow.offsetHeight];
        Modalbox.resize((this.options.width - this.currentDims[0]), (this.options.height - this.currentDims[1]), { _afterResize: this._loadAfterResize.bind(this) });
    },

    loadContent: function() {
        if (this.event("beforeLoad") != false) { // If callback passed false, skip loading of the content
            if (typeof this.content == 'string') {
                var htmlRegExp = new RegExp(/<\/?[^>]+>/gi);
                if (htmlRegExp.test(this.content)) { // Plain HTML given as a parameter
                    this._insertContent(this.content.stripScripts());
                    this._putContent(function() {
                        this.content.extractScripts().map(function(script) {
                            return eval(script.replace("<!--", "").replace("// -->", ""));
                        } .bind(window));
                    } .bind(this));
                } else // URL given as a parameter. We'll request it via Ajax
                    new Ajax.Request(this.content, { method: this.options.method.toLowerCase(), parameters: this.options.params,
                        onSuccess: function(transport) {
                            var response = new String(transport.responseText);
                            this._insertContent(transport.responseText.stripScripts());
                            this._putContent(function() {
                                response.extractScripts().map(function(script) {
                                    return eval(script.replace("<!--", "").replace("// -->", ""));
                                } .bind(window));
                            });
                        } .bind(this),
                        onException: function(instance, exception) {
                            Modalbox.hide();
                            throw ('Modalbox Loading Error: ' + exception);
                        }
                    });

            } else if (typeof this.content == 'object') {// HTML Object is given
                this._insertContent(this.content);
                this._putContent();
            } else {
                Modalbox.hide();
                throw ('Modalbox Parameters Error: Please specify correct URL or HTML element (plain HTML or object)');
            }
        }
    },

    _insertContent: function(content) {
        $(this.MBcontent).hide().update("");
        if (typeof content == 'string') {
            setTimeout(function() { // Hack to disable content flickering in Firefox
                this.MBcontent.update(content);
            } .bind(this), 1);
        } else if (typeof content == 'object') { // HTML Object is given
            var _htmlObj = content.cloneNode(true); // If node already a part of DOM we'll clone it
            // If clonable element has ID attribute defined, modifying it to prevent duplicates
            if (content.id) content.id = "MB_" + content.id;
            /* Add prefix for IDs on all elements inside the DOM node */
            $(content).select('*[id]').each(function(el) { el.id = "MB_" + el.id; });
            this.MBcontent.appendChild(_htmlObj);
            this.MBcontent.down().show(); // Toggle visibility for hidden nodes
            if (Prototype.Browser.IE) // Toggling back visibility for hidden selects in IE
                $$("#MB_content select").invoke('setStyle', { 'visibility': '' });
        }
    },

    _putContent: function(callback) {
        // Prepare and resize modal box for content
        if (this.options.height == this._options.height) {
            setTimeout(function() { // MSIE sometimes doesn't display content correctly
                Modalbox.resize(0, $(this.MBcontent).getHeight() - $(this.MBwindow).getHeight() + $(this.MBheader).getHeight(), {
                    afterResize: function() {
                        this.MBcontent.show().makePositioned();
                        this.focusableElements = this._findFocusableElements();
                        this._setFocus(); // Setting focus on first 'focusable' element in content (input, select, textarea, link or button)
                        setTimeout(function() { // MSIE fix
                            if (callback != undefined)
                                callback(); // Executing internal JS from loaded content
                            this.event("afterLoad"); // Passing callback
                        } .bind(this), 1);
                    } .bind(this)
                });
            } .bind(this), 1);
        } else { // Height is defined. Creating a scrollable window
            this._setWidth();
            this.MBcontent.setStyle({ overflow: 'auto', height: $(this.MBwindow).getHeight() - $(this.MBheader).getHeight() - 13 + 'px' });
            this.MBcontent.show();
            this.focusableElements = this._findFocusableElements();
            this._setFocus(); // Setting focus on first 'focusable' element in content (input, select, textarea, link or button)
            setTimeout(function() { // MSIE fix
                if (callback != undefined)
                    callback(); // Executing internal JS from loaded content
                this.event("afterLoad"); // Passing callback
            } .bind(this), 1);
        }
    },

    activate: function(options) {
        this.setOptions(options);
        this.active = true;
        $(this.MBclose).observe("click", this.hideObserver);
        if (this.options.overlayClose)
            $(this.MBoverlay).observe("click", this.hideObserver);
        $(this.MBclose).show();
        if (this.options.transitions && this.options.inactiveFade)
            new Effect.Appear(this.MBwindow, { duration: this.options.slideUpDuration });
    },

    deactivate: function(options) {
        this.setOptions(options);
        this.active = false;
        $(this.MBclose).stopObserving("click", this.hideObserver);
        if (this.options.overlayClose)
            $(this.MBoverlay).stopObserving("click", this.hideObserver);
        $(this.MBclose).hide();
        if (this.options.transitions && this.options.inactiveFade)
            new Effect.Fade(this.MBwindow, { duration: this.options.slideUpDuration, to: .75 });
    },

    _initObservers: function() {
        $(this.MBclose).observe("click", this.hideObserver);
        if (this.options.overlayClose)
            $(this.MBoverlay).observe("click", this.hideObserver);
        if (Prototype.Browser.IE)
            Event.observe(document, "keydown", this.kbdObserver);
        else
            Event.observe(document, "keypress", this.kbdObserver);
    },

    _removeObservers: function() {
        $(this.MBclose).stopObserving("click", this.hideObserver);
        if (this.options.overlayClose)
            $(this.MBoverlay).stopObserving("click", this.hideObserver);
        if (Prototype.Browser.IE)
            Event.stopObserving(document, "keydown", this.kbdObserver);
        else
            Event.stopObserving(document, "keypress", this.kbdObserver);
    },

    _loadAfterResize: function() {
        this._setWidth();
        this._setPosition();
        this.loadContent();
    },

    _setFocus: function() {
        /* Setting focus to the first 'focusable' element which is one with tabindex = 1 or the first in the form loaded. */
        if (this.focusableElements.length > 0 && this.options.autoFocusing == true) {
            var firstEl = this.focusableElements.find(function(el) {
                return el.tabIndex == 1;
            }) || this.focusableElements.first();
            this.currFocused = this.focusableElements.toArray().indexOf(firstEl);
            firstEl.focus(); // Focus on first focusable element except close button
        } else if ($(this.MBclose).visible())
            $(this.MBclose).focus(); // If no focusable elements exist focus on close button
    },

    _findFocusableElements: function() { // Collect form elements or links from MB content
        this.MBcontent.select('input:not([type~=hidden]), select, textarea, button, a[href]').invoke('addClassName', 'MB_focusable');
        return this.MBcontent.select('.MB_focusable');
    },

    _kbdHandler: function(event) {
        var node = event.element();
        switch (event.keyCode) {
            case Event.KEY_TAB:
                event.stop();

                /* Switching currFocused to the element which was focused by mouse instead of TAB-key. Fix for #134 */
                if (node != this.focusableElements[this.currFocused])
                    this.currFocused = this.focusableElements.toArray().indexOf(node);

                if (!event.shiftKey) { //Focusing in direct order
                    if (this.currFocused == this.focusableElements.length - 1) {
                        this.focusableElements.first().focus();
                        this.currFocused = 0;
                    } else {
                        this.currFocused++;
                        this.focusableElements[this.currFocused].focus();
                    }
                } else { // Shift key is pressed. Focusing in reverse order
                    if (this.currFocused == 0) {
                        this.focusableElements.last().focus();
                        this.currFocused = this.focusableElements.length - 1;
                    } else {
                        this.currFocused--;
                        this.focusableElements[this.currFocused].focus();
                    }
                }
                break;
            case Event.KEY_ESC:
                if (this.active) this._hide(event);
                break;
            case 32:
                this._preventScroll(event);
                break;
            case 0: // For Gecko browsers compatibility
                if (event.which == 32) this._preventScroll(event);
                break;
            case Event.KEY_UP:
            case Event.KEY_DOWN:
            case Event.KEY_PAGEDOWN:
            case Event.KEY_PAGEUP:
            case Event.KEY_HOME:
            case Event.KEY_END:
                // Safari operates in slightly different way. This realization is still buggy in Safari.
                if (Prototype.Browser.WebKit && !["textarea", "select"].include(node.tagName.toLowerCase()))
                    event.stop();
                else if ((node.tagName.toLowerCase() == "input" && ["submit", "button"].include(node.type)) || (node.tagName.toLowerCase() == "a"))
                    event.stop();
                break;
        }
    },

    _preventScroll: function(event) { // Disabling scrolling by "space" key
        if (!["input", "textarea", "select", "button"].include(event.element().tagName.toLowerCase()))
            event.stop();
    },

    _deinit: function() {
        this._removeObservers();
        Event.stopObserving(window, "resize", this._setWidthAndPosition);
        if (this.options.transitions) {
            Effect.toggle(this.MBoverlay, 'appear', { duration: this.options.overlayDuration, afterFinish: this._removeElements.bind(this) });
        } else {
            this.MBoverlay.hide();
            this._removeElements();
        }
        $(this.MBcontent).setStyle({ overflow: '', height: '' });
    },

    _removeElements: function() {
        $(this.MBoverlay).remove();
        $(this.MBwindow).remove();
        if (Prototype.Browser.IE && !navigator.appVersion.match(/\b7.0\b/)) {
            this._prepareIE("", ""); // If set to auto MSIE will show horizontal scrolling
            window.scrollTo(this.initScrollX, this.initScrollY);
        }

        /* Replacing prefixes 'MB_' in IDs for the original content */
        if (typeof this.content == 'object') {
            if (this.content.id && this.content.id.match(/MB_/)) {
                this.content.id = this.content.id.replace(/MB_/, "");
            }
            this.content.select('*[id]').each(function(el) { el.id = el.id.replace(/MB_/, ""); });
        }
        /* Initialized will be set to false */
        this.initialized = false;
        this.event("afterHide"); // Passing afterHide callback
        this.setOptions(this._options); //Settings options object into intial state
    },

    _setWidth: function() { //Set size
        $(this.MBwindow).setStyle({ width: this.options.width + "px", height: this.options.height + "px" });
    },

    _setPosition: function() {
        $(this.MBwindow).setStyle({ left: Math.round((Element.getWidth(document.body) - Element.getWidth(this.MBwindow)) / 2) + "px" });
    },

    _setWidthAndPosition: function() {
        $(this.MBwindow).setStyle({ width: this.options.width + "px" });
        this._setPosition();
    },

    _getScrollTop: function() { //From: http://www.quirksmode.org/js/doctypes.html
        var theTop;
        if (document.documentElement && document.documentElement.scrollTop)
            theTop = document.documentElement.scrollTop;
        else if (document.body)
            theTop = document.body.scrollTop;
        return theTop;
    },
    _prepareIE: function(height, overflow) {
        $$('html, body').invoke('setStyle', { width: height, height: height, overflow: overflow }); // IE requires width and height set to 100% and overflow hidden
        $$("select").invoke('setStyle', { 'visibility': overflow }); // Toggle visibility for all selects in the common document
    },
    event: function(eventName) {
        if (this.options[eventName]) {
            var returnValue = this.options[eventName](); // Executing callback
            this.options[eventName] = null; // Removing callback after execution
            if (returnValue != undefined)
                return returnValue;
            else
                return true;
        }
        return true;
    }
};
Object.extend(Modalbox, Modalbox.Methods);
if (Modalbox.overrideAlert) window.alert = Modalbox.alert;
Effect.ScaleBy = Class.create();
Object.extend(Object.extend(Effect.ScaleBy.prototype, Effect.Base.prototype), {
    initialize: function(element, byWidth, byHeight, options) {
        this.element = $(element)
        var options = Object.extend({
            scaleFromTop: true,
            scaleMode: 'box',        // 'box' or 'contents' or {} with provided values
            scaleByWidth: byWidth,
            scaleByHeight: byHeight
        }, arguments[3] || {});
        this.start(options);
    },
    setup: function() {
        this.elementPositioning = this.element.getStyle('position');

        this.originalTop = this.element.offsetTop;
        this.originalLeft = this.element.offsetLeft;

        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];

        this.deltaY = this.options.scaleByHeight;
        this.deltaX = this.options.scaleByWidth;
    },
    update: function(position) {
        var currentHeight = this.dims[0] + (this.deltaY * position);
        var currentWidth = this.dims[1] + (this.deltaX * position);

        currentHeight = (currentHeight > 0) ? currentHeight : 0;
        currentWidth = (currentWidth > 0) ? currentWidth : 0;

        this.setDimensions(currentHeight, currentWidth);
    },
    setDimensions: function(height, width) {
        var d = {};
        d.width = width + 'px';
        d.height = height + 'px';

        var topd = Math.round((height - this.dims[0]) / 2);
        var leftd = Math.round((width - this.dims[1]) / 2);
        if (this.elementPositioning == 'absolute' || this.elementPositioning == 'fixed') {
            if (!this.options.scaleFromTop) d.top = this.originalTop - topd + 'px';
            d.left = this.originalLeft - leftd + 'px';
        } else {
            if (!this.options.scaleFromTop) d.top = -topd + 'px';
            d.left = -leftd + 'px';
        }
        this.element.setStyle(d);
    }
});
//nostro modale
// JScript File
function omniProcessing() {
    var cp = Cookie.get('OmniSCKCTV');
    if (cp != null && cp != undefined) {
        var cVals = cp.toQueryParams();
        if (cVals.Age != null && cVals.Age != undefined && cVals.Age != '') {
            s.eVar21 = cVals.Age;
        }
        else {
            s.eVar21 = 'NP';
        }
        if (cVals.Gender != null && cVals.Gender != undefined && cVals.Gender != '') {
            s.eVar20 = cVals.Gender;
        }
        else {
            s.eVar20 = 'NP';
        }
        if (cVals.CountryCode != null && cVals.CountryCode != undefined && cVals.CountryCode != '') {
            s.eVar22 = cVals.CountryCode;
        }
        else {
            s.eVar22 = 'NP';
        }
        s.eVar23 = 'Registered';
    }
    else {
        s.eVar20 = 'NR';
        s.eVar21 = 'NR';
        s.eVar22 = 'NR';
        s.eVar23 = 'Not Registered';
    }
    return;
}
// JScript File
function CommercialSelect() {
    // uncomment to enable random in 3 types - currently set to bythenumbers only
    // var num = Math.floor(Math.random()*3);
    var num = 0
    var _url = '';
    // If WebPathSettings('sponsorUrl') has a value than in core.xslt we create the JS variable named "sponsorUrl". 
    // This variable contains the path to sponsored "By The Numbers" news list 
    // (i.e. /library/commercials/bythenumbers/sponsored/[sponsorName]/list.html)
    // On page hit we create a cookie that, when reach the value of 4, call the sponsored news list url.
    if (sponsorObj.url != '') {
        var _t = sponsorObj.url;
        if (sponsorObj.maxCycle) {
            var c = Cookie.get('Sponsor');
            var count = c == null ? 1 : parseInt(c.split('_')[0]) + 1;
            if (count == sponsorObj.maxCycle) {
                count = 0;
                _t = sponsorObj.altUrl;
            }
            Cookie.set('Sponsor', count + '_' + sponsorObj.basePath);
        }
        _url = sponsorObj.basePath + _t;
    }
    else {
        if (num == 0) _url = '/library/commercials/bythenumbers/list.html';
        else if (num == 1) _url = '/library/commercials/didyouknow/list.html';
        else if (num == 2) _url = '/library/commercials/olympicfacts/list.html';
    }
    var a = new Ajax.Updater('btn_dyk_of', _url);
    return;
}
if (typeof Effect == "undefined") { throw ("controls.js requires including script.aculo.us effects.js library"); }
var Autocompleter = {};
Autocompleter.Base = Class.create({ baseInitialize: function(B, C, A) {
    B = $(B);
    this.element = B;
    this.update = $(C);
    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(A)
    } else {
        this.options = A || {}
    } 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(D, E) {
        if (!E.style.position || E.style.position == "absolute") {
            E.style.position = "absolute";
            Position.clone(D, E, { setHeight: false, offsetTop: D.offsetHeight })
        } Effect.Appear(E, { duration: 0.15 })
    };
    this.options.onHide = this.options.onHide || function(D, E) {
        new Effect.Fade(E, { 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(A) {
    if (this.active) {
        switch (A.keyCode) {
            case Event.KEY_TAB: case Event.KEY_RETURN: this.selectEntry();
                Event.stop(A);
            case Event.KEY_ESC: this.hide();
                this.active = false;
                Event.stop(A);
                return;
            case Event.KEY_LEFT: case Event.KEY_RIGHT: return;
            case Event.KEY_UP: this.markPrevious();
                this.render();
                Event.stop(A);
                return;
            case Event.KEY_DOWN: this.markNext();
                this.render();
                Event.stop(A);
                return
        }
    } else {
        if (A.keyCode == Event.KEY_TAB || A.keyCode == Event.KEY_RETURN || (Prototype.Browser.WebKit > 0 && A.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(B) {
    var A = Event.findElement(B, "LI");
    if (this.index != A.autocompleteIndex) {
        this.index = A.autocompleteIndex;
        this.render()
    } Event.stop(B)
}, onClick: function(B) {
    var A = Event.findElement(B, "LI");
    this.index = A.autocompleteIndex;
    this.selectEntry();
    this.hide()
}, onBlur: function(A) {
    setTimeout(this.hide.bind(this), 250);
    this.hasFocus = false;
    this.active = false
}, render: function() {
    if (this.entryCount > 0) {
        for (var A = 0; A < this.entryCount; A++) {
            this.index == A ? Element.addClassName(this.getEntry(A), "selected") : Element.removeClassName(this.getEntry(A), "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(A) {
    return this.update.firstChild.childNodes[A]
}, getCurrentEntry: function() {
    return this.getEntry(this.index)
}, selectEntry: function() {
    this.active = false;
    this.updateElement(this.getCurrentEntry())
}, updateElement: function(F) {
    if (this.options.updateElement) {
        this.options.updateElement(F);
        return
    } var D = "";
    if (this.options.select) {
        var A = $(F).select("." + this.options.select) || [];
        if (A.length > 0) {
            D = Element.collectTextNodes(A[0], this.options.select)
        }
    } else {
        D = Element.collectTextNodesIgnoreClass(F, "informal")
    } var C = this.getTokenBounds();
    if (C[0] != -1) {
        var E = this.element.value.substr(0, C[0]);
        var B = this.element.value.substr(C[0]).match(/^\s+/);
        if (B) {
            E += B[0]
        } this.element.value = E + D + this.element.value.substr(C[1])
    } else {
        this.element.value = D
    } this.oldElementValue = this.element.value;
    this.element.focus();
    if (this.options.afterUpdateElement) {
        this.options.afterUpdateElement(this.element, F)
    }
}, updateChoices: function(C) {
    if (!this.changed && this.hasFocus) {
        this.update.innerHTML = C;
        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 A = 0; A < this.entryCount; A++) {
                var B = this.getEntry(A);
                B.autocompleteIndex = A;
                this.addObservers(B)
            }
        } 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(A) {
    Event.observe(A, "mouseover", this.onHover.bindAsEventListener(this));
    Event.observe(A, "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 A = this.getTokenBounds();
    return this.element.value.substring(A[0], A[1]).strip()
}, getTokenBounds: function() {
    if (null != this.tokenBounds) {
        return this.tokenBounds
    } var E = this.element.value;
    if (E.strip().empty()) {
        return [-1, 0]
    } var F = arguments.callee.getFirstDifferencePos(E, this.oldElementValue);
    var H = (F == this.oldElementValue.length ? 1 : 0);
    var D = -1, C = E.length;
    var G;
    for (var B = 0, A = this.options.tokens.length; B < A; ++B) {
        G = E.lastIndexOf(this.options.tokens[B], F + H - 1);
        if (G > D) {
            D = G
        } G = E.indexOf(this.options.tokens[B], F + H);
        if (-1 != G && G < C) {
            C = G
        }
    } return (this.tokenBounds = [D + 1, C])
}
});
Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(C, A) {
    var D = Math.min(C.length, A.length);
    for (var B = 0; B < D; ++B) {
        if (C[B] != A[B]) {
            return B
        }
    } return D
};
Ajax.Autocompleter = Class.create(Autocompleter.Base, { initialize: function(C, D, B, A) {
    this.baseInitialize(C, D, A);
    this.options.asynchronous = true;
    this.options.onComplete = this.onComplete.bind(this);
    this.options.defaultParams = this.options.parameters || null;
    this.url = B
}, getUpdatedChoices: function() {
    this.startIndicator();
    var A = encodeURIComponent(this.options.paramName) + "=" + encodeURIComponent(this.getToken());
    this.options.parameters = this.options.callback ? this.options.callback(this.element, A) : A;
    if (this.options.defaultParams) {
        this.options.parameters += "&" + this.options.defaultParams
    } new Ajax.Request(this.url, this.options)
}, onComplete: function(A) {
    this.updateChoices(A.responseText)
}
});
Autocompleter.Local = Class.create(Autocompleter.Base, { initialize: function(B, D, C, A) {
    this.baseInitialize(B, D, A);
    this.options.array = C
}, getUpdatedChoices: function() {
    this.updateChoices(this.options.selector(this))
}, setOptions: function(A) {
    this.options = Object.extend({ choices: 10, partialSearch: true, partialChars: 2, ignoreCase: true, fullSearch: false, selector: function(B) {
        var D = [];
        var C = [];
        var H = B.getToken();
        var G = 0;
        for (var E = 0; E < B.options.array.length && D.length < B.options.choices; E++) {
            var F = B.options.array[E];
            var I = B.options.ignoreCase ? F.toLowerCase().indexOf(H.toLowerCase()) : F.indexOf(H);
            while (I != -1) {
                if (I == 0 && F.length != H.length) {
                    D.push("<li><strong>" + F.substr(0, H.length) + "</strong>" + F.substr(H.length) + "</li>");
                    break
                } else {
                    if (H.length >= B.options.partialChars && B.options.partialSearch && I != -1) {
                        if (B.options.fullSearch || /\s/.test(F.substr(I - 1, 1))) {
                            C.push("<li>" + F.substr(0, I) + "<strong>" + F.substr(I, H.length) + "</strong>" + F.substr(I + H.length) + "</li>");
                            break
                        }
                    }
                } I = B.options.ignoreCase ? F.toLowerCase().indexOf(H.toLowerCase(), I + 1) : F.indexOf(H, I + 1)
            }
        } if (C.length) {
            D = D.concat(C.slice(0, B.options.choices - D.length))
        } return "<ul>" + D.join("") + "</ul>"
    }
    }, A || {})
}
});
Field.scrollFreeActivate = function(A) {
    setTimeout(function() {
        Field.activate(A)
    }, 1)
};
Ajax.InPlaceEditor = Class.create({ initialize: function(C, B, A) {
    this.url = B;
    this.element = C = $(C);
    this.prepareOptions();
    this._controls = {};
    arguments.callee.dealWithDeprecatedOptions(A);
    Object.extend(this.options, A || {});
    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(A) {
    if (!this._editing || A.ctrlKey || A.altKey || A.shiftKey) {
        return
    } if (Event.KEY_ESC == A.keyCode) {
        this.handleFormCancellation(A)
    } else {
        if (Event.KEY_RETURN == A.keyCode) {
            this.handleFormSubmission(A)
        }
    }
}, createControl: function(G, C, B) {
    var E = this.options[G + "Control"];
    var F = this.options[G + "Text"];
    if ("button" == E) {
        var A = document.createElement("input");
        A.type = "submit";
        A.value = F;
        A.className = "editor_" + G + "_button";
        if ("cancel" == G) {
            A.onclick = this._boundCancelHandler
        } this._form.appendChild(A);
        this._controls[G] = A
    } else {
        if ("link" == E) {
            var D = document.createElement("a");
            D.href = "#";
            D.appendChild(document.createTextNode(F));
            D.onclick = "cancel" == G ? this._boundCancelHandler : this._boundSubmitHandler;
            D.className = "editor_" + G + "_link";
            if (B) {
                D.className += " " + B
            } this._form.appendChild(D);
            this._controls[G] = D
        }
    }
}, createEditField: function() {
    var C = (this.options.loadTextURL ? this.options.loadingText : this.getText());
    var B;
    if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
        B = document.createElement("input");
        B.type = "text";
        var A = this.options.size || this.options.cols || 0;
        if (0 < A) {
            B.size = A
        }
    } else {
        B = document.createElement("textarea");
        B.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
        B.cols = this.options.cols || 40
    } B.name = this.options.paramName;
    B.value = C;
    B.className = "editor_field";
    if (this.options.submitOnBlur) {
        B.onblur = this._boundSubmitHandler
    } this._controls.editor = B;
    if (this.options.loadTextURL) {
        this.loadExternalText()
    } this._form.appendChild(this._controls.editor)
}, createForm: function() {
    var B = this;
    function A(D, E) {
        var C = B.options["text" + D + "Controls"];
        if (!C || E === false) {
            return
        } B._form.appendChild(document.createTextNode(C))
    } 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)
    } A("Before", this.options.okControl || this.options.cancelControl);
    this.createControl("ok", this._boundSubmitHandler);
    A("Between", this.options.okControl && this.options.cancelControl);
    this.createControl("cancel", this._boundCancelHandler, "editor_cancel");
    A("After", this.options.okControl || this.options.cancelControl)
}, destroy: function() {
    if (this._oldInnerHTML) {
        this.element.innerHTML = this._oldInnerHTML
    } this.leaveEditMode();
    this.unregisterListeners()
}, enterEditMode: function(A) {
    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 (A) {
        Event.stop(A)
    }
}, enterHover: function(A) {
    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(A) {
    this.triggerCallback("onFailure", A);
    if (this._oldInnerHTML) {
        this.element.innerHTML = this._oldInnerHTML;
        this._oldInnerHTML = null
    }
}, handleFormCancellation: function(A) {
    this.wrapUp();
    if (A) {
        Event.stop(A)
    }
}, handleFormSubmission: function(D) {
    var B = this._form;
    var C = $F(this._controls.editor);
    this.prepareSubmission();
    var E = this.options.callback(B, C) || "";
    if (Object.isString(E)) {
        E = E.toQueryParams()
    } E.editorId = this.element.id;
    if (this.options.htmlResponse) {
        var A = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
        Object.extend(A, { parameters: E, onComplete: this._boundWrapperHandler, onFailure: this._boundFailureHandler });
        new Ajax.Updater({ success: this.element }, this.url, A)
    } else {
        var A = Object.extend({ method: "get" }, this.options.ajaxOptions);
        Object.extend(A, { parameters: E, onComplete: this._boundWrapperHandler, onFailure: this._boundFailureHandler });
        new Ajax.Request(this.url, A)
    } if (D) {
        Event.stop(D)
    }
}, 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(A) {
    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 A = Object.extend({ method: "get" }, this.options.ajaxOptions);
    Object.extend(A, { parameters: "editorId=" + encodeURIComponent(this.element.id), onComplete: Prototype.emptyFunction, onSuccess: function(C) {
        this._form.removeClassName(this.options.loadingClassName);
        var B = C.responseText;
        if (this.options.stripLoadedTextTags) {
            B = B.stripTags()
        } this._controls.editor.value = B;
        this._controls.editor.disabled = false;
        this.postProcessEditField()
    } .bind(this), onFailure: this._boundFailureHandler
    });
    new Ajax.Request(this.options.loadTextURL, A)
}, postProcessEditField: function() {
    var A = this.options.fieldPostCreation;
    if (A) {
        $(this._controls.editor)["focus" == A ? "focus" : "activate"]()
    }
}, prepareOptions: function() {
    this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
    Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
    [this._extraDefaultOptions].flatten().compact().each(function(A) {
        Object.extend(this.options, A)
    } .bind(this))
}, prepareSubmission: function() {
    this._saving = true;
    this.removeForm();
    this.leaveHover();
    this.showSaving()
}, registerListeners: function() {
    this._listeners = {};
    var A;
    $H(Ajax.InPlaceEditor.Listeners).each(function(B) {
        A = this[B.value].bind(this);
        this._listeners[B.key] = A;
        if (!this.options.externalControlOnly) {
            this.element.observe(B.key, A)
        } if (this.options.externalControl) {
            this.options.externalControl.observe(B.key, A)
        }
    } .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(B, A) {
    if ("function" == typeof this.options[B]) {
        this.options[B](this, A)
    }
}, unregisterListeners: function() {
    $H(this._listeners).each(function(A) {
        if (!this.options.externalControlOnly) {
            this.element.stopObserving(A.key, A.value)
        } if (this.options.externalControl) {
            this.options.externalControl.stopObserving(A.key, A.value)
        }
    } .bind(this))
}, wrapUp: function(A) {
    this.leaveEditMode();
    this._boundComplete(A, this.element)
}
});
Object.extend(Ajax.InPlaceEditor.prototype, { dispose: Ajax.InPlaceEditor.prototype.destroy });
Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, { initialize: function($super, C, B, A) {
    this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
    $super(C, B, A)
}, createEditField: function() {
    var A = document.createElement("select");
    A.name = this.options.paramName;
    A.size = 1;
    this._controls.editor = A;
    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(B) {
    this._controls.editor.disabled = true;
    var A = this._controls.editor.firstChild;
    if (!A) {
        A = document.createElement("option");
        A.value = "";
        this._controls.editor.appendChild(A);
        A.selected = true
    } A.update((B || "").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 A = Object.extend({ method: "get" }, this.options.ajaxOptions);
    Object.extend(A, { parameters: "editorId=" + encodeURIComponent(this.element.id), onComplete: Prototype.emptyFunction, onSuccess: function(B) {
        this._text = B.responseText.strip();
        this.buildOptionList()
    } .bind(this), onFailure: this.onFailure
    });
    new Ajax.Request(this.options.loadTextURL, A)
}, buildOptionList: function() {
    this._form.removeClassName(this.options.loadingClassName);
    this._collection = this._collection.map(function(D) {
        return 2 === D.length ? D : [D, D].flatten()
    });
    var B = ("value" in this.options) ? this.options.value : this._text;
    var A = this._collection.any(function(D) {
        return D[0] == B
    } .bind(this));
    this._controls.editor.update("");
    var C;
    this._collection.each(function(E, D) {
        C = document.createElement("option");
        C.value = E[0];
        C.selected = A ? E[0] == B : 0 == D;
        C.appendChild(document.createTextNode(E[1]));
        this._controls.editor.appendChild(C)
    } .bind(this));
    this._controls.editor.disabled = false;
    Field.scrollFreeActivate(this._controls.editor)
}
});
Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(A) {
    if (!A) {
        return
    } function B(C, D) {
        if (C in A || D === undefined) {
            return
        } A[C] = D
    } B("cancelControl", (A.cancelLink ? "link" : (A.cancelButton ? "button" : A.cancelLink == A.cancelButton == false ? false : undefined)));
    B("okControl", (A.okLink ? "link" : (A.okButton ? "button" : A.okLink == A.okButton == false ? false : undefined)));
    B("highlightColor", A.highlightcolor);
    B("highlightEndColor", A.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(A) {
    return Form.serialize(A)
}, onComplete: function(B, A) {
    new Effect.Highlight(A, { startcolor: this.options.highlightColor, keepBackgroundImage: true })
}, onEnterEditMode: null, onEnterHover: function(A) {
    A.element.style.backgroundColor = A.options.highlightColor;
    if (A._effect) {
        A._effect.cancel()
    }
}, onFailure: function(B, A) {
    alert("Error communication with the server: " + B.responseText.stripTags())
}, onFormCustomization: null, onLeaveEditMode: null, onLeaveHover: function(A) {
    A._effect = new Effect.Highlight(A.element, { startcolor: A.options.highlightColor, endcolor: A.options.highlightEndColor, restorecolor: A._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(B, A, C) {
    this.delay = A || 0.5;
    this.element = $(B);
    this.callback = C;
    this.timer = null;
    this.lastValue = $F(this.element);
    Event.observe(this.element, "keyup", this.delayedListener.bindAsEventListener(this))
}, delayedListener: function(A) {
    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))
}
});
var poll = {

    Vote: function(id, ThanksText, ThanksUrl) {
        var f = $('f_poll' + id);
        var d = 'dynamic_' + id;
        var region_code = $('geo_country').value;

        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, geo_country: region_code} });

    }
}
// JScript File
function omniPhotoView(photoId, photoTitle, photoAuthor) {
    omniProcessing();
    s.eVar4 = "photo";
    s.eVar5 = "photo:" + photoAuthor + ":" + photoTitle;
    s.eVar6 = photoId;
    s.eVar7 = photoAuthor;
    s.eVar8 = photoAuthor;
    s.t();
    return;
}
function omniPhotoGalleryView(photoGalleryId, photoGalleryTitle, photoGalleryAuthor) {
    omniProcessing();
    s.eVar4 = "photogallery";
    s.eVar5 = "photogallery:" + photoGalleryAuthor + ":" + photoGalleryTitle;
    s.eVar6 = photoGalleryId;
    s.eVar7 = photoGalleryAuthor;
    s.eVar8 = photoGalleryAuthor;
    s.t();
    return;
}
function omniTorchTracking(channel, campaign, subsection, subsection2, contenttype) {
    //	s.eVar1=subsection;
    //	s.eVar2=subsection2;
    //	s.eVar4=contenttype;
    //	s.channel=channel;
    //	s.campaign=campaign;
    //	s.t();
    omnitureS.eVar1 = subsection;
    omnitureS.eVar2 = subsection2;
    omnitureS.eVar4 = contenttype;
    omnitureS.channel = channel;
    omnitureS.campaign = campaign;
    omnitureS.t();
    return;
}
/* EMBEDDED VIDEO PLAYER MNG, begin */
var VideoPlayerEmbedded = {
    _videoHomePageToPlayAfterCreation: undefined,
    _videoPlayerInstance: undefined,
    _videoConfig: undefined,

    init: function(pConfigObject) {
        this._videoConfig = pConfigObject;
    },

    play: function(pJsonUrl) {
        // player creation
        if (this._videoPlayerInstance === undefined) {
            this._videoHomePageToPlayAfterCreation = pJsonUrl;
            this._videoPlayerInstance = new VideoPlayer(this._videoConfig);
            this._videoPlayerInstance.addEventHandler('evtAppStarted', this.onStarted.bind(this));
            this._videoPlayerInstance.addEventHandler('evtVideoFinished', this.onFinished.bind(this));

            /* OMNITURE TRAFFICKING EVENTS, begin */
            if (typeof vp == 'undefined')
                vp = this._videoPlayerInstance;

            this._videoPlayerInstance.addEventHandler('evtVideoStarted', omniVideoStart);
            this._videoPlayerInstance.addEventHandler('evtVideoFinished', omniVideoFinish);
            this._videoPlayerInstance.addEventHandler('evtVideoPercReceived', omniVideoPercentage);
            //this._videoPlayerInstance.addEventHandler('evtVideoSecReceived', omniVideoMinuteIncr);
            this._videoPlayerInstance.addEventHandler('evtVideoStarted', playbackTimeManager.onStart);
            this._videoPlayerInstance.addEventHandler('evtVideoFinished', playbackTimeManager.onStop);
            playbackTimeManager.callbackNotification = omniVideoMinuteIncr;
            /* OMNITURE TRAFFICKING EVENTS, end */
        }
        else {
            this.startVideoFromJsonUrl(pJsonUrl);
        }
        return false; //for GSA
    },

    onFinished: function(pVideoId) {
        // adv end image ( for impressions )
        if (typeof globalAdvJsonConfigObject != 'undefined') {
            try {
                var imageElement = new Element('img', {
                    'src': globalAdvJsonConfigObject.EndPlayImage
                });
                globalAdvJsonConfigObject = undefined;
                document.body.appendChild(imageElement);
            }
            catch (err) {
            }
        }
    },

    startVideoFromJsonUrl: function(pJsonUrl) {
        if (!this._videoPlayerInstance.getInfoIsCurrentAdv()) {
            this._videoPlayerInstance.setVideoFromJSON2(pJsonUrl);
        }
    },

    onStarted: function() {
        if (typeof this._videoHomePageToPlayAfterCreation == 'undefined')
            return;

        this._videoPlayerInstance.setVideoFromJSON2(this._videoHomePageToPlayAfterCreation);
        this._videoHomePageToPlayAfterCreation = undefined;
    }
};
/* EMBEDDED VIDEO PLAYER MNG, end */
if (typeof AdvResponseObject != 'undefined') {
    AdvResponseObject.prototype.evtAdvJsonLoaded = function(pJson) {
        if (typeof pJson != 'undefined') {
            globalAdvJsonConfigObject = pJson;
        }
    };
}
var FormValidate1 = Class.create();
FormValidate1.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_ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿAaAaAaCcCcCcCcDdÐdEeEeEeEeEeGgGgGgGgHhhIiIiIiIiIi??JjKk?LlLlLl??LlNnNnNn???OoOoOoŒœRrRrRrSsSsSsŠšTtTtTtUuUuUuUuUuUuWwYyŸZzZzŽž0-9.\\'\\.\\-]", "g");
        /*var p=new RegExp("[^\\w\\d\\-\\.]");*/
        /*"\\[|\\]|%|\\^", "i");*/
        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':
                    {
                        //FIX: before was: (!t.isRequired(e)) 
                        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 SearchAjax = {
    ajaxComplete: null,
    URL: null,

    initAutoComplete: function(element, update, url, options) {
        this.URL = url;
        ajaxComplete = new Ajax.AutocompleterD3(element, update, this.URL, options);

        return ajaxComplete;
    }

};
Ajax.AutocompleterD3 = Class.create(Ajax.Autocompleter, {
    ajaxComplete: null,
    initialize: function(element, update, url, options) {
        ajaxComplete = new Ajax.Autocompleter(element, update, url, options);
        ajaxComplete.options.asynchronous = true;
        ajaxComplete.options.onComplete = this.onCompleteD3.bind(ajaxComplete);
        ajaxComplete.options.defaultParams = ajaxComplete.options.parameters || null;
    },

    changeURL: function(newURL) {
        ajaxComplete.url = newURL;
    },

    onCompleteD3: function(request) {
        var numElements = 0;
        this.onComplete(request);
        var entry = encodeURIComponent(this.getToken());
        var liList = $('autoCompleteNameList').getElementsByTagName('li');
        var tot = liList.length;
        if ($('autoCompleteNameList') != null) {
            for (var i = 0; i < tot; i++) {
                if (liList[i].innerHTML.toLowerCase().indexOf(entry.toLowerCase()) >= 0) {
                    $(liList[i]).show();   //.style.display = 'block';
                    numElements++;
                }
                else {
                    $(liList[i]).hide();  //.style.display = 'none';
                }
                //register onclick event to update longitude and latitude hidden fields
                Event.observe(liList[i], "click", function() {
                    $('meta[user][geo_longitude]Id').value = this.getAttribute('lon');
                    $('meta[user][geo_latitude]Id').value = this.getAttribute('lat');
                    $('latitude').value = this.getAttribute('lat');
                    $('longitude').value = this.getAttribute('lon');
                });
            }
            if (numElements == 0) {
                Element.addClassName($('ctvo_resultAutoComplete'), "ctvo_resultAutoComplete_noResult");
            }
            else {
                Element.removeClassName($('ctvo_resultAutoComplete'), "ctvo_resultAutoComplete_noResult");
            }
        }
    },
    getUpdatedChoices: function() {
        this.startIndicator();
        var entry = encodeURIComponent(this.getToken());
        this.url = this.geturl(entry);
        if (this.options.defaultParams) {
            this.options.parameters += '&' + this.options.defaultParams;
        }
        if (this.url != null) {
            new Ajax.Request(this.url, this.options);
        }
    }
});
function goSport(dropDownId) {
    box = $(dropDownId);
    var _t = box.options[box.selectedIndex].value;
    if (_t != '') {
        destination = "/athletes/sport=" + _t + "/index.html";
        location.href = destination;
    }
}
//goCountry
function go() {
    _internalGo(arguments.length == 0 ? 'CountryPicker' : arguments[0]);
}
function _internalGo(dropDownId) {
    box = $(dropDownId);
    var _t = box.options[box.selectedIndex].value;
    if (_t != '') {
        var destination = dropDownId == 'CountryPicker' ? box.options[box.selectedIndex].value : "/athletes/country=" + box.options[box.selectedIndex].value + "/index.html";
        if (destination) location.href = destination;
    }
}
var FBConnect = {
    //this is the default redirect location OnLogin event.
    //this page helps in auto-merge operations.
    loginCallback: '/code/Registration/FBConnect/AutoLogin_new.aspx',
    additionalData: null,
    _alreadyChecked: false,

    //this method initialize Facebook API (see below for more information)
    Init: function() {
        try {
            FBConnect._init();
        }
        catch (e) {
            FBConnect._handleEx();
        }
    },

    //this method perform a client-side logout API call 
    //(see http://wiki.developers.facebook.com/index.php/JS_API_M_FB.Connect.LogoutAndRedirect)
    Logout: function() {
        Cookie.erase('dontAllowFBPermissions');
        Visitor.deleteVisitorInfo();
        FB.Connect.logoutAndRedirect('/index.html');
    },

    //this method check the existance of Facebook cookie
    IsLoggedIn: function() {
        return Cookie.get(fb_apiKey + '_user') != null;
    },

    //this property reads the Facebook cookie and gets the user id
    UserID: Cookie.get(fb_apiKey + '_user'),

    //this method returns the current user infos
    GetUserInfo: function() {
        this._apiLoad('Connect', function() {
            return FB.Connect.get_loggedInUser();
        });
    },

    //this method return a list containing the app users
    //(see http://wiki.developers.facebook.com/index.php/JS_API_M_FB.ApiClient.Friends_getAppUsers)
    GetAppUsers: function() {
        this._apiLoad('Api', function() {
            return FB.Facebook.apiClient.friends_getAppUsers();
        });
    },

    ShowPermissionDialog: function(permission, callback) {
        this._apiLoad('Connect', function() {
            FB.Connect.showPermissionDialog(permission, callback);
        });
    },

    StreamPublish: function(message, actionlink, attachData, callback) {
        this._apiLoad('Connect', function() {
            FB.Connect.streamPublish(message, attachData, actionlink, null, 'Stream', callback, true);
        });
    },

    HasNotAppPermission: function(permission, callback) {
        FBConnect._apiLoad('Api', function() {
            return FB.Facebook.apiClient.users_hasAppPermission(permission, function(result) {
                if (result == 0) callback();
            });
        });
    },

    CreateAttach: function(imageSrc, link) {
        var par = {};
        var att = {};
        var media = new Array();
        var mi = {};
        mi['type'] = 'image';
        mi['src'] = imageSrc;
        mi['href'] = link;
        media[0] = mi;
        // att['name'] = 'Google';
        att['href'] = link;
        //att['description'] = 'Google Home Page';
        //att['caption'] = 'Google';
        att['media'] = media;
        return att;
    },

    /*events methods*/

    //this method handle Facebook successful login.
    //if a string is passed as parameter (see arguments[0]) the user will be redirect to that page, 
    //if a callback function is passed then it will be executed, otherwise
    //the user will be redirect to this.loginCallback (see above).
    OnLogin: function() {
        var _base = window.location.href;
        if (arguments.length == 0) window.location.href = this.loginCallback + '?redir=' + _base + FBConnect._setAdditionalData();
        else {
            var arg = arguments[0];
            var _type = typeof (arg);
            if (_type == 'string') window.location.href = arg + (arg.indexOf('?') == -1 ? '?' : '&') + 'redir=' + _base + FBConnect._setAdditionalData();
            else if (_type == 'function') arg();
            //else if(_type == 'number') window.location.href = this.loginCallback + '?redir=/Contests/contestID=' + arg + '/index.htmx';
            else if (_type == 'number') window.location.href = this.loginCallback + '?redir=/_testarea/testcontest.htmx?contestid=' + arg + FBConnect._setAdditionalData();
        }
    },

    /* private methods */

    //this method initialize Facebook client-side API.
    //FB.init needs (at least) two parameters:
    //    - apiKey (this value is stored into "WebSettings" table and initialized by variables.xml)
    //    - xd_receiver path
    _init: function() {
        FB.init(fb_apiKey, "/login/FBConnect/xd_receiver.htmx");
        if (!FBConnect._alreadyChecked) {
            FBConnect._checkPermissions('publish_stream', 'dontAllowFBPublishPermissions');
            //FBConnect._checkPermissios('offline_access', 'dontAllowFBOfflinePermissions');
        }
    },

    //this method wraps API features load
    _apiLoad: function(feature_name, callback) {
        FB.Bootstrap.requireFeatures([feature_name], function() {
            FBConnect._init();
            callback();
        });
    },

    //this method will improve user experience during FaceBook API downtime/problem/mantainance
    _handleEx: function() {
        //todo
    },

    _checkPermissions: function(permission, cookieName) {
        if (FBConnect.IsLoggedIn()) {
            if (!Cookie.get(cookieName)) {
                FBConnect.HasNotAppPermission(permission, function() {
                    FBConnect.ShowPermissionDialog(permission, function(result) {
                        if (result != permission) Cookie.set(cookieName, 1);
                        //else FBConnect.StreamPublish('connect to CTVOlympics.ca', null);
                    });
                });
                FBConnect._alreadyChecked = true;
            }
        }
        else Cookie.erase(cookieName);
    },

    _setAdditionalData: function() {
        return (FBConnect.additionalData ? '&' + FBConnect.additionalData : '');
    }
}

