var SL_Slider = new Class({	//implements	Implements: [Options],			//variables setup	numNav: new Array(),		    //will store number nav elements (if used)	timer: null,					//periodical function variable holder	isSliding: 0,					//flag for animation/click prevention	direction: 1,					//flag for direction (forward/reverse)		//options	options: {	slideTimer: 8000,  			    //Time between slides (1 second = 1000), a.k.a. the interval duration	orientation: 'horizontal',      //vertical, horizontal, or none: None will create a fading in/out transition.	fade: false,                    //if true will fade the outgoing slide - only used if orientation is != None	isPaused: false,				//flag for paused state	transitionTime: 3000, 		    //Transition time (1 second = 1000)	transitionType: 'cubic:out',	//Transition type	container: null,				//container element	items:  null, 					//Array of elements for sliding	itemNum: 0,						//Current item number	numNavActive: false,			//Whether or not the number navigation will be used	numNavHolder: null,			    //Element that holds the number navigation	playBtn: null,					//Play (and pause) button element	prevBtn: null,					//Previous button element	nextBtn: null					//Next button element	},	//initialization	initialize: function(options) {		var self = this;				//set options		this.setOptions(options);				//remove any scrollbar(s) on the container		self.options.container.setStyle('overflow', "hidden");  				//if there is a play/pause button, set up functionality for it		if(self.options.playBtn != null) {			//self.pauseIt();  			self.options.playBtn.set('text', 'pause');						self.options.playBtn.addEvents({				'click': function() {					self.pauseIt();				},								'mouseenter' : function() {					this.setStyle('cursor', 'pointer');				},				'mouseleave' : function() {									}			});		}				//if there is a prev & next button, set up functionality for them		if(self.options.prevBtn && self.options.nextBtn){						self.options.prevBtn.addEvents({ 				'click' : function() {					if(self.isSliding == 0){						if(self.options.isPaused == false){							$clear(self.timer);							self.timer = self.slideIt.periodical(self.options.slideTimer, self, null);						}						self.direction = 0;						self.slideIt();					}				},				'mouseenter' : function() {					this.setStyle('cursor', 'pointer');				},				'mouseleave' : function() {								}			});							this.options.nextBtn.addEvents({ 				'click' : function() {					if(self.isSliding == 0){						if(self.options.isPaused == false){							$clear(self.timer);							self.timer = self.slideIt.periodical(self.options.slideTimer, self, null);						}						self.direction = 1;						self.slideIt();					}				},				'mouseenter' : function() {					this.setStyle('cursor', 'pointer');				},				'mouseleave' : function() {									}			});			}				//setup items (a.k.a. slides) from list		self.options.items.each(function(el, i){			  			//f.y.i.  el = the element, i = the index			el.setStyle('position', "absolute");			var itemH = el.getSize().y;			var itemW = el.getSize().x;			if(self.options.orientation == 'vertical'){                 el.setStyle('top', (-1 * itemH));                el.setStyle('left', 0);            }else if(self.options.orientation == 'none') {                el.setStyle('left', 0);                el.setStyle('top', 0);                el.set('opacity', 0);			}else{                el.setStyle('left', (-1 * itemW));            }			// -- Number nav setup			if(self.options.numNavActive == true){				//create numbered navigation boxes, and insert into the 'num_nav' ul)				var numItem = new Element('li', {id: 'num'+i});				var numLink = new Element('a', {					'class': 'numbtn',					'html': (i+1)				});				numItem.adopt(numLink);				self.options.numNavHolder.adopt(numItem);				self.numNav.push(numLink);				numLink.set('morph', {duration: 100, transition: Fx.Transitions.linear, link: 'ignore'});								numLink.addEvents({					'click' : function(){						self.numPress(i);					},					'mouseenter' : function() {						this.setStyle('cursor', 'pointer');					}				});								//set initial number to active state				if(i == self.options.itemNum){					var initNum = self.numNav[i];					initNum.addClass('active');				}			}			//end if num nav 'active'				 });		},	//startup method	start: function() {				var self = this;				self.slideIt(self.options.itemNum);  //initialize first slide				if(self.options.isPaused == false){			self.timer = self.slideIt.periodical(self.options.slideTimer, self, null);			if(self.options.playBtn) self.options.playBtn.set('text', 'pause');		}		else{			//self.pauseIt();			if(self.options.playBtn) self.options.playBtn.set('text', 'play');		}			},			slideIt: function(passedID) {				var self = this;				//get item to slide out		var curItem = self.options.items[self.options.itemNum]; 		if(self.options.numNavActive == true){			var curNumItem =  self.numNav[self.options.itemNum];		}				//check for passedID presence		if(passedID != null) {			if(self.options.itemNum != passedID){				if(self.options.itemNum > passedID) { 					self.direction = 0; 				} else { 					self.direction = 1;				}				self.options.itemNum = passedID;			}		}		else{			self.changeIndex();			}						//now get item to slide in using new index		var newItem = self.options.items[self.options.itemNum];		if(self.direction == 0){			var curX = self.options.container.getSize().x;			var newX = (-1 * newItem.getSize().x);            var curY = self.options.container.getSize().y;            var newY = (-1 * newItem.getSize().y);		}		else{			var curX = (-1 * self.options.container.getSize().x);				var newX = newItem.getSize().x;            var curY = (-1 * self.options.container.getSize().y);            var newY = newItem.getSize().y;		}						//add/remove active number's highlight		if(self.options.numNavActive == true){			var newNumItem =  self.numNav[self.options.itemNum];			newNumItem.addClass('active');		}						//set up our animation stylings		var item_in = new Fx.Morph(newItem, {		     duration: self.options.transitionTime, 		     transition: self.options.transitionType,		     link: 'ignore',		     		     onStart: function(){				self.isSliding = 1;  //prevents extra clicks			},		     		     onComplete: function(){				self.isSliding = 0;  //prevents extra clicks			}		     		});						        if(self.options.orientation == 'vertical'){            if(self.options.fade == true){item_in.start({'opacity':[0,1],'top' : [newY, 0]});}            else{item_in.start({'top' : [newY, 0]});}        }else if(self.options.orientation == 'none') {            item_in.start({'opacity':[0,1]});        }else{            if(self.options.fade == true){item_in.start({'opacity':[0,1],'left' : [newX, 0]});}            else{item_in.start({'left' : [newX, 0]});}        }        				if(curItem != newItem){			var item_out = new Fx.Morph(curItem, {				     duration: self.options.transitionTime, 				     transition: self.options.transitionType,				     link: 'ignore'			});						if(self.options.numNavActive == true){				curNumItem.removeClass('active');			}			            if(self.options.orientation == 'vertical'){                if(self.options.fade == true){item_out.start({'opacity':[0],'top' : [(curY)]});}                else{item_out.start({'top' : [(curY)]});}            }else if(self.options.orientation == 'none') {                item_out.start({'opacity':[1,0]});            }else{                if(self.options.fade == true){item_out.start({'opacity':[0],'left' : [(curX)]});}                else{item_out.start({'left' : [(curX)]});}            }		}	},			//--------------------------------------------------------------------------------------------------------	//supplementary functions  (mini-functions)	//--------------------------------------------------------------------------------------------------------	pauseIt: function () {				var self = this;				//only move if not currently moving		if(self.isSliding == 0){			if(self.options.isPaused == false){				self.options.isPaused = true;				$clear(self.timer);				self.options.playBtn.set('text', 'play');							}			else{				self.options.isPaused = false;				self.slideIt();				self.timer = self.slideIt.periodical(self.options.slideTimer, this, null); 				self.options.playBtn.set('text', 'pause');			}					} //end if not sliding			},		changeIndex: function() {		var self = this; 				var numItems = self.options.items.length;  //get number of slider items				//change index based on value of 'direction' parameter		if(self.direction == 1){			if(self.options.itemNum < (numItems - 1)){				self.options.itemNum++; 			}			else{				self.options.itemNum = 0;			}		}		else if(self.direction == 0){			if(self.options.itemNum > 0){				self.options.itemNum--; 			}			else{				self.options.itemNum = (numItems - 1);			}		}				},		numPress: function (theIndex) {		var self = this;				if((self.isSliding == 0) && (self.options.itemNum != theIndex)){			if(self.options.isPaused == false){				$clear(self.timer);				self.timer = self.slideIt.periodical(self.options.slideTimer, this, null);			}			self.slideIt(theIndex);		}	}	//------------------------  end supp. functions -----------------------------------------//});
