/*** @author ikaudenko ***/
 
/*****************************************************************************************

	GENERAL INFO:
	
	slider:			class name of the slider container (string, without '.', default value: 'slider')
	pagination:		show or hide pagination (boolean, default value: true)
	showed:			number of the showed items (integer, default value: 1)
	shift:			slider shift (integer, default value: 1)
	animate:		autosliding (boolean, default value: false)
	animtime:		sliding time animation (integer, default value: 300)
	interval:		sliding interval (integer, default value: 3000)
	easing:			slide method (effect, see all in http://gsgd.co.uk/sandbox/jquery/easing/)
	
*****************************************************************************************/

var $_gallery = {
	slider		: 'slider',
	pagination	: false,
	showed		: 1,
	shift		: 1,
	animate		: false,
	animtime	: 300,
	interval	: 3000,
	easing		: 'linear'
};

var $_gal_dublicate = $_gallery;


function jikSlider($_gallery){

	for(key in $_gal_dublicate) {
		if($_gallery[key]){
			$_gal_dublicate[key] = $_gallery[key];
		}
		//console.log("key is "+[key]+", value is "+$_gal_dublicate[key]);
	}

	$_gallery = $_gal_dublicate;
	
	var slider = jQuery('.'+$_gallery.slider);
	
	var $_slider = {
		inner	: slider.find('.slider-inner'),
		ul		: slider.find('ul'),
		li		: slider.find('li'),
		licount : slider.find('li').length,
		prev	: slider.find('.prev'),
		next	: slider.find('.next'),
		innerW  : 0,
		framerW : 0
	}
	
	function calculateWidth(){
		for(var i=0; i<=$_slider.licount-1; i++){
			if(i<$_gallery.showed) $_slider.framerW = $_slider.framerW + jQuery($_slider.li[i]).outerWidth(true);
			$_slider.innerW = $_slider.innerW + jQuery($_slider.li[i]).outerWidth(true);
		}
		if($_slider.li.css('marginLeft') || $_slider.li.css('marginLeft')){
			$_slider.framerW = $_slider.framerW - parseInt($_slider.li.css('marginLeft'))-parseInt($_slider.li.css('marginRight'));
		}
		$_slider.inner.css({ width: $_slider.framerW });
		$_slider.ul.css({ width: $_slider.innerW });
	}
		
	calculateWidth();
	
	if($_slider.licount > $_gallery.showed){
	
		if ($_gallery.pagination) {
			if(!$_slider.prev.length || !$_slider.next.length){
				slider.append('<span class="prev" /><span class="next" />');
				$_slider.prev = slider.find('.prev');
				$_slider.next = slider.find('.next');
			}
		}
		
		var slideInterval,
			newshift = $_gallery.shift,
			tmp = 0,
			trigger = true;
		
		function slide(dir, animate){
			if(trigger){
				trigger = false;
				if(dir == 'next' && !animate){
					if(slideInterval) { reloadInterval(); }
					if( tmp < ($_slider.licount - $_gallery.showed) ){
						if( ($_slider.licount - tmp - $_gallery.showed) < $_gallery.shift ) { newshift = $_slider.licount - tmp - $_gallery.showed; }
						$_slider.ul.animate({ left: '+='+(-$_slider.li.outerWidth(true)*newshift) }, $_gallery.animtime, $_gallery.easing, function(){ trigger = true; });
						tmp = tmp + newshift;
					}else{ trigger = true; }
				}else if(dir == 'next' && animate){
					if( tmp < ($_slider.licount - $_gallery.showed) ){
						if( ($_slider.licount - tmp - $_gallery.showed) < $_gallery.shift ) { newshift = $_slider.licount - tmp - $_gallery.showed; }
						$_slider.ul.animate({ left: '+='+(-$_slider.li.outerWidth(true)*newshift) }, $_gallery.animtime, $_gallery.easing, function(){ trigger = true; });
						tmp = tmp + newshift;
					}else{
						$_slider.ul.animate({ left: 0 }, $_gallery.animtime, $_gallery.easing, function(){
							tmp = 0;
							newshift = $_gallery.shift;
							trigger = true;
						});
					}
				}else if(dir == 'prev'){
					if(slideInterval) { reloadInterval(); }
					if(tmp > 0){
						if( (tmp) < $_gallery.shift ) { newshift = tmp; } else { newshift = $_gallery.shift; }
						$_slider.ul.animate({ left: '+='+($_slider.li.outerWidth(true)*newshift) }, $_gallery.animtime, $_gallery.easing, function(){ trigger = true; });
						tmp = tmp - newshift;
					}else{ trigger = true; }
				}
			}
		}
		
		function reloadInterval(){
			clearInterval(slideInterval);
			slideInterval = setInterval(function(){
				slide('next', true);
			},$_gallery.interval);
		}
		
		function runInterval(){
			slideInterval = setInterval(function(){
				slide('next', true);
			},$_gallery.interval);
		}
		
		if($_gallery.animate) { runInterval(); }
		
		$_slider.next.bind('click', function(){ slide('next') });
		$_slider.prev.bind('click', function(){ slide('prev') });
	
	}
		
}

