
function $get(key,url){if(arguments.length<2)url=location.href;if(arguments.length>0&&key!=""){if(key=="#"){var regex=new RegExp("[#]([^$]*)");}else if(key=="?"){var regex=new RegExp("[?]([^#$]*)");}else{var regex=new RegExp("[?&]"+key+"=([^&#]*)");}
var results=regex.exec(url);return(results==null)?"":results[1];}else{url=url.split("?");var results={};if(url.length>1){url=url[1].split("#");if(url.length>1)results["hash"]=url[1];url[0].split("&").each(function(item,index){item=item.split("=");results[item[0]]=item[1];});}
return results;}}
var MessageQueue=new Class({listeners:$H(),sentMessages:[],initialize:function(){},register:function(handle,callback,dontCheck){if($type(callback)!='function')return;if(!dontCheck&&this.sentMessages[handle]){callback();}
if(!this.listeners.has(handle))this.listeners[handle]=[];this.listeners[handle].push(callback);},unregister:function(handle,callback){if(this.listeners.has(handle)){this.listeners[handle].erase(callback);}},send:function(handle,contents){this.sentMessages.include(handle);if(this.listeners.has(handle)){this.listeners[handle].each(function(callback){callback(contents);});}}});


var Shutter=new Class({Implements:Options,options:{targetid:null,targetclass:null,hide:false,controls:null,toggletext:null,toggleclass:null},initialize:function(name,options){this.setOptions(options);var slide=document.id(name);var target=null;if(this.options.targetid)
target=slide.getElementById(this.options.targetid);else if(this.options.targetclass)
target=slide.getElements('.'+this.options.targetclass)[0];else
target=slide;if(target==null)
return;if(this.options.controls==null)
return;this.cname=name+'.shuttered';this.cookie=Cookie.read(this.cname);if(this.cookie!=0&&this.cookie!=1){if(this.options.hide==false)
Cookie.write(this.cname,0);else
Cookie.write(this.cname,1);}
target.setStyle('display',null);var fx=this.fx=new Fx.Slide(target);if(this.options.hide==true)
if(Cookie.read(this.cname)==1)
fx.hide();var global=this;var controls=slide.getElementById(this.options.controls).getElements('a');controls.each(function(a){var command=a.get('name');if(command){if(command=='toggle'&&global.options.toggletext){a.starttext=a.get('text');a.toggletext=function(){if(this.get('text')==this.starttext)
this.set('text',global.options.toggletext);else
this.set('text',this.starttext);};a.toggletext();}
if(command=='toggle'&&global.options.toggleclass){a.startclass=a.get('class');a.toggleclass=function(){var p=this.getParent();if(p.get('class')==this.startclass)
p.set('class',global.options.toggleclass);else
p.set('class',this.startclass);};}
a.onclick=function(){return false;};a.addEvent('click',function(e){e=new Event(e);global.perform(command);if(command=='toggle'&&global.options.toggletext){this.toggletext();}
if(command=='toggle'&&global.options.toggleclass){this.toggleclass();}
e.stop();});}});},perform:function(command){if(command=='show')
this.fx.slideIn();if(command=='hide')
this.fx.slideOut();if(command=='toggle'){this.fx.toggle();if(Cookie.read(this.cname)==0){Cookie.write(this.cname,1);}else if(Cookie.read(this.cname)==1){Cookie.write(this.cname,0);}}}});


var Tabs=new Class({Implements:Options,options:{tabs:'tabs',panels:'panel',selected:'selected',event:'click'},initialize:function(name,options){this.setOptions(options);this.queue=new MessageQueue;var glob=this;var group=document.id(name);var tabs=group.getElements('li.'+this.options.tabs);var panels=group.getElements('div.'+this.options.panels);var event=this.options.event;var height=this.getHeight(tabs)+this.getHeight(panels);var q=this.queue;var reset=function(args){items=args.items;cls=args.cls;items.each(function(p){p.setProperty('class',cls);});};q.register('reset',reset,false);var opt=glob.options;tabs.each(function(tab){var anch=tab.getElements('a');anch.each(function(a){a.onclick=function(){return false;};a.addEvent(event,function(e){q.send('reset',{'items':panels,'cls':opt.panels});q.send('reset',{'items':tabs,'cls':opt.tabs});var href=$get("#",this.href);tab.setProperty('class',opt.tabs+' '+opt.selected);selected=document.id(href);selected.setProperty('class',opt.panels+' '+opt.selected);});});})},getHeight:function(group){var h=0;group.each(function(p){var s=p.getDimensions();if(s.y>h)
h=s.y;});return h;}});


