/*
	File: vertical_slider.js
	Created: 03/01/09
	Created by: Eddy Bennett
	Version: 1.00_jquery
	
	Adds slider functionality for a list of images in a container.
	
	Dependencies: 
	
	 - jquery library
	 - jquery.delegate plugin
	
	Example:
	
	var slider = VerticalSlider('#imageSlider .images','#slideUpCtrl','#slideDwnCtrl',500,'marginTop')
*/

function VerticalSlider(obj,upCtrl,dwnCtrl,slideSpeed,slideInc,scrollProperty) {

	var _startPos = $(obj).css(scrollProperty);
	var _objParentHeight = $(obj).parent().attr('offsetHeight');
	var _slideInc = slideInc;
	var _upCtrl = upCtrl;
	var _dwnCtrl = dwnCtrl;
	var _scrollProperty = scrollProperty;
	var _cssHeight = $(obj).attr('offsetHeight');
	var _scrollDwnLimit = _objParentHeight - _cssHeight;
	var _scrollUpLimit = 0;
	var _slideSpeed = slideSpeed;
	var _currentSlide = 0;
	var _sliding = false;
	
	debug("Start pos: "+_startPos);
	debug("upCtrl: "+$(_upCtrl));
	debug("dwnCtrl: "+$(_dwnCtrl));	
	debug("_scrollDwnLimit: "+_scrollDwnLimit);
	
	$(_upCtrl).click(function(e){ e.preventDefault(); slideUp.call(e.target,e);	}); 
	$(_dwnCtrl).click(function(e){ e.preventDefault(); slideDwn.call(e.target,e); }); 
	
	function slideUp() {

		if(!_sliding) {

			// Get new position from subtracting slide increment 
			// from current
			var newPos = getCurrPos() + _slideInc;
		
			debug("New pos: "+newPos);
		
			if(newPos <= _scrollUpLimit) {
			
				// Slide to new postion		
				slideTo(newPos);
		
				// Increment slide number
				_currentSlide--;		
		
			}
			else {
			
				debug("Left limit reached.");
				slideTo(_scrollUpLimit);
			}
		
		}
				
	}
 	function slideDwn() {
	
		if(!_sliding) {
			
			// Get new position from subtracting slide increment 
			// from current
			var newPos = getCurrPos() - _slideInc;
		
			if(newPos > _scrollDwnLimit) {
			
				// Slide to new postion
				slideTo(newPos);
		
				// Decrement slide number
				_currentSlide++;
		
			}
			else {

				debug("Right limit reached.");
				slideTo(_scrollDwnLimit);
			}
		
		}		
		
	}	
	function slideTo(pos) {
		
		// Create obj to store animation property
		var animateObj = new Object();
		animateObj[_scrollProperty] = pos+"px";
		
		// Set boolean so user can't click more than once per slide
		_sliding = true;
		
	  	// Animate left style attribute to new position
		$(obj).animate(animateObj, _slideSpeed, slideFinished);

	}
	function getCurrPos() {
		
		// Get current left style attribute
		var currPos = $(obj).css(_scrollProperty);
		debug("Current pos: "+currPos);
		
		// Strip px suffix
		var currPos = currPos.substring(0,(currPos.length-2));
		
		// Ouput debug information
		debug("Current pos after strip: "+currPos);
		
		// Return current position
		return parseInt(currPos);		
	}
	function slideFinished() {
		
		debug("Slide finished.");
		// No longer sliding
		_sliding = false;
		
	}
	function debug(str) {
		//alert(str);
		//console.log(str);
	}
}