if(typeof window.console === "undefined"){	window.console = {		log : function(){			//do nothing		}	};}(function($){	$.fn.extend({		snapToggle : function(options){			var _options = {				initialPosition : 0			},			_bar = $('.snap-toggle-bar', this),			_handle = $('.snap-toggle-handle', this),			_listElements = $('ul li', this);			$.extend(_options, options);			this._snapToggle.setup(_options, _bar, _handle, _listElements);		},				_snapToggle : {			options : null,			bar : null,			handle : null,			listElements : null,			length : null,			position : 0,			positionCoord : null,			handleIsAnimating : false,			previousPosition : null,						setup : function(options, bar, handle, listElements){				this.options = options;				this.bar = bar;				this.handle = handle;				this.listElements = listElements;				this.length = this.listElements.length;				this.position = this.options.initialPosition;								this.setupPositionCoords();				this.setupInitialItemVisible();				this.hookUpHandleListeners();			},						toString : function(){				console.log(this.options);				console.log(this.bar);				console.log(this.handle);			},						setupPositionCoords : function(){				this.positionCoord = new Array(this.length);				this.positionCoord[0] = parseInt(this.handle.css('margin-left'));				this.positionCoord[this.length - 1] = this.determineLastPosition();				this.determineMiddlePositions();			},						setupInitialItemVisible : function(){				this.animateHandle(this.position);				this.animateListElement(this.position);			},						determineLastPosition : function(){				var barLength = parseInt(this.bar.css('width'));				var handleWidth = parseInt(this.handle.css('width'));				var margin = parseInt(this.handle.css('margin-left'));				return barLength - handleWidth - margin;			},						determineMiddlePositions : function(){				var totalWidth = this.positionCoord[this.length - 1] - this.positionCoord[0];				var incrementLength = totalWidth / (this.length - 1);				for(var i = 1 ; i < this.length - 1; i++){					this.positionCoord[i]= i * incrementLength;				}				console.log(this.positionCoord);			},						hookUpHandleListeners : function(){				var self = this;				this.handle.mousedown(function(e){					self.handleMouseDown(e);				});				this.handle.mouseup(function(e){					self.handleMouseUp(e);				});				this.handle.hover(null, function(e){					self.handleMouseUp(e);				});			},						handleMouseDown : function(e){				var self = this;				var previousOffsetX = null;				this.handle.mousemove(function(e){					previousOffsetX = self.handleMouseMove(e, previousOffsetX);				});			},						handleMouseUp : function(e){				this.handle.unbind('mousemove');			},						handleMouseMove : function(e, previousOffsetX){				var self = this;				if(previousOffsetX === null){					previousOffsetX = e.pageX;				}				var offset = e.pageX - previousOffsetX;				console.log(e);				if(offset > 0){					this.next();				} else if(offset < 0){					this.prev();				}								return e.pageX;			},						animateListElement : function(position){				var self = this;				var current = this.listElements[position];								if(this.previousPosition === null){					$(current).css({						'z-index' : 10					});					$(current).animate({						'opacity' : 1					});				} else {					var previous = this.listElements[this.previousPosition];					$(previous).css({						'z-index' : 5					});					this.bringForward(current, function(){						$(previous).css({							'z-index' : 1,							'opacity' : 0						});					});				}							},						bringForward : function(element, callback){				$(element).css({					'z-index' : 10				});				$(element).animate({					opacity : 1				}, 1000, 'swing', callback);			},						animateHandle : function(position){				var self = this;				this.handle.animate({					'margin-left' : this.positionCoord[position] + 'px'				}, 1000, 'swing', function(){					self.handleIsAnimating = false;				});			},						updatePosition : function(position){				if(this.position !== position){					this.previousPosition = this.position;					this.position = position;					this.handleIsAnimating = true;					this.animateListElement(this.position);					this.animateHandle(this.position);				}			},						next : function(){				if(this.position + 1 < this.length && 					!this.handleIsAnimating){					this.updatePosition(this.position + 1);				}			},						prev : function(){				if(this.position !== 0 && 					!this.handleIsAnimating){					this.updatePosition(this.position - 1);				}			}		}	});})(jQuery);
