var Cookie={create:function(name,value,days){if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));var expires="; expires="+date.toGMTString();}
else expires="";document.cookie=name+"="+value+expires+"; path=/";},read:function(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;},get:function(name){var start=document.cookie.indexOf(name+"=");var len=start+name.length+1;if((!start)&&(name!=document.cookie.substring(0,name.length))){return null;}
if(start==-1)return null;var end=document.cookie.indexOf(';',len);if(end==-1)end=document.cookie.length;return unescape(document.cookie.substring(len,end));},set:function(name,value,expires,path,domain,secure){var today=new Date();today.setTime(today.getTime());if(expires){expires=expires*1000*60*60*24;}
var expires_date=new Date(today.getTime()+(expires));document.cookie=name+'='+escape(value)+
((expires)?';expires='+expires_date.toGMTString():'')+
((path)?';path='+path:'')+
((domain)?';domain='+domain:'')+
((secure)?';secure':'');},del:function(name,path,domain){if(getCookie(name))document.cookie=name+'='+
((path)?';path='+path:'')+
((domain)?';domain='+domain:'')+';expires=Thu, 01-Jan-1970 00:00:01 GMT';}}
Controller={};Controller.Base=function(){};Controller.Base.prototype={locked:false,state:'idle',values:[],loopnum:0,playdir:null,current:{index:0,value:false},timeout:null,setValues:function(values){if(Var.is_array(values)){this.values=values;if(arguments[1]){this.reset();}
this.current.value=this.values[this.current.index];}},setOptions:function(options){this.options=Object.extend({duration:1.0,delay:0.0,loop:-1,playmode:'fw',frontback:false},options||{});},setCurrent:function(index){this.current.index=index;this.current.value=this.values[this.current.index];},forceFirst:function(index){this.setCurrent(this.values.length-1);},begin:function(){setTimeout(this.action.update.bind(this.action,this.current.index,this.current.value),((arguments[0]||0)*1000));},begin_play:function(){setTimeout(this.play.bind(this,this.values.length-1),((arguments[0]||0)*1000));},display:function(){this.first(false,true);},start:function(){this.event('beforeStart');this.cancel();if(this.options.frontback){this.first(false,true);}
this.timeout=setTimeout(this.loop.bind(this),(this.options.delay*1000));},auto_play:function(){this.play(this.values.length-1);},play:function(){this.event('beforePlay');this.setCurrent(arguments[0]||this.current.index);this.start();},pause:function(){this.event('beforePause');this.cancel('paused');},stop:function(){this.event('beforeStop');this.cancel();},toggle_playback:function(){if(this.state!='running'){this.play();}else{this.stop();}},forward:function(){this.options.playmode='fw';this.start();},backward:function(){this.options.playmode='bw';this.start();},currentIndex:function(){return this.current.index;},first:function(){return this.show(0,arguments[0]||false,arguments[1]||false);},valueOfIndex:function(index){return this.values[index];},prevIndex:function(){var index=arguments[0]||this.current.index;if(index<1&&this.options.loop!=0){index=this.values.length-1;}else{index=index-1;}
return index;},prevValue:function(){return this.values[this.prevIndex(arguments[0]||this.current.index)];},prev:function(){return this.show(this.prevIndex(),arguments[0]||false,false,'bw');},nextIndex:function(){var index=arguments[0]||this.current.index;if(index>=this.values.length-1&&this.options.loop!=0){index=0;}else{index=index+1;}
return index;},nextValue:function(){return this.values[this.nextIndex(arguments[0]||this.current.index)];},next:function(){return this.show(this.nextIndex(),arguments[0]||false,false,'fw');},last:function(){return this.show(this.values.length-1,arguments[0]||false,arguments[1]||false);},show:function(index){if(this.locked&&this.state!='running'){this.cancel();return false;}
if(!arguments[1]){this.cancel();}
if(!Var.is_undef(this.values[index])&&(index!=this.current.index||arguments[2])){this.locked=true;var isfirst=(index==0);var islast=(index==this.values.length-1);var dir=(arguments[3]||null);if(isfirst){this.event('beforeFirst');}else if(islast){this.event('beforeLast');}
if(dir=='fw'||(dir==null&&index>this.current.index)){this.playdir='fw';}else if(dir=='bw'||(dir==null&&index<this.current.index)){this.playdir='bw';}else{this.playdir=null;}
this.current.index=index;this.current.value=this.values[index];this.event('beforeUpdate');this.update(this.current.index,this.current.value);this.event('afterUpdate');if(isfirst){this.event('afterFirst');}else if(islast){if(this.options.loop>0){this.loopnum++;}
this.event('afterLast');}
return true;}
return false;},isReady:function(){return true;},ready:function(){this._loop();this.locked=false;this.event('whenReady');},loop:function(){this.render();if(this.options.loop>0&&this.loopnum>=this.options.loop){if(this.options.frontback){this.timeout=setTimeout(this.render.bind(this),(this.options.duration*1000));}else{this.cancel();}
this.event('beforeFinish');if(this.finish)this.finish();this.event('afterFinish');return;}
if(this.isReady()){this._loop();}},_loop:function(){if(this.state=='running')this.timeout=setTimeout(this.loop.bind(this),(this.options.duration*1000));},render:function(){if(this.state=='idle'){this.state='running';this.event('beforeSetup');if(this.setup)this.setup();this.event('afterSetup');}
if(this.options.playmode=='fw'){this.next(true);}else{this.prev(true);}},reset:function(){this.cancel();this.current={index:0,value:false};},cancel:function(){if(this.timeout)clearTimeout(this.timeout);this.state=arguments[0]||'idle';this.locked=false;this.loopnum=0;this.event('afterCancel');},isFirst:function(){return!(this.current.index>0);},isLast:function(){return!(this.current.index<this.values.length-1);},event:function(eventName){if(this.options[eventName+'Internal'])this.options[eventName+'Internal'](this);if(this.options[eventName])this.options[eventName](this);},update:function(index,value){}};Controller.Basic=Class.create();Object.extend(Object.extend(Controller.Basic.prototype,Controller.Base.prototype),{action:false,initialize:function(values,action){this.setAction(action);this.setValues(values);this.setOptions(arguments[2]);this.event('initialized');},setAction:function(action){this.action=action;this.action.setController(this);},event:function(eventName){this.action.event(eventName);if(this.options[eventName+'Internal'])this.options[eventName+'Internal'](this);if(this.options[eventName])this.options[eventName](this);},waitsForAction:function(){return Var.is_function(this.action.ready);},isReady:function(){return!this.waitsForAction();},update:function(index,value){this.action.update(index,value);}});Controller.PositionedImageGroups=Class.create();Object.extend(Object.extend(Controller.PositionedImageGroups.prototype,Controller.Basic.prototype),{setValues:function(values){if(Var.is_array(values)){var self=this;if(Var.is_function(self.action.getPosition)){this.values=$A(values).inject([],function(groups,images,index){groups[index]=$A(self.action.elements).inject([],function(srcs,elem,i){if(images[i]){srcs[i]=Object.extend({idx:i,position:self.action.getPosition(images[i].type)},images[i]);}else{srcs[i]={idx:i,src:images[0].src,clear:true};}
return srcs;});return groups;});}else{this.values=values;}
if(arguments[1]){this.reset();}
this.current.value=this.values[this.current.index];}}});Controller.Action={};Controller.Action.Base=Class.create();Controller.Action.Base.prototype={controller:false,parent:false,options:{},initialize:function(){this.setOptions(arguments[0]||{});},setOptions:function(options){Object.extend(this.options,options||{});},setController:function(controller){this.controller=controller;},event:function(eventName){if(this.options[eventName+'Internal'])this.options[eventName+'Internal'](this);if(this.options[eventName])this.options[eventName](this);},update:function(index,value){}};Controller.Action.Null=Class.create();Object.extend(Object.extend(Controller.Action.Null.prototype,Controller.Action.Base.prototype),{update:function(index,value){}});Controller.Action.Alert=Class.create();Object.extend(Object.extend(Controller.Action.Alert.prototype,Controller.Action.Base.prototype),{update:function(index,value){alert(value);}});Controller.Action.Console=Class.create();Object.extend(Object.extend(Controller.Action.Console.prototype,Controller.Action.Base.prototype),{update:function(index,value){window.console.log(Var.serialize(value));}});Controller.Action.innerHTML=Class.create();Object.extend(Object.extend(Controller.Action.innerHTML.prototype,Controller.Action.Base.prototype),{element:null,initialize:function(elem){this.element=$(elem);this.event('initialized');},update:function(index,value){this.element.innerHTML=value;}});Controller.Action.Stack=Class.create();Object.extend(Object.extend(Controller.Action.Stack.prototype,Controller.Action.Base.prototype),{actions:false,initialize:function(actions){this.setOptions(arguments[1]||{});this.actions=actions;var ref=this;this.actions.each(function(action){action.parent=ref;});},setController:function(controller){this.controller=controller;var ref=this;this.actions.each(function(action){action.controller=ref.controller;});},event:function(eventName){this.actions.each(function(action){action.event(eventName);});if(this.options[eventName+'Internal'])this.options[eventName+'Internal'](this);if(this.options[eventName])this.options[eventName](this);},update:function(index,value){this.actions.each(function(action){action.update(index,value);});}});Controller.Action.ImageBase=Class.create();Object.extend(Object.extend(Controller.Action.ImageBase.prototype,Controller.Action.Base.prototype),{image:null,setOptions:function(options){this.options=Object.extend({direction:'n',duration:1.0,delay:0.0,transition:Effect.Transitions.sinoidal,overflow:false},options||{});if(this.base_element){this.element=this.base_element;}
if(!this.options.overflow&&this.element)this.element.style.overflow='hidden';if(!this.options.overflow&&this.layer_element)this.layer_element.style.overflow='hidden';this.effect_options=this._prepareEffectOptions();},update:function(index,value){this.image=new Image();this.image.onload=this.ready.bind(this);this.image.onerror=this.event.bind(this,'loadError');if(Var.is_string(value)){this.image.src=value;}else if(Var.is_object(value)&&Var.is_string(value.src)){this.image.src=value.src;}else if(Var.is_object(value)&&Var.is_string(value.path)){this.image.src=value.path;}else{this.controller.cancel();}},get_direction:function(){if(this.options.direction=='horizontal'){if(this.controller.playdir=='bw'){var direction='left';}else{var direction='right';}}else if(this.options.direction=='vertical'){if(this.controller.playdir=='bw'){var direction='up';}else{var direction='down';}}else if(this.options.direction=='random'){var dirs=['n','e','s','w'];var direction=dirs[Math.floor(Math.random()*4)];}else{var direction=this.options.direction||'horizontal';}
return direction;},_prepareEffectOptions:function(){var options=Var.clone(this.options);options.duration=(options.duration/2);options.beforeStart=null;options.beforeSetup=null;options.afterSetup=null;options.beforeUpdate=null;options.afterUpdate=null;options.beforeFinish=null;options.afterFinish=null;return options;}});Controller.Action.SlideCssBackground=Class.create();Object.extend(Object.extend(Controller.Action.SlideCssBackground.prototype,Controller.Action.ImageBase.prototype),{element:null,initialize:function(elem){this.element=$(elem);this.setOptions(arguments[1]||{});this.event('initialized');},ready:function(){var controller=this.controller;var imgsrc=this.image.src;var dir=this.get_direction();var eff=new Effect.SlideBackgroundImage(this.element,Object.extend(this.effect_options,{fade:'out',direction:dir,afterFinish:function(effect){effect.element.style.backgroundImage='url('+imgsrc+')';new Effect.SlideBackgroundImage(effect.element,Object.extend(effect.options,{fade:'in',delay:0.0,direction:dir,afterFinish:function(effect){controller.ready();}}));}}));}});Controller.Action.SlideCssBackgroundReveal=Class.create();Object.extend(Object.extend(Controller.Action.SlideCssBackgroundReveal.prototype,Controller.Action.SlideCssBackground.prototype),{initialize:function(elem){this.base_element=$(elem);if(arguments[3]){var layer_id=arguments[3];}else if(this.base_element['id']){var layer_id=this.base_element['id']+'_layer';}else{var layer_id='__reveal_layer__';}
this.layer_element=$(layer_id);if(this.layer_element==undefined){var layer=document.createElement(arguments[2]||'div');layer.id=layer_id;layer.style.width='100%';layer.style.height='100%';layer.style.backgroundPosition=this.base_element.backgroundPosition||'0 0';layer.style.backgroundRepeat=this.base_element.backgroundRepeat||'no-repeat';this.layer_element=this.base_element.appendChild(layer);}
this.setOptions(arguments[1]||{});this.event('initialized');},ready:function(){var controller=this.controller;var imgsrc=this.image.src;var layer_element=this.layer_element;var base_element=this.base_element;var options=this.effect_options;var dir=this.get_direction();var eff=new Effect.SlideBackgroundImage(layer_element,{direction:dir,fade:'in',duration:0.0,delay:0.0,transition:Effect.Transitions.full,afterFinish:function(effect){base_element.style.backgroundImage='url('+imgsrc+')';new Effect.SlideBackgroundImage(layer_element,Object.extend(options,{fade:'out',direction:dir,afterFinish:function(effect){layer_element.style.backgroundPosition=base_element.style.backgroundPosition;layer_element.style.backgroundImage='url('+imgsrc+')';controller.ready();}}));}});}});Controller.Action.SlideCssBackgroundCover=Class.create();Object.extend(Object.extend(Controller.Action.SlideCssBackgroundCover.prototype,Controller.Action.SlideCssBackground.prototype),{initialize:function(elem){this.base_element=$(elem);if(arguments[3]){var layer_id=arguments[3];}else if(this.base_element['id']){var layer_id=this.base_element['id']+'_layer';}else{var layer_id='cover_layer';}
this.layer_element=$(layer_id);if(this.layer_element==undefined){var layer=document.createElement(arguments[2]||'div');layer.id=layer_id;layer.style.width='100%';layer.style.height='100%';layer.style.backgroundPosition=this.base_element.backgroundPosition||'0 0';layer.style.backgroundRepeat=this.base_element.backgroundRepeat||'no-repeat';this.layer_element=this.base_element.appendChild(layer);}
this.setOptions(arguments[1]||{});this.event('initialized');},ready:function(){var controller=this.controller;var imgsrc=this.image.src;var layer_element=this.layer_element;var base_element=this.base_element;var options=this.effect_options;var dir=this.get_direction();var eff=new Effect.SlideBackgroundImage(layer_element,{direction:dir,fade:'out',duration:0.0,delay:0.0,transition:Effect.Transitions.full,afterFinish:function(effect){layer_element.style.backgroundImage='url('+imgsrc+')';new Effect.SlideBackgroundImage(layer_element,Object.extend(options,{fade:'in',direction:dir,afterFinish:function(effect){layer_element.style.backgroundPosition=base_element.style.backgroundPosition;base_element.style.backgroundImage='url('+imgsrc+')';controller.ready();}}));}});}});Controller.Action.CrossFade=Class.create();Object.extend(Object.extend(Controller.Action.CrossFade.prototype,Controller.Action.ImageBase.prototype),{layer_element:null,base_element:null,initialize:function(elem){this.base_element=$(elem);if(arguments[3]){var layer_id=arguments[3];}else if(this.base_element['id']){var layer_id=this.base_element['id']+'_layer';}else{var layer_id='cover_layer';}
this.layer_element=$(layer_id);if(this.layer_element==undefined){var layer=document.createElement(arguments[2]||'div');layer.id=layer_id;layer.style.width='100%';layer.style.height='100%';layer.style.backgroundPosition=this.base_element.backgroundPosition||'0 0';layer.style.backgroundRepeat=this.base_element.backgroundRepeat||'no-repeat';this.layer_element=this.base_element.appendChild(layer);}
this.setOptions(arguments[1]||{});this.event('initialized');},ready:function(){var controller=this.controller;var imgsrc=this.image.src;var layer_element=this.layer_element;this.base_element.style.backgroundImage='url('+imgsrc+')';var eff=new Effect.Opacity(this.layer_element,Object.extend(this.effect_options,{from:1.0,to:0.0,afterFinish:function(effect){layer_element.style.backgroundImage='url('+imgsrc+')';Element.setOpacity(layer_element,1.0);controller.ready();}}));}});Controller.Action.FadeOverlay=Class.create();Object.extend(Object.extend(Controller.Action.FadeOverlay.prototype,Controller.Action.Base.prototype),{initialize:function(elem){this.base_element=$(elem);this.base_element.makePositioned();this.base_element.cleanWhitespace();this.elements=[this.base_element];if(arguments[3]){var layer_id=arguments[3];}else if(this.base_element['id']){var layer_id=this.base_element['id']+'_layer';}else{var layer_id='__fade_layer__';}
this.layer_element=$(layer_id);if(this.layer_element==undefined){var dim=Element.getDimensions(this.base_element);var layer=this.createInnerElement(layer_id,arguments[2]||'div',dim);layer.style.zIndex=1000;this.layer_element=this.base_element.appendChild(layer);}
this.setOptions(arguments[1]||{});this.addMapping('default',0,0);this.event('initialized');},setOptions:function(options){this.options=Object.extend({direction:'n',duration:1.0,delay:0.0,transition:Effect.Transitions.sinoidal,overflow:false},options||{});if(!this.options.overflow)this.base_element.style.overflow='hidden';if(!this.options.overflow)this.layer_element.style.overflow='hidden';this.effect_options=this._prepareEffectOptions();},addMapping:function(type,x,y){if(!this.positionmap)this.positionmap={};this.positionmap[type]=[x,y];},addLayers:function(){var self=this;var dim=Element.getDimensions(self.base_element);$A(arguments).each(function(inner_id,index){var inner_element=self.createInnerElement(inner_id,self.base_element.tagName,dim);inner_element.style.zIndex=index;self.elements.push(self.base_element.appendChild(inner_element));});},createInnerElement:function(id,tag,dimensions){var inner_element=$(document.createElement(this.base_element.tagName));inner_element.id=id;var repeat=this.base_element.backgroundRepeat||'no-repeat';inner_element.setStyle({left:0,top:0,position:'absolute',backgroundRepeat:repeat,width:dimensions.width+'px',height:dimensions.height+'px'});return inner_element;},getPosition:function(type){if(this.positionmap&&this.positionmap[type]){return[this.positionmap[type][0],this.positionmap[type][1]];}else{return this.positionmap['default'];}},getElement:function(element_index){return this.elements[element_index]||this.elements[0];},setImage:function(element_index,value){if(!Var.is_string(value.src)||value.src.blank()){return this.clearImage(element_index);}
Element.Style.setBackgroundImage(this.getElement(element_index),value.src,{left:value.position[0],top:value.position[1]});},clearImage:function(element_index){Element.Style.clearBackgroundImage(this.getElement(element_index));},switchImages:function(sources){var self=this;sources.each(function(image){image.clear?self.clearImage(image.idx):self.setImage(image.idx,image);});},update:function(index,images){var preloader=new Preload.ImagesSync(images,{error:this.event.bind(this,'loadError'),completed:this.ready.bind(this,images,arguments[2])});},ready:function(sources){var self=this;options=this._prepareEffectOptions();if(arguments[1]==true){self.switchImages(sources);self.reveal(options);}else{this.cover(Object.extend(Var.clone(options),{afterFinish:function(effect){self.switchImages(sources);self.reveal(options);}}));}},cover:function(){this.cover_effect=new Effect.SlideBackgroundImage(this.layer_element,Object.extend(arguments[0]||{},{fade:'in',delay:0.0,afterUpdate:function(effect){effect.element.setOpacity(effect.position);}}));},reveal:function(){var self=this;this.reveal_effect=new Effect.SlideBackgroundImage(this.layer_element,Object.extend(arguments[0]||{},{fade:'out',afterUpdate:function(effect){if(effect.position>0.25)effect.element.setOpacity(1-effect.position);},afterFinish:function(effect){self.controller.ready();}}));},_prepareEffectOptions:function(){var options=Var.clone(this.options);options.duration=(options.duration/2);if(Var.is_array(this.options.direction)){options.direction=this.controller.playdir=='bw'?this.options.direction[1]:this.options.direction[0];}
options.beforeStart=null;options.beforeSetup=null;options.afterSetup=null;options.beforeUpdate=null;options.afterUpdate=null;options.beforeFinish=null;options.afterFinish=null;return options;}});Loob.BasicList=Class.create();Loob.BasicList.prototype={values:$A(),current_set:{index:0,values:$A()},current_item:{index:0,value:null},current:{index:0,value:null},set_direction:'fw',item_direction:'fw',locked:false,initialize:function(values,limit){this.setOptions(arguments[2]);this.setLimit(limit||5);this.setValues(values);this.event('initialized');},updateList:function(set,item,indices){},mapValue:function(value){return value;},mapPrevValue:function(value){return value;},mapNextValue:function(value){return value;},processValues:function(values){return values;},matchItemFunction:function(value){return function(item){return value==item;};},setLimit:function(limit){this.options.limit=limit;},setValues:function(values){if(Var.is_array(values)){this.values=this.processValues($A(values));if(arguments[1]){this.reset();}
this.calculateSets();this.current_item.value=this.getItem(this.current_item.index);}},setOptions:function(options){this.options=Object.extend({mapPrevValue:this.mapPrevValue.bind(this),mapNextValue:this.mapNextValue.bind(this),mapValue:this.mapValue.bind(this),limit:5,padding:0,loop:false,skip_locking:false},options||{});},display:function(){setTimeout(this.showItem.bind(this,0,true),((arguments[0]||0)*1000));},flipPrev:function(){var index=this.prevItemIndex(arguments[0]);var plain_value=this.getItem(index);if(this.set_lookup[this.current_set.index][0].include(plain_value)){return this.showItem(index-this.options.padding);}else{return this.showItem(index);}},flipNext:function(){var index=this.nextItemIndex(arguments[0]);var plain_value=this.getItem(index);if(this.set_lookup[this.current_set.index][2].include(plain_value)){return this.showItem(index+this.options.padding);}else{return this.showItem(index);}},firstItem:function(){return this.showItem(0);},prevItem:function(){return this.showItem(this.prevItemIndex(arguments[0]));},nextItem:function(){return this.showItem(this.nextItemIndex(arguments[0]));},lastItem:function(){return this.showItem(this.itemCount()-1);},showItem:function(item_index){return this.show(this.getSetIndexForIndex(item_index),item_index,arguments[1]);},showLocalItem:function(local_index){return this.showItem(this.localIndexToIndex(local_index),arguments[1]);},prevItemIndex:function(){return this.calculatePrevIndex((arguments[0]==undefined?this.current_item.index:arguments[0]),this.itemCount());},nextItemIndex:function(){return this.calculateNextIndex((arguments[0]==undefined?this.current_item.index:arguments[0]),this.itemCount());},firstSet:function(){return this.showSet(0);},lastSet:function(){return this.showSet(this.setCount()-1);},prevSet:function(){return this.showSet(this.prevSetIndex(arguments[0]));},nextSet:function(){return this.showSet(this.nextSetIndex(arguments[0]));},showSet:function(set_index){return this.show(set_index,null,arguments[1]);},prevSetIndex:function(){return this.calculatePrevIndex((arguments[0]==undefined?this.current_set.index:arguments[0]),this.setCount());},nextSetIndex:function(){return this.calculateNextIndex((arguments[0]==undefined?this.current_set.index:arguments[0]),this.setCount());},itemExists:function(item_index){return undefined!=this.getItem(item_index);},getItem:function(item_index){return this.items[item_index];},setExists:function(set_index){return undefined!=this.set_lookup[set_index];},getSet:function(set_index){var offset=set_index*this.options.limit;if(!this.setExists(set_index)){return $A();}
var current_set=this.set_lookup[set_index];var prev_values=current_set[0].map(this.options.mapPrevValue.bind(this));var values=current_set[1].map(this.options.mapValue.bind(this));var next_values=current_set[2].map(this.options.mapNextValue.bind(this));return prev_values.concat(values).concat(next_values);},show:function(set_index,item_index,force){this.event('beforeUpdate');if(this.locked&&!force){this.cancel();return[];}else{if(!this.options.skip_locking){this.locked=true;}}
var update_list=false;item_index=item_index==undefined?this.current_item.index:item_index;this.set_direction=set_index>=this.current_set.index?'fw':'bw';if(force||this.setExists(set_index)&&set_index!=this.current_set.index){update_list=true;this.current_set.index=set_index;this.current_set.values=this.getSet(set_index);this.event('updateSet');}
var set_indices=this.getLocalIndices();if(this.current_set.values.length&&!set_indices.include(item_index)){item_index=(this.set_direction=='fw')?set_indices.first():set_indices.last();}
this.item_direction=item_index>=this.current_item.index?'fw':'bw';var index_in_set=this.indexToLocalIndex(item_index);if(force||this.itemExists(item_index)&&item_index!=this.current_item.index){update_list=true;this.current_item.index=item_index;this.current_item.value=this.current_set.values[index_in_set];this.current.index=this.current_item.index;this.current.value=this.current_item.value;this.event('updateItems');}
if(update_list){this.update(this.current.index,this.current.value);}
return[this.current_set.index,this.current_item.index,index_in_set];},update:function(item_index,item_value){var set_indices=this.getLocalIndices();var index_in_set=this.indexToLocalIndex(item_index);this.updateList(this.current_set,this.current_item,index_in_set,set_indices);this.locked=false;this.event('updateList');},itemCount:function(){return this.items.length;},setCount:function(){return this.set_lookup.length;},getIndexForItem:function(item){return this.values.indexOf(this.values.find(this.matchItemFunction(item)));},getSetForIndex:function(index){return this.getSet(this.getSetIndexForIndex(index));},getSetForItem:function(item){return this.getSet(this.getSetIndexForItem(item));},getSetIndexForIndex:function(index){var set_index=Math.floor(index/this.options.limit);var set_count=this.setCount();if(set_index<0){return 0;}else if(set_index>=set_count){return set_count;}
return set_index;},getSetIndexForItem:function(item){return this.getSetIndexForIndex(this.getIndexForItem(item));},getFirstLocalIndex:function(set_index){return set_index*this.options.limit;},getLocalIndices:function(){var offset=(arguments[0]==undefined?this.current_set.index:arguments[0])*this.options.limit;return $R(offset,offset+this.options.limit-1).toArray();},indexToLocalIndex:function(index){return index%this.options.limit;},localIndexToIndex:function(local_index){return(this.current_set.index*this.options.limit)+local_index;},itemIndexToValueIndex:function(){var item_index=arguments[0]==undefined?this.current_item.index:arguments[0];return this.values.indexOf(this.items[item_index]);},valueIndexToItemIndex:function(value_index){return this.items.indexOf(this.values[value_index]);},isFirstSet:function(){return(arguments[0]==undefined?this.current_set.index:arguments[0])==0;},isLastSet:function(){return(arguments[0]==undefined?this.current_set.index:arguments[0])==this.setCount()-1;},calculatePrevIndex:function(current_index,count){if(current_index<1&&this.options.loop==true){return count-1;}else if(current_index>0){return current_index-1;}
return current_index;},calculateNextIndex:function(current_index,count){if(current_index>=count-1&&this.options.loop==true){return 0;}else if(current_index<count-1){return current_index+1;}
return current_index;},calculateSets:function(){var self=this;var padding=this.options.padding;var limit=this.options.limit;var step=limit-(2*padding);step=(step>0)?step:1;this.items=$A();var groups=this.values.inGroupsOf(limit-padding,null);if(this.values.length>limit){this.set_lookup=groups.inject($A(),function(set_values,values,index){if(undefined!=groups[index+1]&&groups[index+1].length>padding){if(index==0){var prev=[];var next=groups[index+1].slice(0,padding);var current=values;}else{var prev=values.slice(0,padding);var next=groups[index+1].slice(0,padding);var current=values.slice(padding,values.length);}
set_values[index]=[prev.compact(),current.compact(),next.compact()];if(set_values[index][2].length<padding||groups[index+1].compact().length<=padding){set_values[index][1]=set_values[index][1].concat(set_values[index][2]);set_values[index][2]=[];}}else{var values=values.compact();var prev=values.slice(0,padding);var next=[];var current=values.slice(padding,values.length);if(values.length>prev.length){set_values[index]=[prev.compact(),current.compact(),next.compact()];};}
if(set_values[index]){self.items=self.items.concat(set_values[index][0],set_values[index][1],set_values[index][2]);}
return set_values;});}else{this.set_lookup=[[[],this.values,[]]];this.items=this.values;}
return this.set_lookup;},debug:function(){var self=this;this.set_lookup.each(function(set){window.console.log(set);});},cancel:function(){this.locked=false;this.event('afterCancel');},reset:function(){this.current_set={index:0,values:$A()};this.current_item={index:0,value:null};this.current=this.current_item;},event:function(eventName){if(this.options[eventName+'Internal'])this.options[eventName+'Internal'](this);if(this.options[eventName])this.options[eventName](this);}}
Loob.ElementList=Class.create();Object.extend(Object.extend(Loob.ElementList.prototype,Loob.BasicList.prototype),{element:null,elements:$A(),initialize:function(values,element){this.setOptions(arguments[2]);this.setElement(element);this.setValues(values);this.event('initialized');},setElement:function(element){this.element=$(element);this.element.cleanWhitespace();this.elements=$A(this.element.childNodes).inject($A(),function(elements,node){if(node.nodeType==1&&Element.extend(node)&&!node.hasClassName('skip')){elements.push(node);}
return elements;});this.setLimit(this.elements.length);}});Loob.ActionList=Class.create();Object.extend(Object.extend(Loob.ActionList.prototype,Loob.BasicList.prototype),{initialize:function(values,action){this.setOptions(arguments[2]);this.setValues(values);this.setAction(action);this.event('initialized');this.options.whenReadyInternal=function(list){list.locked=false;}},setAction:function(action){this.action=action;this.action.setController(this);},update:function(item_index,item_value){this.action.update(item_index,item_value);},waitsForAction:function(){return Var.is_function(this.action.ready);},isReady:function(){return!this.waitsForAction();},ready:function(){var set_indices=this.getLocalIndices();var index_in_set=this.indexToLocalIndex(this.current_item.index);this.updateList(this.current_set,this.current_item,index_in_set,set_indices);this.event('updateList');this.event('whenReady');},event:function(eventName){this.action.event(eventName);if(this.options[eventName+'Internal'])this.options[eventName+'Internal'](this);if(this.options[eventName])this.options[eventName](this);}});Loob.ElementActionList=Class.create();Object.extend(Object.extend(Loob.ElementActionList.prototype,Loob.ActionList.prototype),{element:null,elements:$A(),initialize:function(values,action,element){this.setOptions(arguments[3]);this.setAction(action);this.setElement(element);this.setValues(values);this.event('initialized');this.options.whenReadyInternal=function(list){list.locked=false;}},setElement:function(element){var self=this;this.element=$(element);this.element.cleanWhitespace();this.elements=$A(this.element.childNodes).inject($A(),function(elements,node){if(node.nodeType==1&&Element.extend(node)&&!node.hasClassName('skip')){elements.push(self.processElement(node));}
return elements;});this.setLimit(this.elements.length);},processElement:function(element){return element;}});window.fire=new Fire(function(){
window.container=$('container');if(screen.height>1024){window.window_observer=new PeriodicalExecuter(adjustWindow,1.6);window.adjustWindowFromCookie();}
$$('div#main').each(function(elem){if(elem.getDimensions().height<401){elem.setStyle({height:'401px'});}});$$('div#header h1 a','ul#navigation li a','#next_img','#prev_img').each(function(elem){Element.wrapChildren(elem,'span',{style:'display: none'});});$$('a.external').each(attach_external_window);});function fixReferences(){$$('div#references ul').each(function(elem){elem.empty();var outer=document.createElement('div')
var repl=outer.appendChild(document.createElement('p'));var list=$A(elem.getElementsByTagName('li'));var last_item=list.last();list.each(function(item){$(item).cleanWhitespace();var span=document.createElement('span');$A(item.childNodes).each(function(child){span.appendChild(child);});repl.appendChild(span);if(item!=last_item){repl.appendChild(document.createTextNode(' . '));}});elem.replace(outer.innerHTML);});$$('div#references a').each(attach_external_window);}
function activateForm(){var first_form=$$('form.active_form').first();if(first_form){var first_elem=first_form.findFirstElement();if(first_elem){first_elem.activate();};}}
function prepareForm(){var is_khtml=/Konqueror|Safari|KHTML/.test(navigator.userAgent);$$('form.active_form div.elem_text input','form.active_form textarea').each(function(elem){if(is_khtml){elem.previous('label').setStyle({border:'none'});elem.parentNode.setStyle({border:'none'});}
Event.observe(elem,'focus',function(ev){$(elem.parentNode).addClassName('focus');});Event.observe(elem,'blur',function(ev){$(elem.parentNode).removeClassName('focus');});});if(!Prototype.Browser.IE){$$('form.active_form input.fancy_submit').each(function(elem){var parent_node=elem.parentNode;var current_attrs=$A(elem.attributes);elem.remove();new Insertion.Bottom(parent_node,'<input id="inserted_image_button" type="image" />');elem=$('inserted_image_button');current_attrs.each(function(attr){if(attr.nodeName!='type'){elem.setAttribute(attr.nodeName,attr.nodeValue);}});elem.addClassName('img');elem.title=elem.value;elem.src='/stylesheets/assets/spacer.gif';elem.image=new Image();elem.image.src='/stylesheets/assets/label-submit.gif';elem.image.toggle=function(){this.style.backgroundPosition=this.over?'0 100%':'0 0';this.over=!this.over;}
elem.image.onload=function(){Element.Style.setBackgroundImage(elem,elem.image.src);Element.setStyle(elem,{width:elem.image.width+'px',height:Math.round(elem.image.height/2)+'px',backgroundPosition:'0 100%'});Event.observe(elem,'mouseover',elem.image.toggle.bind(elem));Event.observe(elem,'mouseout',elem.image.toggle.bind(elem));}});}}
function attach_external_window(elem){Event.observe(elem,'click',open_new_window.bind(elem));elem.onclick=function(){return false;}}
function open_new_window(ev){Event.stop(ev);Element.Window.open(this.href,'extern',{width:800,height:540});}
function setTopMargin(margin_top,duration){margin_top=parseInt(margin_top);if(margin_top!=parseInt(window.container.getStyle('marginTop'))){Cookie.set('margin_top',margin_top);if(duration>0){window.container.morph({marginTop:margin_top+'px'},{delay:0.2,duration:duration});}else{window.container.setStyle({marginTop:margin_top+'px'});}}}
function adjustWindow(){var window_size=Element.Window.getDimensions();if(window.current_size==undefined||window.current_size.height!=window_size.height){var container_size=window.container.getDimensions();var margin_top=Math.round((window_size.height/2)-(container_size.height/2))-60;setTopMargin(margin_top<40?40:margin_top,0.6);}
window.current_size=window_size;}
function adjustWindowFromCookie(){var margin_top=Cookie.get('margin_top');if(margin_top==undefined){adjustWindow();}else{window.current_size=Element.Window.getDimensions();setTopMargin(margin_top);}}