var thisTimer;

var delayTimer = 5000;

function simpleSlideInit(){
	if($('featured')){
		var allofthem = $$('.switch');
		var mycounter = 1;
		allofthem.each(function(e){
			e.setProperty('id','info_homey'+mycounter);
			if(mycounter != 1){
				e.setStyle('display','none');
			}
			mycounter++;
		});
		var selectors = $$('.selector a');
		mycounter = 1;
		selectors.each(function(e){
			e.setProperty('id','homey'+mycounter);
			mycounter++;
		});
		$$('.selector a').each(function(e){
			e.addEvent('click',function(s){
				$$('.selector a').removeClass('current');
				e.addClass('current');
				var hideme;
				$$('.switch').each(function(el){
					if(el.getStyle('display') != 'none'){
						hideme = el;
					}
				});
				hideme.fade('out');
				(function(){ hideme.setStyle('display','none');	}).delay(400);
				(function(){
					$('info_'+e.id).setStyles({ opacity:0,display:'block'});
					$('info_'+e.id).fade('in');
				}).delay(400);
				$clear(thisTimer);
				return false;
			});
		});
		$('featured').addEvent('load',thisTimer = function(s){
			for(var i =0;i < allofthem.length;i++){
				var e = allofthem[i];
				if(e.getStyle('display') == 'block'){
					var nexty = i + 2;
					if(nexty > allofthem.length){
						nexty = Number(1);
					}
					var showthis = 'info_homey' + String(nexty);
					e.fade('out');
	
					(function(){ e.setStyle('display','none'); }).delay(400);
					(function(){
						$(showthis).setStyles({ opacity:0,display:'block'});
						$(showthis).fade('in');
					}).delay(400);
					
					$$('.selector a').removeClass('current');
					var selector = 'homey'+String(nexty);
					$(selector).addClass('current');
		
					break;
				}
			}
		}.periodical(delayTimer));


	}
}


var limitedScrollControls = new Class({
	Implements: [Options],

	options: {
		'backdiv': 		'',
		'forwarddiv': 		'',
		'scrollholder': 	'',
		'scrolls_selector': 	'',
		'size': 		1024,
		'leftortop': 		'left',
		'controlsholder': 	'',
		'activeclassname': 	'active',
		'inactiveclassname': 	'inactive',
		'fade': 		true,
		'fadeamt':	 	0.3,
		'transition': 		'sine:in:out', //linear, quad, cubic, quart, quint, pow, expo, circ, sine, back, bounce, elastic
		'transitiontime': 	500
	},
	'ismoving': false,
	'count': 0,
	initialize: function(options) {
		this.setOptions(options);
		if(this.options.backdiv != '' || this.options.scrolls_selector != ''){
			this.count = $$(this.options.scrolls_selector).length;
			if(this.count > 1){
				for(var i=1;i<=this.count;i++){
					new Element('a',{'href':'#','id':'control_'+i,'class':((i == 1) ? this.options.activeclassname : this.options.inactiveclassname),'text':' '}).inject(this.options.controlsholder);
				}
				if(this.options.backdiv != ''){
					this.options.backdiv.setStyle('display','block');
					this.options.backdiv.setStyle('opacity',0);
				}
				if(this.options.forwarddiv != ''){
					this.options.forwarddiv.setStyle('display','block');
				}
				var counter = 0;
				$$(this.options.scrolls_selector).each(function(el){
					el.setStyle(this.options.leftortop,(this.options.size*counter));
					el.setStyle('display','block');
					counter++;
				},this);
				if(this.options.forwarddiv != ''){
					this.options.forwarddiv.addEvent('click',this.moveforward.bind(this,1));
				}
				if(this.options.backdiv != ''){
					this.options.backdiv.addEvent('click',this.movebackward.bind(this,1));
				}
				$$('.'+this.options.activeclassname+', .'+this.options.inactiveclassname).each(function(el){
					el.addEvent('click',function(ev){
						ev.stop();
						if(!el.hasClass(this.options.activeclassname)){
							var num = this.options.controlsholder.getFirst('.'+this.options.activeclassname).getProperty('id').substring(8) - el.getProperty('id').substring(8);
							if(num > 0){
								this.movebackward(num);
							}
							else{
								this.moveforward(Math.abs(num));
							}
						}
					}.bindWithEvent(this));
				},this);

			}
		}
	},
	activate: function(element) {
		element.removeClass(this.options.inactiveclassname);
		element.addClass(this.options.activeclassname);
	},
	inactivate: function(element) {
		element.removeClass(this.options.activeclassname);
		element.addClass(this.options.inactiveclassname);
	},
	moveforward: function(number){
		if(this.ismoving == false){
			if($(this.options.controlsholder).getLast('.'+this.options.activeclassname) == $(this.options.controlsholder).getLast()){
				return false;
			}
			this.ismoving = true;
			if(this.options.backdiv != ''){
				$(this.options.backdiv).setStyle('display','block').fade('in');
			}
			var x = 1;
			var nexts;
			$$('.'+this.options.activeclassname).each(function(el){
				this.inactivate(el);
				nexts = el.getAllNext();
			},this);
			if(nexts.length != 0){
				this.activate(nexts[(number-1)]);
				if(nexts.length == number && this.options.forwarddiv != ''){
					$(this.options.forwarddiv).fade('out');
				}
			}
			$$(this.options.scrolls_selector).each(function(el){
				var newFX = new Fx.Tween(el,{	'transition':this.options.transition,'duration':this.options.transitiontime	}).start(this.options.leftortop,(el.getStyle(this.options.leftortop).toInt()-(this.options.size*number)));
				if(this.options.fade == true && (el.getStyle(this.options.leftortop).toInt()-(this.options.size*number)) != 0){
					el.fade(this.options.fadeamt);
				}
				else if(this.options.fade == true){
					el.fade('in');
				}
				newFX.addEvent('complete',function(){
					this.ismoving = false;
				}.bindWithEvent(this));
			},this);
		}
		return false;
	},
	movebackward: function(number){
		if(this.ismoving == false){
			if($(this.options.controlsholder).getFirst('.'+this.options.activeclassname) == $(this.options.controlsholder).getFirst()){
				return false;
			}
			this.ismoving = true;
			if(this.options.forwarddiv != ''){
				$(this.options.forwarddiv).setStyle('display','block').fade('in');
			}
			var counter = 0;
			var prevs;
			$$('.'+this.options.activeclassname).each(function(el){
				this.inactivate(el);
				prevs = el.getAllPrevious();
			},this);
			if(prevs.length != 0){
				this.activate(prevs[(number-1)]);
				if(prevs.length == number && this.options.backdiv != ''){
					$(this.options.backdiv).fade('out');
				}
			}
			$$(this.options.scrolls_selector).each(function(el){
				var newFX = new Fx.Tween(el,{	'transition':this.options.transition,'duration':this.options.transitiontime	}).start(this.options.leftortop,(el.getStyle(this.options.leftortop).toInt()+(this.options.size*number)));
				if(this.options.fade == true && (el.getStyle(this.options.leftortop).toInt()+(this.options.size*number)) != 0){
					el.fade(this.options.fadeamt);
				}
				else if(this.options.fade == true){
					el.fade('in');
				}
				newFX.addEvent('complete',function(){
					this.ismoving = false;
				}.bindWithEvent(this));
			},this);
		}
		return false;
	}
});

