// JavaScript Document

function slidePoint(data){
	if(typeof data === 'undefined'){
		var data = {};
	}
	var slidepoint = {};
	// Public Variables you can change with data
	slidepoint.stasis= data.stasis || 8000; //# How along the autoSlide will wait between slides
	slidepoint.refresh= data.refresh || 200; //# How often the autoSlide will check to see what state its in
	slidepoint.slideTime = data.slideTime || 700; //# How fast the slide will translition
	//# Enables cycling from last to first
	slidepoint.enableCircle = (typeof data.enableCircle === 'undefined') ? true : data.enableCircle; 
	//# Enables the left and right arrow buttons
	slidepoint.enableKeyPress = (typeof data.enableKeyPress === 'undefined') ? true : data.enableKeyPress; 
	//# Enables the left and right arrow buttons
	slidepoint.enableNumbers = (typeof data.enableNumbers === 'undefined') ? true : data.enableNumbers; 
	//# Enables the left and right arrow buttons
	slidepoint.enableArrows = (typeof data.enableArrows === 'undefined') ? true : data.enableArrows; 
	//# Enables the left and right arrow buttons
	slidepoint.enableTouch = (typeof data.enableTouch === 'undefined') ? true : data.enableTouch; 
	
	slidepoint.currentSlide = 1;
	slidepoint.intervalID =  null;
	slidepoint.state = 'start';
	slidepoint.i = 0;
	slidepoint.totalSlides = $("#slideBoard > div").size();
	slidepoint.slideWidth = $('#slideFrame').css('width');
	slidepoint.slideAmount = parseInt(slidepoint.slideWidth);
	$('#slideBoard .slidePoint:nth-child(' + slidepoint.currentSlide + ')').css('left', slidepoint.slideWidth);

	slidepoint.slideAround = function(callback){
		if(typeof callback !== 'function'){
			callback = function(){}
		}
		var slideNumber = 1;
		var curslide = $('#slideBoard .slidePoint:nth-child(' + slidepoint.currentSlide + ')');
		var newslide = $('#slideBoard .slidePoint:nth-child(' + slideNumber + ')');			//alert('go 2');
		var newSlideNumber = 1;
		var newPos = parseInt(slidepoint.slideWidth) * 2;
			//# Then Slide Both Right
			$(newslide).css('left', newPos);
			//# Animate New Slide
			$(newslide).animate({
				left: [slidepoint.slideWidth],
				opacity: 1
				}, slidepoint.slideTime );
			//# Animate Current Slide
			$(curslide).animate({
				left: [0],
				opacity: 0
				}, slidepoint.slideTime, 'linear', function(){
					if(typeof callback === 'function')
						callback();
				});
		slidepoint.currentSlide = 1;
	}
	slidepoint.slideBack = function(callback){
		if(typeof callback !== 'function'){
			callback = function(){}
		}
		var slideNumber = slidepoint.totalSlides;
		var curslide = $('#slideBoard .slidePoint:nth-child(' + slidepoint.currentSlide + ')');
		var newslide = $('#slideBoard .slidePoint:nth-child(' + slideNumber + ')');			//alert('go 2');
		var newSlideNumber = 1;
		var newPos = parseInt(slidepoint.slideWidth) * 2;
			//# Then Slide Both Right
			$(newslide).css('left', 0);
			//# Animate New Slide
			$(newslide).animate({
				left: [slidepoint.slideWidth],
				opacity: 1
				}, slidepoint.slideTime );
			//# Animate Current Slide
			$(curslide).animate({
				left: [newPos],
				opacity: 0
				}, slidepoint.slideTime, 'linear', function(){
					if(typeof callback === 'function')
						callback();
				} );

		slidepoint.currentSlide = slidepoint.totalSlides;
	}
	slidepoint.showSlide = function(slideNumber, callback){
		if(typeof callback !== 'function'){
			callback = function(){}
		}
		//#########################
		//# Exit Current Slide
		//# Determine Slide Direction
		//alert(slidepoint.currentSlide);
		//alert(slideNumber);
		slideNumber = parseInt(slideNumber);
		//slidePos = slideNumber -1;
		var curslide = $('#slideBoard .slidePoint:nth-child(' + slidepoint.currentSlide + ')');
		var newslide = $('#slideBoard .slidePoint:nth-child(' + slideNumber + ')');
		var newSlideNumber = parseInt(newslide.index()) + 1;
		var newPos = parseInt(slidepoint.slideWidth) * 2;
		//ie++;
		//alert('Slide from '+slidepoint.currentSlide +' to slide '+ newSlideNumber) ;
		if(slidepoint.currentSlide < slideNumber){
			//alert('go 1');
			//# Then Slide Both Left
			$(newslide).css('left', newPos);
			//# Animate New Slide
			$(newslide).animate({
				left: [slidepoint.slideWidth],
				opacity: 1
				}, slidepoint.slideTime );
			//# Animate Current Slide
			$(curslide).animate({
				left: [0],
				opacity: 0
				}, slidepoint.slideTime, 'linear', function(){
					if(typeof callback === 'function')
						callback();
				});
			
		}
		if(slidepoint.currentSlide > slideNumber){
			//console.log('sliding right');
			//alert('go 2');
			//# Then Slide Both Right
			$(newslide).css('left', 0);
			//# Animate New Slide
			
			$(newslide).animate({
				left: [slidepoint.slideWidth],
				opacity: 1
				}, slidepoint.slideTime );
			
			//# Animate Current Slide
			$(curslide).animate({
				left: [newPos],
				opacity: 0
				}, slidepoint.slideTime, 'linear', function(){
					if(typeof callback === 'function')
						callback();
				});
			
		}
		//#########################
		//# Change Slide Number
		slidepoint.currentSlide = slideNumber;
		
	}
	
	slidepoint.slideLeft = function(callback){
		if(typeof callback !== 'function'){
			callback = function(){}
		}
		if(slidepoint.currentSlide > 1){
			slidepoint.showSlide(slidepoint.currentSlide-1, callback);
		}else{
			if(slidepoint.enableCircle === true){
				slidepoint.slideBack(callback);
			}
		}
	}
	slidepoint.slideRight = function(callback){
		if(typeof callback !== 'function'){
			callback = function(){}
		}
		if(slidepoint.currentSlide < slidepoint.totalSlides){
			slidepoint.showSlide(slidepoint.currentSlide+1, callback);
		}else{
			if(slidepoint.enableCircle === true){
				slidepoint.slideAround(callback);
			}
		}
	}
	slidepoint.slideTo = function(slideNumber){
		slidepoint.showSlide(slideNumber);
	}
	slidepoint.autoSlide = function(data){
		
		if(typeof data === 'undefined'){
			var data = {};
		}
		
		var slidepoint = this;
		slidepoint.stasis= data.stasis || slidepoint.stasis;
		slidepoint.refresh= data.refresh || slidepoint.refresh;
		slidepoint.enableCircle = data.enableCircle || slidepoint.enableCircle;
		
		slidepoint.checkState = function(){
			if(slidepoint.state === 'stop'){
				return false;
			}
			if(slidepoint.state === 'start'){
				//# change the state (prevents any other action from occuring based on the state)
				slidepoint.state = 'stepone';
				setTimeout(function(){ slidepoint.slideRight(function(){ 
					if(slidepoint.checkLast() === false){
						slidepoint.state = 'start';
					}else{
						//console.log('last slide');
						slidepoint.state = 'last';
					}
				  })}, slidepoint.stasis);
			}
			if(slidepoint.state === 'last'){
				//# change the state
				slidepoint.state = 'flip';
				setTimeout(function(){ 
					slidepoint.slideAround(function(){
						slidepoint.state = 'start';
					});
				},
				slidepoint.stasis);
			}
			
		}
	if(slidepoint.enableArrows === true){
		$('#slide2Left').click(function(){
			slidepoint.slideLeft();
		});
		
		$('#slide2Right').click(function(){
			slidepoint.slideRight();
			
		});
	}
	
	if(slidepoint.enableTouch == true) {
		$(".slidePoint").touchwipe({
		 wipeLeft: function() { 	
			document.documentElement.addEventListener('touchmove', function(e) { return e.returnValue = false; } );
			slidepoint.slideRight(); 
		 },
		 wipeRight: function() { 	 
			document.documentElement.addEventListener('touchmove', function(e) { return e.returnValue = false; } );
			slidepoint.slideLeft();
		 },
		 min_move_x: 75,
		 preventDefaultEvents: false
		});
	}
	
	if(slidepoint.enableKeyPress === true){
		$(document).keydown(function(e){
			 if(e.keyCode == 37){ 
				 //alert( "left pressed" );
				slidepoint.slideLeft();
				return false;
			 }
			 if(e.keyCode == 39){ 
				 //alert( "rigt pressed" );
				slidepoint.slideRight();
				return false;
			 }
		});
	}

	//# Slide Reference Tool
	if(slidepoint.enableNumbers === true){

		for(var i = 1; i < (slidepoint.totalSlides+1); i++){
			$('#slideReference').append('<div class="slideNumber">'+i+'</div>');
		}
		$('.slideNumber').click(function(){
			slidepoint.slideTo($(this).html());
		});
	}
	
	
		
		slidepoint.goRight = function(){
			slidepoint.slideRight();
			slidepoint.checkLast();
		}
		slidepoint.changeState = function(state){
			slidepoint.state = state;
		}
		slidepoint.checkLast = function(){
			if(slidepoint.currentSlide === slidepoint.totalSlides){
				return true;
			}
			return false;
		}
		if(slidepoint.totalSlides > 1){
			slidepoint.intervalID = setInterval("slidepoint.checkState()", slidepoint.refresh);
		}
	}
	
	return slidepoint;
}	
/*
//### Example Starter
$(document).ready(function(){	
	slidepoint = slidePoint();
	slidepoint.autoSlide({
		stasis: 2000,
		refresh: 200,
		slideTime: 500
	});
});
//*/
