
var LoopPaging = Class.create({

	loop			: 0,
	currentPosition	: 0,
	
	initialize: function() {
		//moved to the 'action' function as sometimes this.slides got the value of the previous instance
		//which caused transitions even with only one slide
		//this.slides = $$('#slides div[title="slide"]');		
		this.loopList(1);
	},
	
	goToNext: function() {
		window.clearTimeout(loopPaging.loop);		
		
		this.action({obj:this, frwd:1, gotoPosition:null});
	},
	
	goToPrevious: function() {
		window.clearTimeout(loopPaging.loop);
				
		this.action({obj:this, frwd:0, gotoPosition:null});
	},
	
	goToPosition: function(position) {
		window.clearTimeout(loopPaging.loop);
		
		this.action({obj:this, frwd:0, gotoPosition:position});
	},
	
	action: function(options) {						
		
		var instance 		= options.obj;
		var frwd			= options.frwd;
		
		var thePosition		= parseInt(this.currentPosition);
		thePosition++;				
			
		var activeSlides 	= $$('#slides div.slide_' + thePosition);
		var assetframes		= $$('.asset-frame');
		
		instance.slides 	= $$('#slides div[title="slide"]');
						
		if(activeSlides.length && instance.slides.length > 1) {			
			var activeSlide = activeSlides.first();
			
			if(options.gotoPosition !== null){				
				var sibling = instance.slides[options.gotoPosition];
			} else {
				var sibling = frwd ? activeSlide.next() : activeSlide.previous();
			}
															
			instance.fadeOutSlide('framer' + this.currentPosition);																	
			
			if(sibling) {				
				var p = (options.gotoPosition !== null) ? (options.gotoPosition + 1) : (frwd) ? (thePosition + 1) : (thePosition - 1);				
				sibling.className 			= 'slides_active slide_' + p;
				instance.currentPosition	= sibling.readAttribute('position');
				
			} else {
				if(frwd) {
					instance.slides.first().className 	= 'slides_active slide_1';
				} else {
					instance.slides.last().className 	= 'slides_active slide_'  + instance.slides.length;
				}
				instance.currentPosition = (options.gotoPosition !== null) ? instance.slides[options.gotoPosition].readAttribute('position') : frwd ? instance.slides.first().readAttribute('position') : instance.slides.last().readAttribute('position');				
			}			
							
			setTimeout(function(){instance.fadeInSlide('framer' + instance.currentPosition, assetframes)}, 500);			
			
			activeSlide.className = 'slides_passive slide_'  + thePosition;
			
			if(thePosition == instance.slides.length){
				activeSlide.className += ' last_slide';
			}
			
			if(options.gotoPosition === null){
				instance.loopList(1);
			}
		}
	},
	
	fadeInSlide: function(id, frames) {
				
		var instance = this;
		instance.hideSlides(frames);
		
		if($(id)) {
			$(id).show();
		}
		
		var attributes = {			
	        opacity: { to: 1}
	    };
	    
	    var anim = new YAHOO.util.Anim(id, attributes, 0.5);
	    anim.animate();
	}, 
	
	fadeOutSlide: function(id, frames) {
		
		var attributes = {	        	        
			opacity: { to: 0}
	    };
	    
	    var anim = new YAHOO.util.Anim(id, attributes, 0.5);
	    anim.animate();	    	    
	}, 
	
	hideSlides: function(frames){
		
		frames.each(function(frame) {
			frame.hide();
			frame.setOpacity(0);
		});	
	}, 
	
	loopList: function(frwd) {
		
		var instance = this;
		
		this.loop = setTimeout(function() {
			
			instance.action({obj:instance, frwd:frwd, gotoPosition:null});
						
		}, 4000);
	},
	
	stop: function() {		
		window.clearTimeout(loopPaging.loop);						
	},
	
	resume: function() {
		this.loopList(1);
	}
});