/**
* @downloaded from http://www.cult-f.net/2007/12/14/elselect/
* @author Sergey Korzhov aka elPas0
* @site  http://www.cult-f.net
* @modified by Peter Velichkov (http://blog.creonfx.com)
*/
var elSelect = new Class({
	Implements: [Options],
	options: {
		container: false,
		baseClass : 'elSelect'
	},
	source : false,
	selected : false,
	_select : false,
	current : false,
	selectedOption : false,
	dropDown : false,
	optionsContainer : false,
	hiddenInput : false,
	dropdownwidth: 89, //percent
	/*
	pass the options,
	create html and inject into container
	*/
	initialize: function(options){
		this.setOptions(options);
		
		if ( !this.options.container ) return
		
		this.selected = false
		this.source = $(this.options.container).getElement('select')
		this.buildFrameWork()
		$(this.source).getElements('option').each( this.addOption, this )
		$(this.options.container).set('html','')
		this._select.injectInside($(this.options.container))
		
		this.bindEvents()
		
	},
	
	buildFrameWork : function() {
		//
		$(this.options.container).setStyle('width',$(this.options.container).getFirst('select').getSize().x);
		//
		this._select = new Element('div').addClass( this.options.baseClass )
		this.current = new Element('div').addClass('selected').injectInside($(this._select))
		this.selectedOption = new Element('div').addClass('selectedOption').injectInside($(this.current))
		this.dropDown = new Element('div').addClass('dropdown').injectInside($(this.current))
		new Element('div').addClass('clear').injectInside($(this._select))
		this.optionsContainer = new Element('div').addClass('options-container').injectInside($(this._select))
		new Element('div').addClass('clear').injectInside($(this._select))
		var t = new Element('div').addClass('options-container-top').injectInside($(this.optionsContainer))
		//var o = new Element('div').injectInside($(t))
		//var p = new Element('div').injectInside($(o))
		var t = new Element('div').addClass('options-container-bottom').injectInside($(this.optionsContainer))
		var o = new Element('div').injectInside($(t))
		var p = new Element('div').injectInside($(o))

		this.source.setStyle('display', 'none'); // Hiding the original Select before moving it 
		//this.hiddenInput = new Element('input').setProperties({ type:'hidden',name:this.source.getProperty('name')}).
		//	injectAfter($(this.optionsContainer));
		this.hiddenInput = this.source.injectAfter($(this.options.container)); // Moving the original Select
		
		//
		this.optionsContainer.setStyle('width',$(this.options.container).getStyle('width').toInt()*(this.dropdownwidth/100));
		//
				
	},
	
	bindEvents : function() {
		document.addEvent('click', function() { 
				if ( this.optionsContainer.getStyle('display') == 'block') 
					this.onDropDown()
			}.bind(this));
			
		$(this.options.container).addEvent( 'click', function(e) { new Event(e).stop(); } )		
		this.current.addEvent('click', this.onDropDown.bindWithEvent(this) )
		
	},
	
	//add single option to select
	addOption: function( option ){
    	var o = new Element('div').addClass('option').setProperty('value',option.value).setProperty('margin-top','21px')
		if ( option.disabled ) { o.addClass('disabled') } else {
			o.addEvents( {
				'click': this.onOptionClick.bindWithEvent(this),
				'mouseout': this.onOptionMouseout.bindWithEvent(this),
				'mouseover': this.onOptionMouseover.bindWithEvent(this)
			})
		}
		
		if ( $defined(option.getProperty('class')) && $chk(option.getProperty('class')) ) 
			o.addClass(option.getProperty('class'))

	
		if ( option.selected ) { 
			if ( this.selected) this.selected.removeClass('selected');
			this.selected = o
			o.addClass('selected')
			this.selectedOption.set('text',option.text);
			this.hiddenInput.setProperty('value',option.value);
		}
		o.set('text',option.text)		
		o.injectBefore($(this.optionsContainer).getLast())
	},
	
	onDropDown : function( e ) {
			
			if ( this.optionsContainer.getStyle('display') == 'block') {
				this.dropDown.removeClass('dropdown-hover');
				this.optionsContainer.setStyle('display','none')
			} else {
				this.optionsContainer.setStyle('display','block')
				this.dropDown.addClass('dropdown-hover');				
				this.selected.addClass('selected')
				//needed to fix min-width in ie6
				//var width =  this.optionsContainer.getStyle('width').toInt() > this._select.getStyle('width').toInt() ?
				//											this.optionsContainer.getStyle('width')
				//											:
				//											this._select.getStyle('width')
				//											
				//this.optionsContainer.setStyle('width', width);
				//this.optionsContainer.getFirst().setStyle('width', width);
				//this.optionsContainer.getLast().setStyle('width', width);
			}						
	},
	onOptionClick : function(e) {
		var event = new Event(e)
		if ( this.selected != event.target ) {
			this.selected.removeClass('selected')
			event.target.addClass('selected')
			this.selected = event.target
			this.selectedOption.set('text',this.selected.get('text'));
			this.hiddenInput.setProperty('value',this.selected.getProperty('value'));
			this.hiddenInput.fireEvent('change');
			this.hiddenInput.fireEvent('blur');
		}
		this.onDropDown()
	},
	onOptionMouseover : function(e){
		var event = new Event(e)
		this.selected.removeClass('selected')
		event.target.addClass('selected')
	},
	onOptionMouseout : function(e){
		var event = new Event(e)
		event.target.removeClass('selected')
	}
	
});

elSelect.implement(new Events, new Options);