var Carousel2=new Class({Implements:Options,options:{increment:1,frame:'frame',panels:'panels',controls:'controls',navigationcontrols:null,panelsize:null,panelitems:null,columns:null,container:null,update:null,hidecontrols:true,behaviors:null,framesize:null,startposition:null,event:'click',usemousewheel:false,debug:false},hasConsole:function(_method){var _method=_method||"log";return typeof(console)=='object'&&typeof(console[_method])!="undefined";},debug:function(msg){if(this.hasConsole()==false)
return;if(this.options.debug==true)
console.log("Carousel2: ",msg);},initialize:function(name,options){this.setOptions(options);var incr=this.options.increment;var carousel=this.carousel=document.id(name);this.debug("found carousel: "+carousel);var frame=carousel.getElements('div.'+this.options.frame)[0];this.debug("found frame: "+frame);this.debug("panelitems are: "+this.options.panelitems);this.debug("panelsize is: "+this.options.panelsize);if(this.options.panelitems!=null&&this.options.panelsize!=null){this.init();this.fmtpanels();}else{this.panels=carousel.getElements('div.'+this.options.panels);}
var display=frame.getStyle('display');var panels=this.panels;this.debug("found panels: "+panels);this.debug("panels number: "+panels.length);this.sets=Math.round(panels.length/incr);this.cname=name+'.panel';var scroll=this.scroll=new Fx.Scroll(frame,{wheelStops:false,wait:false,duration:500,transition:Fx.Transitions.Quad.easeOut});this.current=0;if(Cookie.read(this.cname)>0){this.current=parseInt(Cookie.read(this.cname));}
var glob=this;var controldiv=carousel.getElements('div.'+this.options.controls);this.debug("found controldiv: "+controldiv);var controls=this.controls=controldiv.getElements('a');this.debug("found controls: "+controls);controls.each(function(a){a.onclick=function(){return false;};});if(this.panels.length<=this.options.increment){}else{if(this.options.navigationcontrols!=null)
carousel.getElements('div.'+this.options.navigationcontrols).removeClass('hide');else
controldiv.removeClass('hide');controls.each(function(a){a.addEvent(glob.options.event,function(e){var direction=$get("#",this.href);glob.spin(direction);return false;});});}
if(this.options.behaviors!=null)
this.options.behaviors(this);if(this.options.usemousewheel==true){this.panels.each(function(p){p.addEvent('mouseover',function(e){p.addClass('hover');});p.addEvent('mouseout',function(e){p.removeClass('hover');});p.addEvent('mousewheel',function(e){e.stop();var direction=(e.wheel<0?'right':'left');glob.spin(direction);});});}
this.hidecontrols();},hidecontrols:function(){var carousel=this.carousel;var controldiv=carousel.getElements('div.'+this.options.controls);var controls=controldiv.getElements('a');this.debug("hidecontrols called");this.debug("hidecontrols:"+this.panels.length<=this.options.increment);if(this.panels.length<=this.options.increment){var ctl;if(this.options.navigationcontrols!=null)
ctl=carousel.getElements('div.'+this.options.navigationcontrols)
else
ctl=controldiv;ctl.setStyle('display','none');ctl.addClass('hidden');}else{if(this.options.navigationcontrols!=null)
carousel.getElements('div.'+this.options.navigationcontrols).removeClass('hide');else
controldiv.removeClass('hide');}},spin:function(direction,incr){var panels=this.panels;var current=this.current;this.debug("spin: panels number "+panels.length);this.debug("spin: current panel is "+current);if(direction==null)
direction='right'
if(incr==null)
incr=this.options.increment;if(direction=='left')
current-=incr;else if(direction=='right')
current+=incr;this.debug("spin: setting current to "+current);if(current<0){current=panels.length-incr;}else if(current>(this.sets*incr)){this.debug("spin: current is 0: current > (this.sets * incr)"+(this.sets*incr));current=0;}else if(current>=panels.length){this.debug("spin: current is 0: current >= panels.length");current=0;}
this.current=current;this.debug("spin: current now is "+current);this.scroll.toElement(panels[current]);},init:function(){var parent=null;if(this.options.container!=null){parent=this.carousel.getElements('.'+this.options.container)[0];}else{first=this.carousel.getElements('.'+this.options.panelitems)[0];parent=first.getParent();}
var items=parent.getChildren();if(this.options.panelitems!=null)
items=parent.getChildren('.'+this.options.panelitems);else
items=parent.getChildren();if(!this.originalitems){this.originalitems=[];var glob=this;glob.debug("items:");items.each(function(i){glob.debug(i);glob.originalitems.push(i.clone());});}
this.container=parent;},fmtpanels:function(){var parent=this.container;var items;items=parent.getChildren();items.each(function(i){i.destroy();});var p=0;var panel=new Element('div',{'class':this.options.panels}).injectInside(parent);var p2=0;for(var n=0;n<this.originalitems.length;n++){var o=this.originalitems[n];var image=o.getElements('img');if(p==this.options.panelsize){panel=new Element('div',{'class':this.options.panels}).injectInside(parent);p=0;}
this.debug("item number: "+p)
this.debug(o)
p++;var clone=o.clone(true,true);if((this.options.columns!=null)&&(p2==this.options.columns)){this.debug("starting new row: "+p2)
p2=0;clone.addClass('rowstart');}
p2++;clone.injectInside(panel);}
this.panels=this.carousel.getElements('div.'+this.options.panels);this.hidecontrols();},update:function(list){var parent=this.container;var items=parent.getChildren();items.each(function(i){i.destroy();});var p=0;var p2=0;var panel=new Element('div',{'class':this.options.panels}).injectInside(parent);var g=this;this.originalitems.each(function(o){g.debug("original item is ");g.debug(o);if(o.getElements('a').length<1)
return;g.debug("length: "+o.getElements('a').length);var anchor=o.getElements('a')[0];g.debug("anchor is "+anchor);if(!list.contains(anchor.get('name'))){return;}
var image=o.getElements('img');if(p==g.options.panelsize){panel=new Element('div',{'class':g.options.panels}).injectInside(parent);p=0;}
p++;var clone=o.clone(true,true);if(p2==g.options.columns){p2=0;clone.addClass('rowstart');}
p2++;if(g.options.update!=null)
g.options.update(clone);clone.injectInside(panel);});this.panels=parent.getElements('.'+this.options.panels);this.hidecontrols();},resetItems:function(){var parent=this.container;var items=parent.getChildren();items.each(function(i){i.destroy();});var p=0;var p2=0;var panel=new Element('div',{'class':this.options.panels}).injectInside(parent);var g=this;this.originalitems.each(function(o){g.debug("original item is ");g.debug(o);if(o.getElements('a').length<1)
return;g.debug("length: "+o.getElements('a').length);var anchor=o.getElements('a')[0];g.debug("anchor is "+anchor);var image=o.getElements('img');if(p==g.options.panelsize){panel=new Element('div',{'class':g.options.panels}).injectInside(parent);p=0;}
p++;var clone=o.clone(true,true);if(p2==g.options.columns){p2=0;clone.addClass('rowstart');}
p2++;if(g.options.update!=null)
g.options.update(clone);clone.injectInside(panel);});this.panels=parent.getElements('.'+this.options.panels);this.hidecontrols();},setcanvasheight:function(){var total=0;this.panels.each(function(p){total+=p.getDimensions().y;});var canvas=this.carousel.getElements('div.canvas')[0];canvas.setStyle('height',total);},reset:function(){this.current=0;this.scroll.toElement(this.panels[0]);return;}});
