eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[(function(e){return d[e]})];e=(function(){return'\\w+'});c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('5(T 8=="1B"){d 8=k Q()}5(T 8.X=="1B"){8.X=k Q()}5(T 8.y=="1B"){8.y=k Q()}8.D=f(1y,p,w,h,1o,c,1p,1K,1h,1x){5(!m.13){g}4.1V=1x?1x:"2w";4.1R=8.X.1n(4.1V);4.1w=k Q();4.17=k Q();4.1D=k 29();5(1y){4.l("L",1y)}5(p){4.l("p",p)}5(w){4.l("S",w)}5(h){4.l("R",h)}5(1o){4.l("1e",k 8.v(1o.2B().V(".")))}4.P=8.y.1U();5(!12.2A&&m.1u&&4.P.E>7){8.D.1S=B}5(c){4.1J("2C",c)}d q=1p?1p:"2E";4.1J("2F",q);4.l("10",I);4.l("W",I);d 1Y=(1K)?1K:12.16;4.l("1Q",1Y);4.l("15","");5(1h){4.l("15",1h)}};8.D.1P={10:f(1q){4.1r=!1q?"2G.L":1q;4.l("10",B)},l:f(2e,1Z){4.1D[2e]=1Z},j:f(22){g 4.1D[22]},1J:f(23,2c){4.1w[23]=2c},1F:f(){g 4.1w},U:f(2a,26){4.17[2a]=26},2Z:f(2d){g 4.17[2d]},28:f(){g 4.17},1H:f(){d 18=k 29();d u;d 1t=4.28();H(u 1f 1t){18[18.G]=u+"="+1t[u]}g 18},1T:f(){d o="";5(C.1z&&C.1m&&C.1m.G){5(4.j("W")){4.U("27","2N");4.l("L",4.1r)}o="<2P 2Q=\\"2R/x-2S-2T\\" 2U=\\""+4.j("L")+"\\" S=\\""+4.j("S")+"\\" R=\\""+4.j("R")+"\\" O=\\""+4.j("O")+"\\"";o+=" p=\\""+4.j("p")+"\\" 11=\\""+4.j("p")+"\\" ";d 1v=4.1F();H(d u 1f 1v){o+=[u]+"=\\""+1v[u]+"\\" "}d 1A=4.1H().2g("&");5(1A.G>0){o+="2h=\\""+1A+"\\""}o+="/>"}1b{5(4.j("W")){4.U("27","2W");4.l("L",4.1r)}o="<1N p=\\""+4.j("p")+"\\" 2Y=\\"30:31-32-33-34-35\\" S=\\""+4.j("S")+"\\" R=\\""+4.j("R")+"\\" O=\\""+4.j("O")+"\\">";o+="<1I 11=\\"37\\" 1L=\\""+4.j("L")+"\\" />";d 1G=4.1F();H(d u 1f 1G){o+="<1I 11=\\""+u+"\\" 1L=\\""+1G[u]+"\\" />"}d 1M=4.1H().2g("&");5(1M.G>0){o+="<1I 11=\\"2h\\" 1L=\\""+1M+"\\" />"}o+="</1N>"}g o},2i:f(14){5(4.j("10")){d 1O=k 8.v([6,0,2j]);5(4.P.1d(1O)&&!4.P.1d(4.j("1e"))){4.l("W",B);4.U("2k",2l(4.j("1Q")));m.1k=m.1k.2m(0,2n)+" - 1W 2o 2p";4.U("2q",m.1k)}}5(4.1R||4.j("W")||4.P.1d(4.j("1e"))){d n=(T 14=="2r")?m.13(14):14;n.2s=4.1T();g B}1b{5(4.j("15")!=""){m.16.1E(4.j("15"))}}g I}};8.y.1U=f(){d A=k 8.v([0,0,0]);5(C.1z&&C.1m.G){d x=C.1z["2y 1W"];5(x&&x.20){A=k 8.v(x.20.1E(/([a-2D-Z]|\\s)+/,"").1E(/(\\s+r|\\s+b[0-9]+)/,".").V("."))}}1b{5(C.25&&C.25.1C("2H 2J")>=0){d t=1;d 1g=3;2M(t){19{1g++;t=k 1a("z.z."+1g);A=k 8.v([1g,0,0])}1c(e){t=J}}}1b{19{d t=k 1a("z.z.7")}1c(e){19{d t=k 1a("z.z.6");A=k 8.v([6,0,21]);t.2V="2X"}1c(e){5(A.E==6){g A}}19{t=k 1a("z.z")}1c(e){}}5(t!=J){A=k 8.v(t.3a("$1e").V(" ")[1].V(","))}}}g A};8.v=f(F){4.E=F[0]!=J?1i(F[0]):0;4.Y=F[1]!=J?1i(F[1]):0;4.1l=F[2]!=J?1i(F[2]):0};8.v.1P.1d=f(N){5(4.E<N.E){g I}5(4.E>N.E){g B}5(4.Y<N.Y){g I}5(4.Y>N.Y){g B}5(4.1l<N.1l){g I}g B};8.X={1n:f(1j){d q=m.16.2u||m.16.2x;5(1j==J){g q}5(q){d K=q.1s(1).V("&");H(d i=0;i<K.G;i++){5(K[i].1s(0,K[i].1C("="))==1j){g K[i].1s((K[i].1C("=")+1))}}}g""}};8.y.1X=f(){d M=m.2K("2O");H(d i=M.G-1;i>=0;i--){M[i].O.36="38";H(d x 1f M[i]){5(T M[i][x]=="f"){M[i][x]=f(){}}}}};5(8.D.1S){5(!8.2f){8.y.2b=f(){2t=f(){};2v=f(){};12.24("2z",8.y.1X)};12.24("2L",8.y.2b);8.2f=B}}5(!m.13&&m.1u){m.13=f(p){g m.1u[p]}}d 39=8.X.1n;d 2I=8.D;d D=8.D;',62,197,'||||this|if|||deconcept|||||var||function|return|||getAttribute|new|setAttribute|document||_19|id||||axo|key|PlayerVersion|||SWFObjectUtil|ShockwaveFlash|_23|true|navigator|SWFObject|major|_29|length|for|false|null|_2d|swf|_2f|fv|style|installedVer|Object|height|width|typeof|addVariable|split|doExpressInstall|util|minor||useExpressInstall|name|window|getElementById|_20|redirectUrl|location|variables|_16|try|ActiveXObject|else|catch|versionIsValid|version|in|_26|_9|parseInt|_2b|title|rev|mimeTypes|getRequestParameter|_5|_7|_d|xiSWFPath|substring|_18|all|_1a|params|_a|_1|plugins|_1c|undefined|indexOf|attributes|replace|getParams|_1d|getVariablePairs|param|addParam|_8|value|_1f|object|_21|prototype|xiRedirectUrl|skipDetect|doPrepUnload|getSWFHTML|getPlayerVersion|DETECT_KEY|Flash|cleanupSWFs|_c|_f|description||_10|_11|attachEvent|userAgent|_14|MMplayerType|getVariables|Array|_13|prepUnload|_12|_15|_e|unloadSet|join|flashvars|write|65|MMredirectURL|escape|slice|47|Player|Installation|MMdoctitle|string|innerHTML|__flash_unloadHandler|search|__flash_savedUnloadHandler|detectflash|hash|Shockwave|onunload|opera|toString|bgcolor|zA|high|quality|expressinstall|Windows|FlashObject|CE|getElementsByTagName|onbeforeunload|while|PlugIn|OBJECT|embed|type|application|shockwave|flash|src|AllowScriptAccess|ActiveX|always|classid|getVariable|clsid|D27CDB6E|AE6D|11cf|96B8|444553540000|display|movie|none|getQueryParamValue|GetVariable'.split('|'),0,{}))
var Prototype={Version:'1.6.1_rc3',Browser:(function(){var ua=navigator.userAgent;var isOpera=Object.prototype.toString.call(window.opera)=='[object Opera]';return{IE:!!window.attachEvent&&!isOpera,Opera:isOpera,WebKit:ua.indexOf('AppleWebKit/')>-1,Gecko:ua.indexOf('Gecko')>-1&&ua.indexOf('KHTML')===-1,MobileSafari:/Apple.*Mobile.*Safari/.test(ua)}})(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:(function(){var constructor=window.Element||window.HTMLElement;return!!(constructor&&constructor.prototype);})(),SpecificElementExtensions:(function(){if(typeof window.HTMLDivElement!=='undefined')
return true;var div=document.createElement('div');var form=document.createElement('form');var isSupported=false;if(div['__proto__']&&(div['__proto__']!==form['__proto__'])){isSupported=true;}
div=form=null;return isSupported;})()},ScriptFragment:'<script[^>]*>([\\S\\s]*?)<\/script>',JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)
Prototype.BrowserFeatures.SpecificElementExtensions=false;var Abstract={};var Try={these:function(){var returnValue;for(var i=0,length=arguments.length;i<length;i++){var lambda=arguments[i];try{returnValue=lambda();break;}catch(e){}}
return returnValue;}};var Class=(function(){function subclass(){};function create(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))
parent=properties.shift();function klass(){this.initialize.apply(this,arguments);}
Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass);}
for(var i=0;i<properties.length;i++)
klass.addMethods(properties[i]);if(!klass.prototype.initialize)
klass.prototype.initialize=Prototype.emptyFunction;klass.prototype.constructor=klass;return klass;}
function addMethods(source){var ancestor=this.superclass&&this.superclass.prototype;var properties=Object.keys(source);if(!Object.keys({toString:true}).length){if(source.toString!=Object.prototype.toString)
properties.push("toString");if(source.valueOf!=Object.prototype.valueOf)
properties.push("valueOf");}
for(var i=0,length=properties.length;i<length;i++){var property=properties[i],value=source[property];if(ancestor&&Object.isFunction(value)&&value.argumentNames().first()=="$super"){var method=value;value=(function(m){return function(){return ancestor[m].apply(this,arguments);};})(property).wrap(method);value.valueOf=method.valueOf.bind(method);value.toString=method.toString.bind(method);}
this.prototype[property]=value;}
return this;}
return{create:create,Methods:{addMethods:addMethods}};})();(function(){function getClass(object){return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];}
function extend(destination,source){for(var property in source)
destination[property]=source[property];return destination;}
function inspect(object){try{if(isUndefined(object))return'undefined';if(object===null)return'null';return object.inspect?object.inspect():String(object);}catch(e){if(e instanceof RangeError)return'...';throw e;}}
function toJSON(object){var type=typeof object;switch(type){case'undefined':case'function':case'unknown':return;case'boolean':return object.toString();}
if(object===null)return'null';if(object.toJSON)return object.toJSON();if(isElement(object))return;var results=[];for(var property in object){var value=toJSON(object[property]);if(!isUndefined(value))
results.push(property.toJSON()+': '+value);}
return'{'+results.join(', ')+'}';}
function toQueryString(object){return $H(object).toQueryString();}
function toHTML(object){return object&&object.toHTML?object.toHTML():String.interpret(object);}
function keys(object){var results=[];for(var property in object)
results.push(property);return results;}
function values(object){var results=[];for(var property in object)
results.push(object[property]);return results;}
function clone(object){return extend({},object);}
function isElement(object){return!!(object&&object.nodeType==1);}
function isArray(object){return getClass(object)==="Array";}
function isHash(object){return object instanceof Hash;}
function isFunction(object){return typeof object==="function";}
function isString(object){return getClass(object)==="String";}
function isNumber(object){return getClass(object)==="Number";}
function isUndefined(object){return typeof object==="undefined";}
extend(Object,{extend:extend,inspect:inspect,toJSON:toJSON,toQueryString:toQueryString,toHTML:toHTML,keys:keys,values:values,clone:clone,isElement:isElement,isArray:isArray,isHash:isHash,isFunction:isFunction,isString:isString,isNumber:isNumber,isUndefined:isUndefined});})();Object.extend(Function.prototype,(function(){var slice=Array.prototype.slice;function update(array,args){var arrayLength=array.length,length=args.length;while(length--)array[arrayLength+length]=args[length];return array;}
function merge(array,args){array=slice.call(array,0);return update(array,args);}
function argumentNames(){var names=this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1].replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g,'').replace(/\s+/g,'').split(',');return names.length==1&&!names[0]?[]:names;}
function bind(context){if(arguments.length<2&&Object.isUndefined(arguments[0]))return this;var __method=this,args=slice.call(arguments,1);return function(){var a=merge(args,arguments);return __method.apply(context,a);}}
function bindAsEventListener(context){var __method=this,args=slice.call(arguments,1);return function(event){var a=update([event||window.event],args);return __method.apply(context,a);}}
function curry(){if(!arguments.length)return this;var __method=this,args=slice.call(arguments,0);return function(){var a=merge(args,arguments);return __method.apply(this,a);}}
function delay(timeout){var __method=this,args=slice.call(arguments,1);timeout=timeout*1000
return window.setTimeout(function(){return __method.apply(__method,args);},timeout);}
function defer(){var args=update([0.01],arguments);return this.delay.apply(this,args);}
function wrap(wrapper){var __method=this;return function(){var a=update([__method.bind(this)],arguments);return wrapper.apply(this,a);}}
function methodize(){if(this._methodized)return this._methodized;var __method=this;return this._methodized=function(){var a=update([this],arguments);return __method.apply(null,a);};}
return{argumentNames:argumentNames,bind:bind,bindAsEventListener:bindAsEventListener,curry:curry,delay:delay,defer:defer,wrap:wrap,methodize:methodize}})());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"';};RegExp.prototype.match=RegExp.prototype.test;RegExp.escape=function(str){return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g,'\\$1');};var PeriodicalExecuter=Class.create({initialize:function(callback,frequency){this.callback=callback;this.frequency=frequency;this.currentlyExecuting=false;this.registerCallback();},registerCallback:function(){this.timer=setInterval(this.onTimerEvent.bind(this),this.frequency*1000);},execute:function(){this.callback(this);},stop:function(){if(!this.timer)return;clearInterval(this.timer);this.timer=null;},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.execute();}catch(e){}
finally{this.currentlyExecuting=false;}}}});Object.extend(String,{interpret:function(value){return value==null?'':String(value);},specialChar:{'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','\\':'\\\\'}});Object.extend(String.prototype,(function(){function prepareReplacement(replacement){if(Object.isFunction(replacement))return replacement;var template=new Template(replacement);return function(match){return template.evaluate(match)};}
function gsub(pattern,replacement){var result='',source=this,match;replacement=prepareReplacement(replacement);if(Object.isString(pattern))
pattern=RegExp.escape(pattern);if(!(pattern.length||pattern.source)){replacement=replacement('');return replacement+source.split('').join(replacement)+replacement;}
while(source.length>0){if(match=source.match(pattern)){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length);}else{result+=source,source='';}}
return result;}
function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match);});}
function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this);}
function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?'...':truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this);}
function strip(){return this.replace(/^\s+/,'').replace(/\s+$/,'');}
function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,'');}
function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,'img'),'');}
function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,'img');var matchOne=new RegExp(Prototype.ScriptFragment,'im');return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||['',''])[1];});}
function evalScripts(){return this.extractScripts().map(function(script){return eval(script)});}
function escapeHTML(){escapeHTML.text.data=this;return escapeHTML.div.innerHTML;}
function unescapeHTML(){var div=document.createElement('div');div.innerHTML=this.stripTags();return div.childNodes[0]?(div.childNodes.length>1?$A(div.childNodes).inject('',function(memo,node){return memo+node.nodeValue}):div.childNodes[0].nodeValue):'';}
function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(separator||'&').inject({},function(hash,pair){if((pair=pair.split('='))[0]){var key=decodeURIComponent(pair.shift());var value=pair.length>1?pair.join('='):pair[0];if(value!=undefined)value=decodeURIComponent(value);if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value);}
else hash[key]=value;}
return hash;});}
function toArray(){return this.split('');}
function succ(){return this.slice(0,this.length-1)+
String.fromCharCode(this.charCodeAt(this.length-1)+1);}
function times(count){return count<1?'':new Array(count+1).join(this);}
function camelize(){var parts=this.split('-'),len=parts.length;if(len==1)return parts[0];var camelized=this.charAt(0)=='-'?parts[0].charAt(0).toUpperCase()+parts[0].substring(1):parts[0];for(var i=1;i<len;i++)
camelized+=parts[i].charAt(0).toUpperCase()+parts[i].substring(1);return camelized;}
function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase();}
function underscore(){return this.gsub(/::/,'/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();}
function dasherize(){return this.gsub(/_/,'-');}
function inspect(useDoubleQuotes){var escapedString=this.gsub(/[\x00-\x1f\\]/,function(match){var character=String.specialChar[match[0]];return character?character:'\\u00'+match[0].charCodeAt().toPaddedString(2,16);});if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';return"'"+escapedString.replace(/'/g,'\\\'')+"'";}
function toJSON(){return this.inspect(true);}
function unfilterJSON(filter){return this.sub(filter||Prototype.JSONFilter,'#{1}');}
function isJSON(){var str=this;if(str.blank())return false;str=this.replace(/\\./g,'@').replace(/"[^"\\\n\r]*"/g,'');return(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);}
function evalJSON(sanitize){var json=this.unfilterJSON();try{if(!sanitize||json.isJSON())return eval('('+json+')');}catch(e){}
throw new SyntaxError('Badly formed JSON string: '+this.inspect());}
function include(pattern){return this.indexOf(pattern)>-1;}
function startsWith(pattern){return this.indexOf(pattern)===0;}
function endsWith(pattern){var d=this.length-pattern.length;return d>=0&&this.lastIndexOf(pattern)===d;}
function empty(){return this=='';}
function blank(){return/^\s*$/.test(this);}
function interpolate(object,pattern){return new Template(this,pattern).evaluate(object);}
return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim?String.prototype.trim:strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,toJSON:toJSON,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:evalJSON,include:include,startsWith:startsWith,endsWith:endsWith,empty:empty,blank:blank,interpolate:interpolate};})());Object.extend(String.prototype.escapeHTML,{div:document.createElement('div'),text:document.createTextNode('')});String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);if('<\n>'.escapeHTML()!=='&lt;\n&gt;'){String.prototype.escapeHTML=function(){return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');};}
if('&lt;\n&gt;'.unescapeHTML()!=='<\n>'){String.prototype.unescapeHTML=function(){return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');};}
var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern;},evaluate:function(object){if(object&&Object.isFunction(object.toTemplateReplacements))
object=object.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(object==null)return(match[1]+'');var before=match[1]||'';if(before=='\\')return match[2];var ctx=object,expr=match[3];var pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith('[')?match[2].gsub('\\\\]',']'):match[1];ctx=ctx[comp];if(null==ctx||''==match[3])break;expr=expr.substring('['==match[3]?match[1].length:match[0].length);match=pattern.exec(expr);}
return before+String.interpret(ctx);});}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=(function(){function each(iterator,context){var index=0;try{this._each(function(value){iterator.call(context,value,index++);});}catch(e){if(e!=$break)throw e;}
return this;}
function eachSlice(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1)return array;while((index+=number)<array.length)
slices.push(array.slice(index,index+number));return slices.collect(iterator,context);}
function all(iterator,context){iterator=iterator||Prototype.K;var result=true;this.each(function(value,index){result=result&&!!iterator.call(context,value,index);if(!result)throw $break;});return result;}
function any(iterator,context){iterator=iterator||Prototype.K;var result=false;this.each(function(value,index){if(result=!!iterator.call(context,value,index))
throw $break;});return result;}
function collect(iterator,context){iterator=iterator||Prototype.K;var results=[];this.each(function(value,index){results.push(iterator.call(context,value,index));});return results;}
function detect(iterator,context){var result;this.each(function(value,index){if(iterator.call(context,value,index)){result=value;throw $break;}});return result;}
function findAll(iterator,context){var results=[];this.each(function(value,index){if(iterator.call(context,value,index))
results.push(value);});return results;}
function grep(filter,iterator,context){iterator=iterator||Prototype.K;var results=[];if(Object.isString(filter))
filter=new RegExp(RegExp.escape(filter));this.each(function(value,index){if(filter.match(value))
results.push(iterator.call(context,value,index));});return results;}
function include(object){if(Object.isFunction(this.indexOf))
if(this.indexOf(object)!=-1)return true;var found=false;this.each(function(value){if(value==object){found=true;throw $break;}});return found;}
function inGroupsOf(number,fillWith){fillWith=Object.isUndefined(fillWith)?null:fillWith;return this.eachSlice(number,function(slice){while(slice.length<number)slice.push(fillWith);return slice;});}
function inject(memo,iterator,context){this.each(function(value,index){memo=iterator.call(context,memo,value,index);});return memo;}
function invoke(method){var args=$A(arguments).slice(1);return this.map(function(value){return value[method].apply(value,args);});}
function max(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index);if(result==null||value>=result)
result=value;});return result;}
function min(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index);if(result==null||value<result)
result=value;});return result;}
function partition(iterator,context){iterator=iterator||Prototype.K;var trues=[],falses=[];this.each(function(value,index){(iterator.call(context,value,index)?trues:falses).push(value);});return[trues,falses];}
function pluck(property){var results=[];this.each(function(value){results.push(value[property]);});return results;}
function reject(iterator,context){var results=[];this.each(function(value,index){if(!iterator.call(context,value,index))
results.push(value);});return results;}
function sortBy(iterator,context){return this.map(function(value,index){return{value:value,criteria:iterator.call(context,value,index)};}).sort(function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0;}).pluck('value');}
function toArray(){return this.map();}
function zip(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))
iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index));});}
function size(){return this.toArray().length;}
function inspect(){return'#<Enumerable:'+this.toArray().inspect()+'>';}
return{each:each,eachSlice:eachSlice,all:all,every:all,any:any,some:any,collect:collect,map:collect,detect:detect,findAll:findAll,select:findAll,filter:findAll,grep:grep,include:include,member:include,inGroupsOf:inGroupsOf,inject:inject,invoke:invoke,max:max,min:min,partition:partition,pluck:pluck,reject:reject,sortBy:sortBy,toArray:toArray,entries:toArray,zip:zip,size:size,inspect:inspect,find:detect};})();function $A(iterable){if(!iterable)return[];if('toArray'in Object(iterable))return iterable.toArray();var length=iterable.length||0,results=new Array(length);while(length--)results[length]=iterable[length];return results;}
function $w(string){if(!Object.isString(string))return[];string=string.strip();return string?string.split(/\s+/):[];}
Array.from=$A;(function(){var arrayProto=Array.prototype,slice=arrayProto.slice,_each=arrayProto.forEach;function each(iterator){for(var i=0,length=this.length;i<length;i++)
iterator(this[i]);}
if(!_each)_each=each;function clear(){this.length=0;return this;}
function first(){return this[0];}
function last(){return this[this.length-1];}
function compact(){return this.select(function(value){return value!=null;});}
function flatten(){return this.inject([],function(array,value){if(Object.isArray(value))
return array.concat(value.flatten());array.push(value);return array;});}
function without(){var values=slice.call(arguments,0);return this.select(function(value){return!values.include(value);});}
function reverse(inline){return(inline!==false?this:this.toArray())._reverse();}
function uniq(sorted){return this.inject([],function(array,value,index){if(0==index||(sorted?array.last()!=value:!array.include(value)))
array.push(value);return array;});}
function intersect(array){return this.uniq().findAll(function(item){return array.detect(function(value){return item===value});});}
function clone(){return slice.call(this,0);}
function size(){return this.length;}
function inspect(){return'['+this.map(Object.inspect).join(', ')+']';}
function toJSON(){var results=[];this.each(function(object){var value=Object.toJSON(object);if(!Object.isUndefined(value))results.push(value);});return'['+results.join(', ')+']';}
function indexOf(item,i){i||(i=0);var length=this.length;if(i<0)i=length+i;for(;i<length;i++)
if(this[i]===item)return i;return-1;}
function lastIndexOf(item,i){i=isNaN(i)?this.length:(i<0?this.length+i:i)+1;var n=this.slice(0,i).reverse().indexOf(item);return(n<0)?n:i-n-1;}
function concat(){var array=slice.call(this,0),item;for(var i=0,length=arguments.length;i<length;i++){item=arguments[i];if(Object.isArray(item)&&!('callee'in item)){for(var j=0,arrayLength=item.length;j<arrayLength;j++)
array.push(item[j]);}else{array.push(item);}}
return array;}
Object.extend(arrayProto,Enumerable);if(!arrayProto._reverse)
arrayProto._reverse=arrayProto.reverse;Object.extend(arrayProto,{_each:_each,clear:clear,first:first,last:last,compact:compact,flatten:flatten,without:without,reverse:reverse,uniq:uniq,intersect:intersect,clone:clone,toArray:clone,size:size,inspect:inspect,toJSON:toJSON});var CONCAT_ARGUMENTS_BUGGY=(function(){return[].concat(arguments)[0][0]!==1;})(1,2)
if(CONCAT_ARGUMENTS_BUGGY)arrayProto.concat=concat;if(!arrayProto.indexOf)arrayProto.indexOf=indexOf;if(!arrayProto.lastIndexOf)arrayProto.lastIndexOf=lastIndexOf;})();function $H(object){return new Hash(object);};var Hash=Class.create(Enumerable,(function(){function initialize(object){this._object=Object.isHash(object)?object.toObject():Object.clone(object);}
function _each(iterator){for(var key in this._object){var value=this._object[key],pair=[key,value];pair.key=key;pair.value=value;iterator(pair);}}
function set(key,value){return this._object[key]=value;}
function get(key){if(this._object[key]!==Object.prototype[key])
return this._object[key];}
function unset(key){var value=this._object[key];delete this._object[key];return value;}
function toObject(){return Object.clone(this._object);}
function keys(){return this.pluck('key');}
function values(){return this.pluck('value');}
function index(value){var match=this.detect(function(pair){return pair.value===value;});return match&&match.key;}
function merge(object){return this.clone().update(object);}
function update(object){return new Hash(object).inject(this,function(result,pair){result.set(pair.key,pair.value);return result;});}
function toQueryPair(key,value){if(Object.isUndefined(value))return key;return key+'='+encodeURIComponent(String.interpret(value));}
function toQueryString(){return this.inject([],function(results,pair){var key=encodeURIComponent(pair.key),values=pair.value;if(values&&typeof values=='object'){if(Object.isArray(values))
return results.concat(values.map(toQueryPair.curry(key)));}else results.push(toQueryPair(key,values));return results;}).join('&');}
function inspect(){return'#<Hash:{'+this.map(function(pair){return pair.map(Object.inspect).join(': ');}).join(', ')+'}>';}
function toJSON(){return Object.toJSON(this.toObject());}
function clone(){return new Hash(this);}
return{initialize:initialize,_each:_each,set:set,get:get,unset:unset,toObject:toObject,toTemplateReplacements:toObject,keys:keys,values:values,index:index,merge:merge,update:update,toQueryString:toQueryString,inspect:inspect,toJSON:toJSON,clone:clone};})());Hash.from=$H;Object.extend(Number.prototype,(function(){function toColorPart(){return this.toPaddedString(2,16);}
function succ(){return this+1;}
function times(iterator,context){$R(0,this,true).each(iterator,context);return this;}
function toPaddedString(length,radix){var string=this.toString(radix||10);return'0'.times(length-string.length)+string;}
function toJSON(){return isFinite(this)?this.toString():'null';}
function abs(){return Math.abs(this);}
function round(){return Math.round(this);}
function ceil(){return Math.ceil(this);}
function floor(){return Math.floor(this);}
return{toColorPart:toColorPart,succ:succ,times:times,toPaddedString:toPaddedString,toJSON:toJSON,abs:abs,round:round,ceil:ceil,floor:floor};})());function $R(start,end,exclusive){return new ObjectRange(start,end,exclusive);}
var ObjectRange=Class.create(Enumerable,(function(){function initialize(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive;}
function _each(iterator){var value=this.start;while(this.include(value)){iterator(value);value=value.succ();}}
function include(value){if(value<this.start)
return false;if(this.exclusive)
return value<this.end;return value<=this.end;}
return{initialize:initialize,_each:_each,include:include};})());var Ajax={getTransport:function(){return Try.these(function(){return new XMLHttpRequest()},function(){return new ActiveXObject('Msxml2.XMLHTTP')},function(){return new ActiveXObject('Microsoft.XMLHTTP')})||false;},activeRequestCount:0};Ajax.Responders={responders:[],_each:function(iterator){this.responders._each(iterator);},register:function(responder){if(!this.include(responder))
this.responders.push(responder);},unregister:function(responder){this.responders=this.responders.without(responder);},dispatch:function(callback,request,transport,json){this.each(function(responder){if(Object.isFunction(responder[callback])){try{responder[callback].apply(responder,[request,transport,json]);}catch(e){}}});}};Object.extend(Ajax.Responders,Enumerable);Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCount++},onComplete:function(){Ajax.activeRequestCount--}});Ajax.Base=Class.create({initialize:function(options){this.options={method:'post',asynchronous:true,contentType:'application/x-www-form-urlencoded',encoding:'UTF-8',parameters:'',evalJSON:true,evalJS:true};Object.extend(this.options,options||{});this.options.method=this.options.method.toLowerCase();if(Object.isString(this.options.parameters))
this.options.parameters=this.options.parameters.toQueryParams();else if(Object.isHash(this.options.parameters))
this.options.parameters=this.options.parameters.toObject();}});Ajax.Request=Class.create(Ajax.Base,{_complete:false,initialize:function($super,url,options){$super(options);this.transport=Ajax.getTransport();this.request(url);},request:function(url){this.url=url;this.method=this.options.method;var params=Object.clone(this.options.parameters);if(!['get','post'].include(this.method)){params['_method']=this.method;this.method='post';}
this.parameters=params;if(params=Object.toQueryString(params)){if(this.method=='get')
this.url+=(this.url.include('?')?'&':'?')+params;else if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))
params+='&_=';}
try{var response=new Ajax.Response(this);if(this.options.onCreate)this.options.onCreate(response);Ajax.Responders.dispatch('onCreate',this,response);this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);if(this.options.asynchronous)this.respondToReadyState.bind(this).defer(1);this.transport.onreadystatechange=this.onStateChange.bind(this);this.setRequestHeaders();this.body=this.method=='post'?(this.options.postBody||params):null;this.transport.send(this.body);if(!this.options.asynchronous&&this.transport.overrideMimeType)
this.onStateChange();}
catch(e){this.dispatchException(e);}},onStateChange:function(){var readyState=this.transport.readyState;if(readyState>1&&!((readyState==4)&&this._complete))
this.respondToReadyState(this.transport.readyState);},setRequestHeaders:function(){var headers={'X-Requested-With':'XMLHttpRequest','X-Prototype-Version':Prototype.Version,'Accept':'text/javascript, text/html, application/xml, text/xml, */*'};if(this.method=='post'){headers['Content-type']=this.options.contentType+
(this.options.encoding?'; charset='+this.options.encoding:'');if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)
headers['Connection']='close';}
if(typeof this.options.requestHeaders=='object'){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push))
for(var i=0,length=extras.length;i<length;i+=2)
headers[extras[i]]=extras[i+1];else
$H(extras).each(function(pair){headers[pair.key]=pair.value});}
for(var name in headers)
this.transport.setRequestHeader(name,headers[name]);},success:function(){var status=this.getStatus();return!status||(status>=200&&status<300);},getStatus:function(){try{return this.transport.status||0;}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=='Complete'){try{this._complete=true;(this.options['on'+response.status]||this.options['on'+(this.success()?'Success':'Failure')]||Prototype.emptyFunction)(response,response.headerJSON);}catch(e){this.dispatchException(e);}
var contentType=response.getHeader('Content-type');if(this.options.evalJS=='force'||(this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
this.evalResponse();}
try{(this.options['on'+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch('on'+state,this,response,response.headerJSON);}catch(e){this.dispatchException(e);}
if(state=='Complete'){this.transport.onreadystatechange=Prototype.emptyFunction;}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||(m[0]=='#{protocol}//#{domain}#{port}'.interpolate({protocol:location.protocol,domain:document.domain,port:location.port?':'+location.port:''}));},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null;}catch(e){return null;}},evalResponse:function(){try{return eval((this.transport.responseText||'').unfilterJSON());}catch(e){this.dispatchException(e);}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch('onException',this,exception);}});Ajax.Request.Events=['Uninitialized','Loading','Loaded','Interactive','Complete'];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if((readyState>2&&!Prototype.Browser.IE)||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON();}
if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON();}},status:0,statusText:'',getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||'';}catch(e){return''}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders();}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name);},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders();},_getHeaderJSON:function(){var json=this.getHeader('X-JSON');if(!json)return null;json=decodeURIComponent(escape(json));try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin());}catch(e){this.request.dispatchException(e);}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||(options.evalJSON!='force'&&!(this.getHeader('Content-type')||'').include('application/json'))||this.responseText.blank())
return null;try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin());}catch(e){this.request.dispatchException(e);}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:(container.success||container),failure:(container.failure||(container.success?null:container))};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=(function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete))onComplete(response,json);}).bind(this);$super(url,options);},updateContent:function(responseText){var receiver=this.container[this.success()?'success':'failure'],options=this.options;if(!options.evalScripts)responseText=responseText.stripScripts();if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion);}
else options.insertion(receiver,responseText);}
else receiver.update(responseText);}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=(this.options.frequency||2);this.decay=(this.options.decay||1);this.updater={};this.container=container;this.url=url;this.start();},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent();},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments);},updateComplete:function(response){if(this.options.decay){this.decay=(response.responseText==this.lastText?this.decay*this.options.decay:1);this.lastText=response.responseText;}
this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency);},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options);}});function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i<length;i++)
elements.push($(arguments[i]));return elements;}
if(Object.isString(element))
element=document.getElementById(element);return Element.extend(element);}
if(Prototype.BrowserFeatures.XPath){document._getElementsByXPath=function(expression,parentElement){var results=[];var query=document.evaluate(expression,$(parentElement)||document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);for(var i=0,length=query.snapshotLength;i<length;i++)
results.push(Element.extend(query.snapshotItem(i)));return results;};}
if(!window.Node)var Node={};if(!Node.ELEMENT_NODE){Object.extend(Node,{ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12});}
(function(global){var SETATTRIBUTE_IGNORES_NAME=(function(){var elForm=document.createElement("form");var elInput=document.createElement("input");var root=document.documentElement;elInput.setAttribute("name","test");elForm.appendChild(elInput);root.appendChild(elForm);var isBuggy=elForm.elements?(typeof elForm.elements.test=="undefined"):null;root.removeChild(elForm);elForm=elInput=null;return isBuggy;})();var element=global.Element;global.Element=function(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();var cache=Element.cache;if(SETATTRIBUTE_IGNORES_NAME&&attributes.name){tagName='<'+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes);}
if(!cache[tagName])cache[tagName]=Element.extend(document.createElement(tagName));return Element.writeAttribute(cache[tagName].cloneNode(false),attributes);};Object.extend(global.Element,element||{});if(element)global.Element.prototype=element.prototype;})(this);Element.cache={};Element.idCounter=1;Element.Methods={visible:function(element){return $(element).style.display!='none';},toggle:function(element){element=$(element);Element[Element.visible(element)?'hide':'show'](element);return element;},hide:function(element){element=$(element);element.style.display='none';return element;},show:function(element){element=$(element);element.style.display='';return element;},remove:function(element){element=$(element);element.parentNode.removeChild(element);return element;},update:(function(){var SELECT_ELEMENT_INNERHTML_BUGGY=(function(){var el=document.createElement("select"),isBuggy=true;el.innerHTML="<option value=\"test\">test</option>";if(el.options&&el.options[0]){isBuggy=el.options[0].nodeName.toUpperCase()!=="OPTION";}
el=null;return isBuggy;})();var TABLE_ELEMENT_INNERHTML_BUGGY=(function(){try{var el=document.createElement("table");if(el&&el.tBodies){el.innerHTML="<tbody><tr><td>test</td></tr></tbody>";var isBuggy=typeof el.tBodies[0]=="undefined";el=null;return isBuggy;}}catch(e){return true;}})();var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING=(function(){var s=document.createElement("script"),isBuggy=false;try{s.appendChild(document.createTextNode(""));isBuggy=!s.firstChild||s.firstChild&&s.firstChild.nodeType!==3;}catch(e){isBuggy=true;}
s=null;return isBuggy;})();function update(element,content){element=$(element);if(content&&content.toElement)
content=content.toElement();if(Object.isElement(content))
return element.update().insert(content);content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName==='SCRIPT'&&SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING){element.text=content;return element;}
if(SELECT_ELEMENT_INNERHTML_BUGGY||TABLE_ELEMENT_INNERHTML_BUGGY){if(tagName in Element._insertionTranslations.tags){while(element.firstChild){element.removeChild(element.firstChild);}
Element._getContentFromAnonymousElement(tagName,content.stripScripts()).each(function(node){element.appendChild(node)});}
else{element.innerHTML=content.stripScripts();}}
else{element.innerHTML=content.stripScripts();}
content.evalScripts.bind(content).defer();return element;}
return update;})(),replace:function(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();else if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts());}
element.parentNode.replaceChild(content,element);return element;},insert:function(element,insertions){element=$(element);if(Object.isString(insertions)||Object.isNumber(insertions)||Object.isElement(insertions)||(insertions&&(insertions.toElement||insertions.toHTML)))
insertions={bottom:insertions};var content,insert,tagName,childNodes;for(var position in insertions){content=insertions[position];position=position.toLowerCase();insert=Element._insertionTranslations[position];if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){insert(element,content);continue;}
content=Object.toHTML(content);tagName=((position=='before'||position=='after')?element.parentNode:element).tagName.toUpperCase();childNodes=Element._getContentFromAnonymousElement(tagName,content.stripScripts());if(position=='top'||position=='after')childNodes.reverse();childNodes.each(insert.curry(element));content.evalScripts.bind(content).defer();}
return element;},wrap:function(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper))
$(wrapper).writeAttribute(attributes||{});else if(Object.isString(wrapper))wrapper=new Element(wrapper,attributes);else wrapper=new Element('div',wrapper);if(element.parentNode)
element.parentNode.replaceChild(wrapper,element);wrapper.appendChild(element);return wrapper;},inspect:function(element){element=$(element);var result='<'+element.tagName.toLowerCase();$H({'id':'id','className':'class'}).each(function(pair){var property=pair.first(),attribute=pair.last();var value=(element[property]||'').toString();if(value)result+=' '+attribute+'='+value.inspect(true);});return result+'>';},recursivelyCollect:function(element,property){element=$(element);var elements=[];while(element=element[property])
if(element.nodeType==1)
elements.push(Element.extend(element));return elements;},ancestors:function(element){return Element.recursivelyCollect(element,'parentNode');},descendants:function(element){return Element.select(element,"*");},firstDescendant:function(element){element=$(element).firstChild;while(element&&element.nodeType!=1)element=element.nextSibling;return $(element);},immediateDescendants:function(element){if(!(element=$(element).firstChild))return[];while(element&&element.nodeType!=1)element=element.nextSibling;if(element)return[element].concat($(element).nextSiblings());return[];},previousSiblings:function(element){return Element.recursivelyCollect(element,'previousSibling');},nextSiblings:function(element){return Element.recursivelyCollect(element,'nextSibling');},siblings:function(element){element=$(element);return Element.previousSiblings(element).reverse().concat(Element.nextSiblings(element));},match:function(element,selector){if(Object.isString(selector))
selector=new Selector(selector);return selector.match($(element));},up:function(element,expression,index){element=$(element);if(arguments.length==1)return $(element.parentNode);var ancestors=Element.ancestors(element);return Object.isNumber(expression)?ancestors[expression]:Selector.findElement(ancestors,expression,index);},down:function(element,expression,index){element=$(element);if(arguments.length==1)return Element.firstDescendant(element);return Object.isNumber(expression)?Element.descendants(element)[expression]:Element.select(element,expression)[index||0];},previous:function(element,expression,index){element=$(element);if(arguments.length==1)return $(Selector.handlers.previousElementSibling(element));var previousSiblings=Element.previousSiblings(element);return Object.isNumber(expression)?previousSiblings[expression]:Selector.findElement(previousSiblings,expression,index);},next:function(element,expression,index){element=$(element);if(arguments.length==1)return $(Selector.handlers.nextElementSibling(element));var nextSiblings=Element.nextSiblings(element);return Object.isNumber(expression)?nextSiblings[expression]:Selector.findElement(nextSiblings,expression,index);},select:function(element){var args=Array.prototype.slice.call(arguments,1);return Selector.findChildElements(element,args);},adjacent:function(element){var args=Array.prototype.slice.call(arguments,1);return Selector.findChildElements(element.parentNode,args).without(element);},identify:function(element){element=$(element);var id=Element.readAttribute(element,'id');if(id)return id;do{id='anonymous_element_'+Element.idCounter++}while($(id));Element.writeAttribute(element,'id',id);return id;},readAttribute:(function(){var iframeGetAttributeThrowsError=(function(){var el=document.createElement('iframe'),isBuggy=false;document.documentElement.appendChild(el);try{el.getAttribute('type',2);}catch(e){isBuggy=true;}
document.documentElement.removeChild(el);el=null;return isBuggy;})();return function(element,name){element=$(element);if(iframeGetAttributeThrowsError&&name==='type'&&element.tagName.toUpperCase()=='IFRAME'){return element.getAttribute('type');}
if(Prototype.Browser.IE){var t=Element._attributeTranslations.read;if(t.values[name])return t.values[name](element,name);if(t.names[name])name=t.names[name];if(name.include(':')){return(!element.attributes||!element.attributes[name])?null:element.attributes[name].value;}}
return element.getAttribute(name);}})(),writeAttribute:function(element,name,value){element=$(element);var attributes={},t=Element._attributeTranslations.write;if(typeof name=='object')attributes=name;else attributes[name]=Object.isUndefined(value)?true:value;for(var attr in attributes){name=t.names[attr]||attr;value=attributes[attr];if(t.values[attr])name=t.values[attr](element,value);if(value===false||value===null)
element.removeAttribute(name);else if(value===true)
element.setAttribute(name,name);else element.setAttribute(name,value);}
return element;},getHeight:function(element){return Element.getDimensions(element).height;},getWidth:function(element){return Element.getDimensions(element).width;},classNames:function(element){return new Element.ClassNames(element);},hasClassName:function(element,className){if(!(element=$(element)))return;var elementClassName=element.className;return(elementClassName.length>0&&(elementClassName==className||new RegExp("(^|\\s)"+className+"(\\s|$)").test(elementClassName)));},addClassName:function(element,className){if(!(element=$(element)))return;if(!Element.hasClassName(element,className))
element.className+=(element.className?' ':'')+className;return element;},removeClassName:function(element,className){if(!(element=$(element)))return;element.className=element.className.replace(new RegExp("(^|\\s+)"+className+"(\\s+|$)"),' ').strip();return element;},toggleClassName:function(element,className){if(!(element=$(element)))return;return Element[Element.hasClassName(element,className)?'removeClassName':'addClassName'](element,className);},cleanWhitespace:function(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType==3&&!/\S/.test(node.nodeValue))
element.removeChild(node);node=nextNode;}
return element;},empty:function(element){return $(element).innerHTML.blank();},descendantOf:function(element,ancestor){element=$(element),ancestor=$(ancestor);if(element.compareDocumentPosition)
return(element.compareDocumentPosition(ancestor)&8)===8;if(ancestor.contains)
return ancestor.contains(element)&&ancestor!==element;while(element=element.parentNode)
if(element==ancestor)return true;return false;},scrollTo:function(element){element=$(element);var pos=Element.cumulativeOffset(element);window.scrollTo(pos[0],pos[1]);return element;},getStyle:function(element,style){element=$(element);style=style=='float'?'cssFloat':style.camelize();var value=element.style[style];if(!value||value=='auto'){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null;}
if(style=='opacity')return value?parseFloat(value):1.0;return value=='auto'?null:value;},getOpacity:function(element){return $(element).getStyle('opacity');},setStyle:function(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){element.style.cssText+=';'+styles;return styles.include('opacity')?element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]):element;}
for(var property in styles)
if(property=='opacity')element.setOpacity(styles[property]);else
elementStyle[(property=='float'||property=='cssFloat')?(Object.isUndefined(elementStyle.styleFloat)?'cssFloat':'styleFloat'):property]=styles[property];return element;},setOpacity:function(element,value){element=$(element);element.style.opacity=(value==1||value==='')?'':(value<0.00001)?0:value;return element;},getDimensions:function(element){element=$(element);var display=Element.getStyle(element,'display');if(display!='none'&&display!=null)
return{width:element.offsetWidth,height:element.offsetHeight};var els=element.style;var originalVisibility=els.visibility;var originalPosition=els.position;var originalDisplay=els.display;els.visibility='hidden';if(originalPosition!='fixed')
els.position='absolute';els.display='block';var originalWidth=element.clientWidth;var originalHeight=element.clientHeight;els.display=originalDisplay;els.position=originalPosition;els.visibility=originalVisibility;return{width:originalWidth,height:originalHeight};},makePositioned:function(element){element=$(element);var pos=Element.getStyle(element,'position');if(pos=='static'||!pos){element._madePositioned=true;element.style.position='relative';if(Prototype.Browser.Opera){element.style.top=0;element.style.left=0;}}
return element;},undoPositioned:function(element){element=$(element);if(element._madePositioned){element._madePositioned=undefined;element.style.position=element.style.top=element.style.left=element.style.bottom=element.style.right='';}
return element;},makeClipping:function(element){element=$(element);if(element._overflow)return element;element._overflow=Element.getStyle(element,'overflow')||'auto';if(element._overflow!=='hidden')
element.style.overflow='hidden';return element;},undoClipping:function(element){element=$(element);if(!element._overflow)return element;element.style.overflow=element._overflow=='auto'?'':element._overflow;element._overflow=null;return element;},cumulativeOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;}while(element);return Element._returnOffset(valueL,valueT);},positionedOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(element.tagName.toUpperCase()=='BODY')break;var p=Element.getStyle(element,'position');if(p!=='static')break;}}while(element);return Element._returnOffset(valueL,valueT);},absolutize:function(element){element=$(element);if(Element.getStyle(element,'position')=='absolute')return element;var offsets=Element.positionedOffset(element);var top=offsets[1];var left=offsets[0];var width=element.clientWidth;var height=element.clientHeight;element._originalLeft=left-parseFloat(element.style.left||0);element._originalTop=top-parseFloat(element.style.top||0);element._originalWidth=element.style.width;element._originalHeight=element.style.height;element.style.position='absolute';element.style.top=top+'px';element.style.left=left+'px';element.style.width=width+'px';element.style.height=height+'px';return element;},relativize:function(element){element=$(element);if(Element.getStyle(element,'position')=='relative')return element;element.style.position='relative';var top=parseFloat(element.style.top||0)-(element._originalTop||0);var left=parseFloat(element.style.left||0)-(element._originalLeft||0);element.style.top=top+'px';element.style.left=left+'px';element.style.height=element._originalHeight;element.style.width=element._originalWidth;return element;},cumulativeScrollOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode;}while(element);return Element._returnOffset(valueL,valueT);},getOffsetParent:function(element){if(element.offsetParent)return $(element.offsetParent);if(element==document.body)return $(element);while((element=element.parentNode)&&element!=document.body)
if(Element.getStyle(element,'position')!='static')
return $(element);return $(document.body);},viewportOffset:function(forElement){var valueT=0,valueL=0;var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body&&Element.getStyle(element,'position')=='absolute')break;}while(element=element.offsetParent);element=forElement;do{if(!Prototype.Browser.Opera||(element.tagName&&(element.tagName.toUpperCase()=='BODY'))){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0;}}while(element=element.parentNode);return Element._returnOffset(valueL,valueT);},clonePosition:function(element,source){var options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{});source=$(source);var p=Element.viewportOffset(source);element=$(element);var delta=[0,0];var parent=null;if(Element.getStyle(element,'position')=='absolute'){parent=Element.getOffsetParent(element);delta=Element.viewportOffset(parent);}
if(parent==document.body){delta[0]-=document.body.offsetLeft;delta[1]-=document.body.offsetTop;}
if(options.setLeft)element.style.left=(p[0]-delta[0]+options.offsetLeft)+'px';if(options.setTop)element.style.top=(p[1]-delta[1]+options.offsetTop)+'px';if(options.setWidth)element.style.width=source.offsetWidth+'px';if(options.setHeight)element.style.height=source.offsetHeight+'px';return element;}};Object.extend(Element.Methods,{getElementsBySelector:Element.Methods.select,childElements:Element.Methods.immediateDescendants});Element._attributeTranslations={write:{names:{className:'class',htmlFor:'for'},values:{}}};if(Prototype.Browser.Opera){Element.Methods.getStyle=Element.Methods.getStyle.wrap(function(proceed,element,style){switch(style){case'left':case'top':case'right':case'bottom':if(proceed(element,'position')==='static')return null;case'height':case'width':if(!Element.visible(element))return null;var dim=parseInt(proceed(element,style),10);if(dim!==element['offset'+style.capitalize()])
return dim+'px';var properties;if(style==='height'){properties=['border-top-width','padding-top','padding-bottom','border-bottom-width'];}
else{properties=['border-left-width','padding-left','padding-right','border-right-width'];}
return properties.inject(dim,function(memo,property){var val=proceed(element,property);return val===null?memo:memo-parseInt(val,10);})+'px';default:return proceed(element,style);}});Element.Methods.readAttribute=Element.Methods.readAttribute.wrap(function(proceed,element,attribute){if(attribute==='title')return element.title;return proceed(element,attribute);});}
else if(Prototype.Browser.IE){Element.Methods.getOffsetParent=Element.Methods.getOffsetParent.wrap(function(proceed,element){element=$(element);try{element.offsetParent}
catch(e){return $(document.body)}
var position=element.getStyle('position');if(position!=='static')return proceed(element);element.setStyle({position:'relative'});var value=proceed(element);element.setStyle({position:position});return value;});$w('positionedOffset viewportOffset').each(function(method){Element.Methods[method]=Element.Methods[method].wrap(function(proceed,element){element=$(element);try{element.offsetParent}
catch(e){return Element._returnOffset(0,0)}
var position=element.getStyle('position');if(position!=='static')return proceed(element);var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle('position')==='fixed')
offsetParent.setStyle({zoom:1});element.setStyle({position:'relative'});var value=proceed(element);element.setStyle({position:position});return value;});});Element.Methods.cumulativeOffset=Element.Methods.cumulativeOffset.wrap(function(proceed,element){try{element.offsetParent}
catch(e){return Element._returnOffset(0,0)}
return proceed(element);});Element.Methods.getStyle=function(element,style){element=$(element);style=(style=='float'||style=='cssFloat')?'styleFloat':style.camelize();var value=element.style[style];if(!value&&element.currentStyle)value=element.currentStyle[style];if(style=='opacity'){if(value=(element.getStyle('filter')||'').match(/alpha\(opacity=(.*)\)/))
if(value[1])return parseFloat(value[1])/100;return 1.0;}
if(value=='auto'){if((style=='width'||style=='height')&&(element.getStyle('display')!='none'))
return element['offset'+style.capitalize()]+'px';return null;}
return value;};Element.Methods.setOpacity=function(element,value){function stripAlpha(filter){return filter.replace(/alpha\([^\)]*\)/gi,'');}
element=$(element);var currentStyle=element.currentStyle;if((currentStyle&&!currentStyle.hasLayout)||(!currentStyle&&element.style.zoom=='normal'))
element.style.zoom=1;var filter=element.getStyle('filter'),style=element.style;if(value==1||value===''){(filter=stripAlpha(filter))?style.filter=filter:style.removeAttribute('filter');return element;}else if(value<0.00001)value=0;style.filter=stripAlpha(filter)+'alpha(opacity='+(value*100)+')';return element;};Element._attributeTranslations=(function(){var classProp='className';var forProp='for';var el=document.createElement('div');el.setAttribute(classProp,'x');if(el.className!=='x'){el.setAttribute('class','x');if(el.className==='x'){classProp='class';}}
el=null;el=document.createElement('label');el.setAttribute(forProp,'x');if(el.htmlFor!=='x'){el.setAttribute('htmlFor','x');if(el.htmlFor==='x'){forProp='htmlFor';}}
el=null;return{read:{names:{'class':classProp,'className':classProp,'for':forProp,'htmlFor':forProp},values:{_getAttr:function(element,attribute){return element.getAttribute(attribute,2);},_getAttrNode:function(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:"";},_getEv:(function(){var el=document.createElement('div');el.onclick=Prototype.emptyFunction;var value=el.getAttribute('onclick');var f;if(String(value).indexOf('{')>-1){f=function(element,attribute){attribute=element.getAttribute(attribute);if(!attribute)return null;attribute=attribute.toString();attribute=attribute.split('{')[1];attribute=attribute.split('}')[0];return attribute.strip();}}
else if(value===''){f=function(element,attribute){attribute=element.getAttribute(attribute);if(!attribute)return null;return attribute.strip();}}
el=null;return f;})(),_flag:function(element,attribute){return $(element).hasAttribute(attribute)?attribute:null;},style:function(element){return element.style.cssText.toLowerCase();},title:function(element){return element.title;}}}}})();Element._attributeTranslations.write={names:Object.extend({cellpadding:'cellPadding',cellspacing:'cellSpacing'},Element._attributeTranslations.read.names),values:{checked:function(element,value){element.checked=!!value;},style:function(element,value){element.style.cssText=value?value:'';}}};Element._attributeTranslations.has={};$w('colSpan rowSpan vAlign dateTime accessKey tabIndex '+'encType maxLength readOnly longDesc frameBorder').each(function(attr){Element._attributeTranslations.write.names[attr.toLowerCase()]=attr;Element._attributeTranslations.has[attr.toLowerCase()]=attr;});(function(v){Object.extend(v,{href:v._getAttr,src:v._getAttr,type:v._getAttr,action:v._getAttrNode,disabled:v._flag,checked:v._flag,readonly:v._flag,multiple:v._flag,onload:v._getEv,onunload:v._getEv,onclick:v._getEv,ondblclick:v._getEv,onmousedown:v._getEv,onmouseup:v._getEv,onmouseover:v._getEv,onmousemove:v._getEv,onmouseout:v._getEv,onfocus:v._getEv,onblur:v._getEv,onkeypress:v._getEv,onkeydown:v._getEv,onkeyup:v._getEv,onsubmit:v._getEv,onreset:v._getEv,onselect:v._getEv,onchange:v._getEv});})(Element._attributeTranslations.read.values);if(Prototype.BrowserFeatures.ElementExtensions){(function(){function _descendants(element){var nodes=element.getElementsByTagName('*'),results=[];for(var i=0,node;node=nodes[i];i++)
if(node.tagName!=="!")
results.push(node);return results;}
Element.Methods.down=function(element,expression,index){element=$(element);if(arguments.length==1)return element.firstDescendant();return Object.isNumber(expression)?_descendants(element)[expression]:Element.select(element,expression)[index||0];}})();}}
else if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){Element.Methods.setOpacity=function(element,value){element=$(element);element.style.opacity=(value==1)?0.999999:(value==='')?'':(value<0.00001)?0:value;return element;};}
else if(Prototype.Browser.WebKit){Element.Methods.setOpacity=function(element,value){element=$(element);element.style.opacity=(value==1||value==='')?'':(value<0.00001)?0:value;if(value==1)
if(element.tagName.toUpperCase()=='IMG'&&element.width){element.width++;element.width--;}else try{var n=document.createTextNode(' ');element.appendChild(n);element.removeChild(n);}catch(e){}
return element;};Element.Methods.cumulativeOffset=function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body)
if(Element.getStyle(element,'position')=='absolute')break;element=element.offsetParent;}while(element);return Element._returnOffset(valueL,valueT);};}
if('outerHTML'in document.documentElement){Element.Methods.replace=function(element,content){element=$(element);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element;}
content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(Element._insertionTranslations.tags[tagName]){var nextSibling=element.next();var fragments=Element._getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);if(nextSibling)
fragments.each(function(node){parent.insertBefore(node,nextSibling)});else
fragments.each(function(node){parent.appendChild(node)});}
else element.outerHTML=content.stripScripts();content.evalScripts.bind(content).defer();return element;};}
Element._returnOffset=function(l,t){var result=[l,t];result.left=l;result.top=t;return result;};Element._getContentFromAnonymousElement=function(tagName,html){var div=new Element('div'),t=Element._insertionTranslations.tags[tagName];if(t){div.innerHTML=t[0]+html+t[1];t[2].times(function(){div=div.firstChild});}else div.innerHTML=html;return $A(div.childNodes);};Element._insertionTranslations={before:function(element,node){element.parentNode.insertBefore(node,element);},top:function(element,node){element.insertBefore(node,element.firstChild);},bottom:function(element,node){element.appendChild(node);},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling);},tags:{TABLE:['<table>','</table>',1],TBODY:['<table><tbody>','</tbody></table>',2],TR:['<table><tbody><tr>','</tr></tbody></table>',3],TD:['<table><tbody><tr><td>','</td></tr></tbody></table>',4],SELECT:['<select>','</select>',1]}};(function(){var tags=Element._insertionTranslations.tags;Object.extend(tags,{THEAD:tags.TBODY,TFOOT:tags.TBODY,TH:tags.TD});})();Element.Methods.Simulated={hasAttribute:function(element,attribute){attribute=Element._attributeTranslations.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return!!(node&&node.specified);}};Element.Methods.ByTag={};Object.extend(Element,Element.Methods);(function(div){if(!Prototype.BrowserFeatures.ElementExtensions&&div['__proto__']){window.HTMLElement={};window.HTMLElement.prototype=div['__proto__'];Prototype.BrowserFeatures.ElementExtensions=true;}
div=null;})(document.createElement('div'))
Element.extend=(function(){function checkDeficiency(tagName){if(typeof window.Element!='undefined'){var proto=window.Element.prototype;if(proto){var id='_'+(Math.random()+'').slice(2);var el=document.createElement(tagName);proto[id]='x';var isBuggy=(el[id]!=='x');delete proto[id];el=null;return isBuggy;}}
return false;}
function extendElementWith(element,methods){for(var property in methods){var value=methods[property];if(Object.isFunction(value)&&!(property in element))
element[property]=value.methodize();}}
var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY=checkDeficiency('object');var HTMLAPPLETELEMENT_PROTOTYPE_BUGGY=Prototype.Browser.IE||checkDeficiency('applet');if(Prototype.BrowserFeatures.SpecificElementExtensions){if(HTMLOBJECTELEMENT_PROTOTYPE_BUGGY&&HTMLAPPLETELEMENT_PROTOTYPE_BUGGY){return function(element){if(element&&typeof element._extendedByPrototype=='undefined'){var t=element.tagName;if(t&&(/^(?:object|applet|embed)$/i.test(t))){extendElementWith(element,Element.Methods);extendElementWith(element,Element.Methods.Simulated);extendElementWith(element,Element.Methods.ByTag[t.toUpperCase()]);}}
return element;}}
return Prototype.K;}
var Methods={},ByTag=Element.Methods.ByTag;var extend=Object.extend(function(element){if(!element||typeof element._extendedByPrototype!='undefined'||element.nodeType!=1||element==window)return element;var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase();if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);extendElementWith(element,methods);element._extendedByPrototype=Prototype.emptyFunction;return element;},{refresh:function(){if(!Prototype.BrowserFeatures.ElementExtensions){Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);}}});extend.refresh();return extend;})();Element.hasAttribute=function(element,attribute){if(element.hasAttribute)return element.hasAttribute(attribute);return Element.Methods.Simulated.hasAttribute(element,attribute);};Element.addMethods=function(methods){var F=Prototype.BrowserFeatures,T=Element.Methods.ByTag;if(!methods){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{"FORM":Object.clone(Form.Methods),"INPUT":Object.clone(Form.Element.Methods),"SELECT":Object.clone(Form.Element.Methods),"TEXTAREA":Object.clone(Form.Element.Methods)});}
if(arguments.length==2){var tagName=methods;methods=arguments[1];}
if(!tagName)Object.extend(Element.Methods,methods||{});else{if(Object.isArray(tagName))tagName.each(extend);else extend(tagName);}
function extend(tagName){tagName=tagName.toUpperCase();if(!Element.Methods.ByTag[tagName])
Element.Methods.ByTag[tagName]={};Object.extend(Element.Methods.ByTag[tagName],methods);}
function copy(methods,destination,onlyIfAbsent){onlyIfAbsent=onlyIfAbsent||false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))
destination[property]=value.methodize();}}
function findDOMClass(tagName){var klass;var trans={"OPTGROUP":"OptGroup","TEXTAREA":"TextArea","P":"Paragraph","FIELDSET":"FieldSet","UL":"UList","OL":"OList","DL":"DList","DIR":"Directory","H1":"Heading","H2":"Heading","H3":"Heading","H4":"Heading","H5":"Heading","H6":"Heading","Q":"Quote","INS":"Mod","DEL":"Mod","A":"Anchor","IMG":"Image","CAPTION":"TableCaption","COL":"TableCol","COLGROUP":"TableCol","THEAD":"TableSection","TFOOT":"TableSection","TBODY":"TableSection","TR":"TableRow","TH":"TableCell","TD":"TableCell","FRAMESET":"FrameSet","IFRAME":"IFrame"};if(trans[tagName])klass='HTML'+trans[tagName]+'Element';if(window[klass])return window[klass];klass='HTML'+tagName+'Element';if(window[klass])return window[klass];klass='HTML'+tagName.capitalize()+'Element';if(window[klass])return window[klass];var element=document.createElement(tagName);var proto=element['__proto__']||element.constructor.prototype;element=null;return proto;}
var elementPrototype=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(F.ElementExtensions){copy(Element.Methods,elementPrototype);copy(Element.Methods.Simulated,elementPrototype,true);}
if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;copy(T[tag],klass.prototype);}}
Object.extend(Element,Element.Methods);delete Element.ByTag;if(Element.extend.refresh)Element.extend.refresh();Element.cache={};};document.viewport={getDimensions:function(){return{width:this.getWidth(),height:this.getHeight()};},getScrollOffsets:function(){return Element._returnOffset(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop);}};(function(viewport){var B=Prototype.Browser,doc=document,element,property={};function getRootElement(){if(B.WebKit&&!doc.evaluate)
return document;if(B.Opera&&window.parseFloat(window.opera.version())<9.5)
return document.body;return document.documentElement;}
function define(D){if(!element)element=getRootElement();property[D]='client'+D;viewport['get'+D]=function(){return element[property[D]]};return viewport['get'+D]();}
viewport.getWidth=define.curry('Width');viewport.getHeight=define.curry('Height');})(document.viewport);Element.Storage={UID:1};Element.addMethods({getStorage:function(element){if(!(element=$(element)))return;var uid;if(element===window){uid=0;}else{if(typeof element._prototypeUID==="undefined")
element._prototypeUID=[Element.Storage.UID++];uid=element._prototypeUID[0];}
if(!Element.Storage[uid])
Element.Storage[uid]=$H();return Element.Storage[uid];},store:function(element,key,value){if(!(element=$(element)))return;if(arguments.length===2){Element.getStorage(element).update(key);}else{Element.getStorage(element).set(key,value);}
return element;},retrieve:function(element,key,defaultValue){if(!(element=$(element)))return;var hash=Element.getStorage(element),value=hash.get(key);if(Object.isUndefined(value)){hash.set(key,defaultValue);value=defaultValue;}
return value;},clone:function(element,deep){if(!(element=$(element)))return;var clone=element.cloneNode(deep);clone._prototypeUID=void 0;if(deep){var descendants=Element.select(clone,'*'),i=descendants.length;while(i--){descendants[i]._prototypeUID=void 0;}}
return Element.extend(clone);}});var Selector=Class.create({initialize:function(expression){this.expression=expression.strip();if(this.shouldUseSelectorsAPI()){this.mode='selectorsAPI';}else if(this.shouldUseXPath()){this.mode='xpath';this.compileXPathMatcher();}else{this.mode="normal";this.compileMatcher();}},shouldUseXPath:(function(){var IS_DESCENDANT_SELECTOR_BUGGY=(function(){var isBuggy=false;if(document.evaluate&&window.XPathResult){var el=document.createElement('div');el.innerHTML='<ul><li></li></ul><div><ul><li></li></ul></div>';var xpath=".//*[local-name()='ul' or local-name()='UL']"+"//*[local-name()='li' or local-name()='LI']";var result=document.evaluate(xpath,el,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);isBuggy=(result.snapshotLength!==2);el=null;}
return isBuggy;})();return function(){if(!Prototype.BrowserFeatures.XPath)return false;var e=this.expression;if(Prototype.Browser.WebKit&&(e.include("-of-type")||e.include(":empty")))
return false;if((/(\[[\w-]*?:|:checked)/).test(e))
return false;if(IS_DESCENDANT_SELECTOR_BUGGY)return false;return true;}})(),shouldUseSelectorsAPI:function(){if(!Prototype.BrowserFeatures.SelectorsAPI)return false;if(Selector.CASE_INSENSITIVE_CLASS_NAMES)return false;if(!Selector._div)Selector._div=new Element('div');try{Selector._div.querySelector(this.expression);}catch(e){return false;}
return true;},compileMatcher:function(){var e=this.expression,ps=Selector.patterns,h=Selector.handlers,c=Selector.criteria,le,p,m,len=ps.length,name;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=0;i<len;i++){p=ps[i].re;name=ps[i].name;if(m=e.match(p)){this.matcher.push(Object.isFunction(c[name])?c[name](m):new Template(c[name]).evaluate(m));e=e.replace(m[0],'');break;}}}
this.matcher.push("return h.unique(n);\n}");eval(this.matcher.join('\n'));Selector._cache[this.expression]=this.matcher;},compileXPathMatcher:function(){var e=this.expression,ps=Selector.patterns,x=Selector.xpath,le,m,len=ps.length,name;if(Selector._cache[e]){this.xpath=Selector._cache[e];return;}
this.matcher=['.//*'];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i=0;i<len;i++){name=ps[i].name;if(m=e.match(ps[i].re)){this.matcher.push(Object.isFunction(x[name])?x[name](m):new Template(x[name]).evaluate(m));e=e.replace(m[0],'');break;}}}
this.xpath=this.matcher.join('');Selector._cache[this.expression]=this.xpath;},findElements:function(root){root=root||document;var e=this.expression,results;switch(this.mode){case'selectorsAPI':if(root!==document){var oldId=root.id,id=$(root).identify();id=id.replace(/[\.:]/g,"\\$0");e="#"+id+" "+e;}
results=$A(root.querySelectorAll(e)).map(Element.extend);root.id=oldId;return results;case'xpath':return document._getElementsByXPath(this.xpath,root);default:return this.matcher(root);}},match:function(element){this.tokens=[];var e=this.expression,ps=Selector.patterns,as=Selector.assertions;var le,p,m,len=ps.length,name;while(e&&le!==e&&(/\S/).test(e)){le=e;for(var i=0;i<len;i++){p=ps[i].re;name=ps[i].name;if(m=e.match(p)){if(as[name]){this.tokens.push([name,Object.clone(m)]);e=e.replace(m[0],'');}else{return this.findElements(document).include(element);}}}}
var match=true,name,matches;for(var i=0,token;token=this.tokens[i];i++){name=token[0],matches=token[1];if(!Selector.assertions[name](element,matches)){match=false;break;}}
return match;},toString:function(){return this.expression;},inspect:function(){return"#<Selector:"+this.expression.inspect()+">";}});if(Prototype.BrowserFeatures.SelectorsAPI&&document.compatMode==='BackCompat'){Selector.CASE_INSENSITIVE_CLASS_NAMES=(function(){var div=document.createElement('div'),span=document.createElement('span');div.id="prototype_test_id";span.className='Test';div.appendChild(span);var isIgnored=(div.querySelector('#prototype_test_id .test')!==null);div=span=null;return isIgnored;})();}
Object.extend(Selector,{_cache:{},xpath:{descendant:"//*",child:"/*",adjacent:"/following-sibling::*[1]",laterSibling:'/following-sibling::*',tagName:function(m){if(m[1]=='*')return'';return"[local-name()='"+m[1].toLowerCase()+"' or local-name()='"+m[1].toUpperCase()+"']";},className:"[contains(concat(' ', @class, ' '), ' #{1} ')]",id:"[@id='#{1}']",attrPresence:function(m){m[1]=m[1].toLowerCase();return new Template("[@#{1}]").evaluate(m);},attr:function(m){m[1]=m[1].toLowerCase();m[3]=m[5]||m[6];return new Template(Selector.xpath.operators[m[2]]).evaluate(m);},pseudo:function(m){var h=Selector.xpath.pseudos[m[1]];if(!h)return'';if(Object.isFunction(h))return h(m);return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);},operators:{'=':"[@#{1}='#{3}']",'!=':"[@#{1}!='#{3}']",'^=':"[starts-with(@#{1}, '#{3}')]",'$=':"[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",'*=':"[contains(@#{1}, '#{3}')]",'~=':"[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",'|=':"[contains(concat('-', @#{1}, '-'), '-#{3}-')]"},pseudos:{'first-child':'[not(preceding-sibling::*)]','last-child':'[not(following-sibling::*)]','only-child':'[not(preceding-sibling::* or following-sibling::*)]','empty':"[count(*) = 0 and (count(text()) = 0)]",'checked':"[@checked]",'disabled':"[(@disabled) and (@type!='hidden')]",'enabled':"[not(@disabled) and (@type!='hidden')]",'not':function(m){var e=m[6],p=Selector.patterns,x=Selector.xpath,le,v,len=p.length,name;var exclusion=[];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i=0;i<len;i++){name=p[i].name
if(m=e.match(p[i].re)){v=Object.isFunction(x[name])?x[name](m):new Template(x[name]).evaluate(m);exclusion.push("("+v.substring(1,v.length-1)+")");e=e.replace(m[0],'');break;}}}
return"[not("+exclusion.join(" and ")+")]";},'nth-child':function(m){return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ",m);},'nth-last-child':function(m){return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ",m);},'nth-of-type':function(m){return Selector.xpath.pseudos.nth("position() ",m);},'nth-last-of-type':function(m){return Selector.xpath.pseudos.nth("(last() + 1 - position()) ",m);},'first-of-type':function(m){m[6]="1";return Selector.xpath.pseudos['nth-of-type'](m);},'last-of-type':function(m){m[6]="1";return Selector.xpath.pseudos['nth-last-of-type'](m);},'only-of-type':function(m){var p=Selector.xpath.pseudos;return p['first-of-type'](m)+p['last-of-type'](m);},nth:function(fragment,m){var mm,formula=m[6],predicate;if(formula=='even')formula='2n+0';if(formula=='odd')formula='2n+1';if(mm=formula.match(/^(\d+)$/))
return'['+fragment+"= "+mm[1]+']';if(mm=formula.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(mm[1]=="-")mm[1]=-1;var a=mm[1]?Number(mm[1]):1;var b=mm[2]?Number(mm[2]):0;predicate="[((#{fragment} - #{b}) mod #{a} = 0) and "+"((#{fragment} - #{b}) div #{a} >= 0)]";return new Template(predicate).evaluate({fragment:fragment,a:a,b:b});}}}},criteria:{tagName:'n = h.tagName(n, r, "#{1}", c);      c = false;',className:'n = h.className(n, r, "#{1}", c);    c = false;',id:'n = h.id(n, r, "#{1}", c);           c = false;',attrPresence:'n = h.attrPresence(n, r, "#{1}", c); c = false;',attr:function(m){m[3]=(m[5]||m[6]);return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);},pseudo:function(m){if(m[6])m[6]=m[6].replace(/"/g,'\\"');return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);},descendant:'c = "descendant";',child:'c = "child";',adjacent:'c = "adjacent";',laterSibling:'c = "laterSibling";'},patterns:[{name:'laterSibling',re:/^\s*~\s*/},{name:'child',re:/^\s*>\s*/},{name:'adjacent',re:/^\s*\+\s*/},{name:'descendant',re:/^\s/},{name:'tagName',re:/^\s*(\*|[\w\-]+)(\b|$)?/},{name:'id',re:/^#([\w\-\*]+)(\b|$)/},{name:'className',re:/^\.([\w\-\*]+)(\b|$)/},{name:'pseudo',re:/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/},{name:'attrPresence',re:/^\[((?:[\w-]+:)?[\w-]+)\]/},{name:'attr',re:/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/}],assertions:{tagName:function(element,matches){return matches[1].toUpperCase()==element.tagName.toUpperCase();},className:function(element,matches){return Element.hasClassName(element,matches[1]);},id:function(element,matches){return element.id===matches[1];},attrPresence:function(element,matches){return Element.hasAttribute(element,matches[1]);},attr:function(element,matches){var nodeValue=Element.readAttribute(element,matches[1]);return nodeValue&&Selector.operators[matches[2]](nodeValue,matches[5]||matches[6]);}},handlers:{concat:function(a,b){for(var i=0,node;node=b[i];i++)
a.push(node);return a;},mark:function(nodes){var _true=Prototype.emptyFunction;for(var i=0,node;node=nodes[i];i++)
node._countedByPrototype=_true;return nodes;},unmark:(function(){var PROPERTIES_ATTRIBUTES_MAP=(function(){var el=document.createElement('div'),isBuggy=false,propName='_countedByPrototype',value='x'
el[propName]=value;isBuggy=(el.getAttribute(propName)===value);el=null;return isBuggy;})();return PROPERTIES_ATTRIBUTES_MAP?function(nodes){for(var i=0,node;node=nodes[i];i++)
node.removeAttribute('_countedByPrototype');return nodes;}:function(nodes){for(var i=0,node;node=nodes[i];i++)
node._countedByPrototype=void 0;return nodes;}})(),index:function(parentNode,reverse,ofType){parentNode._countedByPrototype=Prototype.emptyFunction;if(reverse){for(var nodes=parentNode.childNodes,i=nodes.length-1,j=1;i>=0;i--){var node=nodes[i];if(node.nodeType==1&&(!ofType||node._countedByPrototype))node.nodeIndex=j++;}}else{for(var i=0,j=1,nodes=parentNode.childNodes;node=nodes[i];i++)
if(node.nodeType==1&&(!ofType||node._countedByPrototype))node.nodeIndex=j++;}},unique:function(nodes){if(nodes.length==0)return nodes;var results=[],n;for(var i=0,l=nodes.length;i<l;i++)
if(typeof(n=nodes[i])._countedByPrototype=='undefined'){n._countedByPrototype=Prototype.emptyFunction;results.push(Element.extend(n));}
return Selector.handlers.unmark(results);},descendant:function(nodes){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++)
h.concat(results,node.getElementsByTagName('*'));return results;},child:function(nodes){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++){for(var j=0,child;child=node.childNodes[j];j++)
if(child.nodeType==1&&child.tagName!='!')results.push(child);}
return results;},adjacent:function(nodes){for(var i=0,results=[],node;node=nodes[i];i++){var next=this.nextElementSibling(node);if(next)results.push(next);}
return results;},laterSibling:function(nodes){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++)
h.concat(results,Element.nextSiblings(node));return results;},nextElementSibling:function(node){while(node=node.nextSibling)
if(node.nodeType==1)return node;return null;},previousElementSibling:function(node){while(node=node.previousSibling)
if(node.nodeType==1)return node;return null;},tagName:function(nodes,root,tagName,combinator){var uTagName=tagName.toUpperCase();var results=[],h=Selector.handlers;if(nodes){if(combinator){if(combinator=="descendant"){for(var i=0,node;node=nodes[i];i++)
h.concat(results,node.getElementsByTagName(tagName));return results;}else nodes=this[combinator](nodes);if(tagName=="*")return nodes;}
for(var i=0,node;node=nodes[i];i++)
if(node.tagName.toUpperCase()===uTagName)results.push(node);return results;}else return root.getElementsByTagName(tagName);},id:function(nodes,root,id,combinator){var targetNode=$(id),h=Selector.handlers;if(root==document){if(!targetNode)return[];if(!nodes)return[targetNode];}else{if(!root.sourceIndex||root.sourceIndex<1){var nodes=root.getElementsByTagName('*');for(var j=0,node;node=nodes[j];j++){if(node.id===id)return[node];}}}
if(nodes){if(combinator){if(combinator=='child'){for(var i=0,node;node=nodes[i];i++)
if(targetNode.parentNode==node)return[targetNode];}else if(combinator=='descendant'){for(var i=0,node;node=nodes[i];i++)
if(Element.descendantOf(targetNode,node))return[targetNode];}else if(combinator=='adjacent'){for(var i=0,node;node=nodes[i];i++)
if(Selector.handlers.previousElementSibling(targetNode)==node)
return[targetNode];}else nodes=h[combinator](nodes);}
for(var i=0,node;node=nodes[i];i++)
if(node==targetNode)return[targetNode];return[];}
return(targetNode&&Element.descendantOf(targetNode,root))?[targetNode]:[];},className:function(nodes,root,className,combinator){if(nodes&&combinator)nodes=this[combinator](nodes);return Selector.handlers.byClassName(nodes,root,className);},byClassName:function(nodes,root,className){if(!nodes)nodes=Selector.handlers.descendant([root]);var needle=' '+className+' ';for(var i=0,results=[],node,nodeClassName;node=nodes[i];i++){nodeClassName=node.className;if(nodeClassName.length==0)continue;if(nodeClassName==className||(' '+nodeClassName+' ').include(needle))
results.push(node);}
return results;},attrPresence:function(nodes,root,attr,combinator){if(!nodes)nodes=root.getElementsByTagName("*");if(nodes&&combinator)nodes=this[combinator](nodes);var results=[];for(var i=0,node;node=nodes[i];i++)
if(Element.hasAttribute(node,attr))results.push(node);return results;},attr:function(nodes,root,attr,value,operator,combinator){if(!nodes)nodes=root.getElementsByTagName("*");if(nodes&&combinator)nodes=this[combinator](nodes);var handler=Selector.operators[operator],results=[];for(var i=0,node;node=nodes[i];i++){var nodeValue=Element.readAttribute(node,attr);if(nodeValue===null)continue;if(handler(nodeValue,value))results.push(node);}
return results;},pseudo:function(nodes,name,value,root,combinator){if(nodes&&combinator)nodes=this[combinator](nodes);if(!nodes)nodes=root.getElementsByTagName("*");return Selector.pseudos[name](nodes,value,root);}},pseudos:{'first-child':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(Selector.handlers.previousElementSibling(node))continue;results.push(node);}
return results;},'last-child':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(Selector.handlers.nextElementSibling(node))continue;results.push(node);}
return results;},'only-child':function(nodes,value,root){var h=Selector.handlers;for(var i=0,results=[],node;node=nodes[i];i++)
if(!h.previousElementSibling(node)&&!h.nextElementSibling(node))
results.push(node);return results;},'nth-child':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root);},'nth-last-child':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root,true);},'nth-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root,false,true);},'nth-last-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,formula,root,true,true);},'first-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,"1",root,false,true);},'last-of-type':function(nodes,formula,root){return Selector.pseudos.nth(nodes,"1",root,true,true);},'only-of-type':function(nodes,formula,root){var p=Selector.pseudos;return p['last-of-type'](p['first-of-type'](nodes,formula,root),formula,root);},getIndices:function(a,b,total){if(a==0)return b>0?[b]:[];return $R(1,total).inject([],function(memo,i){if(0==(i-b)%a&&(i-b)/a>=0)memo.push(i);return memo;});},nth:function(nodes,formula,root,reverse,ofType){if(nodes.length==0)return[];if(formula=='even')formula='2n+0';if(formula=='odd')formula='2n+1';var h=Selector.handlers,results=[],indexed=[],m;h.mark(nodes);for(var i=0,node;node=nodes[i];i++){if(!node.parentNode._countedByPrototype){h.index(node.parentNode,reverse,ofType);indexed.push(node.parentNode);}}
if(formula.match(/^\d+$/)){formula=Number(formula);for(var i=0,node;node=nodes[i];i++)
if(node.nodeIndex==formula)results.push(node);}else if(m=formula.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(m[1]=="-")m[1]=-1;var a=m[1]?Number(m[1]):1;var b=m[2]?Number(m[2]):0;var indices=Selector.pseudos.getIndices(a,b,nodes.length);for(var i=0,node,l=indices.length;node=nodes[i];i++){for(var j=0;j<l;j++)
if(node.nodeIndex==indices[j])results.push(node);}}
h.unmark(nodes);h.unmark(indexed);return results;},'empty':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++){if(node.tagName=='!'||node.firstChild)continue;results.push(node);}
return results;},'not':function(nodes,selector,root){var h=Selector.handlers,selectorType,m;var exclusions=new Selector(selector).findElements(root);h.mark(exclusions);for(var i=0,results=[],node;node=nodes[i];i++)
if(!node._countedByPrototype)results.push(node);h.unmark(exclusions);return results;},'enabled':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++)
if(!node.disabled&&(!node.type||node.type!=='hidden'))
results.push(node);return results;},'disabled':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++)
if(node.disabled)results.push(node);return results;},'checked':function(nodes,value,root){for(var i=0,results=[],node;node=nodes[i];i++)
if(node.checked)results.push(node);return results;}},operators:{'=':function(nv,v){return nv==v;},'!=':function(nv,v){return nv!=v;},'^=':function(nv,v){return nv==v||nv&&nv.startsWith(v);},'$=':function(nv,v){return nv==v||nv&&nv.endsWith(v);},'*=':function(nv,v){return nv==v||nv&&nv.include(v);},'~=':function(nv,v){return(' '+nv+' ').include(' '+v+' ');},'|=':function(nv,v){return('-'+(nv||"").toUpperCase()+'-').include('-'+(v||"").toUpperCase()+'-');}},split:function(expression){var expressions=[];expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/,function(m){expressions.push(m[1].strip());});return expressions;},matchElements:function(elements,expression){var matches=$$(expression),h=Selector.handlers;h.mark(matches);for(var i=0,results=[],element;element=elements[i];i++)
if(element._countedByPrototype)results.push(element);h.unmark(matches);return results;},findElement:function(elements,expression,index){if(Object.isNumber(expression)){index=expression;expression=false;}
return Selector.matchElements(elements,expression||'*')[index||0];},findChildElements:function(element,expressions){expressions=Selector.split(expressions.join(','));var results=[],h=Selector.handlers;for(var i=0,l=expressions.length,selector;i<l;i++){selector=new Selector(expressions[i].strip());h.concat(results,selector.findElements(element));}
return(l>1)?h.unique(results):results;}});if(Prototype.Browser.IE){Object.extend(Selector.handlers,{concat:function(a,b){for(var i=0,node;node=b[i];i++)
if(node.tagName!=="!")a.push(node);return a;}});}
function $$(){return Selector.findChildElements(document,$A(arguments));}
var Form={reset:function(form){form=$(form);form.reset();return form;},serializeElements:function(elements,options){if(typeof options!='object')options={hash:!!options};else if(Object.isUndefined(options.hash))options.hash=true;var key,value,submitted=false,submit=options.submit;var data=elements.inject({},function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!='file'&&(element.type!='submit'||(!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true)))){if(key in result){if(!Object.isArray(result[key]))result[key]=[result[key]];result[key].push(value);}
else result[key]=value;}}
return result;});return options.hash?data:Object.toQueryString(data);}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options);},getElements:function(form){var elements=$(form).getElementsByTagName('*'),element,arr=[],serializers=Form.Element.Serializers;for(var i=0;element=elements[i];i++){arr.push(element);}
return arr.inject([],function(elements,child){if(serializers[child.tagName.toLowerCase()])
elements.push(Element.extend(child));return elements;})},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName('input');if(!typeName&&!name)return $A(inputs).map(Element.extend);for(var i=0,matchingInputs=[],length=inputs.length;i<length;i++){var input=inputs[i];if((typeName&&input.type!=typeName)||(name&&input.name!=name))
continue;matchingInputs.push(Element.extend(input));}
return matchingInputs;},disable:function(form){form=$(form);Form.getElements(form).invoke('disable');return form;},enable:function(form){form=$(form);Form.getElements(form).invoke('enable');return form;},findFirstElement:function(form){var elements=$(form).getElements().findAll(function(element){return'hidden'!=element.type&&!element.disabled;});var firstByIndex=elements.findAll(function(element){return element.hasAttribute('tabIndex')&&element.tabIndex>=0;}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return/^(?:input|select|textarea)$/i.test(element.tagName);});},focusFirstElement:function(form){form=$(form);form.findFirstElement().activate();return form;},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute('action')||'';if(action.blank())action=window.location.href;options.parameters=form.serialize(true);if(params){if(Object.isString(params))params=params.toQueryParams();Object.extend(options.parameters,params);}
if(form.hasAttribute('method')&&!options.method)
options.method=form.method;return new Ajax.Request(action,options);}};Form.Element={focus:function(element){$(element).focus();return element;},select:function(element){$(element).select();return element;}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair);}}
return'';},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element);},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element;},clear:function(element){$(element).value='';return element;},present:function(element){return $(element).value!='';},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!='input'||!(/^(?:button|reset|submit)$/i.test(element.type))))
element.select();}catch(e){}
return element;},disable:function(element){element=$(element);element.disabled=true;return element;},enable:function(element){element=$(element);element.disabled=false;return element;}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers={input:function(element,value){switch(element.type.toLowerCase()){case'checkbox':case'radio':return Form.Element.Serializers.inputSelector(element,value);default:return Form.Element.Serializers.textarea(element,value);}},inputSelector:function(element,value){if(Object.isUndefined(value))return element.checked?element.value:null;else element.checked=!!value;},textarea:function(element,value){if(Object.isUndefined(value))return element.value;else element.value=value;},select:function(element,value){if(Object.isUndefined(value))
return this[element.type=='select-one'?'selectOne':'selectMany'](element);else{var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i<length;i++){opt=element.options[i];currentValue=this.optionValue(opt);if(single){if(currentValue==value){opt.selected=true;return;}}
else opt.selected=value.include(currentValue);}}},selectOne:function(element){var index=element.selectedIndex;return index>=0?this.optionValue(element.options[index]):null;},selectMany:function(element){var values,length=element.length;if(!length)return null;for(var i=0,values=[];i<length;i++){var opt=element.options[i];if(opt.selected)values.push(this.optionValue(opt));}
return values;},optionValue:function(opt){return Element.extend(opt).hasAttribute('value')?opt.value:opt.text;}};Abstract.TimedObserver=Class.create(PeriodicalExecuter,{initialize:function($super,element,frequency,callback){$super(callback,frequency);this.element=$(element);this.lastValue=this.getValue();},execute:function(){var value=this.getValue();if(Object.isString(this.lastValue)&&Object.isString(value)?this.lastValue!=value:String(this.lastValue)!=String(value)){this.callback(this.element,value);this.lastValue=value;}}});Form.Element.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.Element.getValue(this.element);}});Form.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.serialize(this.element);}});Abstract.EventObserver=Class.create({initialize:function(element,callback){this.element=$(element);this.callback=callback;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=='form')
this.registerFormCallbacks();else
this.registerCallback(this.element);},onElementEvent:function(){var value=this.getValue();if(this.lastValue!=value){this.callback(this.element,value);this.lastValue=value;}},registerFormCallbacks:function(){Form.getElements(this.element).each(this.registerCallback,this);},registerCallback:function(element){if(element.type){switch(element.type.toLowerCase()){case'checkbox':case'radio':Event.observe(element,'click',this.onElementEvent.bind(this));break;default:Event.observe(element,'change',this.onElementEvent.bind(this));break;}}}});Form.Element.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.Element.getValue(this.element);}});Form.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.serialize(this.element);}});(function(){var 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:{}};var docEl=document.documentElement;var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED='onmouseenter'in docEl&&'onmouseleave'in docEl;var _isButton;if(Prototype.Browser.IE){var buttonMap={0:1,1:4,2:2};_isButton=function(event,code){return event.button===buttonMap[code];};}else if(Prototype.Browser.WebKit){_isButton=function(event,code){switch(code){case 0:return event.which==1&&!event.metaKey;case 1:return event.which==1&&event.metaKey;default:return false;}};}else{_isButton=function(event,code){return event.which?(event.which===code+1):(event.button===code);};}
function isLeftClick(event){return _isButton(event,0)}
function isMiddleClick(event){return _isButton(event,1)}
function isRightClick(event){return _isButton(event,2)}
function element(event){event=Event.extend(event);var node=event.target,type=event.type,currentTarget=event.currentTarget;if(currentTarget&&currentTarget.tagName){if(type==='load'||type==='error'||(type==='click'&&currentTarget.tagName.toLowerCase()==='input'&&currentTarget.type==='radio'))
node=currentTarget;}
if(node.nodeType==Node.TEXT_NODE)
node=node.parentNode;return Element.extend(node);}
function findElement(event,expression){var element=Event.element(event);if(!expression)return element;var elements=[element].concat(element.ancestors());return Selector.findElement(elements,expression,0);}
function pointer(event){return{x:pointerX(event),y:pointerY(event)};}
function pointerX(event){var docElement=document.documentElement,body=document.body||{scrollLeft:0};return event.pageX||(event.clientX+
(docElement.scrollLeft||body.scrollLeft)-
(docElement.clientLeft||0));}
function pointerY(event){var docElement=document.documentElement,body=document.body||{scrollTop:0};return event.pageY||(event.clientY+
(docElement.scrollTop||body.scrollTop)-
(docElement.clientTop||0));}
function stop(event){Event.extend(event);event.preventDefault();event.stopPropagation();event.stopped=true;}
Event.Methods={isLeftClick:isLeftClick,isMiddleClick:isMiddleClick,isRightClick:isRightClick,element:element,findElement:findElement,pointer:pointer,pointerX:pointerX,pointerY:pointerY,stop:stop};var methods=Object.keys(Event.Methods).inject({},function(m,name){m[name]=Event.Methods[name].methodize();return m;});if(Prototype.Browser.IE){function _relatedTarget(event){var element;switch(event.type){case'mouseover':element=event.fromElement;break;case'mouseout':element=event.toElement;break;default:return null;}
return Element.extend(element);}
Object.extend(methods,{stopPropagation:function(){this.cancelBubble=true},preventDefault:function(){this.returnValue=false},inspect:function(){return'[object Event]'}});Event.extend=function(event,element){if(!event)return false;if(event._extendedByPrototype)return event;event._extendedByPrototype=Prototype.emptyFunction;var pointer=Event.pointer(event);Object.extend(event,{target:event.srcElement||element,relatedTarget:_relatedTarget(event),pageX:pointer.x,pageY:pointer.y});return Object.extend(event,methods);};}else{Event.prototype=window.Event.prototype||document.createEvent('HTMLEvents').__proto__;Object.extend(Event.prototype,methods);Event.extend=Prototype.K;}
function _createResponder(element,eventName,handler){var registry=Element.retrieve(element,'prototype_event_registry');if(Object.isUndefined(registry)){CACHE.push(element);registry=Element.retrieve(element,'prototype_event_registry',$H());}
var respondersForEvent=registry.get(eventName);if(Object.isUndefined(respondersForEvent)){respondersForEvent=[];registry.set(eventName,respondersForEvent);}
if(respondersForEvent.pluck('handler').include(handler))return false;var responder;if(eventName.include(":")){responder=function(event){if(Object.isUndefined(event.eventName))
return false;if(event.eventName!==eventName)
return false;Event.extend(event,element);handler.call(element,event);};}else{if(!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED&&(eventName==="mouseenter"||eventName==="mouseleave")){if(eventName==="mouseenter"||eventName==="mouseleave"){responder=function(event){Event.extend(event,element);var parent=event.relatedTarget;while(parent&&parent!==element){try{parent=parent.parentNode;}
catch(e){parent=element;}}
if(parent===element)return;handler.call(element,event);};}}else{responder=function(event){Event.extend(event,element);handler.call(element,event);};}}
responder.handler=handler;respondersForEvent.push(responder);return responder;}
function _destroyCache(){for(var i=0,length=CACHE.length;i<length;i++){Event.stopObserving(CACHE[i]);CACHE[i]=null;}}
var CACHE=[];if(Prototype.Browser.IE)
window.attachEvent('onunload',_destroyCache);if(Prototype.Browser.WebKit)
window.addEventListener('unload',Prototype.emptyFunction,false);var _getDOMEventName=Prototype.K;if(!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED){_getDOMEventName=function(eventName){var translations={mouseenter:"mouseover",mouseleave:"mouseout"};return eventName in translations?translations[eventName]:eventName;};}
function observe(element,eventName,handler){element=$(element);var responder=_createResponder(element,eventName,handler);if(!responder)return element;if(eventName.include(':')){if(element.addEventListener)
element.addEventListener("dataavailable",responder,false);else{element.attachEvent("ondataavailable",responder);element.attachEvent("onfilterchange",responder);}}else{var actualEventName=_getDOMEventName(eventName);if(element.addEventListener)
element.addEventListener(actualEventName,responder,false);else
element.attachEvent("on"+actualEventName,responder);}
return element;}
function stopObserving(element,eventName,handler){element=$(element);var registry=Element.retrieve(element,'prototype_event_registry');if(Object.isUndefined(registry))return element;if(eventName&&!handler){var responders=registry.get(eventName);if(Object.isUndefined(responders))return element;responders.each(function(r){Element.stopObserving(element,eventName,r.handler);});return element;}else if(!eventName){registry.each(function(pair){var eventName=pair.key,responders=pair.value;responders.each(function(r){Element.stopObserving(element,eventName,r.handler);});});return element;}
var responders=registry.get(eventName);if(!responders)return;var responder=responders.find(function(r){return r.handler===handler;});if(!responder)return element;var actualEventName=_getDOMEventName(eventName);if(eventName.include(':')){if(element.removeEventListener)
element.removeEventListener("dataavailable",responder,false);else{element.detachEvent("ondataavailable",responder);element.detachEvent("onfilterchange",responder);}}else{if(element.removeEventListener)
element.removeEventListener(actualEventName,responder,false);else
element.detachEvent('on'+actualEventName,responder);}
registry.set(eventName,responders.without(responder));return element;}
function fire(element,eventName,memo,bubble){element=$(element);if(Object.isUndefined(bubble))
bubble=true;if(element==document&&document.createEvent&&!element.dispatchEvent)
element=document.documentElement;var event;if(document.createEvent){event=document.createEvent('HTMLEvents');event.initEvent('dataavailable',true,true);}else{event=document.createEventObject();event.eventType=bubble?'ondataavailable':'onfilterchange';}
event.eventName=eventName;event.memo=memo||{};if(document.createEvent)
element.dispatchEvent(event);else
element.fireEvent(event.eventType,event);return Event.extend(event);}
Object.extend(Event,Event.Methods);Object.extend(Event,{fire:fire,observe:observe,stopObserving:stopObserving});Element.addMethods({fire:fire,observe:observe,stopObserving:stopObserving});Object.extend(document,{fire:fire.methodize(),observe:observe.methodize(),stopObserving:stopObserving.methodize(),loaded:false});if(window.Event)Object.extend(window.Event,Event);else window.Event=Event;})();(function(){var timer;function fireContentLoadedEvent(){if(document.loaded)return;if(timer)window.clearTimeout(timer);document.loaded=true;document.fire('dom:loaded');}
function checkReadyState(){if(document.readyState==='complete'){document.stopObserving('readystatechange',checkReadyState);fireContentLoadedEvent();}}
function pollDoScroll(){try{document.documentElement.doScroll('left');}
catch(e){timer=pollDoScroll.defer();return;}
fireContentLoadedEvent();}
if(document.addEventListener){document.addEventListener('DOMContentLoaded',fireContentLoadedEvent,false);}else{document.observe('readystatechange',checkReadyState);if(window==top)
timer=pollDoScroll.defer();}
Event.observe(window,'load',fireContentLoadedEvent);})();Element.addMethods();Hash.toQueryString=Object.toQueryString;var Toggle={display:Element.toggle};Element.Methods.childOf=Element.Methods.descendantOf;var Insertion={Before:function(element,content){return Element.insert(element,{before:content});},Top:function(element,content){return Element.insert(element,{top:content});},Bottom:function(element,content){return Element.insert(element,{bottom:content});},After:function(element,content){return Element.insert(element,{after:content});}};var $continue=new Error('"throw $continue" is deprecated, use "return" instead');var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;},within:function(element,x,y){if(this.includeScrollOffsets)
return this.withinIncludingScrolloffsets(element,x,y);this.xcomp=x;this.ycomp=y;this.offset=Element.cumulativeOffset(element);return(y>=this.offset[1]&&y<this.offset[1]+element.offsetHeight&&x>=this.offset[0]&&x<this.offset[0]+element.offsetWidth);},withinIncludingScrolloffsets:function(element,x,y){var offsetcache=Element.cumulativeScrollOffset(element);this.xcomp=x+offsetcache[0]-this.deltaX;this.ycomp=y+offsetcache[1]-this.deltaY;this.offset=Element.cumulativeOffset(element);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+element.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+element.offsetWidth);},overlap:function(mode,element){if(!mode)return 0;if(mode=='vertical')
return((this.offset[1]+element.offsetHeight)-this.ycomp)/element.offsetHeight;if(mode=='horizontal')
return((this.offset[0]+element.offsetWidth)-this.xcomp)/element.offsetWidth;},cumulativeOffset:Element.Methods.cumulativeOffset,positionedOffset:Element.Methods.positionedOffset,absolutize:function(element){Position.prepare();return Element.absolutize(element);},relativize:function(element){Position.prepare();return Element.relativize(element);},realOffset:Element.Methods.cumulativeScrollOffset,offsetParent:Element.Methods.getOffsetParent,page:Element.Methods.viewportOffset,clone:function(source,target,options){options=options||{};return Element.clonePosition(target,source,options);}};if(!document.getElementsByClassName)document.getElementsByClassName=function(instanceMethods){function iter(name){return name.blank()?null:"[contains(concat(' ', @class, ' '), ' "+name+" ')]";}
instanceMethods.getElementsByClassName=Prototype.BrowserFeatures.XPath?function(element,className){className=className.toString().strip();var cond=/\s/.test(className)?$w(className).map(iter).join(''):iter(className);return cond?document._getElementsByXPath('.//*'+cond,element):[];}:function(element,className){className=className.toString().strip();var elements=[],classNames=(/\s/.test(className)?$w(className):null);if(!classNames&&!className)return elements;var nodes=$(element).getElementsByTagName('*');className=' '+className+' ';for(var i=0,child,cn;child=nodes[i];i++){if(child.className&&(cn=' '+child.className+' ')&&(cn.include(className)||(classNames&&classNames.all(function(name){return!name.toString().blank()&&cn.include(' '+name+' ');}))))
elements.push(Element.extend(child));}
return elements;};return function(className,parentElement){return $(parentElement||document.body).getElementsByClassName(className);};}(Element.Methods);Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(element){this.element=$(element);},_each:function(iterator){this.element.className.split(/\s+/).select(function(name){return name.length>0;})._each(iterator);},set:function(className){this.element.className=className;},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set($A(this).concat(classNameToAdd).join(' '));},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set($A(this).without(classNameToRemove).join(' '));},toString:function(){return $A(this).join(' ');}};Object.extend(Element.ClassNames.prototype,Enumerable);String.prototype.parseColor=function(){var color='#';if(this.slice(0,4)=='rgb('){var cols=this.slice(4,this.length-1).split(',');var i=0;do{color+=parseInt(cols[i]).toColorPart()}while(++i<3);}else{if(this.slice(0,1)=='#'){if(this.length==4)for(var i=1;i<4;i++)color+=(this.charAt(i)+this.charAt(i)).toLowerCase();if(this.length==7)color=this.toLowerCase();}}
return(color.length==7?color:(arguments[0]||this));};Element.collectTextNodes=function(element){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:(node.hasChildNodes()?Element.collectTextNodes(node):''));}).flatten().join('');};Element.collectTextNodesIgnoreClass=function(element,className){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:((node.hasChildNodes()&&!Element.hasClassName(node,className))?Element.collectTextNodesIgnoreClass(node,className):''));}).flatten().join('');};Element.setContentZoom=function(element,percent){element=$(element);element.setStyle({fontSize:(percent/100)+'em'});if(Prototype.Browser.WebKit)window.scrollBy(0,0);return element;};Element.getInlineOpacity=function(element){return $(element).style.opacity||'';};Element.forceRerendering=function(element){try{element=$(element);var n=document.createTextNode(' ');element.appendChild(n);element.removeChild(n);}catch(e){}};var Effect={_elementDoesNotExistError:{name:'ElementDoesNotExistError',message:'The specified DOM element does not exist, but is required for this effect to operate'},Transitions:{linear:Prototype.K,sinoidal:function(pos){return(-Math.cos(pos*Math.PI)/2)+0.5;},reverse:function(pos){return 1-pos;},flicker:function(pos){var pos=((-Math.cos(pos*Math.PI)/4)+0.75)+Math.random()/4;return pos>1?1:pos;},wobble:function(pos){return(-Math.cos(pos*Math.PI*(9*pos))/2)+0.5;},pulse:function(pos,pulses){pulses=pulses||5;return(((pos%(1/pulses))*pulses).round()==0?((pos*pulses*2)-(pos*pulses*2).floor()):1-((pos*pulses*2)-(pos*pulses*2).floor()));},spring:function(pos){return 1-(Math.cos(pos*4.5*Math.PI)*Math.exp(-pos*6));},none:function(pos){return 0;},full:function(pos){return 1;}},DefaultOptions:{duration:1.0,fps:100,sync:false,from:0.0,to:1.0,delay:0.0,queue:'parallel'},tagifyText:function(element){var tagifyStyle='position:relative';if(Prototype.Browser.IE)tagifyStyle+=';zoom:1';element=$(element);$A(element.childNodes).each(function(child){if(child.nodeType==3){child.nodeValue.toArray().each(function(character){element.insertBefore(new Element('span',{style:tagifyStyle}).update(character==' '?String.fromCharCode(160):character),child);});Element.remove(child);}});},multiple:function(element,effect){var elements;if(((typeof element=='object')||Object.isFunction(element))&&(element.length))
elements=element;else
elements=$(element).childNodes;var options=Object.extend({speed:0.1,delay:0.0},arguments[2]||{});var masterDelay=options.delay;$A(elements).each(function(element,index){new effect(element,Object.extend(options,{delay:index*options.speed+masterDelay}));});},PAIRS:{'slide':['SlideDown','SlideUp'],'blind':['BlindDown','BlindUp'],'appear':['Appear','Fade']},toggle:function(element,effect){element=$(element);effect=(effect||'appear').toLowerCase();var options=Object.extend({queue:{position:'end',scope:(element.id||'global'),limit:1}},arguments[2]||{});Effect[element.visible()?Effect.PAIRS[effect][1]:Effect.PAIRS[effect][0]](element,options);}};Effect.DefaultOptions.transition=Effect.Transitions.sinoidal;Effect.ScopedQueue=Class.create(Enumerable,{initialize:function(){this.effects=[];this.interval=null;},_each:function(iterator){this.effects._each(iterator);},add:function(effect){var timestamp=new Date().getTime();var position=Object.isString(effect.options.queue)?effect.options.queue:effect.options.queue.position;switch(position){case'front':this.effects.findAll(function(e){return e.state=='idle'}).each(function(e){e.startOn+=effect.finishOn;e.finishOn+=effect.finishOn;});break;case'with-last':timestamp=this.effects.pluck('startOn').max()||timestamp;break;case'end':timestamp=this.effects.pluck('finishOn').max()||timestamp;break;}
effect.startOn+=timestamp;effect.finishOn+=timestamp;if(!effect.options.queue.limit||(this.effects.length<effect.options.queue.limit))
this.effects.push(effect);if(!this.interval)
this.interval=setInterval(this.loop.bind(this),15);},remove:function(effect){this.effects=this.effects.reject(function(e){return e==effect});if(this.effects.length==0){clearInterval(this.interval);this.interval=null;}},loop:function(){var timePos=new Date().getTime();for(var i=0,len=this.effects.length;i<len;i++)
this.effects[i]&&this.effects[i].loop(timePos);}});Effect.Queues={instances:$H(),get:function(queueName){if(!Object.isString(queueName))return queueName;return this.instances.get(queueName)||this.instances.set(queueName,new Effect.ScopedQueue());}};Effect.Queue=Effect.Queues.get('global');Effect.Base=Class.create({position:null,start:function(options){function codeForEvent(options,eventName){return((options[eventName+'Internal']?'this.options.'+eventName+'Internal(this);':'')+
(options[eventName]?'this.options.'+eventName+'(this);':''));}
if(options&&options.transition===false)options.transition=Effect.Transitions.linear;this.options=Object.extend(Object.extend({},Effect.DefaultOptions),options||{});this.currentFrame=0;this.state='idle';this.startOn=this.options.delay*1000;this.finishOn=this.startOn+(this.options.duration*1000);this.fromToDelta=this.options.to-this.options.from;this.totalTime=this.finishOn-this.startOn;this.totalFrames=this.options.fps*this.options.duration;eval('this.render = function(pos){ '+'if (this.state=="idle"){this.state="running";'+
codeForEvent(this.options,'beforeSetup')+
(this.setup?'this.setup();':'')+
codeForEvent(this.options,'afterSetup')+'};if (this.state=="running"){'+'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+'this.position=pos;'+
codeForEvent(this.options,'beforeUpdate')+
(this.update?'this.update(pos);':'')+
codeForEvent(this.options,'afterUpdate')+'}}');this.event('beforeStart');if(!this.options.sync)
Effect.Queues.get(Object.isString(this.options.queue)?'global':this.options.queue.scope).add(this);},loop:function(timePos){if(timePos>=this.startOn){if(timePos>=this.finishOn){this.render(1.0);this.cancel();this.event('beforeFinish');if(this.finish)this.finish();this.event('afterFinish');return;}
var pos=(timePos-this.startOn)/this.totalTime,frame=(pos*this.totalFrames).round();if(frame>this.currentFrame){this.render(pos);this.currentFrame=frame;}}},cancel:function(){if(!this.options.sync)
Effect.Queues.get(Object.isString(this.options.queue)?'global':this.options.queue.scope).remove(this);this.state='finished';},event:function(eventName){if(this.options[eventName+'Internal'])this.options[eventName+'Internal'](this);if(this.options[eventName])this.options[eventName](this);},inspect:function(){var data=$H();for(property in this)
if(!Object.isFunction(this[property]))data.set(property,this[property]);return'#<Effect:'+data.inspect()+',options:'+$H(this.options).inspect()+'>';}});Effect.Parallel=Class.create(Effect.Base,{initialize:function(effects){this.effects=effects||[];this.start(arguments[1]);},update:function(position){this.effects.invoke('render',position);},finish:function(position){this.effects.each(function(effect){effect.render(1.0);effect.cancel();effect.event('beforeFinish');if(effect.finish)effect.finish(position);effect.event('afterFinish');});}});Effect.Tween=Class.create(Effect.Base,{initialize:function(object,from,to){object=Object.isString(object)?$(object):object;var args=$A(arguments),method=args.last(),options=args.length==5?args[3]:null;this.method=Object.isFunction(method)?method.bind(object):Object.isFunction(object[method])?object[method].bind(object):function(value){object[method]=value};this.start(Object.extend({from:from,to:to},options||{}));},update:function(position){this.method(position);}});Effect.Event=Class.create(Effect.Base,{initialize:function(){this.start(Object.extend({duration:0},arguments[0]||{}));},update:Prototype.emptyFunction});Effect.Opacity=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout))
this.element.setStyle({zoom:1});var options=Object.extend({from:this.element.getOpacity()||0.0,to:1.0},arguments[1]||{});this.start(options);},update:function(position){this.element.setOpacity(position);}});Effect.Move=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({x:0,y:0,mode:'relative'},arguments[1]||{});this.start(options);},setup:function(){this.element.makePositioned();this.originalLeft=parseFloat(this.element.getStyle('left')||'0');this.originalTop=parseFloat(this.element.getStyle('top')||'0');if(this.options.mode=='absolute'){this.options.x=this.options.x-this.originalLeft;this.options.y=this.options.y-this.originalTop;}},update:function(position){this.element.setStyle({left:(this.options.x*position+this.originalLeft).round()+'px',top:(this.options.y*position+this.originalTop).round()+'px'});}});Effect.MoveBy=function(element,toTop,toLeft){return new Effect.Move(element,Object.extend({x:toLeft,y:toTop},arguments[3]||{}));};Effect.Scale=Class.create(Effect.Base,{initialize:function(element,percent){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:'box',scaleFrom:100.0,scaleTo:percent},arguments[2]||{});this.start(options);},setup:function(){this.restoreAfterFinish=this.options.restoreAfterFinish||false;this.elementPositioning=this.element.getStyle('position');this.originalStyle={};['top','left','width','height','fontSize'].each(function(k){this.originalStyle[k]=this.element.style[k];}.bind(this));this.originalTop=this.element.offsetTop;this.originalLeft=this.element.offsetLeft;var fontSize=this.element.getStyle('font-size')||'100%';['em','px','%','pt'].each(function(fontSizeType){if(fontSize.indexOf(fontSizeType)>0){this.fontSize=parseFloat(fontSize);this.fontSizeType=fontSizeType;}}.bind(this));this.factor=(this.options.scaleTo-this.options.scaleFrom)/100;this.dims=null;if(this.options.scaleMode=='box')
this.dims=[this.element.offsetHeight,this.element.offsetWidth];if(/^content/.test(this.options.scaleMode))
this.dims=[this.element.scrollHeight,this.element.scrollWidth];if(!this.dims)
this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth];},update:function(position){var currentScale=(this.options.scaleFrom/100.0)+(this.factor*position);if(this.options.scaleContent&&this.fontSize)
this.element.setStyle({fontSize:this.fontSize*currentScale+this.fontSizeType});this.setDimensions(this.dims[0]*currentScale,this.dims[1]*currentScale);},finish:function(position){if(this.restoreAfterFinish)this.element.setStyle(this.originalStyle);},setDimensions:function(height,width){var d={};if(this.options.scaleX)d.width=width.round()+'px';if(this.options.scaleY)d.height=height.round()+'px';if(this.options.scaleFromCenter){var topd=(height-this.dims[0])/2;var leftd=(width-this.dims[1])/2;if(this.elementPositioning=='absolute'){if(this.options.scaleY)d.top=this.originalTop-topd+'px';if(this.options.scaleX)d.left=this.originalLeft-leftd+'px';}else{if(this.options.scaleY)d.top=-topd+'px';if(this.options.scaleX)d.left=-leftd+'px';}}
this.element.setStyle(d);}});Effect.Highlight=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({startcolor:'#ffff99'},arguments[1]||{});this.start(options);},setup:function(){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(i){return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16)}.bind(this));this._delta=$R(0,2).map(function(i){return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]}.bind(this));},update:function(position){this.element.setStyle({backgroundColor:$R(0,2).inject('#',function(m,v,i){return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart());}.bind(this))});},finish:function(){this.element.setStyle(Object.extend(this.oldStyle,{backgroundColor:this.options.restorecolor}));}});Effect.ScrollTo=function(element){var options=arguments[1]||{},scrollOffsets=document.viewport.getScrollOffsets(),elementOffsets=$(element).cumulativeOffset(),max=(window.height||document.body.scrollHeight)-document.viewport.getHeight();if(options.offset)elementOffsets[1]+=options.offset;return new Effect.Tween(null,scrollOffsets.top,elementOffsets[1]>max?max:elementOffsets[1],options,function(p){scrollTo(scrollOffsets.left,p.round())});};Effect.Fade=function(element){element=$(element);var oldOpacity=element.getInlineOpacity();var options=Object.extend({from:element.getOpacity()||1.0,to:0.0,afterFinishInternal:function(effect){if(effect.options.to!=0)return;effect.element.hide().setStyle({opacity:oldOpacity});}},arguments[1]||{});return new Effect.Opacity(element,options);};Effect.Appear=function(element){element=$(element);var options=Object.extend({from:(element.getStyle('display')=='none'?0.0:element.getOpacity()||0.0),to:1.0,afterFinishInternal:function(effect){effect.element.forceRerendering();},beforeSetup:function(effect){effect.element.setOpacity(effect.options.from).show();}},arguments[1]||{});return new Effect.Opacity(element,options);};Effect.Puff=function(element){element=$(element);var oldStyle={opacity:element.getInlineOpacity(),position:element.getStyle('position'),top:element.style.top,left:element.style.left,width:element.style.width,height:element.style.height};return new Effect.Parallel([new Effect.Scale(element,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new Effect.Opacity(element,{sync:true,to:0.0})],Object.extend({duration:1.0,beforeSetupInternal:function(effect){Position.absolutize(effect.effects[0].element)},afterFinishInternal:function(effect){effect.effects[0].element.hide().setStyle(oldStyle);}},arguments[1]||{}));};Effect.BlindUp=function(element){element=$(element);element.makeClipping();return new Effect.Scale(element,0,Object.extend({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(effect){effect.element.hide().undoClipping();}},arguments[1]||{}));};Effect.BlindDown=function(element){element=$(element);var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makeClipping().setStyle({height:'0px'}).show();},afterFinishInternal:function(effect){effect.element.undoClipping();}},arguments[1]||{}));};Effect.SwitchOff=function(element){element=$(element);var oldOpacity=element.getInlineOpacity();return new Effect.Appear(element,Object.extend({duration:0.4,from:0,transition:Effect.Transitions.flicker,afterFinishInternal:function(effect){new Effect.Scale(effect.element,1,{duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetup:function(effect){effect.element.makePositioned().makeClipping();},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned().setStyle({opacity:oldOpacity});}})}},arguments[1]||{}));};Effect.DropOut=function(element){element=$(element);var oldStyle={top:element.getStyle('top'),left:element.getStyle('left'),opacity:element.getInlineOpacity()};return new Effect.Parallel([new Effect.Move(element,{x:0,y:100,sync:true}),new Effect.Opacity(element,{sync:true,to:0.0})],Object.extend({duration:0.5,beforeSetup:function(effect){effect.effects[0].element.makePositioned();},afterFinishInternal:function(effect){effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);}},arguments[1]||{}));};Effect.Shake=function(element){element=$(element);var options=Object.extend({distance:20,duration:0.5},arguments[1]||{});var distance=parseFloat(options.distance);var split=parseFloat(options.duration)/10.0;var oldStyle={top:element.getStyle('top'),left:element.getStyle('left')};return new Effect.Move(element,{x:distance,y:0,duration:split,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-distance,y:0,duration:split,afterFinishInternal:function(effect){effect.element.undoPositioned().setStyle(oldStyle);}})}})}})}})}})}});};Effect.SlideDown=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle('bottom');var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:window.opera?0:1,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({top:''});effect.element.makeClipping().setStyle({height:'0px'}).show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});},afterFinishInternal:function(effect){effect.element.undoClipping().undoPositioned();effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom});}},arguments[1]||{}));};Effect.SlideUp=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle('bottom');var elementDimensions=element.getDimensions();return new Effect.Scale(element,window.opera?0:1,Object.extend({scaleContent:false,scaleX:false,scaleMode:'box',scaleFrom:100,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({top:''});effect.element.makeClipping().show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned();effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom});}},arguments[1]||{}));};Effect.Squish=function(element){return new Effect.Scale(element,window.opera?1:0,{restoreAfterFinish:true,beforeSetup:function(effect){effect.element.makeClipping();},afterFinishInternal:function(effect){effect.element.hide().undoClipping();}});};Effect.Grow=function(element){element=$(element);var options=Object.extend({direction:'center',moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.full},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:element.getInlineOpacity()};var dims=element.getDimensions();var initialMoveX,initialMoveY;var moveX,moveY;switch(options.direction){case'top-left':initialMoveX=initialMoveY=moveX=moveY=0;break;case'top-right':initialMoveX=dims.width;initialMoveY=moveY=0;moveX=-dims.width;break;case'bottom-left':initialMoveX=moveX=0;initialMoveY=dims.height;moveY=-dims.height;break;case'bottom-right':initialMoveX=dims.width;initialMoveY=dims.height;moveX=-dims.width;moveY=-dims.height;break;case'center':initialMoveX=dims.width/2;initialMoveY=dims.height/2;moveX=-dims.width/2;moveY=-dims.height/2;break;}
return new Effect.Move(element,{x:initialMoveX,y:initialMoveY,duration:0.01,beforeSetup:function(effect){effect.element.hide().makeClipping().makePositioned();},afterFinishInternal:function(effect){new Effect.Parallel([new Effect.Opacity(effect.element,{sync:true,to:1.0,from:0.0,transition:options.opacityTransition}),new Effect.Move(effect.element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition}),new Effect.Scale(effect.element,100,{scaleMode:{originalHeight:dims.height,originalWidth:dims.width},sync:true,scaleFrom:window.opera?1:0,transition:options.scaleTransition,restoreAfterFinish:true})],Object.extend({beforeSetup:function(effect){effect.effects[0].element.setStyle({height:'0px'}).show();},afterFinishInternal:function(effect){effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);}},options))}});};Effect.Shrink=function(element){element=$(element);var options=Object.extend({direction:'center',moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.none},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:element.getInlineOpacity()};var dims=element.getDimensions();var moveX,moveY;switch(options.direction){case'top-left':moveX=moveY=0;break;case'top-right':moveX=dims.width;moveY=0;break;case'bottom-left':moveX=0;moveY=dims.height;break;case'bottom-right':moveX=dims.width;moveY=dims.height;break;case'center':moveX=dims.width/2;moveY=dims.height/2;break;}
return new Effect.Parallel([new Effect.Opacity(element,{sync:true,to:0.0,from:1.0,transition:options.opacityTransition}),new Effect.Scale(element,window.opera?1:0,{sync:true,transition:options.scaleTransition,restoreAfterFinish:true}),new Effect.Move(element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition})],Object.extend({beforeStartInternal:function(effect){effect.effects[0].element.makePositioned().makeClipping();},afterFinishInternal:function(effect){effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle);}},options));};Effect.Pulsate=function(element){element=$(element);var options=arguments[1]||{};var oldOpacity=element.getInlineOpacity();var transition=options.transition||Effect.Transitions.sinoidal;var reverser=function(pos){return transition(1-Effect.Transitions.pulse(pos,options.pulses))};reverser.bind(transition);return new Effect.Opacity(element,Object.extend(Object.extend({duration:2.0,from:0,afterFinishInternal:function(effect){effect.element.setStyle({opacity:oldOpacity});}},options),{transition:reverser}));};Effect.Fold=function(element){element=$(element);var oldStyle={top:element.style.top,left:element.style.left,width:element.style.width,height:element.style.height};element.makeClipping();return new Effect.Scale(element,5,Object.extend({scaleContent:false,scaleX:false,afterFinishInternal:function(effect){new Effect.Scale(element,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(effect){effect.element.hide().undoClipping().setStyle(oldStyle);}});}},arguments[1]||{}));};Effect.Morph=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({style:{}},arguments[1]||{});if(!Object.isString(options.style))this.style=$H(options.style);else{if(options.style.include(':'))
this.style=options.style.parseStyle();else{this.element.addClassName(options.style);this.style=$H(this.element.getStyles());this.element.removeClassName(options.style);var css=this.element.getStyles();this.style=this.style.reject(function(style){return style.value==css[style.key];});options.afterFinishInternal=function(effect){effect.element.addClassName(effect.options.style);effect.transforms.each(function(transform){effect.element.style[transform.style]='';});}}}
this.start(options);},setup:function(){function parseColor(color){if(!color||['rgba(0, 0, 0, 0)','transparent'].include(color))color='#ffffff';color=color.parseColor();return $R(0,2).map(function(i){return parseInt(color.slice(i*2+1,i*2+3),16)});}
this.transforms=this.style.map(function(pair){var property=pair[0],value=pair[1],unit=null;if(value.parseColor('#zzzzzz')!='#zzzzzz'){value=value.parseColor();unit='color';}else if(property=='opacity'){value=parseFloat(value);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout))
this.element.setStyle({zoom:1});}else if(Element.CSS_LENGTH.test(value)){var components=value.match(/^([\+\-]?[0-9\.]+)(.*)$/);value=parseFloat(components[1]);unit=(components.length==3)?components[2]:null;}
var originalValue=this.element.getStyle(property);return{style:property.camelize(),originalValue:unit=='color'?parseColor(originalValue):parseFloat(originalValue||0),targetValue:unit=='color'?parseColor(value):value,unit:unit};}.bind(this)).reject(function(transform){return((transform.originalValue==transform.targetValue)||(transform.unit!='color'&&(isNaN(transform.originalValue)||isNaN(transform.targetValue))))});},update:function(position){var style={},transform,i=this.transforms.length;while(i--)
style[(transform=this.transforms[i]).style]=transform.unit=='color'?'#'+
(Math.round(transform.originalValue[0]+
(transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart()+
(Math.round(transform.originalValue[1]+
(transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart()+
(Math.round(transform.originalValue[2]+
(transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart():(transform.originalValue+
(transform.targetValue-transform.originalValue)*position).toFixed(3)+
(transform.unit===null?'':transform.unit);this.element.setStyle(style,true);}});Effect.Transform=Class.create({initialize:function(tracks){this.tracks=[];this.options=arguments[1]||{};this.addTracks(tracks);},addTracks:function(tracks){tracks.each(function(track){track=$H(track);var data=track.values().first();this.tracks.push($H({ids:track.keys().first(),effect:Effect.Morph,options:{style:data}}));}.bind(this));return this;},play:function(){return new Effect.Parallel(this.tracks.map(function(track){var ids=track.get('ids'),effect=track.get('effect'),options=track.get('options');var elements=[$(ids)||$$(ids)].flatten();return elements.map(function(e){return new effect(e,Object.extend({sync:true},options))});}).flatten(),this.options);}});Element.CSS_PROPERTIES=$w('backgroundColor backgroundPosition borderBottomColor borderBottomStyle '+'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth '+'borderRightColor borderRightStyle borderRightWidth borderSpacing '+'borderTopColor borderTopStyle borderTopWidth bottom clip color '+'fontSize fontWeight height left letterSpacing lineHeight '+'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+'maxWidth minHeight minWidth opacity outlineColor outlineOffset '+'outlineWidth paddingBottom paddingLeft paddingRight paddingTop '+'right textIndent top width wordSpacing zIndex');Element.CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;String.__parseStyleElement=document.createElement('div');String.prototype.parseStyle=function(){var style,styleRules=$H();if(Prototype.Browser.WebKit)
style=new Element('div',{style:this}).style;else{String.__parseStyleElement.innerHTML='<div style="'+this+'"></div>';style=String.__parseStyleElement.childNodes[0].style;}
Element.CSS_PROPERTIES.each(function(property){if(style[property])styleRules.set(property,style[property]);});if(Prototype.Browser.IE&&this.include('opacity'))
styleRules.set('opacity',this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);return styleRules;};if(document.defaultView&&document.defaultView.getComputedStyle){Element.getStyles=function(element){var css=document.defaultView.getComputedStyle($(element),null);return Element.CSS_PROPERTIES.inject({},function(styles,property){styles[property]=css[property];return styles;});};}else{Element.getStyles=function(element){element=$(element);var css=element.currentStyle,styles;styles=Element.CSS_PROPERTIES.inject({},function(hash,property){hash.set(property,css[property]);return hash;});if(!styles.opacity)styles.set('opacity',element.getOpacity());return styles;};};Effect.Methods={morph:function(element,style){element=$(element);new Effect.Morph(element,Object.extend({style:style},arguments[2]||{}));return element;},visualEffect:function(element,effect,options){element=$(element)
var s=effect.dasherize().camelize(),klass=s.charAt(0).toUpperCase()+s.substring(1);new Effect[klass](element,options);return element;},highlight:function(element,options){element=$(element);new Effect.Highlight(element,options);return element;}};$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+'pulsate shake puff squish switchOff dropOut').each(function(effect){Effect.Methods[effect]=function(element,options){element=$(element);Effect[effect.charAt(0).toUpperCase()+effect.substring(1)](element,options);return element;}});$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(function(f){Effect.Methods[f]=Element[f];});Element.addMethods(Effect.Methods);var Cookie={set:function(name,value,daysToExpire){var expire='';if(daysToExpire!=undefined){var d=new Date();d.setTime(d.getTime()+(86400000*parseFloat(daysToExpire)));expire='; expires='+d.toGMTString();}
return(document.cookie=escape(name)+'='+escape(value||'')+expire+"; path=/;");},get:function(name){var cookie=document.cookie.match(new RegExp('(^|;)\\s*'+escape(name)+'=([^;\\s]*)'));return(cookie?unescape(cookie[2]):null);},erase:function(name){var cookie=Cookie.get(name)||true;Cookie.set(name,'',-1);return cookie;},accept:function(){if(typeof navigator.cookieEnabled=='boolean'){return navigator.cookieEnabled;}
Cookie.set('_test','1');return(Cookie.erase('_test')==='1');}};function toggleTab(action){if($(action).style.display=='none'){$$('.hidden').each(function(s){Element.hide(s)})};Element.toggle(action);}
function popoutEmbed(hash,w,h,show_cache){var casttvBarHeight=30;open("/videos/popout/"+hash+"?w="+w+"&h="+h+"&show_cache="+(show_cache?'true':'false'),hash,"width="+(w+casttvBarHeight)+",height="+h+",status=no,toolbar=no,location=no,menubar=no,directories=no,resizable=1,scrollbars=no");if(embedTrack){embedTrack(hash,'popout');}}
function toggleEmbed(vid,cached,removed){prefix=cached?'cached_':'';var div=$('embedcontent_'+prefix+vid);$$('.embed_div').each(function(e){if(e!=div&&e.toggleOn){e.toggle();}});div.toggle();if(toggleEmbed.prev_vid&&((vid!=toggleEmbed.prev_vid)||(cached!=toggleEmbed.prev_cached))){var prev_prefix=toggleEmbed.prev_cached?'cached_':'';var prev_link=$("text_toggle_"+prev_prefix+toggleEmbed.prev_vid);var prev_big_icon=(!toggleEmbed.prev_cached||toggleEmbed.prev_removed)?$("inset_"+toggleEmbed.prev_vid):false;var prev_small_icon=$("icon_toggle_"+prev_prefix+toggleEmbed.prev_vid);if(prev_link)prev_link.innerHTML=(toggleEmbed.prev_cached?'watch cached video':'watch here');if(prev_small_icon)prev_small_icon.src="/images/plus.gif";if(prev_big_icon)prev_big_icon.src="/images/big_plus.gif";if(!toggleEmbed.prev_cached&&prev_big_icon)prev_big_icon.src="/images/big_plus.gif";embedTrack(toggleEmbed.prev_vid,"close",(toggleEmbed.prev_cached?'cached=1':''));}
var link=$("text_toggle_"+prefix+vid);var big_icon=$("inset_"+vid);var small_icon=$("icon_toggle_"+prefix+vid);if(div.style.display=="none"){if(link)link.innerHTML=(cached?'watch cached video':'watch here');if(small_icon)small_icon.src="/images/plus.gif";if((!cached||(cached&&removed))&&big_icon)big_icon.src="/images/big_plus.gif";embedTrack(vid,"close",(cached?'cached=1':''));}else{if(link)link.innerHTML='hide video';if(small_icon)small_icon.src="/images/minus.gif";if((!cached||(cached&&removed))&&big_icon)big_icon.src="/images/big_minus.gif";embedTrack(vid,"open",(cached?'cached=1':''));scrollIntoView(div);}
toggleEmbed.prev_vid=vid;toggleEmbed.prev_cached=cached;toggleEmbed.prev_removed=removed;return false;}
function scrollIntoView(element){var padding=30;var scroll=document.viewport.getScrollOffsets().top;var viewH=document.viewport.getHeight();var pos=element.cumulativeOffset().top
var h=element.getHeight();var finalScroll=pos+h+padding-viewH;var delta=finalScroll-scroll;var i=0;var steps=10;var dt=0.05;if(scroll<finalScroll){new PeriodicalExecuter(function(pe){window.scrollTo(0,easeInOut(i++,scroll,delta,steps));if(i>=steps)pe.stop();},dt);}}
function easeInOut(t,b,c,d){if((t/=d/2)<1)return c/2*t*t+b;return-c/2*((--t)*(t-2)-1)+b;}
function addLoadEvent(func){var oldonload=window.onload;if(typeof window.onload!='function'){window.onload=func;}else{window.onload=function(){oldonload();func();}}}
function addResizeEvent(func){var oldonresize=window.onresize;if(typeof window.onresize!='function'){window.onresize=func;}else{window.onresize=function(){oldonresize();func();}}}
function createCookie(name,value,days){if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));var expires="; expires="+date.toGMTString();}
else var expires="";document.cookie=name+"="+value+expires+"; path=/";}
function readCookie(name){var nameEQ=name+"=";var ca=document.cookie.split(';');for(var i=0;i<ca.length;i++){var c=ca[i];while(c.charAt(0)==' ')c=c.substring(1,c.length);if(c.indexOf(nameEQ)==0)return c.substring(nameEQ.length,c.length);}
return null;}
function eraseCookie(name){createCookie(name,"",-1);}
function arrow(id){var cid='content_'+id;var c=$(cid)
var img=$(id)
Element.toggle(c)
if(c.style.display=='none')
{createCookie(id,"hidden")
img.src="/images/arrow-right.gif";}else{eraseCookie(id)
img.src="/images/arrow-down.gif";}}
function admin_clear(){Cookie.erase("up");Cookie.erase("up_query");Cookie.erase("down");Cookie.erase("down_query");alert('training memory cleared.');}
function admin_up(n){Cookie.set("up",n);Cookie.set("up_query",$F('q1'));admin_go();}
function admin_down(n){Cookie.set("down",n);Cookie.set("down_query",$F('q1'));admin_go();}
function admin_go(){sep=location.href.indexOf("?")>-1?"&":"?";if(Cookie.get("up")!=null&&Cookie.get("down")!=null){var comment=prompt("Comment:");if(comment){Cookie.set("comment",comment);location.replace(location.href+sep+"reset=true");}}}
function escapeSearchQuery(s){return s.replace("%","%25").replace("/","%2F").replace("?","%3F").replace("+","%2B").replace(/"/g,"%22").replace("#","%23");}
var phoneHome=function(path,callback){new Ajax.Request(path,{method:'get',onSuccess:function(transport){if(transport.responseText.match(/<Result>([^<]*)/)){var answer=RegExp.$1;callback(escape(answer));}}});};var notFromUS=function(fn){phoneHome('/location/from_us',function(str){if(str=='false'){fn();}});};var makeRequestWrapper=function(target,callback){try{var server_base_url="http://www.casttv.com";if(gadgets.io){var params={METHOD:'GET',AUTHORIZATION:gadgets.io.AuthorizationType.SIGNED};gadgets.io.makeRequest(server_base_url+target,callback,params);}}catch(er){console.log(er.message);}};function queryString(base,params){pairs=[];for(key in params){pairs.push(key+'='+(key=='q'?params[key].replace(/ /g,'+'):params[key]));}
return pairs.inject(base,function(url,val){return url+(url.indexOf('?')<0?'?':'&')+val;});}
var copyToClipboard=function(text){var id='flashcopier';var html='';if(navigator.userAgent.match(/MSIE/)){html+='<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+document.location.protocol+'fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="1" height="1" id="cliptext" align="middle">';html+='<param name="allowScriptAccess" value="sameDomain" />';html+='<param name="movie" value="/misc/webapp/swf/cliptext.swf" />';html+='<param name="quality" value="high" />';html+='<param name="bgcolor" value="#ffffff" />';html+='<param name="FlashVars" value="cliptext='+escape(text).replace(/\+/g,'%2B')+'">';html+='</object>';}
else{html='<embed src="/misc/webapp/swf/cliptext.swf" quality="high" bgcolor="#ffffff" width="1" height="1" name="cliptext" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"  FlashVars="cliptext='+escape(text).replace(/\+/g,'%2B')+'"/>';}
if(document.getElementById(id)){try{document.body.removeChild(document.getElementById(id));}catch(e){};}
var div=document.createElement('div');div.id=id;div.setAttribute('id',id);div.style.position='absolute';div.style.left='-200px';div.style.top='0px';div.style.width='1px';div.style.height='1px';div.innerHTML=html;document.body.appendChild(div);}
var lazyLoadImage=function(id,url,optional_function){var image=$(id);var objImg=new Image();objImg.onload=function(){image.src=objImg.src;if(optional_function)
optional_function();};objImg.src=url;}
var flash=function(id,appear_dur,fade_dur){new Effect.Appear($(id),{duration:2,from:0.0,to:1.0,afterFinish:function(){new Effect.Fade($(id),{duration:1});}});}
var CasttvDialog=Class.create({initialize:function(options){this.owner=Element.extend(options['owner']);this.withinOwner=options['withinOwner'];this.initOptions=options;},show:function(){if(this.owner.dialog_attached==1){if(this.withinOwner){var dialog=this.owner.select('.casttv_dialog')[0];if(dialog){dialog.show();}}
return;}
if(this.initOptions['limit']&&$$('.casttv_dialog').length>=this.initOptions['limit']){return;}
this.dialog_div=new Element('div',{'class':'casttv_dialog'}).hide();this.dialog_div.appendChild(new Element('div',{'class':'casttv_dialog_title'}).update(this.initOptions['title']));if(this.initOptions['topRightClose']){var trClose=new Element('div',{'class':'close'});trClose.observe('click',function(e){e.stop();this.destroy();}.bindAsEventListener(this));this.dialog_div.appendChild(trClose);}
this.dialog_div.appendChild(this._getDialogBody());if(this.initOptions['closeButton']){this.dialog_div.appendChild(this._getCloseButton());}
this._attach();this._position();this.dialog_div.show();return this;},visible:function(){var dialog=this.owner.select('.casttv_dialog')[0];return this.owner.dialog_attached==1&&(!this.withinOwner||dialog.visible());},_position:function(){if(!this.owner||!this.dialog_div){return;}
var owner_position=this.owner.cumulativeOffset();var dimensions=this.dialog_div.getDimensions();if(this.initOptions['show']==='below'){this.dialog_div.setStyle({'top':(owner_position['top']+5)+'px','left':owner_position['left']+'px'});}else if(!this.withinOwner){this.dialog_div.setStyle({'top':(owner_position['top']-dimensions['height'])+'px','left':owner_position['left']+'px'});}},_attach:function(){if(this.withinOwner){this.owner.appendChild(this.dialog_div);}else{document.body.appendChild(this.dialog_div);}
this.owner.dialog_attached=1;},actually_destroy:function(){if(this.withinOwner){this.owner.removeChild(this.dialog_div);}else{document.body.removeChild(this.dialog_div);}
this.owner.dialog_attached=0;},destroy:function(){if(this.withinOwner){this.owner.select('.casttv_dialog')[0].hide();}else{this.actually_destroy();}},_getDialogBody:function(){return new Element('div').update('You should probably extend this class!');},_getCloseButton:function(){var c=this;return new Element('div').setStyle({'border':'1px solid #000','cursor':'pointer','textAlign':'center'}).update('Close').observe('click',function(e){c.destroy();});},_getCancelLink:function(text){var c=this;return new Element('a',{'href':'#','class':'casttv_dialog_cancel_link'}).update(text?text:'Cancel').observe('click',function(e){c.destroy();e.stop();});}});var OldFavoritePickerDialog=Class.create(CasttvDialog,{_getDialogBody:function(){var result=new Element('div',{'id':'favorite_picker_div','class':'favorite_picker_div'});var theDialog=this;var request=new Ajax.Request('/favorites/get_group_info',{method:'get',onSuccess:function(transport){var json=null;try{json=eval('('+transport.responseText+')');}catch(err){}
if(!json||(json['error']&&json['error']!='must-login')){result.update();result.appendChild(new Element('span').update('Sorry, an error occurred.'));result.appendChild(theDialog._getCancelLink('Cancel'));}else if(json['error']=='must-login'){result.update();result.appendChild(new Element('span').update('Please re-login to favorite this video.'));result.appendChild(theDialog._getCancelLink('Cancel'));}else{theDialog.ajaxOptions=json;result.update();result.appendChild(new Element('div').update('Which group would you like to add this favorite to?'));var select=new Element('select');var added=0;$A(json['groups']).each(function(pair){select.appendChild(new Element('option',{'value':pair[0]}).update(pair[1]));added+=1;});if(added===0){select.appendChild(new Element('option',{'value':''}).update(json['default']));}
select.appendChild(new Element('option',{'value':'new_favorite_group'}).update('&#187; new group'));result.appendChild(select);var add=new Element('a',{'href':'#','class':'favorite_add_link'}).update('Add').observe('click',function(e){theDialog.addFavorite(select.value);e.stop();});result.appendChild(add);result.appendChild(theDialog._getCancelLink('Cancel'));}}});var elem=new Element('div',{'class':'one_moment'}).update('One moment...');elem.appendChild(this._getCancelLink('Cancel'));result.appendChild(elem);return result;},addFavorite:function(group){var request=new Ajax.Request('/favorites/add?hash='+encodeURIComponent(this.initOptions['hash'])+'&username='+encodeURIComponent(this.ajaxOptions['username'])+'&group='+encodeURIComponent(group),{asynchronous:true,evalScripts:true,parameters:'authenticity_token='+encodeURIComponent(this.ajaxOptions['auth_token'])});var c=this;if(group!='new_favorite_group'){this.dialog_div.childElements().each(function(elem){c.dialog_div.removeChild(elem);});this.dialog_div.appendChild(new Element('div').update('Favorite Saved'));}
var delayedDestroy=new PeriodicalExecuter(function(pe){pe.stop();c.actually_destroy();},2);}});var FavoritePickerDialog=Class.create(CasttvDialog,{_getDialogBody:function(){var playbackHash=null;if(this.owner.select('.share')[0]){playbackHash=this.owner.select('.share')[0].id.match(/panel_(\w+)_share/i)[1];}else{playbackHash=this.owner.parentNode.id.match(/playback_(\w+)/i)[1];}
var result=new Element('div',{'id':'favorite_picker_div_'+playbackHash,'class':'favorite_picker_div'});var theDialog=this;var request=new Ajax.Request('/favorites/get_group_info',{method:'get',onSuccess:function(transport){var json=null;try{json=eval('('+transport.responseText+')');}catch(err){}
if(!json||(json['error']&&json['error']!='must-login')){result.update();result.appendChild(new Element('span').update('Sorry, an error occurred.'));result.appendChild(theDialog._getCancelLink('Cancel'));}else if(json['error']=='must-login'){result.update();result.appendChild(new Element('span').update('Please re-login to favorite this video.'));result.appendChild(theDialog._getCancelLink('Cancel'));}else{theDialog.ajaxOptions=json;result.update();result.appendChild(new Element('div').update('Which group would you like to add this favorite to?'));var select=new Element('select');var added=0;$A(json['groups']).each(function(pair){select.appendChild(new Element('option',{'value':pair[0]}).update(pair[1]));added+=1;});if(added===0){select.appendChild(new Element('option',{'value':''}).update(json['default']));}
select.appendChild(new Element('option',{'value':'new_favorite_group'}).update('&#187; new group'));result.appendChild(select);var add=new Element('a',{'href':'#','class':'favorite_add_link','style':'margin-left: 5px !important;'}).update('Add').observe('click',function(e){theDialog.addFavorite(select.value);e.stop();});var buttonContainer=new Element('div',{'style':'clear: left;'});buttonContainer.appendChild(theDialog._getCancelLink('Cancel'));buttonContainer.appendChild(add);result.appendChild(buttonContainer);}}});var elem=new Element('div',{'class':'one_moment'}).update('One moment...');elem.appendChild(this._getCancelLink('Cancel'));result.appendChild(elem);return result;},addFavorite:function(group){var request=new Ajax.Request('/favorites/add?hash='+encodeURIComponent(this.initOptions['hash'])+'&username='+encodeURIComponent(this.ajaxOptions['username'])+'&group='+encodeURIComponent(group),{asynchronous:true,evalScripts:true,parameters:'authenticity_token='+encodeURIComponent(this.ajaxOptions['auth_token'])});var c=this;if(group!='new_favorite_group'){this.dialog_div.childElements()[2].update('Favorite Saved.');}
var delayedDestroy=new PeriodicalExecuter(function(pe){pe.stop();c.actually_destroy();},2);}});Object.extend(Array.prototype,{insert:function(index){var args=Array.prototype.slice.call(arguments,1);this.length=Math.max(this.length,index);index=index<0?this.length:index;if(args.length>1)
this.splice.apply(this,[index,0].concat(args));else this.splice(index,0,args[0]);return this;}});var CastTV=function(){var memoizedPlaybacks={};var siblingGroups=[];var siblingGroupIndex={};var playbackType=(function(){var type=document.location.pathname.replace(/^\/(([\-a-z0-9]+)\/.*)?/i,'$2');if(''===type){return'home';}
return type;})();var isFullScreen=function(){return Math.abs(document.viewport.getWidth()-screen.availWidth)<15;};var inPopout=(function(){return'popout'===playbackType;})();var inEmbed=(function(){return'embed'===playbackType;})();var addedScriptaculousDivScroll=(function(){Element.addMethods({scrollTo:function(id,left,top){var element=$(id);if(arguments.length===1){var pos=element.cumulativeOffset();window.scrollTo(pos[0],pos[1]);}else{element.scrollLeft=left;element.scrollTop=top;}
return element;}});Effect.Scroll=Class.create();Object.extend(Object.extend(Effect.Scroll.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);if(!this.element){throw(Effect._elementDoesNotExistError);}
this.start(Object.extend({x:0,y:0},arguments[1]||{}));},setup:function(){var scrollOffsets=(this.element===window)?document.viewport.getScrollOffsets():Element._returnOffset(this.element.scrollLeft,this.element.scrollTop);this.originalScrollLeft=scrollOffsets.left;this.originalScrollTop=scrollOffsets.top;},update:function(pos){this.element.scrollTo(Math.round(this.options.x*pos+this.originalScrollLeft),Math.round(this.options.y*pos+this.originalScrollTop));}});})();var DateHelper={time_ago_in_words_with_parsing:function(from){var date=new Date;date.setTime(Date.parse(from));return this.time_ago_in_words(date);},time_ago_in_words:function(from){return this.distance_of_time_in_words(new Date,from);},distance_of_time_in_words:function(to,from){var distance_in_seconds=((to-from)/1000);var distance_in_minutes=Math.round(distance_in_seconds/60);if(distance_in_minutes<=0){return'less than a minute';}
if(distance_in_minutes==1){return'1 minute';}
if(distance_in_minutes<45){return distance_in_minutes+' minutes';}
if(distance_in_minutes<90){return'about 1 hour';}
if(distance_in_minutes<1440){return'about '+Math.round(distance_in_minutes/60)+' hours';}
if(distance_in_minutes<2880){return'1 day';}
if(distance_in_minutes<43200){return Math.round(distance_in_minutes/1440)+' days';}
if(distance_in_minutes<86400){return'about 1 month';}
if(distance_in_minutes<525960){return Math.round(distance_in_minutes/43200)+' months';}
if(distance_in_minutes<1051199){return'about 1 year';}
return'over '+Math.round(distance_in_minutes/525960)+' years';}};var escapeSearchQuery=function(s){return s.replace("%","%25").replace("/"," ").replace("?","%3F").replace("+","%2B").replace(/"/g,"%22").replace("#","%23");};var easeInOut=function(t,b,c,d){if((t/=d/2)<1)return c/2*t*t+b;return-c/2*((--t)*(t-2)-1)+b;};var scrollIntoView=function(element){var padding=40;var scroll=document.viewport.getScrollOffsets().top;var viewH=document.viewport.getHeight();var pos=element.cumulativeOffset().top;var h=element.getHeight();var finalScroll=pos+h+padding-viewH;var delta=finalScroll-scroll;var i=0;var steps=10;var dt=0.05;if(scroll<finalScroll){var pe=null;pe=new PeriodicalExecuter(function(pe){window.scrollTo(0,easeInOut(i++,scroll,delta,steps));if(i>=steps){pe.stop();}},dt);}};var validateEmail=function(email){var emailRegex=/^(?:[a-zA-Z0-9_\.\-+])+@(?:(?:[a-zA-Z0-9\-])+\.)+(?:[a-zA-Z0-9]{2,4})+$/;return email!==null&&!!email.match(emailRegex);};var validateEmails=function(){var valid=true;$A(arguments).each(function(arg){if(!validateEmail(arg)){valid=false;return $break;}});return valid;};var addBookmark=function(url,title){if(window.sidebar){window.sidebar.addPanel(title,url,"");}else if(window.opera&&window.print){var elem=document.createElement('a');elem.setAttribute('href',url);elem.setAttribute('title',title);elem.setAttribute('rel','sidebar');elem.click();}else if(document.all){window.external.AddFavorite(url,title);}};var trackUtilizedSuggestion=function(context,type,name,url){(new Image()).src="/t.gif?context="+encodeURIComponent(context)+"&type="+encodeURIComponent(type)+"&name="+encodeURIComponent(name)+"&url="+encodeURIComponent(url)+"&r="+Math.random();};var installBrowserSearchEngine=function(){if(window.external&&("AddSearchProvider"in window.external)){window.external.AddSearchProvider("http://www.casttv.com/opensearch.xml");}else{alert("This feature is only supported on Firefox 2+ and IE 7+ browsers only.");}};var get=function(url,fn){return new Ajax.Request(url,{method:'get',evalScripts:true,onComplete:fn});};var update=function(id,url,fn,errFn){return new Ajax.Updater(id,url,{method:'get',evalScripts:true,onComplete:fn});};var isSafeSearchOff=function(){return'off'===Cookie.get('safe');};var searchUrl=function(query,src){var url='';if(query==null||query===''){url='/';}else{url='/search/'+escapeSearchQuery(query)+'/1'+(isSafeSearchOff()?'?safe=off':'');}
if(src){url+=(url.match(/\?/)?'&':'?')+'src='+src;}
return url;};var openSearchPage=function(query,src){window.open(searchUrl(query,src));};var fromUs=function(usFn,nonUsFn){get('/location/from_us',function(transport){if(transport.responseText.match(/<Result>([^<]*)/)){var answer=RegExp.$1;if('true'===answer&&usFn){usFn();}else if('false'===answer&&nonUsFn){nonUsFn();}}});};var processAnchorRoute=function(routes){var fullRoute=document.location.hash.slice(1);var match=fullRoute.match(/^([^\?]*?)(?:\?(.*))?$/);var baseRoute=match[1];var paramString=match[2];var params=paramString?paramString.toQueryParams():{};var getFirstQsKey=function(qsObj){for(var key in qsObj){if(qsObj.hasOwnProperty(key)){return key;}}};var matchedRoute=routes.find(function(elt){var pattern=getFirstQsKey(elt);if('string'===typeof pattern){return baseRoute===pattern;}else{return baseRoute.match(pattern);}});if(matchedRoute){var pattern=getFirstQsKey(matchedRoute);matchedRoute[pattern](params);}};var resizePlayback=function(){if(this.smallSharePanelVisibility==null){this.smallSharePanelVisibility=true;}
var shareNode=$$('#playback_container .share')[0];if(shareNode){var sharePanelNode=shareNode.select('.share_panel')[0];var standardForm=shareNode.select('.standard_form')[0];var postVideoPanel=shareNode.select('.post_video_panel')[0];var shareToggles=shareNode.select('.tiny_more_less_container')[0];if(document.viewport.getWidth()<420){if(shareNode.getWidth()>305){if(!this.smallSharePanelVisibility){sharePanelNode.hide();}else{sharePanelNode.show();}}
standardForm.addClassName('standard_form_small');postVideoPanel.addClassName('post_video_panel_small');shareNode.setStyle({width:'300px'});shareToggles.show();}else{if(shareNode.getWidth()<399){this.smallSharePanelVisibility=sharePanelNode.visible();sharePanelNode.show();}
standardForm.removeClassName('standard_form_small');postVideoPanel.removeClassName('post_video_panel_small');shareNode.setStyle({width:'399px'});shareToggles.hide();}}
if($$('#playback_container .toolbar')[0]){$$('#playback_container .playback')[0].style.height=''+(document.viewport.getHeight()-24)+'px';}};var resizeToolbar=function(){var pbNode=$$('#playback_container .playback')[0];var pb=CastTV.playbacks(pbNode.id.match(/playback_(\w+)/)[1]);var tbNode=pbNode.select('.toolbar')[0];var toolbarWidth=(tbNode||document.viewport).getWidth();var classesToRemove=function(exception){return $A(['between_300_365','between_240_300','between_160_240','below_160']).without(exception);};var klass=null;if(toolbarWidth<365&&toolbarWidth>=300){klass="between_300_365";}else if(toolbarWidth<300&&toolbarWidth>=240){klass="between_240_300";}else if(toolbarWidth<240&&toolbarWidth>=160){klass="between_160_240";}else if(toolbarWidth<160){klass="below_160";}
if(klass){pbNode.addClassName(klass);}
classesToRemove(klass).each(function(unnecessaryClass){pbNode.removeClassName(unnecessaryClass);});var expandIcon=pb.toolbar.icon('expand');var fs=isFullScreen();var toggled=expandIcon.toggled();if((fs&&!toggled)||(!fs&&toggled)){expandIcon.toggle();}
if(tbNode){var searchBoxWidth=pb.toolbar.searchBoxWidth();pbNode.select('.player_search_box_left')[0].setStyle({'width':(''+searchBoxWidth+'px')});}
var raceConditionTimer=setTimeout(function(){if(searchBoxWidth!=pb.toolbar.searchBoxWidth()){CastTV.resizeEmbed();}},150);};var resizeEmbed=function(){resizePlayback();resizeToolbar();};var registerSiblingGroup=function(group){var alreadyExists=false;siblingGroups.each(function(g){if(group===g){alreadyExists=true;group=g;return $break;}});if(!alreadyExists){siblingGroups.push(group);group.each(function(id){siblingGroupIndex[id]=group;});}
return group;};var getSiblingGroup=function(id){return siblingGroupIndex[id];};var thumbnails=function(hash){var thumbnail=$('video_block_'+hash);var selectedClass='video_block_selected';var hoverClass='video_block_hover';var selected=function(){return thumbnail&&thumbnail.hasClassName(selectedClass);};var select=function(){if(thumbnail&&!selected()){thumbnail.addClassName(selectedClass);thumbnail.removeClassName(hoverClass);}};var deselect=function(){if(thumbnail&&selected()){thumbnail.removeClassName(hoverClass);thumbnail.removeClassName(selectedClass);}};return{selected:selected,select:select,deselect:deselect};};var containers=function(id){var node=!id?$('playback_container'):$('playback_container_'+id);if(node&&null===node.inTransition){node.inTransition=false;}
var currentPlayback=function(){var pb=null;var pbNode=node.getElementsBySelector('.outer_playback')[0];if(pbNode){var playbackId=pbNode.id.match(/outer_playback_(\w+)/)[1];pb=CastTV.playbacks(playbackId);}
return pb;};var transitionTo=function(toHash,callback){if(node.inTransition){return;}
node.inTransition=true;var highlightedSectionRowClass='section_row_highlighted';var from=currentPlayback();if(from){var fromHash=from.hash;CastTV.thumbnails(fromHash).deselect();var fromSectionRow=$('section_row_'+fromHash)||$$('.also_video_'+fromHash)[0];var toSectionRow=$('section_row_'+toHash)||$$('.also_video_'+toHash)[0];if(fromSectionRow){fromSectionRow.removeClassName(highlightedSectionRowClass);}
var replacementComplete=function(){CastTV.thumbnails(toHash).select();if(toSectionRow){toSectionRow.addClassName(highlightedSectionRowClass);}
node.inTransition=false;if(callback){callback();}};if(Prototype.Browser.IE){from.stashContent();}
var to=memoizedPlaybacks[toHash];if(to){to.reloadContent();node.replaceChild(to.node,from.node);replacementComplete();}else{var url='/'+playbackType+'/playback/'+toHash;if(Prototype.Browser.IE){node.replaceChild(document.createTextNode(''),from.node);}
CastTV.update(node.id,url,replacementComplete);}}};return{transitionTo:transitionTo};};var playbacks=function(hash){var existing=memoizedPlaybacks[hash];var toolbarHeight=24;if(!existing){var createPlayback=function(){var node=$('outer_playback_'+hash);var contentNode=node.select('.flashcontent')[0]||node.select('.objectcontent')[0];var searchTextbox=node.select('.player_search_text')[0];var container=function(){var match=node.parentNode.id.match(/playback_container_(\w+)/);return CastTV.containers(match?match[1]:null);}();var popoutUrl=(function(){return'/popout/'+hash;})();var prevHash=null;var nextHash=null;var width=null;var height=null;var toggleable=false;var stashedContent=null;var originalX=null;var originalY=null;var postToggleCallback=null;var stashContent=function(){if(null==stashedContent&&contentNode){stashedContent=contentNode.innerHTML;contentNode.update();}};var reloadContent=function(){if(stashedContent&&contentNode){contentNode.innerHTML=stashedContent;}};var openPopout=function(w,h){var opts="status=no,toolbar=no,location=no,menubar=no,directories=no,resizable=1,scrollbars=no";if(w&&h){opts="width="+w+",height="+h+","+opts;if(w==screen.availWidth){opts="left=0,top=0,"+opts;}}else{opts+=",type=fullWindow,fullscreen";}
var popup=open(popoutUrl,hash,opts);var attempts=7;var registerDelay=new PeriodicalExecuter(function(pe){if('undefined'===typeof(popup)||!popup){if(0==--attempts){pe.stop();alert('Oops! Your browser blocked our pop-up window.  Please check your settings to allow pop-ups from casttv.com.');}
return;}
if(popup.registerSiblingGroup){pe.stop();if(w==screen.availWidth){popup.moveTo(0,0);popup.resizeTo(screen.availWidth,screen.availHeight);}
var thisPlayback=CastTV.playbacks(hash);if(thisPlayback&&thisPlayback.isToggleable()){thisPlayback.hide();if(postToggleCallback){postToggleCallback(false);}}else{if(!$$('.embed_bumper')[0]||!$$('.embed_bumper')[0].visible()){stashContent();reloadContent();}}
popup.registerSiblingGroup(CastTV.getSiblingGroup(hash)||[]);}},0.2);if(embedTrack){embedTrack(hash,'popout');}};var buttons={previous:{action:function(){if(prevHash){var videoGroup=CastTV.VideoGroup.findByBlockId(prevHash);if(videoGroup){videoGroup.setActiveBlock(prevHash);}else{container.transitionTo(prevHash,function(){if(window.onresize){resizeEmbed();}});}}}},next:{action:function(){if(nextHash){var videoGroup=CastTV.VideoGroup.findByBlockId(nextHash);if(videoGroup){videoGroup.setActiveBlock(nextHash);}else{container.transitionTo(nextHash,function(){if(window.onresize){resizeEmbed();}});}}}},attribution:{},search:{registered:function(){if(searchTextbox){searchBoxController=new CastTV.SearchBox(node,{trackingCode:'emb'});}}},info:{action:function(){var panel=panels('info');if(!panel.visible()){panel.show();}else{panel.hide();}}},permalink:{action:function(){var panel=panels('permalink');if(!panel.visible()){panel.show();}else{panel.hide();}}},share:{registered:function(){var panel=panels('share');if(null===panel){return;}
var fromTextbox=panel.node.select('.from')[0];fromTextbox.placeholderText='Your Email Address';var fromTextboxBlur=function(){if(''===fromTextbox.value){fromTextbox.addClassName('form_input_placeholder_text');fromTextbox.value=fromTextbox.placeholderText;}};fromTextbox.observe('focus',function(){if(fromTextbox.placeholderText===fromTextbox.value){fromTextbox.value='';fromTextbox.removeClassName('form_input_placeholder_text');}}).observe('blur',fromTextboxBlur);var toTextbox=panel.node.select('.to')[0];toTextbox.placeholderText='Your Friend\'s Email Address';var toTextboxBlur=function(){if(''===toTextbox.value){toTextbox.addClassName('form_input_placeholder_text');toTextbox.value=toTextbox.placeholderText;}};toTextbox.observe('focus',function(){if(toTextbox.placeholderText===toTextbox.value){toTextbox.value='';toTextbox.removeClassName('form_input_placeholder_text');}}).observe('blur',toTextboxBlur);var messageTextbox=panel.node.select('.message')[0];messageTextbox.placeholderText='Optional Message';var messageTextboxBlur=function(){if(''===messageTextbox.value){messageTextbox.addClassName('form_input_placeholder_text');messageTextbox.value=messageTextbox.placeholderText;}};messageTextbox.observe('focus',function(){if(messageTextbox.placeholderText===messageTextbox.value){messageTextbox.value='';messageTextbox.removeClassName('form_input_placeholder_text');}}).observe('blur',messageTextboxBlur);fromTextboxBlur();toTextboxBlur();messageTextboxBlur();},action:function(){var panel=panels('share');if(!panel.visible()){panel.show();}else{panel.hide();}},resetPanel:function(){var panel=panels('share');panel.updateInfo('Fill out the form below.');var toTextbox=panel.node.select('.to')[0];if(!toTextbox.hasClassName('form_input_placeholder_text')){if(toTextbox.placeholderText){toTextbox.value=toTextbox.placeholderText;}
toTextbox.addClassName('form_input_placeholder_text');}
var messageTextbox=panel.node.select('.message')[0];if(!messageTextbox.hasClassName('form_input_placeholder_text')){if(messageTextbox.placeholderText){messageTextbox.value=messageTextbox.placeholderText;}
messageTextbox.addClassName('form_input_placeholder_text');}}},embedcode:{action:function(){var panel=panels('embedcode');if(!panel.visible()){panel.show();}else{panel.hide();}}},add_to_favorites:{action:function(){var iconNode=toolbar.icon('add_to_favorites').node;var dialog=new FavoritePickerDialog({'title':'Add to Favorites','owner':node.select('.playback_embed_inner')[0]||node.select('.playback_failed_embed')[0],'withinOwner':true,'limit':1,'hash':hash,'topRightClose':true});if(!dialog.visible()){dialog.show();}else{dialog.destroy();}}},lights:{action:function(){alert('lights');}},expand:{action:function(){if(isFullScreen()){window.resizeTo(width,height);if(originalX){window.moveTo(originalX,originalY);}else{window.moveTo(200,200);}}else{if(inPopout){if(!isFullScreen()){if(document.all){originalX=window.screenLeft;originalY=window.screenTop;}else{originalX=window.screenX;originalY=window.screenY;}
window.moveTo(0,0);window.resizeTo(screen.availWidth,screen.availHeight);var fullScreenDetectTimer=setTimeout(function(){if(!isFullScreen()){alert('It seems like your browser isn\'t permitting us to make this window fullscreen.  Please try adjusting your browser\'s JavaScript settings to allow scripts to "resize existing windows."');}else{if(false&&window.onresize&&Prototype.Browser.IE){window.resizeTo(screen.availWidth-10,screen.availHeight);var ieResizeTimeout=setTimeout(function(){window.resizeTo(screen.availWidth,screen.availHeight);},100);}}},1000);window.moveTo(0,0);}}else{openPopout(screen.availWidth,screen.availHeight);}}}},popout:{registered:function(){if(inPopout){toolbar.icon('popout').hide();}},action:function(){openPopout(width,height+toolbarHeight);}}};var panels=function(name){var node=$('panel_'+hash+'_'+name);var statusNode=$('status_'+hash+'_'+name);var errorClass='error';var successClass='success';var currentlyOpenPanel=function(){};var visible=function(){if(node){return'block'===node.style.display;}
return false;};var reset=function(){var resetFn=buttons[name].resetPanel;if(resetFn){resetFn();}};var show=function(){if(node){reset();node.style.display='block';}};var hide=function(){if(node){node.hide();}};var updateInfo=function(msg){statusNode.removeClassName(errorClass);statusNode.removeClassName(successClass);statusNode.update(msg);};var updateSuccess=function(msg){if(msg){statusNode.removeClassName(errorClass);statusNode.update(msg);var highlight=new Effect.Highlight(statusNode);}
var fadeTimer=setTimeout(function(){var fade=new Effect.Fade(node,{duration:1.0});},1000);};var updateFailure=function(msg){statusNode.removeClassName(successClass);statusNode.addClassName(errorClass);statusNode.update(msg);};if(node){return{node:node,visible:visible,reset:reset,show:show,hide:hide,initialize:reset,updateInfo:updateInfo,updateSuccess:updateSuccess,updateFailure:updateFailure};}else{return null;}};var toolbar=function(){var toolbar=$('toolbar_'+hash);var disabledButtons={};var hiddenButtons={};var icon=function(name){var disabledName=name+'_disabled';var idSuffix='_'+hash+'_'+name;var node=$('toolbar'+idSuffix);var panel=panels(name);var closeNode=$('close'+idSuffix);var tooltipNode=$('tooltip'+idSuffix);var alternateTooltipNode=$('tooltip'+idSuffix+"_toggled");var toggleable=!!alternateTooltipNode;var registered=buttons[name].registered;var action=buttons[name].action;var hidden=function(){return!!hiddenButtons[name];};var visible=function(){return!hidden();};var disabled=function(){return!!disabledButtons[name];};var enabled=function(){return!disabled();};var hide=function(){if(node){node.hide();}};var show=function(){if(node){node.show();}};var toggled=function(){return node&&node.hasClassName('toggled');};var toggle=function(){if(toggleable){if(toggled()){node.removeClassName('toggled');}else{node.addClassName('toggled');}}};var disable=function(){disabledButtons[name]=true;if(node&&node.hasClassName(name)){node.removeClassName(name);node.addClassName(disabledName);}};var enable=function(){disabledButtons[name]=undefined;if(node&&node.hasClassName(disabledName)){node.removeClassName(disabledName);node.addClassName(name);}};var register=function(){if(node){if(action){var toolbar=this;node.observe('click',function(e){e.stop();if(toolbar.enabled()){if(tooltipNode){tooltipNode.hide();if(toggleable){alternateTooltipNode.hide();}}
action(e);}});if(panel){panel.initialize();}}
if(tooltipNode){var timeout=null;node.observe('mouseover',function(e){var currTtn=toggled()?alternateTooltipNode:tooltipNode;clearTimeout(timeout);if(!currTtn.visible()){timeout=setTimeout(function(){var appear=new Effect.Appear(currTtn,{duration:0.1});},400);}});node.observe('mouseout',function(e){var currTtn=toggled()?alternateTooltipNode:tooltipNode;if(!currTtn.visible()){clearTimeout(timeout);}else{var fade=new Effect.Fade(tooltipNode,{duration:0.1});if(toggleable){var fade2=new Effect.Fade(alternateTooltipNode,{duration:0.1});}}});}
if(closeNode){closeNode.observe('click',function(e){panel.hide();});}
if(registered){registered();}}};return{node:node,hidden:hidden,visible:visible,hide:hide,show:show,toggle:toggle,toggled:toggled,disabled:disabled,enabled:enabled,disable:disable,enable:enable,register:register};};var icons=$H(buttons).keys().map(function(name){return icon(name);});var availableSpace=function(){if(!toolbar){return 0;}
var breathingRoomWidth=2;var attributionWidth=toolbar.select('.casttv_attribution')[0].getWidth();var leftRightContainer=toolbar.select('.buttons_previous_next')[0];var leftRightContainerVisible=leftRightContainer.getStyle('display')!='none';var leftRightContainerWidth=leftRightContainerVisible?leftRightContainer.getWidth():0;var iconsWidth=toolbar.select('.toolbar_icons')[0].getWidth();return toolbar.getWidth()-attributionWidth-leftRightContainerWidth-iconsWidth-breathingRoomWidth;};var searchBoxWidth=function(){if(!toolbar){return 0;}
var maxSearchWidth=415;var searchWidth=Math.min(maxSearchWidth,availableSpace());var searchButtonSpace=toolbar.select('.player_search_box_right')[0].getWidth();return searchWidth-searchButtonSpace;};var warningCalloutWidth=function(){var spacerWidth=8;return availableSpace()-(spacerWidth*2);};var hideButtons=function(){$A(arguments).each(function(arg){icon(arg).hide();});};var showButtons=function(){$A(arguments).each(function(arg){icon(arg).show();});};var disableButtons=function(){$A(arguments).each(function(arg){icon(arg).disable();});};var enableButtons=function(){$A(arguments).each(function(arg){icon(arg).enable();});};var hide=function(){toolbar.hide();};var show=function(){toolbar.show();};var register=function(){icons.each(function(icon){icon.register();});};return{icon:icon,icons:icons,searchBoxWidth:searchBoxWidth,warningCalloutWidth:warningCalloutWidth,hideButtons:hideButtons,hideButton:hideButtons,showButtons:showButtons,showButton:showButtons,disableButtons:disableButtons,disableButton:disableButtons,enableButtons:enableButtons,enableButton:enableButtons,hide:hide,show:show,register:register};}();var embed=function(){var embedNode=node.select('.playback_embed')[0];var closeButtonNode=node.select('.playback_embed .close_embed')[0];if(closeButtonNode){closeButtonNode.observe('click',function(e){var thisPlayback=CastTV.playbacks(hash);if(thisPlayback){thisPlayback.hide();if(postToggleCallback){postToggleCallback(false);}}});}
var hide=function(){embedNode.hide();if(Prototype.Browser.IE){stashContent();}};var show=function(){reloadContent();embedNode.show();CastTV.scrollIntoView(embedNode);};var visible=function(){return embedNode&&embedNode.visible();};return{hide:hide,show:show,visible:visible};}();var showButtons=function(){toolbar.showButtons.apply(toolbar,arguments);};var hideButtons=function(){toolbar.hideButtons.apply(toolbar,arguments);};var disableButtons=function(){toolbar.disableButtons.apply(toolbar,arguments);};var enableButtons=function(){toolbar.enableButtons.apply(toolbar,arguments);};var adoptSiblings=function(){var siblings=CastTV.getSiblingGroup(hash);var prevNextContainerNode=node.select('.buttons_previous_next')[0];if(siblings&&siblings.length>1){if(prevNextContainerNode){prevNextContainerNode.show();}
siblings.map(function(sibHash,index){if(hash==sibHash){if(index>0){prevHash=siblings[index-1];enableButtons('previous');}else if(0===index){prevHash=siblings[siblings.length-1];enableButtons('previous');}
if(index<siblings.length-1){nextHash=siblings[index+1];enableButtons('next');}else if(siblings.length-1==index){nextHash=siblings[0];enableButtons('next');}}});}else{if(prevNextContainerNode){prevNextContainerNode.hide();}}
return siblings;};var setToggleable=function(){toggleable=true;};var isToggleable=function(){return toggleable;};var setPostToggleCallback=function(callback){postToggleCallback=callback;};var showWarningCallout=function(){node.select('.warning_callout_center')[0].setStyle({'width':''+toolbar.warningCalloutWidth()+'px'});node.select('.warning_callout_container')[0].show();};var setVideoDimensions=function(w,h){width=w;height=h;};var hide=function(){embed.hide();toolbar.hide();};var show=function(){embed.show();toolbar.show();};var visible=function(){return embed.visible();};var videoBlock=function(){var blockNode=node.select('.playback_info>.video_block')[0];var otherVisiblePlayback=function(){return $H(memoizedPlaybacks).values().find(function(pb){return pb.visible();});};if(blockNode){blockNode.observe('click',function(e){if(toggleable){e.stop();var isVisible=visible();if(isVisible){hide();}else{var otherPlayback=otherVisiblePlayback();if(otherPlayback){otherPlayback.hide();}
show();}
if(postToggleCallback){postToggleCallback(!isVisible);}}});}
return{};}();var register=function(){adoptSiblings();toolbar.register();};return{hash:hash,node:node,panels:panels,toolbar:toolbar,stashContent:stashContent,reloadContent:reloadContent,hideButtons:hideButtons,hideButton:hideButtons,showButtons:showButtons,showButton:showButtons,disableButtons:disableButtons,disableButton:disableButtons,enableButtons:enableButtons,enableButton:enableButtons,setVideoDimensions:setVideoDimensions,adoptSiblings:adoptSiblings,setToggleable:setToggleable,isToggleable:isToggleable,setPostToggleCallback:setPostToggleCallback,showWarningCallout:showWarningCallout,hide:hide,show:show,visible:visible,register:register};};existing=memoizedPlaybacks[hash]=createPlayback();existing.register();}
return existing;};var TabSet=function(){var dropdownNodes=[];var anyDropdownVisible=function(){var found=false;dropdownNodes.each(function(ddn){if(ddn.visible()){found=ddn;return $break;}});return found;};var Tab=function(tabNode,dropdownNode){var dropdownVisible=function(){return dropdownNode.visible();};var showDropdown=function(){dropdownNode.show();};var hideDropdown=function(){dropdownNode.hide();};(function(){hideDropdown();var delayedOpen=null;var delayedClose=null;var delayClose=function(){delayedClose=setTimeout(function(){if(dropdownVisible){hideDropdown();}},50);};tabNode.observe('mouseover',function(){if(!dropdownVisible()){var visibleDropdown=anyDropdownVisible();if(visibleDropdown){visibleDropdown.hide();showDropdown();}else{delayedOpen=setTimeout(function(){showDropdown();},200);}}else{clearTimeout(delayedClose);}});tabNode.observe('mouseout',function(){if(!dropdownVisible()){clearTimeout(delayedOpen);}else{delayClose();}});dropdownNode.observe('mouseover',function(){clearTimeout(delayedClose);showDropdown();});dropdownNode.observe('mouseout',function(){delayClose();});})();return{showDropdown:showDropdown,hideDropdown:hideDropdown};};var tabSet=function(){var listItems=$$('#tabs>ul>li');if(!listItems){return[];}
dropdownNodes=listItems.map(function(li){return li.getElementsBySelector('.tab_menu_panel')[0];});return dropdownNodes.map(function(dropdownNode){var tabNode=dropdownNode.previousSiblings()[0];return new Tab(tabNode,dropdownNode);});}();return tabSet;};var memoizedTabSet=null;var tabs=function(){if(!memoizedTabSet){memoizedTabSet=new TabSet();}
return memoizedTabSet;};return{inPopout:inPopout,inEmbed:inEmbed,DateHelper:DateHelper,scrollIntoView:scrollIntoView,validateEmail:validateEmail,validateEmails:validateEmails,addBookmark:addBookmark,installBrowserSearchEngine:installBrowserSearchEngine,trackUtilizedSuggestion:trackUtilizedSuggestion,get:get,update:update,fromUs:fromUs,processAnchorRoute:processAnchorRoute,isSafeSearchOff:isSafeSearchOff,searchUrl:searchUrl,openSearchPage:openSearchPage,resizeEmbed:resizeEmbed,registerSiblingGroup:registerSiblingGroup,getSiblingGroup:getSiblingGroup,thumbnails:thumbnails,containers:containers,playbacks:playbacks,tabs:tabs};}();CastTV.VideoGroup=Class.create({initialize:function(container,options){this.container=$(container);if(!this.container){throw"CastTV.VideoGroup could not find the container element: "+container;}
CastTV.VideoGroup.instances.push(this);this.activeBlock=null;this.blocks=$A([]);this.options={beforeChange:Prototype.emptyFunction,afterChange:Prototype.emptyFunction,defaultBlock:null,blockKeyRegex:/video_block_(\w+)/,blockSelector:'ul>li>div.video_block',transitionLinkClassName:'transition',transitionContainer:null};Object.extend(this.options,options||{});this.container.select(this.options.blockSelector).each(function(block){this.addBlock(block);}.bind(this));if(this.options.defaultBlock){this.setActiveBlock(this.options.defaultBlock);}},addBlock:function(block,nextBlock){var nextIndex=nextBlock?this.blocks.indexOf(nextBlock):0;this.blocks.insert(nextIndex-1,block);block.key=block.id.match(this.options.blockKeyRegex)[1];block.select('.'+this.options.transitionLinkClassName).each(function(transitionLink){transitionLink.observe('click',function(e){e.stop();this.setActiveBlock(block);}.bindAsEventListener(this));}.bind(this));block.observe('mouseover',function(){this.addClassName('video_block_hover');});block.observe('mouseout',function(){this.removeClassName('video_block_hover');});},removeBlock:function(block){this.blocks=this.blocks.without(block);},setActiveBlock:function(block){if(!block&&typeof(block)=='undefined'){return;}else if(typeof(block)=='string'){this.setActiveBlock(this.blocks.find(function(_block){return _block.key==block;}));}else if(typeof(block)=='number'){this.setActiveBlock(this.blocks[block]);}else{var oldBlock=this.activeBlock;if(false===this.options.beforeChange.bind(this)(oldBlock,block)){return false;}
CastTV.containers(this.options.transitionContainer).transitionTo(block.key,function(){this._blockChangedTo(block);this.options.afterChange.bind(this)(oldBlock,block);}.bind(this));}},next:function(){this.blocks.each(function(block,i){if(this.activeBlock==block&&this.blocks[i+1]){this.setActiveBlock(this.blocks[i+1]);throw $break;}}.bind(this));},previous:function(){this.blocks.each(function(block,i){if(this.activeBlock==block&&this.blocks[i-1]){this.setActiveBlock(this.blocks[i-1]);throw $break;}}.bind(this));},first:function(){this.setActiveBlock(this._firstBlock());},last:function(){this.setActiveBlock(this._lastBlock());},_blockChangedTo:function(block){this.activeBlock=block;},_firstBlock:function(){return this.blocks.first();},_lastBlock:function(){return this.blocks.last();}});Object.extend(CastTV.VideoGroup,{blockWidth:115,visibleBlocks:4,instances:[],findByBlockId:function(id){return CastTV.VideoGroup.instances.find(function(videoGroup){return videoGroup.blocks.find(function(block){return block.key===id;});});}});CastTV.ScrollableVideoGroup=Class.create(CastTV.VideoGroup,{initialize:function($super,container,options){var scrollingOptions={viewportSelector:'div.related_h_viewport',scrollerControlsSelector:'div.scroller_controls',pageLinksSelector:'div.scroller_controls ul li a',beforeScroll:Prototype.emptyFunction,afterScroll:Prototype.emptyFunction,leftButtonSelector:'a.previous_set',rightButtonSelector:'a.next_set',leftButtonDisabledClassName:'previous_set_disabled',rightButtonDisabledClassName:'next_set_disabled',currentPageClassName:'current_page',scrollDist:CastTV.VideoGroup.blockWidth*CastTV.VideoGroup.visibleBlocks,scrollTime:0.3};Object.extend(scrollingOptions,options||{});$super(container,scrollingOptions);this.viewport=this.container.select(this.options.viewportSelector)[0];this.scrollerControls=this.container.select(this.options.scrollerControlsSelector)[0];this.leftButton=this.container.select(this.options.leftButtonSelector)[0];this.rightButton=this.container.select(this.options.rightButtonSelector)[0];this.currentlyScrolling=false;this.scrollQueue=[];this._regeneratePagination();if(this.leftButton){this.leftButton.observe('click',this.scrollLeft.bindAsEventListener(this));}
if(this.rightButton){this.rightButton.observe('click',this.scrollRight.bindAsEventListener(this));}
this._updateButtonStates();new PeriodicalExecuter(function(pe){pe.stop();this._updateButtonStates();}.bind(this),1);},scrollLeft:function(e){if(e){e.stop();}
if(this._canScrollLeft()&&!this.currentlyScrolling){this._scrollVertically(-this.options.scrollDist);}},scrollRight:function(e){if(e){e.stop();}
if(this._canScrollRight()&&!this.currentlyScrolling){this._scrollVertically(this.options.scrollDist);}},_regeneratePagination:function(){if(this.scrollerControls){var oldUl=this.scrollerControls.select('ul')[0];if(oldUl){this.scrollerControls.removeChild(oldUl);}
var totalPages=this._blockPage(this.blocks.last())+1;var ul=new Element('ul');for(var i=0;i<totalPages;++i)(function(page){var a=new Element('a',{'href':'#'}).update('&bull;');a.observe('click',function(e){e.stop();this._scrollToPageImmediately(page);}.bindAsEventListener(this));var li=new Element('li');li.appendChild(a);ul.appendChild(li);}.bind(this))(i);this.scrollerControls.appendChild(ul);this.pageLinks=this.container.select(this.options.pageLinksSelector);}},_canScrollLeft:function(){return this._firstBlock().cumulativeScrollOffset()[0]>0;},_canScrollRight:function(){var lastBlock=this._lastBlock();var lastBlockLeft=lastBlock.cumulativeOffset()[0]-lastBlock.cumulativeScrollOffset()[0];var lastBlockWidth=lastBlock.getDimensions().width;var lastBlockTotalDistanceLeft=lastBlockLeft+lastBlockWidth;var outOfBoundsLeft=this.viewport.cumulativeOffset()[0]+this.viewport.getDimensions().width;return lastBlockTotalDistanceLeft>outOfBoundsLeft;},_updateButtonStates:function(){if(this.leftButton){if(this._canScrollLeft()){this.leftButton.removeClassName(this.options.leftButtonDisabledClassName);}else{this.leftButton.addClassName(this.options.leftButtonDisabledClassName);}}
if(this.rightButton){if(this._canScrollRight()){this.rightButton.removeClassName(this.options.rightButtonDisabledClassName);}else{this.rightButton.addClassName(this.options.rightButtonDisabledClassName);}}
if(this.pageLinks&&this.pageLinks.length>0){var currentPage=this._currentPage();this.pageLinks.each(function(link,index){if(index==currentPage){link.addClassName(this.options.currentPageClassName);}else{link.removeClassName(this.options.currentPageClassName);}}.bind(this));}},_scrollVertically:function(xAmount){if(this.currentlyScrolling&&this.scrollQueue.length>0){return;}
this.currentlyScrolling=true;this.options.beforeScroll.bind(this)();var manualScroll=new Effect.Scroll(this.viewport,{x:xAmount,afterFinish:function(){this._updateButtonStates();this.currentlyScrolling=false;this.options.afterScroll.bind(this)();if(this.scrollQueue.length>0){this._scrollToBlock(this.scrollQueue.shift());this.scrollQueue=[];}}.bind(this),duration:this.options.scrollTime});},_blockPage:function(block){var blockIndex=null
this.blocks.find(function(_block,index){if(_block==block){blockIndex=index;return true;}
return false;});if(blockIndex){return parseInt(blockIndex/CastTV.VideoGroup.visibleBlocks);}
return null;},_currentPage:function(){return parseInt(this.viewport.cumulativeScrollOffset()[0]/this.options.scrollDist);},_scrollToPage:function(destPage){var currPage=this._currentPage();if(currPage!=destPage){this._scrollVertically((destPage-currPage)*this.options.scrollDist);}},_scrollToBlock:function(block){this._scrollToPage(this._blockPage(block));},_scrollToPageImmediately:function(destPage){if(this.currentlyScrolling){this.scrollQueue.unshift(this.blocks[destPage*CastTV.VideoGroup.visibleBlocks]);}else{this._scrollToPage(destPage);}},_blockChangedTo:function($super,block){$super(block);if(this.currentlyScrolling){this.scrollQueue.push(block);}else{this._scrollToBlock(block);}}});CastTV.TweetedVideo=Class.create({initialize:function(hash,options){this.hash=hash;this.options={parentUlId:'tweeted_videos',hiddenItemClass:'temporarily_hidden',tweetedVideoClass:'tweeted_video_block',tweetClass:'block_tweet',tweetCountSelector:'.tweet_count',totalTweetCountSelector:'.tweet_count > span',tweetContainerSelector:'ul.block_tweets',tweetSelector:'ul.block_tweets>li.block_tweet',tweetHiddenTimesSelector:'.tweet_meta input',tweetTimeAgoLinksSelector:'.tweet_meta .tweet_meta_posted a',fetchMoreLinkSelector:'.toggle_tweets a.tweet_expand',collapseLinkSelector:'a.tweet_collapse',moreTweetsPath:'/twitter/more/',fetchMoreSpinnerSelector:'div.expand_spinner',collapsedMaxTweetsVisible:3,tweetNavAnimationDuration:0.2};Object.extend(this.options,options||{});this.parentUl=$(this.options.parentUlId);if(this.options.nodeHtml){this._buildFromHtml(this.options.nodeHtml);}else{this.node=$('tweeted_video_'+this.hash)||$('outer_playback_'+this.hash);if(!this.node){throw'CastTV.TweetedVideo could not find the node element: '+node;}}
CastTV.TweetedVideo.instances.set(this.hash,this);this._attachNodeEvents();this.latestTweetTime=(new Date(this._timeStringForIndexedTweet(0))-0)/1000;this.currentlyFetchingTweets=false;},_timeStringForIndexedTweet:function(i){return this.node.select(this.options.tweetHiddenTimesSelector)[i].value;},_getFetchMoreLink:function(){return this.node.select(this.options.fetchMoreLinkSelector)[0];},_getCollapseLink:function(){return this.node.select(this.options.collapseLinkSelector)[0];},_getFetchMoreSpinner:function(){return this.node.select(this.options.fetchMoreSpinnerSelector)[0];},_getTweetTimeAgoLinks:function(){return this.node.select(this.options.tweetTimeAgoLinksSelector);},_totalTweetCount:function(){return parseInt(this.node.select(this.options.totalTweetCountSelector)[0].innerHTML.replace(',',''));},_moreTweetsAvailable:function(){return this._totalTweetCount()!==this._visibleTweetsCount();},_updateTweetNavigation:function(){if(!this._moreTweetsAvailable()){this._getFetchMoreLink().fade({duration:this.options.tweetNavAnimationDuration});}
if(this._visibleTweetsCount()>this.options.collapsedMaxTweetsVisible){this._getCollapseLink().appear({duration:this.options.tweetNavAnimationDuration});}},_attachNodeEvents:function(){CastTV.playbacks(this.hash).setPostToggleCallback(function(visibility){CastTV.TweetDaemon.instance.updateNotifications(visibility);});var fetch=function(e){e.stop();var tweets=this.node.select(this.options.tweetSelector);var someTweetsHidden=tweets.find(function(tweet){return!tweet.visible();});if(someTweetsHidden){tweets.slice(this.options.collapsedMaxTweetsVisible).each(function(tweet){tweet.appear({duration:this.options.tweetNavAnimationDuration});}.bind(this));this._updateTweetNavigation();}else if(!this.currentlyFetchingTweets&&this._moreTweetsAvailable()){this.fetchMoreTweets();}}.bindAsEventListener(this);this._getFetchMoreLink().observe('click',fetch);var collapseLink=this._getCollapseLink();collapseLink.observe('click',function(e){e.stop();var tweets=this.node.select(this.options.tweetSelector);tweets.each(function(tweet,index){if(index>=this.options.collapsedMaxTweetsVisible){tweet.hide();}}.bind(this));if(this._visibleTweetsCount()>this.options.collapsedMaxTweetsVisible){this._getFetchMoreLink().appear({duration:this.options.tweetNavAnimationDuration});}
collapseLink.hide();}.bindAsEventListener(this));},_buildFromHtml:function(html){var li=new Element('li',{'id':'tweeted_video_'+this.hash,'class':this.options.hiddenItemClass+' '+this.options.tweetedVideoClass,'style':'display: none;'});li.update(html);this.node=li;this.parentUl.insertBefore(li,this.parentUl.firstChild);},detachNode:function(){this.parentUl.removeChild(this.node);this.node=null;},reinsert:function(html){this.detachNode();this._buildFromHtml(html);this._attachNodeEvents();},updateTimestamp:function(){var timeAgoLinks=this._getTweetTimeAgoLinks();timeAgoLinks.each(function(link,index){var oldContents=link.innerHTML;var utcTimeStr=this._timeStringForIndexedTweet(index);var humanTime=CastTV.DateHelper.time_ago_in_words_with_parsing(utcTimeStr);link.update(humanTime);if(oldContents!==humanTime){link.highlight({duration:1.5});}}.bind(this));},_visibleTweetsCount:function(){return this.node.select(this.options.tweetSelector).length;},_moreTweetsUrl:function(){return this.options.moreTweetsPath+this.hash+'/'+this.latestTweetTime+'/'+this._visibleTweetsCount()+'.json';},_consolidateNewTweets:function(newTweets){$A(newTweets).each(function(tweetHtml){var li=new Element('li',{'class':this.options.tweetClass,'style':'display: none;'});li.update(tweetHtml);this.node.select(this.options.tweetContainerSelector)[0].appendChild(li);li.appear({duration:1.0});}.bind(this));this._updateTweetNavigation();},fetchMoreTweets:function(){this.currentlyFetchingTweets=true;this._getFetchMoreSpinner().appear();CastTV.get(this._moreTweetsUrl(),function(transport){if(transport.status>=200&&transport.status<300){var newTweets=eval('('+transport.responseText+')');this._consolidateNewTweets(newTweets);this._getFetchMoreSpinner().fade();this.currentlyFetchingTweets=false;}}.bind(this));},isHidden:function(){return!!this.node.hasClassName(this.options.hiddenItemClass);},_firstTweetNode:function(){return this.node.select(this.options.tweetSelector)[0];},show:function(callback){var appear=new Effect.Appear(this.node,{duration:1.0,afterFinish:callback});var highlight=new Effect.Highlight(this._firstTweetNode(),{duration:2.0});this.node.removeClassName(this.options.hiddenItemClass);}});Object.extend(CastTV.TweetedVideo,{options:{videoContainerSelector:'ul#tweeted_videos>li',playbackEmbedSelector:'.playback_embed'},instances:new Hash(),nodes:function(){return $$(CastTV.TweetedVideo.options.videoContainerSelector);},hashFromNode:function(node){return node.id.match(/tweeted_video_(\w+)/)[1];},registerAll:function(){CastTV.TweetedVideo.nodes().each(function(node){new CastTV.TweetedVideo(CastTV.TweetedVideo.hashFromNode(node));});},get:function(hash){return CastTV.TweetedVideo.instances.get(hash);},remove:function(hash){CastTV.TweetedVideo.instances.get(hash).detachNode();CastTV.TweetedVideo.instances.unset(hash);},replace:function(hash,html){CastTV.TweetedVideo.get(hash).reinsert(html);},updateTimestamps:function(){CastTV.TweetedVideo.instances.values().each(function(tweetedVideo){tweetedVideo.updateTimestamp();});},isEmbedVisible:function(){return'undefined'!==typeof $$(CastTV.TweetedVideo.options.playbackEmbedSelector).find(function(elt){return elt.visible();});}});CastTV.TweetDaemon=Class.create({initialize:function(options){this.options={loopInterval:30,tweetHomePath:'/twitter',tweetCountPath:'/twitter/count/',updatesPath:'/twitter/data/',topicParameter:'topic',maxParameter:'max',pageParameter:'p',autoUpdateParameter:'auto',paginationPreviousText:'previous',paginationNextText:'next',updateNotesSelector:'.notification .update',updateCountsSelector:'.notification .update span.count',updateRefreshesSelector:'.notification .update a.refresh_page',warningNotesSelector:'.notification .warning',autoUpdateRadioSelector:'.autoupdate_radio',autoUpdateRadioOnValue:'on',autoUpdateContainerSelector:'.subnav_autoupdate',updateSpinnerSelector:'.subnav_autoupdate .casttv_spinner_sm',topOfPageSelector:'#header',maxVideosPerPage:20,updatesFrozen:false,currentPage:1,paginationLinksSelector:'div#pagination > ul > li > a',topic:null,updateTweetsOnly:false};Object.extend(this.options,options||{});if(CastTV.TweetDaemon.instance){throw'an instance of CastTV.TweetDaemon already exists';}else{CastTV.TweetDaemon.instance=this;}
this.updater=null;this.lastUpdated=null;this.autoUpdatesPaused=false;this.delayedConsolidationData=null;CastTV.TweetedVideo.registerAll();CastTV.TweetedVideo.updateTimestamps();this._registerNotifications();this._registerNavigation();},stop:function(){this.updater.stop();this.updater=null;},restart:function(){this.stop();this._startUpdater();},_updatePagination:function(){$$(this.options.paginationLinksSelector).each(function(link){var text=link.innerHTML;var page=null;if(text.match(this.options.paginationPreviousText)){page=this.options.currentPage-1;}else if(text.match(this.options.paginationNextText)){page=this.options.currentPage+1;}else{page=parseInt(text);}
link.href=this.options.tweetHomePath+'?'+
(this.options.topic?(this.options.topicParameter+'='+encodeURIComponent(this.options.topic)+'&'):'')+
this.options.maxParameter+'='+this.lastUpdated+'&'+this.options.pageParameter+'='+page;}.bind(this));},_setLastUpdated:function(ts){this.lastUpdated=ts;this._updatePagination();},_consolidateUpdates:function(data){var newTimestamp=data['timestamp'];var videos=$A(data['videos']);videos.reverse().each(function(videoData,index){var hash=videoData['hash'];var html=videoData['html'];var existing=CastTV.TweetedVideo.get(hash);var tweetedVideo=existing;if(existing){CastTV.TweetedVideo.replace(hash,html);}else{tweetedVideo=new CastTV.TweetedVideo(hash,{nodeHtml:html});}
var callback=null;if(index===videos.length-1){callback=function(){CastTV.TweetedVideo.nodes().slice(this.options.maxVideosPerPage).each(function(node){CastTV.TweetedVideo.remove(CastTV.TweetedVideo.hashFromNode(node));}.bind(this));this.updateNotifications(CastTV.TweetedVideo.isEmbedVisible());}.bind(this);}
tweetedVideo.show(callback);}.bind(this));this._setLastUpdated(newTimestamp);},_updateFetchUrl:function(){return this.options.updatesPath+this.lastUpdated+'.json'+(this.options.topic?('?'+this.options.topicParameter+'='+encodeURIComponent(this.options.topic)):'');},_tweetCountFetchUrl:function(){return this.options.tweetCountPath+this.lastUpdated+'.json'+(this.options.topic?('?'+this.options.topicParameter+'='+encodeURIComponent(this.options.topic)):'');},_fetchUpdates:function(force,callback){var url=this._updateFetchUrl();this.updateSpinner.appear();CastTV.get(url,function(transport){if(transport.status>=200&&transport.status<300){this.delayedConsolidationData=null;var data=eval('('+transport.responseText+')');if(!force&&this.autoUpdatesPaused){this.delayedConsolidationData=data;}else{this.updateNotes.each(function(elt){elt.hide();});this._consolidateUpdates(data);}
this.updateSpinner.fade();if(callback){callback();}}}.bind(this));},_fetchNow:function(force){this.restart();this._fetchUpdates(force);this.updateNotes.each(function(elt){elt.hide();});},_checkWhetherUpdatesFrozen:function(shouldTurnAutoOn){if(this.options.updatesFrozen&&this.options.currentPage>1){this.updateSpinner.appear();document.location=this.options.tweetHomePath+((this.options.topic||shouldTurnAutoOn)?'?':'')+
(this.options.topic?(this.options.topicParameter+'='+encodeURIComponent(this.options.topic))+(shouldTurnAutoOn?'&':''):'')+
(shouldTurnAutoOn?(this.options.autoUpdateParameter+'=1'):'');return true;}else if(this.options.updatesFrozen){this.options.updatesFrozen=false;}
return false;},_registerNotifications:function(){this.warningNotes=$$(this.options.warningNotesSelector);this.updateNotes=$$(this.options.updateNotesSelector);this.updateCounts=$$(this.options.updateCountsSelector);this.updateRefreshLinks=$$(this.options.updateRefreshesSelector);this.updateSpinner=$$(this.options.updateSpinnerSelector)[0];this.topOfPage=$$(this.options.topOfPageSelector)[0];this.updateRefreshLinks.each(function(elt){elt.observe('click',function(e){e.stop();if(!this._checkWhetherUpdatesFrozen(false)){this._fetchNow(true);if(elt!=this.updateRefreshLinks[0]){Effect.ScrollTo(this.topOfPage);}}}.bindAsEventListener(this));}.bind(this));},_registerNavigation:function(){if(this.options.updateTweetsOnly){return;}
var autoUpdateOnRadio=this.autoUpdateRadio=$$(this.options.autoUpdateRadioSelector)[0];var autoUpdateOffRadio=$$(this.options.autoUpdateRadioSelector)[1];autoUpdateOnRadio.observe('click',function(e){if(!this._checkWhetherUpdatesFrozen(true)){this.updateNotifications(CastTV.TweetedVideo.isEmbedVisible());}}.bindAsEventListener(this));autoUpdateOffRadio.observe('click',function(e){this.warningNotes.each(function(elt){elt.hide()});}.bindAsEventListener(this));},_notifyAboutUpdates:function(count){this.updateCounts.each(function(elt){elt.update(count)});(0==CastTV.TweetedVideo.instances.size()?[this.updateNotes[0]]:this.updateNotes).each(function(elt){elt.appear({duration:1.0});});},_fetchTweetCount:function(callback){var url=this._tweetCountFetchUrl();CastTV.get(url,function(transport){if(transport.status>=200&&transport.status<300){var count=parseInt(transport.responseText);if(count>0){this._notifyAboutUpdates(count);}
if(callback){callback();}}}.bind(this));},_autoFetchUpdates:function(){var radioButtons=$$(this.options.autoUpdateRadioSelector);if(0==radioButtons.length){return false;}
var formValue=$F(radioButtons.find(function(re){return re.checked;}));return this.options.autoUpdateRadioOnValue===formValue;},_startUpdater:function(){var updateTimestampsCallback=function(){CastTV.TweetedVideo.updateTimestamps();};this.updater=new PeriodicalExecuter(function(pe){if(this.options.updateTweetsOnly){CastTV.TweetedVideo.updateTimestamps();}else if(!this.updateSpinner.visible()){if(!this.options.topic){if(this._autoFetchUpdates()){this._fetchUpdates(false,updateTimestampsCallback);}else{this._fetchTweetCount(updateTimestampsCallback);}}}}.bind(this),this.options.loopInterval);},start:function(timestamp){if('undefined'===typeof timestamp||null===timestamp){if(!this.lastUpdated){throw'CastTV.TweetDaemon#start needs a timestamp if it hasn\'t before been run';}}else{if('number'!==typeof timestamp){throw'CastTV.TweetDaemon#start requires a numerical timestamp';}
this._setLastUpdated(timestamp);}
if(!this.options.topic){if(1==this.currentPage&&this._autoFetchUpdates()){this._fetchUpdates();}else if(this.options.updatesFrozen){this._fetchTweetCount();}}
this._startUpdater();},updateNotifications:function(embedPlaying){if(embedPlaying&&this._autoFetchUpdates()){this.autoUpdatesPaused=true;this.warningNotes.each(function(elt){elt.show();});}else{this.autoUpdatesPaused=false;this.warningNotes.each(function(elt){elt.hide();});if(this.delayedConsolidationData){this._consolidateUpdates(this.delayedConsolidationData);this.delayedConsolidationData=null;}
if(this.updateNotes[0].visible()&&this._autoFetchUpdates()){this._fetchNow();}}}});Object.extend(CastTV.TweetDaemon,{instance:null});CastTV.SearchBox=Class.create({initialize:function(container,options){this.options={textboxClass:'player_search_text',buttonClass:'player_search_button_icon',placeholderText:'Search for Videos',searchTextColor:'#333',placeholderTextColor:'#999',trackingCode:null};Object.extend(this.options,options||{});this.container=$(container);this.textbox=this.container.select('.'+this.options.textboxClass)[0];this.button=this.container.select('.'+this.options.buttonClass)[0];this._attachEvents();this._setPlaceholderText();},_setPlaceholderText:function(){this.textbox.setStyle({'color':this.options.placeholderTextColor});this.textbox.value=this.options.placeholderText;},_attachEvents:function(){this.textbox.observe('keypress',function(e){if(Event.KEY_RETURN===e.keyCode){this.launch();}else if(Event.KEY_ESC===e.keyCode&&''===this.textbox.value){this.textbox.blur();}}.bindAsEventListener(this));this.textbox.observe('focus',function(e){if(this.options.placeholderText===this.textbox.value){this.textbox.value='';this.textbox.setStyle({'color':this.options.searchTextColor});}}.bindAsEventListener(this));this.textbox.observe('blur',function(e){if(''===this.textbox.value){this._setPlaceholderText();}}.bindAsEventListener(this));this.button.observe('click',function(e){e.stop();this.launch();}.bindAsEventListener(this));},launch:function(){if(!this.textbox||this.options.placeholderText===this.textbox.value){CastTV.openSearchPage('',this.options.trackingCode);}else{CastTV.openSearchPage(this.textbox.value,this.options.trackingCode);}}});CastTV.IFrame=Class.create({initialize:function(container,hash,options){this.options={navigation:false,prevUrl:null,nextUrl:null,navigationControlsClass:'iframe_previous_next',leftNavControlEnabledClass:'iframe_previous_bt',rightNavControlEnabledClass:'iframe_next_bt',leftNavControlDisabledClass:'iframe_previous_bt_disabled',rightNavControlDisabledClass:'iframe_next_bt_disabled'};Object.extend(this.options,options||{})
this.container=$(container);this.hash=hash;if(this.options.navigation){this._registerNavigation();}
this._registerSearchBox();},_registerNavigation:function(){this.navigationControls=this.container.select('.'+this.options.navigationControlsClass)[0];this.leftNavLink=this.navigationControls.select('.'+this.options.leftNavControlDisabledClass)[0];this.rightNavLink=this.navigationControls.select('.'+this.options.rightNavControlDisabledClass)[0];var no_op=function(e){e.stop();};if(this.options.prevUrl){this.leftNavLink.href=this.options.prevUrl;this.leftNavLink.addClassName(this.options.leftNavControlEnabledClass);this.leftNavLink.removeClassName(this.options.leftNavControlDisabledClass);}else{this.leftNavLink.observe('click',no_op);this.leftNavLink.setStyle({'cursor':'default'});}
if(this.options.nextUrl){this.rightNavLink.href=this.options.nextUrl;this.rightNavLink.addClassName(this.options.rightNavControlEnabledClass);this.rightNavLink.removeClassName(this.options.rightNavControlDisabledClass);}else{this.rightNavLink.observe('click',no_op);this.rightNavLink.setStyle({'cursor':'default'});}
this.navigationControls.show();},_registerSearchBox:function(){var sb=new CastTV.SearchBox(this.container,{textboxClass:'iframe_search_text',buttonClass:'iframe_search_button_icon'});}});var Autocomplete=function(el,options){this.el=$(el);this.id=this.el.identify();this.el.setAttribute('autocomplete','off');this.suggestions=[];this.data=[];this.badQueries=[];this.selectedIndex=-1;this.currentValue=this.el.value;this.intervalId=0;this.cachedResponse=[];this.instanceId=null;this.onChangeInterval=null;this.ignoreValueChange=false;this.serviceUrl=options.serviceUrl;this.options={autoSubmit:false,minChars:1,maxHeight:300,deferRequestBy:10,width:0,container:null};if(options){Object.extend(this.options,options);}
this.initialize();};Autocomplete.instances=[];Autocomplete.isDomLoaded=false;Autocomplete.getInstance=function(id){var instances=Autocomplete.instances;var i=instances.length;while(i--){if(instances[i].id===id){return instances[i];}}};Autocomplete.normalizeWords=function(words){return words.map(function(word){return word.replace(/\W/g,'')});};Autocomplete.highlight=function(value,re){var words=value.match(/\S+/g);var normalizedWords=Autocomplete.normalizeWords(words);var highlightStartIndex=Infinity;var highlightedString='';words.each(function(word,index){if(index>0&&word.length>0){highlightedString+=' ';}
var normalizedWord=normalizedWords[index];var wordMatch=normalizedWord.match(re);if(wordMatch){var highlightedPrefix=word.match(/(\w\W*)/ig).splice(0,wordMatch[0].length);var leadingPunctuation=word.match(/^(\W*)\w/)[1];if(leadingPunctuation){highlightedPrefix.unshift(leadingPunctuation);}
if(highlightedPrefix.length>0){highlightedPrefix[highlightedPrefix.length-1]=highlightedPrefix[highlightedPrefix.length-1].replace(/\W*$/,'');}
highlightedPrefix=highlightedPrefix.join('');var rest=word.split('').splice(highlightedPrefix.length,word.length).join('');if(rest.match(/^\W+$/)){highlightedPrefix+=rest;rest='';}
if(Infinity==highlightStartIndex){highlightStartIndex=highlightedString.length;}
highlightedString+='<strong>'+highlightedPrefix+'</strong>'+rest;}else{highlightedString+=word;}});return[highlightedString,highlightStartIndex];};RegExp.escape=(function(){var specials=['.','*','+','?','|','(',')','[',']','{','}','\\'];sRE=new RegExp('(\\'+specials.join('|\\')+')','g');return function(text){return text.replace(sRE,'\\$1');}})();Autocomplete.prototype={killerFn:null,initialize:function(){var me=this;this.killerFn=function(e){if(!$(Event.element(e)).up('.autocomplete')){me.killSuggestions();me.disableKillerFn();}}.bindAsEventListener(this);if(!this.options.width){this.options.width=this.el.getWidth();}
var div=new Element('div',{style:'position:absolute; z-index:995;'});div.update('<div class="autocomplete-w1"><div class="autocomplete-w2"><div class="autocomplete" id="Autocomplete_'+this.id+'" style="display:none; width:'+this.options.width+'px;"></div></div></div>');this.options.container=$(this.options.container);if(this.options.container){this.options.container.appendChild(div);this.fixPosition=function(){};}else{document.body.appendChild(div);}
this.mainContainerId=div.identify();this.container=$('Autocomplete_'+this.id);this.fixPosition();Event.observe(this.el,window.opera?'keypress':'keydown',this.onKeyPress.bind(this));Event.observe(this.el,'keyup',this.onKeyUp.bind(this));Event.observe(this.el,'blur',this.enableKillerFn.bind(this));Event.observe(this.el,'focus',this.fixPosition.bind(this));this.container.setStyle({maxHeight:this.options.maxHeight+'px'});this.instanceId=Autocomplete.instances.push(this)-1;},fixPosition:function(){var offset=this.el.cumulativeOffset();$(this.mainContainerId).setStyle({top:(offset.top+this.el.getHeight())+'px',left:offset.left+'px'});},enableKillerFn:function(){Event.observe(document.body,'click',this.killerFn);},disableKillerFn:function(){Event.stopObserving(document.body,'click',this.killerFn);},killSuggestions:function(){this.stopKillSuggestions();this.intervalId=window.setInterval(function(){this.hide();this.stopKillSuggestions();}.bind(this),300);},stopKillSuggestions:function(){window.clearInterval(this.intervalId);},onKeyPress:function(e){if(!this.enabled){return;}
switch(e.keyCode){case Event.KEY_ESC:this.el.value=this.currentValue;this.hide();break;case Event.KEY_TAB:case Event.KEY_RETURN:if(this.selectedIndex===-1){this.hide();return;}
this.select(this.selectedIndex);if(e.keyCode===Event.KEY_TAB){return;}
break;case Event.KEY_UP:this.moveUp();break;case Event.KEY_DOWN:this.moveDown();break;default:return;}
Event.stop(e);},onKeyUp:function(e){switch(e.keyCode){case Event.KEY_UP:case Event.KEY_DOWN:return;}
clearInterval(this.onChangeInterval);if(this.currentValue!==this.el.value){if(this.options.deferRequestBy>0){this.onChangeInterval=setInterval((function(){this.onValueChange();}).bind(this),this.options.deferRequestBy);}else{this.onValueChange();}}},onValueChange:function(){clearInterval(this.onChangeInterval);this.currentValue=this.el.value;this.selectedIndex=-1;if(this.ignoreValueChange){this.ignoreValueChange=false;return;}
if(this.currentValue===''||this.currentValue.length<this.options.minChars){this.hide();}else{this.getSuggestions();}},getSuggestions:function(){var cr=this.cachedResponse[this.currentValue];if(cr&&Object.isArray(cr.suggestions)){this.suggestions=cr.suggestions;this.data=cr.data;this.suggest();}else if(!this.isBadQuery(this.currentValue)){new Ajax.Request(this.serviceUrl+'/'+encodeURIComponent(this.currentValue),{onComplete:this.processResponse.bind(this),method:'get'});}},isBadQuery:function(q){var i=this.badQueries.length;while(i--){if(q.indexOf(this.badQueries[i])===0){return true;}}
return false;},hide:function(){this.enabled=false;this.selectedIndex=-1;this.container.hide();},suggest:function(){if(this.suggestions.length===0){this.hide();return;}
var unsortedContent=$A([]);var normalizedTypedWords=Autocomplete.normalizeWords(this.currentValue.match(/\S+/g));var normalizedRe=new RegExp('\\b'+normalizedTypedWords.map(function(word){return RegExp.escape(word);}).join('|\\b'),'gi');this.suggestions.each(function(value,i){var suggestionType=this.data[i]['type'];var highlightedRetval=Autocomplete.highlight(value,normalizedRe);var highlightedValue=highlightedRetval[0];var highlightedIndex=highlightedRetval[1];var htmlArrayFn=function(activationIndex){return[(this.selectedIndex===i?'<div class="selected"':'<div'),' title="',value,'" onclick="Autocomplete.instances[',this.instanceId,'].select(',activationIndex,');" onmouseover="Autocomplete.instances[',this.instanceId,'].activate(',activationIndex,');">',highlightedValue,' <span class="parenthetical">('+suggestionType+')</span></div>'];}.bind(this);unsortedContent.push([htmlArrayFn,highlightedIndex,i]);}.bind(this));var newSuggestions=[];var newData=[];var sortedIndex=0;var content=unsortedContent.sort(function(a,b){var aHighlightIndex=a[1];var aDefaultPosition=a[2];var bHighlightIndex=b[1];var bDefaultPosition=b[2];if(aHighlightIndex!=bHighlightIndex){return(aHighlightIndex<bHighlightIndex?-1:1);}
return(aDefaultPosition<bDefaultPosition?-1:1);}).map(function(x){var position=x[2];newSuggestions.push(this.suggestions[position]);newData.push(this.data[position]);var htmlArray=x[0](sortedIndex);sortedIndex+=1;return htmlArray;}.bind(this)).flatten();this.container.update(content.join('')).show();this.suggestions=newSuggestions;this.data=newData;this.enabled=true;},processResponse:function(xhr){var response;try{response=xhr.responseText.evalJSON();if(!Object.isArray(response.data)){response.data=[];}}catch(err){return;}
if(response.suggestions.length===0){this.badQueries.push(response.query);}
this.cachedResponse[response.query]=response;if(response.query===this.currentValue){this.suggestions=response.suggestions;this.data=response.data;this.suggest();}},activate:function(index){var divs=this.container.childNodes;var activeItem;if(this.selectedIndex!==-1&&divs.length>this.selectedIndex){divs[this.selectedIndex].className='';}
this.selectedIndex=index;if(this.selectedIndex!==-1&&divs.length>this.selectedIndex){activeItem=divs[this.selectedIndex]
activeItem.className='selected';}
return activeItem;},deactivate:function(div,index){div.className='';if(this.selectedIndex===index){this.selectedIndex=-1;}},select:function(i){var selectedValue=this.suggestions[i];if(selectedValue){this.el.value=selectedValue;if(this.options.autoSubmit&&this.el.form){this.el.form.submit();}
this.ignoreValueChange=true;this.hide();this.onSelect(i);}},moveUp:function(){if(this.selectedIndex===-1){return;}
if(this.selectedIndex===0){this.container.childNodes[0].className='';this.selectedIndex=-1;this.el.value=this.currentValue;return;}
this.adjustScroll(this.selectedIndex-1);},moveDown:function(){if(this.selectedIndex===(this.suggestions.length-1)){return;}
this.adjustScroll(this.selectedIndex+1);},adjustScroll:function(i){this.el.value=this.suggestions[i];var container=this.container;var activeItem=this.activate(i);var offsetTop=activeItem.offsetTop;var upperBound=container.scrollTop;var lowerBound=upperBound+this.options.maxHeight-25;if(offsetTop<upperBound){container.scrollTop=offsetTop;}else if(offsetTop>lowerBound){container.scrollTop=offsetTop-this.options.maxHeight+25;}},onSelect:function(i){(this.options.onSelect||Prototype.emptyFunction)(this.suggestions[i],this.data[i]);}};CastTV.ValidatedText=Class.create({initialize:function(container,options){this.options={textNodeSelector:'input[type=text],input[type=password]',descNodeSelector:'.parenthetical',timerDuration:800,styles:$A(['error','success','waiting']),minimumLength:0,maximumLength:Infinity,defaultDescription:''};Object.extend(this.options,options||{});this._container=container;this._textNode=container.select(this.options.textNodeSelector)[0];this._descNode=container.select(this.options.descNodeSelector)[0];this._lastValue=null;this._timer=null;this._postValidationHooks=$A([]);this._textNode.observe('keyup',function(e){this._restartTimer();}.bindAsEventListener(this));var initialValue=this._textNode.value;if(undefined!==initialValue){this._lastValue=initialValue;if(this._markedErroneous()){this._focusForErrorCorrection();}else if(initialValue.length>0){this.validate(initialValue);}}
this._textNode.observe('focus',function(e){if(this._markedErroneous()&&this._textNode.value.length===0){this.info(this.options.defaultDescription);}}.bindAsEventListener(this));CastTV.ValidatedText.instances.set(this._textNode.id.match(/user_(\w+)$/)[1],this);},info:function(str){return this._description(str);},error:function(str){return this._description(str).addClassName('error');},success:function(str){return this._description(str).addClassName('success');},waiting:function(str){return this._description(str).addClassName('waiting');},validate:function(value){if(value.length===0){this.info(this.options.defaultDescription);}else if(value.length<this.options.minimumLength){this.error('must be at least '+this.options.minimumLength+' characters long');}else if(value.length>this.options.maximumLength){this.error('must be at most '+this.options.maximumLength+' characters long');}else{return true;}
return false;},addPostValidationHook:function(callback){this._postValidationHooks.push(callback);},_description:function(str){this.options.styles.each(function(className){this._container.removeClassName(className);}.bind(this));this._descNode.update(str);return this._container;},_restartTimer:function(){clearTimeout(this._timer);this._timer=setTimeout(function(){var value=this._textNode.value;if(this._lastValue!==value){this.validate(value);this._postValidationHooks.each(function(callback){callback();});this._lastValue=value;}}.bind(this),this.options.timerDuration);},_markedErroneous:function(){return this._container.hasClassName('error');},_focusForErrorCorrection:function(){this._textNode.focus();this._textNode.select();}});Object.extend(CastTV.ValidatedText,{instances:new Hash(),get:function(field){return CastTV.ValidatedText.instances.get(field);}});CastTV.ValidatedUsername=Class.create(CastTV.ValidatedText,{initialize:function($super,container,options){var usernameOptions={loginRegex:/^[a-z0-9\_\-]+$/i,minimumLength:4,maximumLength:20};Object.extend(usernameOptions,options||{});$super(container,usernameOptions);},validate:function($super,login){if(!$super(login))return false;if(this.options.loginRegex.test(login)){this.waiting('checking availability...');CastTV.get('/users/available.json?username='+encodeURIComponent(login),function(transport){if(transport.status>=200&&transport.status<300){if(login===this._textNode.value){var data=eval('('+transport.responseText+')');if(data.available){this.success('available');}else{this.error('username is unavailable');}}}}.bind(this));}else{this.error('must only contain letters, numbers, or <tt>-_</tt>');}}});CastTV.ValidatedPassword=Class.create(CastTV.ValidatedText,{initialize:function($super,container,options){var passwordOptions={styles:$A(['error','success','waiting','weak','medium','strong']),strongPasswordRegex:/^(?=.{8,}$)(?=(?:.*?\d){2})(?=(?:.*?[A-Za-z]){2})(?=(?:.*?\W){1})/,mediumPasswordRegex:/^(?=.{8,}$)(?=(?:.*?\d){2})(?=(?:.*?[A-Za-z]){2})/,minimumLength:4,maximumLength:40};Object.extend(passwordOptions,options||{});$super(container,passwordOptions);var passwordConfValidator=CastTV.ValidatedText.get('password_confirmation');if(passwordConfValidator){this.addPostValidationHook(function(){passwordConfValidator.validate(passwordConfValidator._textNode.value);});}},rate:function(password){var rating=null;if(this.options.strongPasswordRegex.test(password)){rating='strong';}else if(this.options.mediumPasswordRegex.test(password)){rating='medium';}else{rating='weak';}
return this.success('strength: '+rating).addClassName(rating);},validate:function($super,password){$super(password)&&this.rate(password);}});CastTV.ValidatedPasswordConfirmation=Class.create(CastTV.ValidatedText,{initialize:function($super,container,options){var passwordConfirmationOptions={styles:$A(['error','success','waiting','weak','medium','strong'])};Object.extend(passwordConfirmationOptions,options||{});this._textNode=container.select('input[type=password]')[0];this._originalPasswordTextNode=$(this._textNode.id.replace(/_confirmation$/,''));$super(container,passwordConfirmationOptions);},validate:function(confirmedPassword){if(confirmedPassword.length===0){this.info(this.options.defaultDescription);}else if(confirmedPassword===this._originalPasswordTextNode.value){this.success('passwords match');}else{this.error('passwords do not match');}},_focusForErrorCorrection:function(){this._originalPasswordTextNode.focus();this._originalPasswordTextNode.select();}});CastTV.ValidatedEmail=Class.create(CastTV.ValidatedText,{initialize:function($super,container,options){var emailOptions={maximumLength:100};Object.extend(emailOptions,options||{});$super(container,emailOptions);},validate:function($super,email){if(!$super(email))return false;if(CastTV.validateEmail(email)){this.waiting('validating email address...');CastTV.get('/users/available.json?email='+encodeURIComponent(email),function(transport){if(transport.status>=200&&transport.status<300){if(email===this._textNode.value){var data=eval('('+transport.responseText+')');if(data.available){this.success(this.options.defaultDescription);}else{this.error('email is already being used');}}}}.bind(this));}else{this.error('should be a valid email address');}}});