/*
UvumiTools Scrollbar v1.1.0 http://uvumi.com/tools/
Copyright (c) 2008 Uvumi LLC

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

var UvumiScrollbar = new Class({
	Implements : Options,
	
	options:{
		baseClass:'scrollBar'
	},
	
	initialize:function(el,options){
		this.el = el;
		this.setOptions(options);
		//if(Browser.Engine.webkit){
		//	window.addEvent('domready',this.domReady.delay(100,this));
		//}
		//else{
			window.addEvent('domready',this.domReady.bind(this));
		//}
	},
	
	domReady:function(){
		this.el = $(this.el);
		this.build();
		this.update();
		if(!Browser.Engine.trident){
			this.el.addEvent('mousedown',function(e){
				e.stopPropagation();
				if(this.vscroll){
					this.vscroll.drag.start(e);
				}
				if(this.hscroll){
					this.hscroll.drag.start(e);
				}
			}.bind(this));
		}
		$$('body').addEvents({
			'mouseup':this.stopScrolling.bind(this)
		});
	},
	
	build:function(){
		this.el.setStyle('overflow','hidden');
		this.paddingBottom = this.el.getStyle('paddingBottom').toInt();
		this.paddingTop = this.el.getStyle('paddingTop').toInt();
		this.paddingRight = this.el.getStyle('paddingRight').toInt();
		this.border = this.el.getStyle('borderWidth').toInt();
		var styles = this.el.getStyles('borderWidth','borderColor','borderStyle','position','overflow');
		this.el.setStyles({
			border:0
		});
		this.dimensions = this.el.getSize();
		if(this.dimensions.x == 0){
			if(this.el.getStyle('width').toInt() != 0 && this.el.getStyle('width') != 'auto'){
				this.dimensions.x = this.el.getStyle('width').toInt();
			}
			else if(this.el.getParent().getStyle('width').toInt() != 0 && this.el.getParent().getStyle('width') != 'auto'){
				this.dimensions.x = this.el.getParent().getStyle('width').toInt();
			}
		}
		if(this.dimensions.y == 0){
			if(this.el.getStyle('height').toInt() != 0 && this.el.getStyle('height') != 'auto'){
				this.dimensions.y = this.el.getStyle('height').toInt();
			}
			else if(this.el.getParent().getStyle('height').toInt() != 0 && this.el.getParent().getStyle('height') != 'auto'){
				this.dimensions.y = this.el.getParent().getStyle('height').toInt();
			}
		}
		styles.position = (styles.position=="static"?"relative":styles.position);
		styles.width=this.dimensions.x;
		styles.height=this.dimensions.y;
		
		this.wrapper=new Element('div',{
			'class':this.options.baseClass,
			styles:styles
		}).wraps(this.el);

		this.el.setStyles({
			position:'relative',
			margin:0,
			top:0,
			left:0,
			width:"100%",
			height:this.dimensions.y-this.border
		});
		
		this.scrollbarVertical = new Element('div',{
			'class':'bar',
			styles:{
				position:'absolute',
				padding:0,
				margin:0,
				top:0,
				right:0,
				visibility:'hidden'
			}
		});	
		this.buttonTop = new Element('div',{
			'class':'button topButton',
			styles:{
				position:'relative'
			},
			events:{
				mousedown:this.startScrollingVertically.bindWithEvent(this,true)
			}
		}).inject(this.scrollbarVertical);
		this.verticalScrollable = new Element('div',{
			'class':'scrollable',
			styles:{
				position:'relative',
				overflow:'hidden'
			}
		}).inject(this.scrollbarVertical);
		this.buttonBottom = new Element('div',{
			'class':'button bottomButton',
			styles:{
				position:'relative'
			},
			events:{
				mousedown:this.startScrollingVertically.bind(this)
			}
		}).inject(this.scrollbarVertical);
		this.verticalKnob = new Element('div',{
			'class':'knob verticalKnob',
			styles:{
				position:'relative',
				top:0,
				left:0
			}
		}).inject(this.verticalScrollable);
		
		if(Browser.Engine.trident4){
			this.verticalKnob.set('id','verticalKnob');
		}
		
		this.vKnobTop = new Element('div',{
			'class':'knobVerticalTip topTip',
			styles:{
				width:'100%'
			}
		}).inject(this.verticalKnob);
		
		this.vKnobFill = new Element('div',{
			'class':'knobVerticalFill',
			styles:{
				width:'100%'
			}
		}).inject(this.verticalKnob);
		
		this.vKnobBottom = new Element('div',{
			'class':'knobVerticalTip bottomTip',
			styles:{
				width:'100%'
			}
		}).inject(this.verticalKnob);
		

		
		
		this.scrollbarHorizontal = new Element('div',{
			'class':'bar',
			styles:{
				width:'100%',
				position:'absolute',
				padding:0,
				margin:0,
				left:0,
				bottom:0,
				visibility:'hidden'
			}
		});
		
		this.buttonLeft = new Element('div',{
			'class':'button leftButton',
			styles:{
				position:'relative',
				'float':'left'
			},
			events:{
				mousedown:this.startScrollingHorizontally.bindWithEvent(this,true)
			}
		}).inject(this.scrollbarHorizontal);
		
		this.horizontalScrollable = new Element('div',{
			'class':'scrollable',
			styles:{
				position:'relative',
				overflow:'hidden',
				'float':'left'
			}
		}).inject(this.scrollbarHorizontal);
		
		this.buttonRight = new Element('div',{
			'class':'button rightButton',
			styles:{
				position:'relative',
				'float':'left'
			},
			events:{
				mousedown:this.startScrollingHorizontally.bind(this)
			}
		}).inject(this.scrollbarHorizontal);
		
		this.horizontalKnob = new Element('div',{
			'class':'knob horizontalKnob',
			styles:{
				position:'absolute',
				top:0,
				left:0
			}
		}).inject(this.horizontalScrollable);
		
		this.hKnobLeft = new Element('div',{
			'class':'knobHorizontalTip leftTip',
			styles:{
				height:'100%'
			}
		}).inject(this.horizontalKnob);
		
		this.hKnobRight = new Element('div',{
			'class':'knobHorizontalTip rightTip',
			styles:{
				height:'100%'
			}
		}).inject(this.horizontalKnob);
		
		this.hKnobFill = new Element('div',{
			'class':'knobHorizontalFill',
			styles:{
				height:'100%'
			}
		}).inject(this.horizontalKnob);
		
		var clear = new Element('div',{
			styles:{
				height:0,
				width:0,
				clear:'left'
			}
		}).inject(this.scrollbarHorizontal);
		
		this.corner = new Element('div',{
			'class':'corner',
			styles:{
				position:'absolute',
				bottom:0,
				right:0,
				display:'none'
			}
		});
		
		$$(this.buttonTop,this.buttonBottom,this.buttonLeft,this.buttonRight,this.horizontalKnob,this.horizontalScrollable,this.verticalScrollable,this.verticalKnob,this.corner,clear).setStyles({
			lineHeight:0,
			fontSize:0
		});
		
		this.scrollbarVertical.inject(this.wrapper);
		this.width = this.scrollbarVertical.getSize().x;
		if(this.width == 0){
			this.width = this.scrollbarVertical.getStyle('width').toInt();
		}
		this.scrollbarVertical.setStyles({
			display:'none',
			visibility:''
		});

		this.scrollbarHorizontal.inject(this.wrapper);
		this.height = this.scrollbarHorizontal.getSize().y;
		if(this.height == 0){
			this.height = this.scrollbarHorizontal.getStyle('height').toInt();
		}
		this.scrollbarHorizontal.setStyles({
			display:'none',
			visibility:''
		});
		
		this.el.setStyles({
			marginRight:this.width
			/*,
			height:this.dimensions.y-this.height-this.border-this.paddingBottom
			*/
			/*,
			width:(Browser.Engine.trident4?this.dimensions.x-this.width-this.border:"auto")
			*/
		});

		this.corner.inject(this.wrapper).setStyles({
			width:this.width-2*this.corner.getStyle('borderWidth').toInt(),
			height:this.height-2*this.corner.getStyle('borderWidth').toInt()
		});
		
		//create a a copy of mouse wheel function with bind parameter so it can be easily attached and removed from the mousewheel event
		this.mouseEvent = this.mouseWheel.bind(this);
	},
	
	//this messy function is the one that set the size of scrollers and detect which scroll bar should be displayed or not
	update:function(){
		$$(this.verticalScrollable,this.verticalKnob,this.horizontalScrollable, this.horizontalKnob).removeEvents();
		this.scrollSize = this.el.getScrollSize();
		if(this.scrollSize.x == 0 && this.scrollSize.y == 0){
			this.scrollSize = this.el.measure(function(){
				return this.getFirst().getSize();
				//// YOU ARE HERE
			});
		}
		if(this.scrollSize.y>this.dimensions.y){
			if(this.scrollbarVertical.getStyle('display')!='block'){
				this.el.addEvent('mousewheel',this.mouseEvent);
				this.scrollbarVertical.setStyle('display','block');
			}
			this.scrollHeight = this.dimensions.y-(this.scrollSize.x>this.dimensions.x?3:2)*(this.height+this.scrollbarVertical.getStyle('border-width').toInt());
			this.verticalScrollable.setStyle('height',this.scrollHeight);	
			this.el.setStyle('margin-right',this.width);
			var knobSize = Math.max((this.dimensions.y*this.scrollHeight/this.scrollSize.y).toInt(),this.height);
			this.verticalKnob.setStyle('height',knobSize);
			this.verticalKnob.getElement('.knobVerticalFill').setStyle('height',knobSize);
			this.vscroll=new Slider(this.verticalScrollable, this.verticalKnob,{
				mode:'vertical',
				range:[0,this.scrollSize.y-this.dimensions.y+this.height+this.paddingBottom+this.paddingTop],
				steps:this.scrollSize.y-this.dimensions.y+this.height+this.paddingBottom+this.paddingTop,
				onChange:this.scrollToVerticalPosition.bind(this),
				onTick:this.tick
			}).set(this.el.getScroll().y).fireEvent('onComplete');
		}else if(this.scrollbarVertical.getStyle('display')!='none'){
			this.scrollbarVertical.setStyle('display','none');	
			this.el.setStyle('margin-right',0);
			this.el.removeEvent('mousewheel',this.mouseEvent).scrollTo(this.el.getScroll().x,0);
		}
		
		if(this.scrollSize.x>this.dimensions.x){
			if(this.scrollbarHorizontal.getStyle('display')!='block'){
				this.scrollbarHorizontal.setStyle('display','block');
			}	
			this.scrollWidth = this.dimensions.x-(this.scrollSize.y>this.dimensions.y?3:2)*(this.width+this.scrollbarHorizontal.getStyle('border-width').toInt());
			this.horizontalScrollable.setStyle('width',this.scrollWidth);
			this.el.setStyle('height',this.dimensions.y-this.height-this.paddingBottom-this.paddingTop);
			var knobSize = Math.max((this.dimensions.x*this.scrollWidth/this.scrollSize.x).toInt(),this.width);
			this.horizontalKnob.setStyle('width',knobSize);
			this.hscroll=new Slider(this.horizontalScrollable, this.horizontalKnob,{
				mode:'horizontal',
				range:[0,this.scrollSize.x+this.width-this.dimensions.x+this.paddingRight],
				steps:this.scrollSize.x+this.width-this.dimensions.x+this.paddingRight,
				onChange:this.scrollToHorizontalPosition.bind(this),
				onTick:this.tick
			}).set(this.el.getScroll().x);
		}else if(this.scrollbarHorizontal.getStyle('display')!='none'){
			this.scrollbarHorizontal.setStyle('display','none');
			this.el.setStyle('height',this.dimensions.y-this.paddingBottom-this.paddingTop);
			this.el.scrollTo(0,this.el.getScroll().y);
		}
		
		if(this.scrollSize.y>this.dimensions.y && this.scrollSize.x>this.dimensions.x){
			this.corner.setStyle('display','block');
		}else{
			this.corner.setStyle('display','none');
		}
		this.stopScrolling();		
	},

	scrollToHorizontalPosition:function(step){
		this.el.scrollTo(step,this.el.getScroll().y);
	},
	
	scrollToVerticalPosition:function(step){
		this.el.scrollTo(this.el.getScroll().x,step);
	},
	
	startScrollingVertically:function(e,top){
		e.stop();
		$clear(this.periodScroll);
		if(top){
			this.buttonTop.addClass('active');
			this.periodScroll =  this.scrollVertical.periodical(20,this,-5);
		}else{
			this.buttonBottom.addClass('active');
			this.periodScroll =  this.scrollVertical.periodical(20,this,5);
		}
	},
	
	startScrollingHorizontally:function(e,left){
		e.stop();
		$clear(this.periodScroll);
		if(left){
			this.buttonLeft.addClass('active');
			this.periodScroll =  this.scrollHorizontal.periodical(20,this,-5);
		}else{
			this.buttonRight.addClass('active');
			this.periodScroll =  this.scrollHorizontal.periodical(20,this,5);
		}
	},
	
	stopScrolling:function(){
		$$(this.buttonBottom,this.buttonTop,this.buttonLeft,this.buttonRight,this.verticalKnob,this.horizontalKnob).removeClass('active');
		$clear(this.periodScroll);
	},

	scrollVertical:function(distance){
		this.vscroll.set(this.vscroll.step+distance);
	},

	scrollHorizontal:function(distance){
		this.hscroll.set(this.hscroll.step+distance);
	},
	
	mouseWheel:function(e){
		e.stop();
		this.scrollVertical(e.wheel<=0?20:-20);
		this.verticalKnob.removeClass('active')
	},
	
	tick:function(pos){
		this.knob.setStyle(this.property, pos);
	},
	
	scrollToElement:function(element){
		if(this.el.getElement(element)){
			var myy = element.getPosition(this.el).y.toInt()-this.el.getFirst('div').getFirst().getPosition(this.el).y.toInt();
			//this.scrollVertical((this.vscroll.step*-1)+Math.floor((myy/this.scrollSize.y)*(this.vscroll.max-this.vscroll.min)));
			this.scrollToVerticalPosition(myy);
			//this.verticalKnob.setStyle('top',Math.min(this.vscroll.full,((myy/this.scrollSize.y)*(this.vscroll.max-this.vscroll.min))));
			//this.scrollVertical(Math.floor((myy/this.scrollSize.y)*(this.vscroll.max-this.vscroll.min)));
			this.verticalKnob.setStyle('top',Math.min(this.vscroll.full,(myy/(this.scrollSize.y/this.verticalScrollable.getSize().y.toInt()))));
		}
	}
});


