var BackgroundSlider = new Class({
getOptions: function(){
return {
duration: 300,
wait: 500,
transition: Fx.Transitions.sineInOut,
className: false,
fixHeight: false,
fixWidth: false,
id: false,
padding: {top:0,right:0,bottom:0,left:0},
onClick: this.setStart,
mouseOver: true};},
initialize: function(elements, options){
this.setOptions(this.getOptions(), options);
this.elements = $$(elements);
this.timer = 0;
if(this.options.id){
this.bg = $(this.options.id);
}else{
this.bg = new Element('div').setProperty('id','BgSlider_'+new Date().getTime()).injectInside(document.body);
if(this.options.className){
this.bg.addClass(this.options.className);}}
this.effects = new Fx.Styles(this.bg, {duration: this.options.duration, transition: this.options.transition});
this.elements.each(function(el,i){
if(this.options.mouseOver){
el.addEvent('mouseover', this.move.bind(this,el));
el.addEvent('mouseout', this.reset.bind(this));}
el.addEvent('click', this.options.onClick.bind(this, el))
if(el.hasClass('bgStart')){
this.set(el);}},this);
window.addEvent('resize',function(){
this.move(this.startElement);
}.bind(this));},
setStart: function(el){
this.startElement = el;},
set: function(el){
this.setStart(el);
var pos = el.getCoordinates();
if(this.options.id){
this.options.padding.top = this.bg.getStyle('paddingTop').toInt();
this.options.padding.right = this.bg.getStyle('paddingRight').toInt();
this.options.padding.bottom = this.bg.getStyle('paddingBottom').toInt();
this.options.padding.left = this.bg.getStyle('paddingLeft').toInt();
this.bg.setStyle('padding','0px');}
var obj = {};
obj.top = (pos.top-this.options.padding.top)+'px';
obj.left = (pos.left-this.options.padding.left)+'px';
if(!this.options.fixHeight){obj.height = (pos.height+this.options.padding.top+this.options.padding.bottom)+'px'};
if(!this.options.fixWidth){obj.width = (pos.width+this.options.padding.left+this.options.padding.right)+'px'};
this.bg.setStyles(obj);},
reset: function(){
if(this.options.wait){
this.timer = this.move.delay(this.options.wait, this, this.startElement);}},
move: function(el){
$clear(this.timer);
var pos = el.getCoordinates();
this.effects.stop();
var obj = {};
obj.top = pos.top-this.options.padding.top;
obj.left = pos.left-this.options.padding.left;
if(!this.options.fixHeight){obj.height = pos.height+this.options.padding.top+this.options.padding.bottom};
if(!this.options.fixWidth){obj.width = pos.width+this.options.padding.left+this.options.padding.right};
this.effects.start(obj);
}});
BackgroundSlider.implement(new Options);
BackgroundSlider.implement(new Events);

