var thc2={};thc2.Browser={detect:function(){var ua=navigator.userAgent.toLowerCase();var is=function(t){return ua.indexOf(t)!=-1;};var b=(!(/opera|webtv/i.test(ua))&&/msie (\d)/.test(ua))?('ie ie'+RegExp.$1):is('gecko/')?'gecko':is('opera/9')?'opera opera9':/opera (\d)/.test(ua)?'opera opera'+RegExp.$1:is('konqueror')?'konqueror':is('applewebkit/')?'webkit safari':is('mozilla/')?'gecko':'';if(b=='gecko'){if(is('firefox/2')){b+=' firefox2';}else if(is('firefox/3')){b+=' firefox3';}}
var os=(is('x11')||is('linux'))?' linux':is('mac')?' mac':is('win')?' win':'';var css={browser:b,os:os};return css;}};thc2.Global=this;thc2.Core={loadPath:'javascripts',requiredFiles:[],fileLoaded:function(file){return $A(this.requiredFiles).include(file);},fileNameFor:function(file){return this.loadPath+'/'+file+'.js';},loadFile:function(file){document.write('<scr'+'ipt type="text/javascript" src="'+this.fileNameFor(file)+'"></scr'+'ipt>');},loadFileNow:function(file){var script="";new Ajax.Request(this.fileNameFor(file),{method:'get',onComplete:function(req){script=req.responseText},asynchronous:false});thc2.Global.eval(script);},require:function(file,blocking){if(!this.fileLoaded(file)){if(blocking){this.loadFileNow(file);}else{this.loadFile(file);}
this.requiredFiles.push(file);}}};function require(file,blocking){this.require(file,false);}
RegExp.prototype.argumentNames=function(){return[];}
var UnknownDebugLevelException=function(level){this.name='UnknownDebugLevelException';this.message='Unknown debug level '+level;this.toString=(function(){return this.name+': '+this.message});}
thc2.Environment={DebugLevel:'info',AvailableDebugLevels:['info','warning','error'],setDebugLevel:function(level){if(!this.AvailableDebugLevels.include(level)){throw new UnknownDebugLevelException(level);}
this.DebugLevel=level;},debugLevelIncludes:function(level){return(this.DebugLevel=='info')||(this.DebugLevel=='warning'&&(level=='warning'||level=='error'))||(this.DebugLevel=='error'&&level=='error');}};thc2.NullLogger={log:function(text){}}
thc2.ConsoleLogger={log:function(text){if(window.console.debug===undefined){window.console.log(text);}else{window.console.debug(text);}}};thc2.DocumentLogger={log:function(text){var element=new Element('p').update(text);$('logger').insert(element);}};thc2.AlertLogger={log:function(text){alert(text);}}
thc2.Logger={logger:window.console?thc2.ConsoleLogger:thc2.Environment.DebugLevel=='info'?thc2.NullLogger:thc2.NullLogger,log:function(text){this.logger.log(text);},info:function(text){if(thc2.Environment.debugLevelIncludes('info')){this.log(text);}},warning:function(text){if(thc2.Environment.debugLevelIncludes('warning')){this.log(text);}},error:function(text){if(thc2.Environment.debugLevelIncludes('error')){this.log(text);}}};thc2.Globalize={currentLanguage:"",English:{},German:{}};Object.extend(String.prototype,{t:function(){if(thc2.Globalize.currentLanguage==""){thc2.Logger.error('Current Language is undefined');return this;}else{var result=thc2.Globalize[thc2.Globalize.currentLanguage][this];if(Object.isString(result)){return result;}else{thc2.Logger.warning('String "'+this+'" is not translated');return this;}}}});thc2.Benchmark=Class.create({initialize:function(what){this.what=what;},start:function(){this.start_time=new Date();},stop:function(){this.stop_time=new Date();},duration:function(){return this.stop_time-this.start_time;},lapTime:function(){return(new Date())-this.start_time;},log:function(){if(this.what){thc2.Logger.info("#{1} took #{2} ms".t().format(this.what,this.duration()));}else{thc2.Logger.info("thc2.Benchmark took #{1} ms".t().format(this.duration()));}},benchmark:function(func){this.start();func();this.stop();this.log();return this;}});Object.extend(thc2.Globalize.German,{"#{1} took #{2} ms":"#{1} hat #{2} ms gedauert","thc2.Benchmark took #{1} ms":"thc2.Benchmark hat #{1} ms gedauert"});thc2.Singleton={create:function(){var klass=Class.create.apply(Class,arguments);this.singletonize(klass);return klass;},singletonize:function(klass){Object.extend(klass,{self:function(){if(!klass.instance){klass.instance=new klass();}
return klass.instance;}});}};thc2.AjaxCache=thc2.Singleton.create({initialize:function(){this.clear();},find:function(key){return this.cache[key];},store:function(key,value){this.cache[key]=value;},clear:function(){this.cache=new Hash();}});thc2.Page=Class.create({initialize:function(){this.behaviours=new Hash();this.objects=new Array();this.connections=new Array();this.elementConnections=new Array();},registerBehaviour:function(behaviour,klass){this.behaviours[behaviour]={klass:klass};},registerBehaviours:function(hash){var page=this;$H(hash).each(function(pair){page.registerBehaviour(pair.key,pair.value);});},unregisterBehaviour:function(behaviour){this.behaviours.remove(behaviour);},applyBehaviours:function(element){this.objects.push(thc2.Widget.ApplyBehaviours((element||document.body),this.behaviours));this.objects=this.objects.flatten();},find:function(element,behaviour){return this.objects.select(function(obj){return(obj.element==element&&obj.behaviour==behaviour);});},findObjects:function(element){return this.objects.select(function(obj){return(obj.element==element);});},findElementConnection:function(element,selector,event,func){return this.elementConnections.find(function(item){return(item.element==element&&item.selector==selector&&item.event==event&&item.func==func);});},findConnection:function(selector,event,func){return this.connections.find(function(item){return(item.selector==selector&&item.event==event&&item.func==func);});},connect:function(selector,event,func){if(!this.findConnection(selector,event,func)){this.connections.push({selector:selector,event:event,func:func});}},connectAll:function(hash){for(var selector in hash){for(var event in hash[selector]){this.connect(selector,event,hash[selector][event]);}}},connectElement:function(element,selector,event,func){if(!this.findElementConnection(element,selector,event,func)){Event.observe(element,event,func);this.elementConnections.push({element:element,selector:selector,event:event,func:func});}},doConnect:function(parent,selector,event,func){var page=this;$A($(parent).getElementsBySelector(selector)).each(function(element){var e=$(element);page.connectElement(e,selector,event,func.bind(e));});},reconnect:function(parent){var page=this;this.connections.each(function(item){page.doConnect(parent||document.body,item.selector,item.event,item.func);});}});thc2.CurrentPage=new thc2.Page();function $S(obj,funcname){return function(event){var o=$O(obj);return o[funcname].bind(o)(event);}}
function $O(obj){if(Object.isString(obj)){obj=thc2.CurrentPage.findObjects($(obj))[0];}
return obj;}
thc2.Widget=Class.create({initialize:function(element){this.element=$(element).cleanWhitespace();}});Object.extend(thc2.Widget,{ApplyBehaviours:function(parent,behaviours){var objects=[];var elements=$(parent||document.body).getElementsByTagName("*");var behaviourElements=[];for(var k=0;k!=elements.length;++k){var element=elements[k];var names=element.className;if(/thc2-/.match(names)>0){behaviourElements.push(element);}}
for(var k=0;k!=behaviourElements.length;++k){var element=behaviourElements[k];var names=element.className;var matching_classes=names.split(' ').select(function(c){return c.startsWith("thc2-");});for(var i=0;i!=matching_classes.length;i++){var className=matching_classes[i];var mapping=behaviours[className];if(mapping&&thc2.CurrentPage.find(element,className).length==0){try{var obj=new mapping.klass(element);obj.behaviour=className;}catch(e){var msg="Could not create class "+className+", error: "+e.message
if(e.stack)msg+=" stack: "+e.stack;thc2.Logger.error(msg);return;}
objects.push(obj);}}}
try{return objects;}finally{if(Prototype.Browser.IE){objects=null;}}}});String.prototype.format=function(){return $A(arguments).inject(this,function(str,val,i){return str.replace(new RegExp('#\\{'+(i+1)+'\\}','g'),val);});};thc2.TinyMCEObserver=Class.create(Abstract.TimedObserver,{getValue:function(){if(tinyMCE.selectedInstance)
return tinyMCE.activeEditor.getContent();else
return"";}});thc2.Bubble=Class.create({initialize:function(parent){this.parent=parent;this.element=this.bubbleElement();this.updatePosition();Event.observe(this.element,"mouseover",this.onMouseOver.bindAsEventListener(this));Event.observe(this.element,"mouseout",this.onMouseOut.bindAsEventListener(this));},updatePosition:function(){var offset=Position.cumulativeOffset(this.parent.element);var bubble_size=Element.getDimensions(this.element);var element_size=Element.getDimensions(this.parent.element);var body_size=Element.getDimensions(document.body);this.calculatedStyle={horizontal:this.horizontalStyle(offset,body_size)};this.verticalPosition(offset,bubble_size);this.horizontalPosition(offset,element_size,bubble_size);},verticalPosition:function(element_offset,bubble_size){this.element.style.top=((element_offset[1]-bubble_size['height']+this.verticalOffset())+"px");},horizontalPosition:function(element_offset,element_size,bubble_size){var left=0;switch(this.calculatedStyle['horizontal']){case'right':left=element_offset[0]+element_size['width'];break;case'left':left=element_offset[0]-bubble_size['width'];break;};this.element.style.left=(left+this.horizontalOffset())+'px';},verticalOffset:function(){return 0;},horizontalOffset:function(){return 0;},horizontalStyle:function(offset,body_size){var left_space=offset[0];var right_space=body_size['width']-offset[0];return(left_space>right_space)?'left':'right';},visible:function(){return Element.visible(this.element);},show:function(){this.element.show();},hide:function(){this.element.hide();},appear:function(){if(!this.visible()){new Effect.Appear(this.element,{duration:0.3});}},disappear:function(){if(this.visible()){new Effect.Fade(this.element,{duration:0.3});}},onMouseOver:function(event){thc2.BubbleManager.self().showBubble(this);},onMouseOut:function(event){thc2.BubbleManager.self().hideBubble(this);},onClick:function(event){event.stop();},bubbleElement:function(){throw'thc2.Bubble.bubbleElement not implemented!';}});thc2.AjaxBubble=Class.create(thc2.Bubble,{show:function(){this.fetch();thc2.Bubble.prototype.show.apply(this,arguments);},appear:function(){this.fetch();thc2.Bubble.prototype.appear.apply(this,arguments);},requestCompleted:function(result){thc2.AjaxCache.self().store(this.url(),result);this.updateBubble(result);this.updatePosition();},updateBubble:function(text){this.element.innerHTML=text;},fetch:function(){this.contents=thc2.AjaxCache.self().find(this.url());if(this.contents){this.requestCompleted(this.contents);}else{new Ajax.Request(this.url(),{method:'get',parameters:this.calculatedStyle,onSuccess:function(transport){this.requestCompleted(transport.responseText).bind(this);}.bind(this)});this.switchLoadText();}},url:function(){throw"thc2.AjaxBubble.url not implemented";},switchLoadText:function(){}});thc2.BookmarkWidget=Class.create(thc2.Widget,{initialize:function(element){thc2.Widget.prototype.initialize.apply(this,arguments);Event.observe(this.element,"click",this.bookmark.bindAsEventListener(this));},bookmark:function(event){var url=location.href;var title=document.title;bookmark(url,title);event.stop();}});thc2.CurrentPage.registerBehaviour("thc2-bookmark",thc2.BookmarkWidget);function bookmark(url,title){var ua=navigator.userAgent.toLowerCase();var bookmarkCode={ie:function(){window.external.AddFavorite(url,title);},konq:function(){alert('You need to press CTRL + B to bookmark our site.'.t());},opera:function(){},safari:function(){(ua.indexOf('mac')!=-1)?alert('You need to press Command/Cmd + D to bookmark our site.'.t()):alert('You need to press CTRL + D to bookmark our site.'.t());},misc:function(){alert('In order to bookmark this site you need to do so manually through your browser.'.t());}};var browser=(window.external&&(!document.createTextNode||(typeof(window.external.AddFavorite)=='unknown')))?ie:(ua.indexOf('konqueror')!=-1)?'konq':(window.opera)?'opera':(window.home||(ua.indexOf('webkit')!=-1||!window.print||(ua.indexOf('mac')!=-1)))?'safari':'misc';bookmarkCode[browser]();}
Object.extend(thc2.Globalize.German,{'You need to press CTRL + B to bookmark our site.':'Sie müssen STRG + B drücken, um diese Seite zu Ihren Favoriten hinzuzufügen.','In order to bookmark this site you need to do so manually through your browser.':'Sie können diese Seite leider nur manuell zu Ihren Favoriten hinzufügen. Bitte lesen Sie dazu die Hilfe Ihres Browsers.','You need to press Command/Cmd + D to bookmark our site.':'Sie müssen Apfel + D drücken, um diese Seite zu Ihren Lesezeichen hinzuzufügen.','You need to press CTRL + D to bookmark our site.':'Sie müssen STRG + D drücken, um diese Seite zu Ihren Lesezeichen hinzuzufügen.'});thc2.BubbleManager=thc2.Singleton.create({currentBubble:{visible:function(){return false;},show:function(){},hide:function(){},appear:function(){},disappear:function(){}},initialize:function(){},startShowTimeout:function(){this.endTimeout();this.timeout=setTimeout(this.appearBubble.bind(this),400);},startHideTimeout:function(){this.endTimeout();this.timeout=setTimeout(this.disappearBubble.bind(this),400);},endTimeout:function(){if(this.timeout){clearTimeout(this.timeout);}},appearBubble:function(){this.endTimeout();this.currentBubble.appear();},disappearBubble:function(){this.endTimeout();this.currentBubble.disappear();},hideBubbleNow:function(){this.endTimeout();this.currentBubble.hide();},showBubbleNow:function(){this.endTimeout();this.currentBubble.show();},showBubble:function(bubble){this.endTimeout();if(!this.currentBubble.visible()){this.currentBubble=bubble;this.startShowTimeout();}else if(this.currentBubble!=bubble){this.hideBubbleNow();this.currentBubble=bubble;this.showBubbleNow();}},hideBubble:function(){this.endTimeout();this.startHideTimeout();}});thc2.BubbleTriggerWidget=Class.create(thc2.Widget,{initialize:function(element){thc2.Widget.prototype.initialize.apply(this,arguments);Event.observe(this.element,"mouseover",this.showBubble.bindAsEventListener(this));Event.observe(this.element,"mouseout",this.hideBubble.bindAsEventListener(this));},bubble:function(){throw"thc2.BubbleTriggerWidget.bubble not implemented";},showBubble:function(event){thc2.BubbleManager.self().showBubble(this.bubble());},hideBubble:function(event){thc2.BubbleManager.self().hideBubble(this.bubble());}});thc2.ClickableWidget=Class.create(thc2.Widget,{init:false,initialize:function(element,options){thc2.Widget.prototype.initialize.apply(this,arguments);Event.observe(this.element,"click",this.click.bindAsEventListener(this));if(options&&options['href']){this.setURL(options['href']);}},click:function(event){if(!this.init&&!this.href){this.findLink();}
this.followLink();},findLink:function(){this.a=$(this.element.getElementsByTagName('a')[0]);if(this.a){this.setURL(this.a.href);}
this.init=true;},setURL:function(link){this.href=link;},followLink:function(){window.location.href=this.href;}});thc2.CurrentPage.registerBehaviour("thc2-clickable-widget",thc2.ClickableWidget);thc2.CodeInputWidget=Class.create(thc2.Widget,{initialize:function(element){thc2.Widget.prototype.initialize.apply(this,arguments);Event.observe(this.element,"focus",this.select.bindAsEventListener(this));Event.observe(this.element,"click",this.select.bindAsEventListener(this));this.element.readOnly=true;},select:function(event){this.element.select();}});thc2.CurrentPage.registerBehaviour("thc2-code-input",thc2.CodeInputWidget);thc2.FormWidget=Class.create(thc2.Widget,{initialize:function(element){thc2.Widget.prototype.initialize.apply(this,arguments);this.validators=[];this.form=this.element;Event.observe(this.element,'submit',this.submit.bindAsEventListener(this));},submit:function(event){if(!this.validate())
event.stop();},validate:function(){var valid=true;this.validators.each(function(validator){if(!validator()){valid=false;throw $break;}});return valid;},validatesPresenceOf:function(id,message){var field=$(id);this.validators.push(function(){if((field&&(field.value==""||$F(id)==null))||(!field&&($$('input:checked[type="radio"][name="'+id+'"]')==0))){this.handleError(field,message);return false;}
return true;});},validatesFormatOf:function(id,format,message){var field=$(id);this.validators.push(function(){if(field&&(field.type!='text'||!format.match(field.value))){this.handleError(field,message);return false;}
return true;});},validatesConfirmationOf:function(id_first,id_second,message){var field_first=$(id_first);var field_second=$(id_second);this.validators.push(function(){if(field_first&&field_second&&$F(id_first)!=$F(id_second)){this.handleError(field_first,message);return false;}
return true;});},validatesLengthOf:function(id,minlength,maxlength,message){var field=$(id);this.validators.push(function(){if(field&&((field.type!='text')||(minlength!=null&&field.value.length<minlength)||(maxlength!=null&&field.value.length>maxlength))){this.handleError(field,message);return false;}
return true;});}});thc2.FormWidget.ErrorHandler=Class.create({handle:function(field,message){throw"thc2.FormWidget.ErrorHandler.handle not implemented";}});thc2.FormWidget.AlertErrorHandler=Class.create(thc2.FormWidget.ErrorHandler,{handle:function(field,message){alert(message);field.focus();}});Object.extend(thc2.FormWidget,{defaultErrorHandler:thc2.FormWidget.AlertErrorHandler,handleError:function(field,message){var handler=new thc2.FormWidget.defaultErrorHandler();handler.handle(field,message);}});thc2.LimitedTextareaWidget=Class.create(thc2.Widget,{LengthRegexp:/^maxlength_(\d+)$/,initialize:function(element){thc2.Widget.prototype.initialize.apply(this,arguments);Event.observe(this.element,"keypress",this.keypress.bindAsEventListener(this));Event.observe(this.element,"keyup",this.keyup.bindAsEventListener(this));var length=this.element.classNames().grep(this.LengthRegexp)[0];if(length){var match=length.match(this.LengthRegexp);this.maximum=parseInt(match[1]);}else{this.maximum=100;}
try{this.span=$(this.element.parentNode).getElementsByTagName("span")[0];}catch(e){}},keypress:function(event){if(this.element.value.length>=this.maximum){this.element.value=this.element.value.substring(0,this.maximum);if(event.keyCode==0){event.stop();}}},keyup:function(event){if(this.span){this.updateDisplay();}},updateDisplay:function(){chars=this.maximum-this.element.value.length;this.span.innerHTML=chars;}});thc2.CurrentPage.registerBehaviour("thc2-limited-textarea",thc2.LimitedTextareaWidget);thc2.MnemonicForm=Class.create(thc2.FormWidget,{initialize:function(element){thc2.FormWidget.prototype.initialize.apply(this,arguments);this.inputs=new Array();this.element.getInputs().each(function(element){if(element.type!='submit')
this.inputs.push(element);if(element.type=='text')
Event.observe(element,'keyup',this.storeValues.bindAsEventListener(this));}.bind(this));this.values=new Hash();this.storeValues();},storeValues:function(){var h=new Hash();this.values=this.values.merge(this.inputs.inject(h,function(hash,element){if(element.value&&element.value!=""){if(element.type!='radio'){hash.set(element.identify(),element.value);}}
return hash;}));this.values=this.values.merge(this.radios());},clear:function(){this.values.keys().each(function(key){$(key).value="";});},restore:function(){this.values.each(function(pair){$(pair.key).value=pair.value;});},radios:function(){var hash=new Hash();this.element.getInputs('radio').each(function(element){element.name.scan(/\[([_a-z]*)\]/,function(match){if(element.checked)
hash[match[1]]=element.value;});});return hash;}});thc2.PlaceholderInputWidget=Class.create(thc2.Widget,{initialize:function(element){thc2.Widget.prototype.initialize.apply(this,arguments);this.element.value=this.element.value||this.element.title;this.placeholder=this.element.title||this.element.value;Event.observe(this.element,"focus",this.focus.bindAsEventListener(this));Event.observe(this.element,"blur",this.blur.bindAsEventListener(this));Event.observe(this.findForm(this.element),'submit',this.submit.bindAsEventListener(this));if((this.element.title&&this.element.title==this.element.value)||!this.element.title){this.element.addClassName("placeholder-input");}},focus:function(event){if(this.element.value==this.placeholder){this.element.value="";this.element.removeClassName("placeholder-input");}},blur:function(event){if(this.element.value==""){this.element.value=this.placeholder;this.element.addClassName("placeholder-input");}},submit:function(event){if(this.element.value==this.placeholder){this.element.value='';}},findForm:function(element){if(element.tagName.toUpperCase()=='HTML'){return undefined;}else if(element.tagName.toUpperCase()=='FORM'){return element;}else{return this.findForm(element.parentNode);}}});thc2.CurrentPage.registerBehaviour("thc2-placeholder-input",thc2.PlaceholderInputWidget);thc2.PopupWidget=Class.create(thc2.Widget,{SizeRegexp:/^box_size_(\d+)x(\d+)$/,IdRegexp:/^popup_id_(\w+)$/,init:false,Format:'width=#{1},height=#{2},location=no,menubar=no,status=no,toolbar=no,scrollbars=yes,resizable=yes',defaultWidth:690,defaultHeight:480,defaultId:'popup',initialize:function(element){thc2.Widget.prototype.initialize.apply(this,arguments);Event.observe(this.element,"click",this.showPopup.bindAsEventListener(this));},findLink:function(){return this.element.href?this.element.href:this.element.down('a',0).href;},showPopup:function(event){if(!this.init){this.extractParams();}
event.stop();this.window=window.open(this.url,this.id,this.Format.format(this.width,this.height));this.window.resizeTo(this.width,this.height);this.window.focus();},extractParams:function(){var size=this.element.classNames().grep(this.SizeRegexp)[0];this.url=this.findLink();if(size){var match=size.match(this.SizeRegexp);this.width=parseInt(match[1]);this.height=parseInt(match[2]);}else{this.width=this.defaultWidth;this.height=this.defaultHeight;}
var id=this.element.classNames().grep(this.IdRegexp)[0];if(id){var match=id.match(this.IdRegexp);this.id='popup_'+match[1];}else{this.id=this.defaultId;}
this.init=true;}});thc2.CurrentPage.registerBehaviour("thc2-popup",thc2.PopupWidget);thc2.RatingWidget=Class.create(thc2.Widget,{initialize:function(element){thc2.Widget.prototype.initialize.apply(this,arguments);this.list=$A(this.element.getElementsByTagName('li'));this.ratingField=$(this.list.first());this.ratingText=this.ratingField.innerHTML;this.list.shift();var widget=this;var i=0;this.stars=this.list.collect(function(item){return new thc2.RatingStar(item,widget,i++);});this.stars.each(function(star){if(star.selected){this.currentStar=star;this.ratingField.innerHTML=this.ratingText=this.currentStar.ratingText;}}.bind(this));Event.observe(this.element,"mouseout",this.starMouseOut.bindAsEventListener(this));},starClick:function(currentStar){var rating=currentStar.number;this.setRating(rating);this.ratingField.innerHTML=this.ratingText=currentStar.ratingText;},setRating:function(rating){this.stars.each(function(star){if(rating>=star.number){star.selected=true;star.update(4);}else{star.selected=false;star.update(0);}});},starMouseOver:function(currentStar){var number=currentStar.number;this.stars.each(function(star){if(star.selected){if(number>=star.number){star.update(3);}else{star.update(1);}}else{if(number>=star.number){star.update(2);}else{star.update(0);}}});this.ratingField.innerHTML=currentStar.ratingText;},starMouseOut:function(event){this.stars.each(function(star){if(star.selected){star.update(4);}else{star.update(0);}});this.ratingField.innerHTML=this.ratingText;}});thc2.RatingStar=Class.create({starheight:14,initialize:function(element,ratingwidget,number){this.element=$(element);this.ratingwidget=ratingwidget;this.number=number;this.selected=(this.div().className=='on');this.div().className='';this.state=this.selected?4:0;this.image=this.link().getElementsByTagName("img")[0];this.ratingText=this.image.title
this.update(this.state);Event.observe(this.link(),"click",this.starClick.bindAsEventListener(this));Event.observe(this.div(),"mouseover",this.starMouseOver.bindAsEventListener(this));},starClick:function(event){this.ratingwidget.starClick(this);event.stop();},starMouseOver:function(event){this.ratingwidget.starMouseOver(this);event.stop();},link:function(){return $(this.element.getElementsByTagName("a")[0]);},div:function(){return $(this.element.getElementsByTagName("div")[0]);},update:function(state){this.state=state;this.image.style.top="-"+this.starheight*state+"px";}});thc2.OneClickRatingWidget=Class.create(thc2.RatingWidget,{starClick:function(star){thc2.RatingWidget.prototype.starClick.apply(this,arguments);new Ajax.Request(star.link(),{method:'get',onComplete:this.replaceStars.bind(this)});},replaceStars:function(request){this.element.replace(request.responseText);}});thc2.InputRatingWidget=Class.create(thc2.RatingWidget,{ContainerRegexp:/^store_in_(\S+)$/,initialize:function(element){thc2.RatingWidget.prototype.initialize.apply(this,arguments);var container=this.element.classNames().grep(this.ContainerRegexp)[0];if(container){var match=container.match(this.ContainerRegexp);this.container=match[1];}
if(this.resetLink()){Event.observe(this.resetLink(),"click",this.reset.bindAsEventListener(this));}},resetLink:function(){return this.element.next(".thc2-input-rating-reset")},reset:function(event){this.setRating(-1)
$(this.container).value="";event.stop()},starClick:function(star){thc2.RatingWidget.prototype.starClick.apply(this,arguments);$(this.container).value=(star.number+1);}});thc2.CurrentPage.registerBehaviours({"thc2-one-click-rating":thc2.OneClickRatingWidget,"thc2-input-rating":thc2.InputRatingWidget});thc2.RemoteForm=Class.create(thc2.FormWidget,{initialize:function(element){thc2.FormWidget.prototype.initialize.apply(this,arguments);this.action=this.element.action;this.spinner=$(this.element.getElementsByClassName('thc2-spinner')[0]);},submit:function(event){thc2.FormWidget.prototype.submit.apply(this,arguments);new Ajax.Request(this.action,{asynchronous:true,evalScripts:true,onLoading:this.loading.bind(this),onLoaded:this.loaded.bind(this),onInteractive:this.interactive.bind(this),onSuccess:this.success.bind(this),onFailure:this.failure.bind(this),onComplete:this.complete.bind(this),parameters:Form.serialize(this.element)});event.stop();},loading:function(){if(this.spinner){this.showSpinner();}},loaded:function(){},interactive:function(){},success:function(){},failure:function(){},complete:function(){if(this.spinner){this.hideSpinner();}},showSpinner:function(){this.spinner.show();},hideSpinner:function(){this.spinner.hide();}});thc2.CurrentPage.registerBehaviour('thc2-remote-form',thc2.RemoteForm);thc2.RemoteLinkWidget=Class.create(thc2.Widget,{initialize:function(element){thc2.Widget.prototype.initialize.apply(this,arguments);this.url=this.element.href;Event.observe(this.element,"click",this.click.bindAsEventListener(this));},click:function(event){new Ajax.Request(this.url,{asynchronous:true,evalScripts:true,onLoading:this.loading.bind(this),onLoaded:this.loaded.bind(this),onInteractive:this.interactive.bind(this),onSuccess:this.success.bind(this),onFailure:this.failure.bind(this),onComplete:this.complete.bind(this)});event.stop();},loading:function(){},loaded:function(){},interactive:function(){},success:function(){},failure:function(){},complete:function(){}});thc2.CurrentPage.registerBehaviour('thc2-remote-link',thc2.RemoteLinkWidget);thc2.SlideshowWidget=Class.create(thc2.Widget,{current:0,stopped:true,cycles:0,SpeedRegexp:/^speed-(\d+)$/,initialize:function(element){thc2.Widget.prototype.initialize.apply(this,arguments);this.slides=$A(this.element.getElementsByTagName('li'));this.slides.each(function(slide){slide.xOpacity=0;});if(this.slides.size()==0){return;}
this.slides.first().style.display="block";this.slides.first().style.zIndex=-200;this.slides.first().xOpacity=.99;var speed=this.element.classNames().grep(this.SpeedRegexp)[0];if(speed){var match=speed.match(this.SpeedRegexp);this.speed=parseInt(match[1]);}else{this.speed=3000;}
this.startLater();},startLater:function(){this.stopped=false;setTimeout(this.fade.bind(this),this.speed);},start:function(){if(!this.stopped)return;this.stopped=false;this.fade();},stop:function(){if(this.stopped)return;this.jump(this.current);},next:function(){this.jump(this.nextIndex());},previous:function(){this.jump(this.previousIndex());},jump:function(slide){this.current=slide;this.hideAll();this.currentSlide().xOpacity=.99;this.setOpacity(this.currentSlide());this.currentSlide().style.display="block";this.currentSlide().style.zIndex=-200;this.stopped=true;},hideAll:function(){var slideshow=this;this.slides.each(function(slide){slide.style.display="none";slide.xOpacity=0;slideshow.setOpacity(slide);});},fade:function(){if(this.stopped)return;var currentOpacity=(this.currentSlide().xOpacity)-.05;var nextOpacity=(this.nextSlide().xOpacity)+.05;this.nextSlide().style.display="block";this.nextSlide().style.zIndex=-200;this.currentSlide().xOpacity=currentOpacity;this.nextSlide().xOpacity=nextOpacity;this.setOpacity(this.currentSlide());this.setOpacity(this.nextSlide());if(currentOpacity<=0){this.currentSlide().style.display="none";this.current=this.nextIndex();if(!this.stopped){setTimeout(this.fade.bind(this),this.speed);}}else if(!this.stopped){setTimeout(this.fade.bind(this),50);}},nextIndex:function(){return this.slides[this.current+1]?this.current+1:0;},previousIndex:function(){return this.slides[this.current-1]?this.current-1:this.slides.length-1;},currentSlide:function(){return this.slides[this.current];},nextSlide:function(){return this.slides[this.nextIndex()];},setOpacity:function(obj){if(obj.xOpacity>.99){obj.xOpacity=.99;return;}
obj.style.opacity=obj.xOpacity;obj.style.MozOpacity=obj.xOpacity;obj.style.filter="alpha(opacity="+(obj.xOpacity*100)+")";}});var SlideshowControls={connect:function(){thc2.CurrentPage.connectAll({'#start-slideshow':{click:$S(SlideshowControls,'start')},'#stop-slideshow':{click:$S(SlideshowControls,'stop')},'#next-slide':{click:$S(SlideshowControls,'next')},'#previous-slide':{click:$S(SlideshowControls,'previous')}});},start:function(event){$S('slideshow','start')(event);this.showStop();event.stop();},stop:function(event){$S('slideshow','stop')(event);this.showStart();event.stop();},next:function(event){$S('slideshow','next')(event);this.showStart();event.stop();},previous:function(event){$S('slideshow','previous')(event);this.showStart();event.stop();},showStart:function(){$('stop-slideshow').className='none';$('start-slideshow').className='';},showStop:function(){$('stop-slideshow').className='';$('start-slideshow').className='none';}};thc2.CurrentPage.registerBehaviour("thc2-slideshow",thc2.SlideshowWidget);SlideshowControls.connect();thc2.TabWidget=Class.create(thc2.Widget,{initialize:function(element){thc2.Widget.prototype.initialize.apply(this,arguments);this.initTabs();this.switchToAnchoredTab();if(this.listenForHashChange){if(this.hasOnHashChange()){Event.observe(window,'hashchange',this.switchToAnchoredTab.bindAsEventListener(this));}else{this.currentHash=document.location.hash
var self=this;setInterval(function(){self.checkForHashChange();},50);}}},listenForHashChange:true,hasOnHashChange:function(){var IESupportingHashChange=(document.documentMode&&document.documentMode>7)
return'onhashchange'in window&&(!Prototype.Browser.IE||IESupportingHashChange)},checkForHashChange:function(){if(this.currentHash!==document.location.hash){this.switchToAnchoredTab();this.currentHash=document.location.hash;}},initTabs:function(){this.list=$A(this.element.getElementsByClassName('tab-list')[0].getElementsByTagName("li"));this.tabs=this.list.collect(function(item){var tab=new thc2.Tab(this,$(item));if(item.hasClassName(thc2.Tab.activeClassName))
this.currentTab=tab;return tab;}.bind(this));},tabContainer:function(){return $(this.element.getElementsByClassName('tab-container')[0]);},switchTab:function(newTab){this.beforeSwitch(this.currentTab,newTab);this.doSwitch(this.currentTab,newTab);var oldTab=this.currentTab;this.switchCurrent(this.currentTab,newTab);this.afterSwitch(oldTab,this.currentTab);},switchCurrent:function(oldTab,newTab){oldTab.turnOff();newTab.turnOn();this.currentTab=newTab;},beforeSwitch:function(oldTab,newTab){},doSwitch:function(oldTab,newTab){},afterSwitch:function(oldTab,newTab){},switchToAnchoredTab:function(){var anchor=document.location.hash;if(anchor!=""){this.tabs.each(function(tab){if(tab.anchor==anchor){this.switchTab(tab);}}.bind(this));}}});Effect.PhaseIn=function(element,options){return new Effect.Parallel([new Effect.Appear(element,{sync:true}),new Effect.BlindDown(element,{sync:true,scaleFrom:10})],options);}
Effect.PhaseOut=function(element,options){return new Effect.Parallel([new Effect.BlindUp(element,{sync:true,scaleTo:10}),new Effect.Fade(element,{sync:true})],options);}
thc2.AjaxTabWidget=Class.create(thc2.TabWidget,{initialize:function(element){thc2.TabWidget.prototype.initialize.apply(this,arguments);thc2.AjaxCache.self().store(this.currentTab.link,this.tabContent().innerHTML);var self=this;this.tabs.each(function(tab){Event.observe(tab.link,'click',function(event){self.switchTab(tab);event.stop();});})},listenForHashChange:false,beforeFade:function(){},afterFade:function(){},beforeAppear:function(){thc2.CurrentPage.applyBehaviours(this.tabContent());thc2.CurrentPage.reconnect(this.tabContent());},afterAppear:function(){},tabContent:function(){return $(this.element.getElementsBySelector("div.tab-content")[0]);},switchTab:function(newTab){if(!this.changing){this.beforeSwitch(this.currentTab,newTab);this.nextTab=newTab;this.changing=true;this.beforeFade();this.fadeEffect=new Effect.PhaseOut(this.tabContainer(),{queue:{position:'end',scope:'a'},afterFinish:this.fadeCallback.bind(this),duration:0.5});if(!thc2.AjaxCache.self().find(this.nextTab.link)){new Ajax.Request(this.nextTab.link,{method:'get',onComplete:this.storeTab.bind(this)});}}},storeTab:function(req){thc2.AjaxCache.self().store(this.nextTab.link,req.responseText);},showTab:function(){this.doSwitch(this.currentTab,this.nextTab);clearTimeout(this.waitTimeout);var html=thc2.AjaxCache.self().find(this.nextTab.link);if(html){if(!this.contentBox){this.contentBox=this.tabContent();}
this.contentBox.update(html);this.beforeAppear();this.switchCurrent(this.currentTab,this.nextTab);this.appearEffect=new Effect.PhaseIn(this.tabContainer(),{queue:{position:'end',scope:'b'},afterFinish:this.appearCallback.bind(this),duration:0.5});this.changing=false;}else{this.waitForResponse();}},waitForResponse:function(){this.waitTimeout=setTimeout(this.showTab.bind(this),100);},fadeCallback:function(){this.afterFade();this.showTab();},appearCallback:function(){this.afterAppear();}});thc2.CurrentPage.registerBehaviour("thc2-tab-widget",thc2.AjaxTabWidget);thc2.Tab=Class.create({initialize:function(tabWidget,button){this.tabWidget=tabWidget;this.button=button;this.link=$(button).getElementsByTagName('a')[0];if(this.link){this.anchor=this.link.hash;}},turnOn:function(){this.button.addClassName(thc2.Tab.activeClassName);},turnOff:function(){this.button.removeClassName(thc2.Tab.activeClassName);}});thc2.Tab.activeClassName='selected';thc2.TinyMCEWidget=Class.create(thc2.Widget,{settings:{relative_urls:false,convert_urls:false},initialize:function(element){thc2.Widget.prototype.initialize.apply(this,arguments);tinyMCE.settings=this.settings;tinyMCE.execCommand('mceAddControl',true,this.element.id);},editor:function(){if(!this.editorInstance){this.editorInstance=tinyMCE.getInstanceById(this.element.id);}
return this.editorInstance;},show:function(){this.editor().show();},hide:function(){this.editor().hide();}});thc2.CurrentPage.registerBehaviour("thc2-tiny-mce",thc2.TinyMCEWidget);thc2.ToggleWidget=Class.create(thc2.Widget,{init:false,defaultEffect:'blind',defaultDuration:0.25,defaultOpenClass:'open',defaultClosedClass:'closed',initialize:function(element,options){thc2.Widget.prototype.initialize.apply(this,arguments);this.effect=this.defaultEffect;this.duration=this.defaultDuration;this.openClass=this.defaultOpenClass;this.closedClass=this.defaultClosedClass;if(options&&options['target']){this.setLink(this.element);this.target=$(options['target']);}else{this.extractTarget();}},click:function(event){if(!this.init){this.extractParameters();}
this.toggleClassNames();Effect.toggle(this.target,this.effect,{duration:this.duration});event.stop();},toggleClassNames:function(){if(this.element.hasClassName(this.closedClass)){this.element.removeClassName(this.closedClass);this.element.addClassName(this.openClass);}else if(this.element.hasClassName(this.openClass)){this.element.removeClassName(this.openClass);this.element.addClassName(this.closedClass);}},setLink:function(link){if(link){if(this.link){Event.stopObserving(this.link,'click');}
this.link=$(link);Event.observe(this.link,"click",this.click.bindAsEventListener(this));}},setTarget:function(target){this.target=$(target);},setEffect:function(effect){this.effect=effect;},setDuration:function(duration){this.duration=duration;},extractParameters:function(){this.extractEffect();this.init=true;},extractTarget:function(){var classNames=$(this.element).className.split(' ');for(var i=0;i!=classNames.length;++i){if(classNames[i].startsWith("toggle_")){var target=classNames[i];break;}}
if(target){this.setLink(this.element);this.target=$(target.gsub("toggle_",''));}else{this.setLink(this.element.getElementsByTagName("a")[0]);var targetElement=this.element.getElementsByTagName("div")[0];if(targetElement){this.target=targetElement;}}},extractEffect:function(){var effect=$w($(this.element).className).find(function(klass){return klass.startsWith("effect_");});if(effect){this.effect=effect.gsub('effect_','');}}});thc2.CurrentPage.registerBehaviour("thc2-toggle-widget",thc2.ToggleWidget);thc2.CheckListWidget=Class.create(thc2.Widget,{initialize:function(element){thc2.Widget.prototype.initialize.apply(this,arguments);var selectAllElements=$A(this.element.getElementsByClassName('select_all'));var deselectAllElements=$A(this.element.getElementsByClassName('deselect_all'));var invertAllElements=$A(this.element.getElementsByClassName('invert_all'));selectAllElements.each(function(element){Event.observe(element,'click',this.selectAll.bindAsEventListener(this));}.bind(this));deselectAllElements.each(function(element){Event.observe(element,'click',this.deselectAll.bindAsEventListener(this));}.bind(this));invertAllElements.each(function(element){Event.observe(element,'click',this.invertAll.bindAsEventListener(this));}.bind(this));},findCheckBoxes:function(){this.checkboxes=this.element.getElementsBySelector('input[type="checkbox"]');},selectAll:function(event){if(!this.checkboxes){this.findCheckBoxes();}
this.checkboxes.each(function(checkbox){checkbox.checked=true;});event.stop();},deselectAll:function(event){if(!this.checkboxes){this.findCheckBoxes();}
this.checkboxes.each(function(checkbox){checkbox.checked=false;});event.stop();},invertAll:function(event){if(!this.checkboxes){this.findCheckBoxes();}
this.checkboxes.each(function(checkbox){checkbox.checked=!checkbox.checked;});event.stop();}});thc2.CurrentPage.registerBehaviour("thc2-check-list",thc2.CheckListWidget);thc2.EditorTabWidget=Class.create(thc2.TabWidget,{initialize:function(element){thc2.TabWidget.prototype.initialize.apply(this,arguments);this.tabs.each(function(tab){tab.name=$A(tab.button.classNames())[0];}.bind(this));this.editor=new thc2.TinyMCEWidget(this.element.getElementsByTagName('textarea')[0]);},doSwitch:function(oldTab,newTab){switch(newTab.name){case'rich-text':{this.editor.show();break;}
case'plain-text':{this.editor.hide();break;}}}});thc2.CurrentPage.registerBehaviour("thc2-editor-tab-widget",thc2.EditorTabWidget);thc2.AutocompleteWidget=Class.create(thc2.Widget,{initialize:function(element){thc2.Widget.prototype.initialize.apply(this,arguments);this.autocompleteBox=$('autocomplete');this.items=$('autocomplete-options').childElements().map(function(e){return e.innerHTML;})
this.completer=new Autocompleter.Local(this.element,this.autocompleteBox,this.items);}});thc2.CurrentPage.registerBehaviour("thc2-autocomplete",thc2.AutocompleteWidget);thc2.ComboBoxWidget=Class.create(thc2.Widget,{initialize:function(element){thc2.Widget.prototype.initialize.apply(this,arguments);this.textField=this.element.getElementsByTagName('input')[0];this.select=this.element.getElementsByTagName('select')[0];Event.observe(this.select,"change",this.change.bindAsEventListener(this));},change:function(event){this.textField.value=this.select.options[this.select.selectedIndex].value;}});thc2.CurrentPage.registerBehaviour("thc2-combo-box",thc2.ComboBoxWidget);