Slider.implement({
	clickedElement: function(event){
		this.knob.addClass('knobactive');
		if($(event.target) == this.element){
			var dir = this.range < 0 ? -1 : 1;
			var position = event.page[this.axis] - this.element.getPosition()[this.axis] - this.half;
			position = position.limit(-this.options.offset, this.full -this.options.offset);
			this.step = Math.round(this.min + dir * this.toStep(position));
			this.checkStep();
			this.end();
			this.fireEvent('tick', position);
		}
	}
});


/*
---
name: Scrollbar
description: A simple Apple-style productbrowser, that extends Slider using a container with Fx.Scroll.

version: 0.9.9
copyright: Enrique Erne (http://mild.ch)
license: MIT License
authors:
- Enrique Erne

requires: [Core/Class, Core/Element.Event, Core/Element.Dimensions, Core/Fx.Tween, Core/Fx.Transitions, Core/Selectors, More/Fx.Scroll, More/Slider]
provides: ScrollBar
...
*/
/*
var ScrollBar = new Class({
	Extends: Slider,

	options: {
		scroll: {
			wheelStops: false
		},
		slider: {
			mode: 'vertical',
			wheel: true
		},
		knob: {
		}
	},

	initialize: function(scroller, slider, knob, options){
		this.knob = document.id(knob).set('tween', options.knob);
		this.slider = document.id(slider);
		this.scroller = document.id(scroller);
		this.scrollElement = this.scroller.getFirst();
		this.parent(this.slider, this.knob, $extend(this.options.slider, options.slider));
		this.steps = this.scrollElement.getSize()[this.axis] - this.scroller.getSize()[this.axis];
		this.scroll = new Fx.Scroll(this.scroller, $extend(this.options.scroll, options.scroll));
		this.scroller.addEvent('mousewheel', function(event){
			this.element.fireEvent('mousewheel', event);
		}.bind(this));
		this.ratio = this.steps / (this.slider.getSize()[this.axis] - this.knob.getSize()[this.axis]);
	},
	
	move2: function(amount){
		this.set(this.knob.getPosition(this.slider)[this.axis] + amount);
	},

	set: function(position){
		if($type(position) === 'element') position = position.getPosition(this.scrollElement)[this.axis] / this.ratio;
		position = position.limit(-this.options.offset, this.full -this.options.offset);
		this.move(position * this.ratio);
		this.knob.tween(this.property, position).get('tween').chain(function(){
			this.fireEvent('complete', Math.round(position * this.ratio) + '');
		}.bind(this));
	},

	move: function(position){
		var to = $chk(position) ? position : this.step;
		if (this.options.mode === 'vertical') this.scroll.cancel().start(0, to);
		else this.scroll.cancel().start(to, 0);
	},

	draggedKnob: function(){
		this.parent();
		if (this.options.mode === 'vertical') this.scroll.cancel().set(0, this.step);
		else this.scroll.cancel().set(this.step);
	},

	clickedElement: function(event){
		if (event.target === this.knob){
			this.knob.get('tween').cancel();
			return;
		}
		var position = event.page[this.axis] - this.element.getPosition()[this.axis] - this.half;
		position = position.limit(-this.options.offset, this.full -this.options.offset);
		this.set(position);
	},
	
	scrolledElement: function(event){
		var mode = (this.options.mode == 'horizontal') ? (event.wheel < 0) : (event.wheel > 0);
		this.move2(mode ? -this.stepSize * 100 : this.stepSize * 100);
		event.stop();
	}

});
*/

/**
 * MooScroll beta [for mootools 1.2]
 * @author Jason J. Jaeger | greengeckodesign.com
 * @version 0.59
 * @license MIT-style License
 *			Permission is hereby granted, free of charge, to any person obtaining a copy
 *			of this software and associated documentation files (the "Software"), to deal
 *			in the Software without restriction, including without limitation the rights
 *			to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *			copies of the Software, and to permit persons to whom the Software is
 *			furnished to do so, subject to the following conditions:
 *	
 *			The above copyright notice and this permission notice shall be included in
 *			all copies or substantial portions of the Software.
 *	
 *			THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *			IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *			FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *			AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *			LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *			OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 *			THE SOFTWARE.
 *	
 *  
 **/
/*
var MooScroll = new Class({
	Implements: Options,
	options: {
        	selector: '.scroll',
		increment:30,
		upBtnClass:'upBtn',
		downBtnClass:'downBtn',
		scrollBarClass:'scrollBar',
		scrollHandleClass:'scrollHandle',
		scrollHandleBGClass:'scrollHandleBG',	
		scrollHandleTopClass:'scrollHandleTop',
		scrollHandleMiddleClass:'scrollHandleMiddle',			
		scrollHandleBottomClass:'scrollHandleBottom',
		scrollControlsYClass: 'scrollControlsY',
		handleOpacity:1,
		handleActiveOpacity:0.85,
		disabledOpacity:0.5,
		fullWindowMode:false,
		smoothMooScroll:{
			toAnchor:true,
			toMooScrollArea:true
		},
		restrictedBrowsers:[Browser.Engine.presto925,Browser.Platform.ipod,Browser.Engine.webkit419]//Opera 9.25 or lower, Safari 2 or lower, iPhone/iPod Touch
	},
	
	initialize: function(options){
		//don't run in restricted browsers
		if(this.options.restrictedBrowsers.contains(true)){return;}
		
		this.setOptions(options);		
		this.mooScrollAreas = [];
		this.windowFxScroll = new Fx.Scroll(document.window,{wait: false});

		$(document.body).getElements(this.options.selector).each(function(item,index){
			var scrollArea = new MooScrollArea(this.options, item,this.windowFxScroll);
			this.mooScrollAreas.include(scrollArea);
			if(this.options.smoothMooScroll.toAnchor || this.options.smoothMooScroll.toMooScrollArea){				
				this.smoothMooScroll = new SmoothMooScroll({toAnchor:this.options.smoothMooScroll.toAnchor,toMooScrollArea:this.options.smoothMooScroll.toMooScrollArea},scrollArea.contentEl,this.windowFxScroll);
			}
		}.bind(this));
	},
	
	loadContent:function(content){
		this.mooScrollAreas.each(function(item,index){
			item.loadContent(content);
		});
	},
	
	refresh:function(){
		this.mooScrollAreas.each(function(item,index){
			item.refresh();
		});
	},
	
	setSlider:function(v){
		this.mooScrollAreas.each(function(item,index){
			item.setSlider(v);			
		});
	}
});

var MooScrollArea = new Class({
	Implements: Options,		

	initialize: function(options, parentEl, windowFxScroll){
		this.windowFxScroll = windowFxScroll;
		this.setOptions(options);
		this.parentEl = parentEl.setProperty('rel', 'MooScrollArea');
		this.viewPort = {x:$(window).getSize().x,y:$(window).getSize().y};
		this.parentElPadding = this.parentEl.getStyles('padding-top','padding-right','padding-bottom','padding-left');
		this.paddingHeight = parseFloat(this.parentEl.getStyle('padding-top'))+parseFloat(this.parentEl.getStyle('padding-bottom'));
		this.paddingWidth = parseFloat(this.parentEl.getStyle('padding-left'))+parseFloat(this.parentEl.getStyle('padding-right'));
		
		//this.contentEl = new Element('div',{'class':'contentEl'}).adopt(this.parentEl.getChildren()).inject(this.parentEl,'top');
		//this.parentEl.setStyle('overflow', 'hidden').setStyles({
		//	'padding':0, 
		//	width:parseFloat(this.parentEl.getStyle('width')) + this.paddingWidth,	
		//	height:parseFloat(this.parentEl.getStyle('height')) +  this.paddingHeight	
		//});

		this.origheight = this.parentEl.measure(function(){	return this.getSize().y.toInt();	});
		this.parentEl.setStyles({'height':'auto','overflow':'visible'});
		this.newheight = this.parentEl.getSize().y.toInt();
		this.content = this.parentEl.get('html');
		this.parentEl.empty();
		this.contentEl = new Element('div',{'class':'contentEl','styles':{'position':'relative'}}).inject(this.parentEl,'top');
		this.parentEl.setStyles({'height':this.origheight,'overflow':'hidden'});

		this.borderHeight = parseFloat(this.parentEl.getStyle('border-top-width'))+parseFloat(this.parentEl.getStyle('border-bottom-width'));
		//this.contentEl.setStyles({'height':this.parentEl.getSize().y-this.borderHeight, overflow:'hidden','padding':0});
		this.contentEl.setStyles({'height':this.origheight, 'overflow':'hidden','padding':0});
		
		//this.paddingEl = new Element('div',{'class':'paddingEl'}).adopt(this.contentEl.getChildren()).inject(this.contentEl,'top').setStyles(this.parentElPadding);
		this.paddingEl = new Element('div',{'class':'paddingEl','html':this.content,styles:{'height':this.newheight,'position':'relative'}}).inject(this.contentEl,'top').setStyles(this.parentElPadding);
		
		if(this.options.fullWindowMode){
			//turn off overflow for html element here so non-javascript users can still scroll
			$(document).getElement('html').setStyle('overflow','hidden');
			this.parentEl.setStyles({ 'height':'100%', 'width':'100%', 'position':'absolute' });
			this.contentEl.setStyles({ 'height':'100%', 'width':'100%', 'position':'absolute'});		
		}
		
		//Add Control Elements
		this.scrollControlsYWrapper = new Element('div', {	'class': this.options.scrollControlsYClass	}).inject(this.parentEl,'bottom');
		this.upBtn = new Element('div', {	'class': this.options.upBtnClass	}).inject(this.scrollControlsYWrapper,'bottom');
		this.downBtn = new Element('div', {	'class': this.options.downBtnClass	}).inject(this.scrollControlsYWrapper,'bottom');
		this.scrollBar = new Element('div', {	'class': this.options.scrollBarClass	}).inject(this.scrollControlsYWrapper,'bottom');
		this.scrollHandle = new Element('div', {	'class': this.options.scrollHandleClass	}).inject(this.scrollBar,'inside');
		this.scrollHandleTop = new Element('div', {	'class': this.options.scrollHandleTopClass }).inject(this.scrollHandle,'inside');
		this.scrollHandleBG = new Element('div', {	'class': this.options.scrollHandleBGClass }).inject(this.scrollHandle,'inside');
		this.scrollHandleMiddle = new Element('div', {	'class': this.options.scrollHandleMiddleClass }).inject(this.scrollHandle,'inside');
		this.scrollHandleBottom = new Element('div', {	'class': this.options.scrollHandleBottomClass }).inject(this.scrollHandle,'inside');
		this.coverUp = new Element('div').inject(this.scrollControlsYWrapper,'bottom');
		
		this.fixIE6CSSbugs();
		
		//this.overHang = this.paddingEl.getSize().y - this.parentEl.getSize().y;
		this.overHang = this.newheight-this.origheight;
		
		this.setHandleHeight();
		
		if(this.overHang <=0){this.greyOut();return;}

		this.initSlider();		
		
		this.parentEl.addEvents({
			'mousewheel': function(e){
				e = new Event(e).stop();							
				// Mousewheel UP 
				if (e.wheel > 0) { this.scrollUp(true); }				
				// Mousewheel DOWN
				else if (e.wheel < 0) { this.scrollDown(true); }			
			}.bind(this),
			'keydown': function(e){	
				if (e.key === 'up') { 
					e = new Event(e).stop();
					this.scrollUp(true); 					
				} 						
				else if (e.key === 'down' || e.key === 'space') { 
					e = new Event(e).stop();
					this.scrollDown(true);
				}			
			}.bind(this),			
			
			'click':function(e){				
				this.hasFocus = true;				
				this.hasFocusTimeout = (function(){
					$clear(this.hasFocusTimeout);
					this.hasFocus = true;
				}.bind(this)).delay(50);				
			}.bind(this)		
			
		});
		
		this.contentEl.addEvents({
			'scroll': function(e){
				this.slider.set(this.contentEl.getScroll().y);			
			}.bind(this)
		})
		
		this.scrollHandle.addEvents({
				'mousedown': function(e){					
					this.scrollHandle.addClass(this.options.scrollHandleClass +'-Active').setStyle('opacity',this.options.handleActiveOpacity);
				}.bind(this)
		});
		
		document.addEvents({
			'mouseup': function(e){					
				this.scrollHandle.removeClass(this.options.scrollHandleClass +'-Active').setStyle('opacity',this.options.handleOpacity);
				this.upBtn.removeClass(this.options.upBtnClass +'-Active');
				this.downBtn.removeClass(this.options.downBtnClass +'-Active');
			}.bind(this),
			
			'keydown':function(e){				
				if( (this.hasFocus ||this.options.fullWindowMode) && (e.key === 'down' || e.key === 'space' ||e.key === 'up') ){	this.parentEl.fireEvent('keydown',e);		}
			}.bind(this),
			
			'click':function(e){				
				this.hasFocus = false;									
			}.bind(this)			
		});
		
		window.addEvent('resize', function() {			

		$clear(this.refreshTimeout);
			if (this.options.fullWindowMode) {
				this.refreshTimeout = (function(){
					$clear(this.refreshTimeout);
					if (this.viewPort.x != $(window).getSize().x || this.viewPort.y != $(window).getSize().y) {
						this.refresh();
						this.viewPort.x = $(window).getSize().x;
						this.viewPort.y = $(window).getSize().y;
					}
				}.bind(this)).delay(250);
			}	
		}.bind(this));
		
		this.upBtn.addEvents({
				'mousedown': function(e){					
					$clear(this.upInterval);
					$clear(this.downInterval);
					this.upInterval = this.scrollUp.periodical(10,this);
					this.upBtn.addClass(this.options.upBtnClass +'-Active');					
				}.bind(this),
				
				'mouseup': function(e){
					$clear(this.upInterval);
					$clear(this.downInterval);					
				}.bind(this),
				
				'mouseout': function(e){
					$clear(this.upInterval);
					$clear(this.downInterval);
				}.bind(this)
		});
			
		this.downBtn.addEvents({
				'mousedown': function(e){
					$clear(this.upInterval);
					$clear(this.downInterval);
					this.downInterval = this.scrollDown.periodical(10,this);
					this.downBtn.addClass(this.options.downBtnClass +'-Active');
				}.bind(this),
				
				'mouseup': function(e){
					$clear(this.upInterval);
					$clear(this.downInterval);
				}.bind(this),
				
				'mouseout': function(e){
					$clear(this.upInterval);
					$clear(this.downInterval);
				}.bind(this)
		});
		
		
    },
	
	initSlider:function(){
		this.slider = new Slider(this.scrollBar, this.scrollHandle, {	
			range:[0, Math.round(this.overHang )],	
			mode: 'vertical',	
			onChange: function(step,e){
				this.contentEl.scrollTo(0, step);				
				this.webKitKludge(step);				 
			}.bind(this)
		}).set(0);
	},
	
	webKitKludge:function(step){
		if (!Browser.Engine.webkit) {return;}
		//if scrollHandle is withing 1% of the bottom, kick it down that last little bit since webkit browsers seem to
		//have trouble getting it that last little bit sometimes (varies with amount of content.. probably due to rounding)
		if(this.step > step){ 
			this.step = step;	
			return; 
		}			
		$clear(this.sliderTimeout);
		this.sliderTimeout = (function(){ 
			$clear(this.sliderTimeout);						
			var onePercent = (1*this.paddingEl.getSize().y)/100;			
			if((onePercent + step) >= this.overHang ){						
				if(this.paddingElTopMargin == null){this.paddingElTopMargin = parseFloat(this.paddingEl.getStyle('margin-top'));}	
				this.paddingEl.setStyle('margin-top', this.paddingElTopMargin -onePercent);	
				if(!this.scrollHandleTopMargin){this.scrollHandleTopMargin = parseFloat(this.scrollHandle.getStyle('margin-top'));}
				this.scrollHandle.setStyle('margin-top',this.scrollHandleTopMargin+2);				
				this.contentEl.scrollTo(0, this.overHang );					
				this.step = this.overHang ;	
	
			}else{
				this.paddingEl.setStyle('margin-top', this.paddingElTopMargin );
				this.scrollHandle.setStyle('margin-top',this.scrollHandleTopMargin);
				this.contentEl.scrollTo(0, step);
				this.step = step;
			}	
		}.bind(this)).delay(10);
		
	},

	scrollUp:function(scrollPageWhenDone){		
		var target = this.contentEl.getScroll().y - 30;// this.options.increment;
		this.slider.set(target);
		if(this.contentEl.getScroll().y <= 0 && scrollPageWhenDone){
			document.window.scrollTo(0 ,document.window.getScroll().y - this.options.increment );
		}
	},
	
	scrollDown:function(scrollPageWhenDone){		
		var target = this.contentEl.getScroll().y + this.options.increment;
		this.slider.set(target);
		var onePercent = (1*this.paddingEl.getSize().y)/100;
		var atBottom = 	(this.paddingEl.getSize().y - this.parentEl.getSize().y)<= (this.contentEl.getScroll().y + onePercent);	
		if(atBottom && scrollPageWhenDone){
			document.window.scrollTo(0 ,document.window.getScroll().y + this.options.increment );
		}
	},
	
	fixIE6CSSbugs:function(){
		//fix some CSS bugs for IE6
		if(Browser.Engine.trident4){			
			this.parentEl.setStyle('height',this.parentEl.getStyle('height'));
			this.contentEl.setStyle('height',this.parentEl.getStyle('height'));			
			var top = this.scrollBar.getStyle('top').toInt();
			var bottom = this.scrollBar.getStyle('bottom').toInt();
			var parentHeight = this.parentEl.getSize().y - this.borderHeight;
			this.scrollControlsYWrapper.setStyles({'height':parentHeight});
			this.scrollBar.setStyles({'height':parentHeight-top-bottom });
		}
	},
	
	setHandleHeight:function(){		
		//var handleHeightPercent = (100 - ((this.overHang*100)/this.paddingEl.getSize().y));		
		var handleHeightPercent = (100 - ((this.overHang*100)/this.newheight));
		//this.handleHeight = ((handleHeightPercent*this.parentEl.getSize().y)/100) - (this.scrollHandleTop.getSize().y + this.scrollHandleBottom.getSize().y );
		this.handleHeight = ((handleHeightPercent*this.origheight)/100) - (this.scrollHandleTop.getSize().y + this.scrollHandleBottom.getSize().y );
		if((this.handleHeight + this.scrollHandleTop.getSize().y + this.scrollHandleBottom.getSize().y ) >= this.scrollBar.getSize().y){
			this.handleHeight-=( this.scrollHandleTop.getSize().y + this.scrollHandleBottom.getSize().y )*2;
		}
		if(this.scrollHandle.getStyle('min-height') && this.handleHeight < parseFloat(this.scrollHandle.getStyle('min-height'))){
			this.handleHeight = parseFloat(this.scrollHandle.getStyle('min-height')) + this.scrollHandleBottom.getSize().y + this.scrollHandleTop.getSize().y;
		}	
		else if(this.handleHeight > this.scrollBar.getSize().y.toInt()){
			this.handleHeight = this.scrollBar.getSize().y.toInt()-10;
		}
		this.scrollHandle.setStyles({'height':this.handleHeight});
	},
	
	greyOut:function(){
		this.scrollHandle.setStyles({'display':'none'});
		this.upBtn.setStyles({'opacity':this.options.disabledOpacity});
		this.scrollControlsYWrapper.setStyles({opacity:this.options.disabledOpacity});
		this.downBtn.setStyles({'opacity':this.options.disabledOpacity});
		this.scrollBar.setStyles({'opacity':this.options.disabledOpacity});				
		this.coverUp.setStyles({'display':'block','position':'absolute','background':'white','opacity':0.01,'right':'0','top':'0','width':'100%','height':this.scrollControlsYWrapper.getSize().y});
	},
	
	unGrey:function(){
		this.scrollHandle.setStyles({'display':'block','height':'auto'});
		this.scrollControlsYWrapper.setStyles({opacity:1});
		this.upBtn.setStyles({'opacity':1});
		this.downBtn.setStyles({'opacity':1});
		this.scrollBar.setStyles({'opacity':1});		
		this.coverUp.setStyles({'display':'none','width':0,	'height':0	});
		this.setHandleHeight();
	},
	
	loadContent:function(content){
		this.slider.set(0);
		this.paddingEl.empty().set('html',content);	
		this.refresh();
	},
	
	refresh:function(){	
		var scrollPercent = Math.round(((100* this.step)/this.overHang));
		if(this.options.fullWindowMode){
			var windowSize = $(window).getSize();
			this.parentEl.setStyles({ width:'100%',height:'100%'});
		}
		this.fixIE6CSSbugs();
		this.paddingEl.setStyle('height','auto');
		var padsize = this.paddingEl.measure(function(){	return this.getSize().y;	});
		this.overHang = padsize - this.parentEl.getSize().y;
		//this.overHang = this.paddingEl.getSize().y - this.parentEl.getSize().y;
		this.setHandleHeight();
		if(this.overHang <= 0){
			this.greyOut();
			return;
		}else{
			this.unGrey();
		}
		this.scrollHandle.removeEvents();		
		var newStep = Math.round((scrollPercent*this.overHang)/100);
		this.initSlider();
		this.slider.set(newStep);
		
		//another IE6 kludge
		if (Browser.Engine.trident4) {
			this.scrollHandleBG.setStyle('height','0').setStyle('height','100%');
		}
		
		if(this.options.smoothMooScroll.toAnchor || this.options.smoothMooScroll.toMooScrollArea){				
			this.smoothMooScroll = new SmoothMooScroll({toAnchor:this.options.smoothMooScroll.toAnchor,toMooScrollArea:this.options.smoothMooScroll.toMooScrollArea},this.contentEl,this.windowFxScroll);
		}
	},
	
	setSlider:function(v){
		if(v =='top'){
			this.slider.set(0);
		}else if(v=='bottom'){
			this.slider.set('100%');
		}else{
			this.slider.set(v);
		}			
	}
 
 
});

*/
var SmoothMooScroll = new Class({
	Extends: Fx.Scroll,
	initialize: function(options, context, windowFxScroll){
		this.setOptions(options);
		this.windowFxScroll = windowFxScroll;
		this.context = context;
		context = context || document;
		this.context = context;
		var doc = context.getDocument(), win = context.getWindow();		
		this.parent(context, options);
		
		this.links = (this.options.links) ? $$(this.options.links) : $$(doc.links);
		var location = win.location.href.match(/^[^#]*/)[0] + '#';
		this.links.each(function(link){
			if (link.href.indexOf(location) != 0) {	return;	}
			var anchor = link.href.substr(location.length);
			if (anchor && $(anchor) && $(anchor).getParents().contains($(this.context))) {
				this.useLink(link,anchor, true);
			}else if(anchor && $(anchor) && !this.inMooScrollArea($(anchor))){
				this.useLink(link,anchor, false);
			}
		}, this);
		if (!Browser.Engine.webkit419) this.addEvent('complete', function(){
			win.location.hash = this.anchor;
		}, true);
	},
	
	inMooScrollArea:function(el){
		return el.getParents().filter(function(item, index){return item.match('[rel=MooScrollArea]');}).length > 0;
	},
	
	putAnchorInAddressBar:function(anchor){
		window.location.href = "#" + anchor;      
	},

	useLink: function(link, anchor, inThisMooScrollArea){		
		link.removeEvents('click');
		link.addEvent('click', function(event){			
			if(!anchor || !$(anchor)){return;}			
			this.anchor = anchor;
			if (inThisMooScrollArea) {
				if(this.options.toMooScrollArea && this.options.toAnchor){
					this.windowFxScroll.toElement(this.context.getParent()).chain(function(item, index){				
						this.toElement(anchor).chain(function(){	this.putAnchorInAddressBar(anchor);	}.bind(this));				
					}.bind(this));
				}else if(this.options.toMooScrollArea){
					this.windowFxScroll.toElement(this.context.getParent()).chain(function(){	this.putAnchorInAddressBar(anchor);	}.bind(this));
				}else if(this.options.toAnchor){
					this.toElement(anchor).chain(function(){	this.putAnchorInAddressBar(anchor);	}.bind(this));	
				}				
			}else{
				this.windowFxScroll.toElement(anchor).chain(function(){	this.putAnchorInAddressBar(anchor);	}.bind(this));     
			}
			event.stop();		
		}.bind(this));
	}

});



/*
//This library: http://dev.clientcide.com/depender/build?download=true&excludeLibs=Core&require=Clientcide%2FMultipleOpenAccordion&excludeLibs=More
//Contents: Clientcide:Source/Layout/MultipleOpenAccordion.js

// Begin: Source/Layout/MultipleOpenAccordion.js
---
name: MultipleOpenAccordion
description: Creates a Mootools Fx.Accordion that allows the user to open more than one element.
license: MIT-Style License
requires: [Core/Element.Event, More/Fx.Reveal]
provides: MultipleOpenAccordion
...
*/
/*
var MultipleOpenAccordion = new Class({
	Implements: [Options, Events, Chain],
	options: {
		togglers: [],
		elements: [],
		openAll: false,
		firstElementsOpen: [0],
		fixedHeight: null,
		fixedWidth: null,
		height: true,
		opacity: true,
		width: false
		//onActive: function(){},
		//onBackground: function(){}
	},
	togglers: [],
	elements: [],
	initialize: function(options){
		var args = Array.link(arguments, {options: Type.isObject, elements: Type.isElements});
		this.setOptions(args.options);
		elements = $$(this.options.elements);
		$$(this.options.togglers).each(function(toggler, idx){
			this.addSection(toggler, elements[idx], idx);
		}, this);
		if (this.togglers.length) {
			if (this.options.openAll) this.showAll();
			else this.toggleSections(this.options.firstElementsOpen, false, true);
		}
		this.openSections = this.showSections.bind(this);
		this.closeSections = this.hideSections.bind(this);
	},
	addSection: function(toggler, element){
		toggler = document.id(toggler);
		element = document.id(element);
		var test = this.togglers.contains(toggler);
		var len = this.togglers.length;
		this.togglers.include(toggler);
		this.elements.include(element);
		var idx = this.togglers.indexOf(toggler);
		var displayer = this.toggleSection.bind(this, idx);
		toggler.addEvent('click', displayer).store('multipleOpenAccordion:display', displayer);
		var mode;
		if (this.options.height && this.options.width) mode = "both";
		else mode = (this.options.height)?"vertical":"horizontal";
		element.store('moa:reveal', new Fx.Reveal(element, {
			transitionOpacity: this.options.opacity,
			mode: mode,
			heightOverride: this.options.fixedHeight,
			widthOverride: this.options.fixedWidth
		}));
		return this;
	},
	removeSection: function(toggler) {
		var idx = this.togglers.indexOf(toggler);
		var element = this.elements[idx];
		element.dissolve();
		this.togglers.erase(toggler);
		this.elements.erase(element);
		this.detach(toggler);
		return this;
	},
	detach: function(toggler){
		var remove = function(toggler) {
			toggler.removeEvent(this.options.trigger, toggler.retrieve('multipleOpenAccordion:display'));
		}.bind(this);
		if (!toggler) this.togglers.each(remove);
		else remove(toggler);
		return this;
	},
	onComplete: function(idx, callChain){
		this.fireEvent(this.elements[idx].isDisplayed()?'onActive':'onBackground', [this.togglers[idx], this.elements[idx]]);
		this.callChain();
		return this;
	},
	showSection: function(idx, useFx){
		this.toggleSection(idx, useFx, true);
	},
	hideSection: function(idx, useFx){
		this.toggleSection(idx, useFx, false);
	},
	toggleSection: function(idx, useFx, show, callChain){
		var method = show?'reveal':show != null?'dissolve':'toggle';
		callChain = [callChain, true].pick();
		var el = this.elements[idx];
		if (useFx != null ? useFx : true) {
			el.retrieve('moa:reveal')[method]().chain(
				this.onComplete.bind(this, idx, callChain)
			);
		} else {
				if (method == "toggle") el.toggle();
				else el[method == "reveal"?'show':'hide']();
				this.onComplete(idx, callChain);
		}
		return this;
	},
	toggleAll: function(useFx, show){
		var method = show?'reveal':(show!=null)?'disolve':'toggle';
		var last = this.elements.getLast();
		this.elements.each(function(el, idx){
			this.toggleSection(idx, useFx, show, el == last);
		}, this);
		return this;
	},
	toggleSections: function(sections, useFx, show) {
		last = sections.getLast();
		this.elements.each(function(el,idx){
			this.toggleSection(idx, useFx, sections.contains(idx)?show:!show, idx == last);
		}, this);
		return this;
	},
	showSections: function(sections, useFx){
		sections.each(function(i){
			this.showSection(i, useFx);
		}, this);
	},
	hideSections: function(sections, useFx){
		sections.each(function(i){
			this.hideSection(i, useFx);
		}, this);
	},
	showAll: function(useFx){
		return this.toggleAll(useFx, true);
	},
	hideAll: function(useFx){
		return this.toggleAll(useFx, false);
	}
});
*/

/*
---
script: rotater.js
description: MGFX.Rotater, the base class that provides slides and transitions. 
authors: Sean McArthur (http://mcarthurgfx.com) 
license: MIT-style license 
requires:
 core/1.2.4: '*'
 more/1.2.4.1: [Fx.Elements]
provides: [MGFX.Rotater]
...
*/

//MGFX.Rotater. Copyright (c) 2008-2010 Sean McArthur <http://mcarthurgfx.com/>, MIT Style License.

var MGFX = MGFX || {};

MGFX.Rotater = new Class({
	
	Implements: [Options, Events],
	
	options: {
		slideInterval: 5000,
		transitionDuration: 1000,
		startIndex: 0,
		autoplay: true,
		hover:true,
		hash: true,
		onAutoPlay: $empty,
		onRotate: $empty,
		onShowSlide: $empty,
		onStop: $empty,
		onPause: $empty,
		onResume: $empty
	},
	
	initialize: function(slides,options){
		this.setOptions(options);
		this.slides = $$(slides);
		this.createFx();
		if(this.options.startIndex != 0){
			this.showSlide(this.options.startIndex);
		}
		if(this.slides.length < 2) this.options.autoplay = false;
		if(this.options.autoplay) this.autoplay();
		return this;
	},
	
	createFx: function(){
		if (!this.slideFx) this.slideFx = new Fx.Elements(this.slides, {duration: this.options.transitionDuration, link: 'cancel'});
		this.slides.each(function(slide,index){
			if(index != this.options.startIndex){
				slide.setStyle('opacity',0);
				slide.setStyle('display','none');
			}
		},this);
	}.protect(),
	
	setupHover: function() {
		var _timeLastRotate = new Date(),
			_timeLastPause,
			_timeTillRotate = this.options.slideInterval,
			_resumeDelay;
			
		var onRotate = this._onRotate = function() {
			if(this.slideshowInt) {
				_timeLastRotate = new Date();
				_timeTillRotate = this.options.slideInterval;
			}
		};
		var onMouseEnter = this._onMouseEnter = function() {
			this.stop();
			_timeLastPause = new Date();
			$clear(_resumeDelay);
			this.fireEvent('onPause');
		}.bind(this);
		
		var onMouseLeave = this._onMouseLeave = function() {
			var timePassed = (_timeLastPause - _timeLastRotate);
			_timeLastRotate = new Date() - timePassed;
			_resumeDelay = (function() {
				this.autoplay();
				this.rotate();
				this.fireEvent('onResume');
			}).delay(_timeTillRotate - timePassed, this);			
		}.bind(this);
		
		this.addEvent('onRotate', onRotate);
		this.slides.addEvents({
			'mouseenter': onMouseEnter,
			'mouseleave': onMouseLeave
		});
	}.protect(),
	
	removeHover: function() {
		this.removeEvent('onRotate', this._onRotate);
		this.slides.removeEvents({
			'mouseenter': this._onMouseEnter,
			'mouseleave': this._onMouseLeave
		});
	},
	
	showSlide: function(slideIndex){
		if(slideIndex == this.currentSlide) return this;
		var action = {};
		this.slides.each(function(slide, index){
			if(index == slideIndex && index != this.currentSlide){ //show
				action[index.toString()] = {
					opacity: 1,
					display: 'block'
				};
			} else {
				action[index.toString()] = {
					opacity:0,
					display: 'none'
				};
			}
		}, this);
		this.fireEvent('onShowSlide', slideIndex);
		this.currentSlide = slideIndex;
		this.slideFx.start(action);
		return this;
	},
	
	autoplay: function(){
		if(this.options.hover) this.setupHover();
		this.slideshowInt = this.rotate.periodical(this.options.slideInterval, this);
		this.fireEvent('onAutoPlay');
		return this;
	},
	
	stop: function(not_pause){
		$clear(this.slideshowInt);
		this.fireEvent('onStop');
		if(not_pause && this.options.hover) this.removeHover();
		return this;
	},
	
	rotate: function(){
		var next = this.getNext();
		this.showSlide(next);
		this.fireEvent('onRotate', next);
		return this;
	},
	
	random: function() {
		var index = Math.floor(Math.random() * this.slides.length);
		index = index == this.currentSlide ? this.getNext() : index;
		this.showSlide(index);
		this.fireEvent('onRandom', index);
		return this;
	},
	
	getNext: function() {
		var current = this.currentSlide;
		return (current+1 >= this.slides.length) ? 0 : current+1
	}.protect()
	
});


/*
---
script: tabs.js
description: MGFX.Tabs, extension of base class that adds tabs to control the rotater. 
authors: Sean McArthur (http://mcarthurgfx.com) 
license: MIT-style license 
requires:
 core/1.2.4: '*'
 more/1.2.4.1: [Fx.Elements]
provides: [MGFX.Tabs]
...
*/

//MGFX.Tabs. Copyright (c) 2008-2010 Sean McArthur <http://mcarthurgfx.com/>, MIT Style License.

var MGFX = MGFX || {};

MGFX.Tabs = new Class({
	
	Extends: MGFX.Rotater,
	
	options: {
		autoplay: false,
		onShowSlide: function(slideIndex) {
			this.tabs.removeClass('active');
			this.tabs[slideIndex].addClass('active');
		}
	},
	
	initialize: function(tabs, slides, options){
		this.setOptions(options);
		this.tabs = $$(tabs);
		this.createTabs();
		if(this.options.hash && window.location.hash) {
			var hash = window.location.hash.substring(1);
			this.tabs.each(function(el, index) {
				if(el.get('id') == hash) {
					options.startIndex = index;
				}
			});
		}
		return this.parent(slides,options);
	},
	
	createTabs: function () {
		this.tabs.each(function(tab,index){
			tab.addEvent('click', function(event){ 
				event.preventDefault();
				this.showSlide(index);
				this.stop(true);
			}.bind(this));
		}.bind(this));
	}.protect()
	
});
