﻿//---------------------------------------------------------------------------------------
// EPIC MEGA SLIDER v0.000000000000000000000000000000000000000000000000000000000000000002
//---------------------------------------------------------------------------------------
var defaultOption = {
	'showArrows': 		true, 			
	'pagerType': 		0, 				//0 - не показывать странички; 1 - <ul><li>; 2 - <table><tr><td>
	'loop': 			true, 			
	'autoChange': 		5000,			//скорость автопрокрутки; -1 - отключить 			
	'animSpeed':		500, 			
	'animType': 		'default',   	
	'textArrowLeft': 	'Назад', 
	'textArrowRight':	'Вперед',
	'startPage': 		0, 
	'blocksNum' : 		5,
	'fixedWidth':		0,
	'borderPadding' : 	0				//ширина пространства между страницами, как-то так
}


//	инициализация																
var jsSlider = function(s,p) {
	
	var eNum = 0;
	for (i=0;i<=s.length-1;i+=1) {

		var selector = s[i]
		var option = p[selector]	
		
		$(selector).data({'option':option}).data({'page':(option.startPage||defaultOption.startPage)}).addClass('jsSliderMain').each(function(){
			$(this).attr('sliderid', 'jss'+eNum)
			eNum += 1
			$(this).wrap('<div class="jsSliderOuter"></div>')
			$(this).wrapInner('<div class="jsSliderInner" style="position:relative"></div>')
			var parent = $(this).parent('.jsSliderOuter')
			var inner = $(this).children('.jsSliderInner')
			inner.children('li').wrap('<div class="jsSliderBlock" style="position:absolute"></div>')
			var blocks = inner.children('.jsSliderBlock').children('li')
			
			
			//ширина
			if ((option.fixedWidth||defaultOption.fixedWidth)==0) {
			
				$(window).resize(function(){
					jsSliderUpdate(parent,option)
				})
				
			} else {
				$(parent).width($(parent).children('.jsSliderMain').outerWidth(true))
			}
			
			// стрелочки
			if ( option.showArrows==true||(option.showArrows!==false&&defaultOption.showArrows==true) ) {
				$('<ul class="jsSliderArrows"><li class="jsSliderArrowLeft"><a href="#">'+(option.textArrowLeft||defaultOption.textArrowLeft)+'<i></i></a></li><li class="jsSliderArrowRight"><a href="#">'+(option.textArrowRight||defaultOption.textArrowRight)+'<i></i></a></li></ul>').appendTo($(this))
			}
			
			jsSliderPager($(this),option)
			
			jsSliderUpdate(parent,option)
			
			jsSliderChange($(this),parseInt($(this).data('page')))
		
		})

	}


	$('.jsSliderPage a').live('click', function(){
		jsSliderChange($(this).parents('.jsSliderPage'),$(this).parents('.jsSliderPage').index())
		return false;
	})

	$('.jsSliderArrowLeft a').live('click', function(){
		var parent = $(this).parents('.jsSliderOuter').children('.jsSliderMain')
		jsSliderChange($(this).parents('.jsSliderArrowLeft'),parseInt(parent.data('page'))-1)
		return false;
	})

	$('.jsSliderArrowRight a').live('click', function(){
		var parent = $(this).parents('.jsSliderOuter').children('.jsSliderMain')
		jsSliderChange($(this).parents('.jsSliderArrowRight'),parseInt(parent.data('page'))+1)
		return false;
	})
	
}
//таймер
var jsSliderTimeout = [];
var jsSliderTimer = function(timerSpeed,parent) {
	var option = parent.data('option')
	jsSliderTimeout[parent.attr('sliderid')] = setTimeout( 
		function(){
			jsSliderChange(parent,parseInt(parent.data('page'))+1)
		},
		timerSpeed 
	)
}

//	обновление
var jsSliderUpdate = function(parent,option) {
	var elm = parent.children('.jsSliderMain');
	var option = elm.data('option')
	var mainWidth = elm.children('.jsSliderInner').innerWidth();
	var blocks = elm.children('.jsSliderInner').children('.jsSliderBlock');
	var blockWidth = Math.floor(mainWidth/(option.blocksNum||defaultOption.blocksNum));
	var pos = elm.data('page')*(option.blocksNum||defaultOption.blocksNum)
	blocks.width(blockWidth).each(function(){
	
		var ind=$(this).index()
		
		var leftStyle = (blockWidth*(ind-pos))
		if (leftStyle+blocks.width() > mainWidth)
			leftStyle+= parseInt(elm.css('padding-right'))+(option.borderPadding||defaultOption.borderPadding)
		if (leftStyle < 0)
			leftStyle-= parseInt(elm.css('padding-left'))+(option.borderPadding||defaultOption.borderPadding)
		
		var style = { left: leftStyle }
		$(this).css(style)
		
	});
}

//	создание переключалки страниц
var jsSliderPager = function(parent,option) {

	var active = parent.data('page')
	if (parent.parent('.jsSliderOuter').find('.jsSliderPage').filter('.active').length > 0)
	active = parent.parent('.jsSliderOuter').find('.jsSliderPage').filter('.active').first().index()
	
	var blocks = parent.children('.jsSliderInner').children('.jsSliderBlock')
	parent.parent('.jsSliderOuter').find('.jsSliderPager').remove()
	
			if ((option.blocksNum||defaultOption.blocksNum)!='auto') {
				var pageNum = Math.ceil(blocks.length / (option.blocksNum||defaultOption.blocksNum))
			}
			else {
				var width = 0;
				for (t=0;t<blocks.length;t+=1) {
					width += parseInt(blocks.eq(t).innerWidth())
				}
				var pageNum = Math.ceil(width/inner.width())
			}
			if ((option.pagerType||defaultOption.pagerType)!=0)
			{
				var element;
				var appendpath;
				if ((option.pagerType||defaultOption.pagerType)==1) {
					element = {
						'body':'<ul class="jsSliderPager"></ul>',
						'open':'<li class="jsSliderPage"><a href="#"><span>',
						'close':'</span></a></li>'
					}
					appendpath = '.jsSliderPager'
				}
				if ((option.pagerType||defaultOption.pagerType)==2) {
					element = {
						'body':'<div class="jsSliderPager"><table><tr></tr></table></div>',
						'open':'<td class="jsSliderPage"><a href="#"><span>',
						'close':'</span></a></td>'
					}
					appendpath = '.jsSliderPager tbody tr'
					
				}
				
				$(element.body).appendTo(parent)
				for (t=1;t<=pageNum;t+=1) {
					parent.find(appendpath).first().append(element.open+t+element.close)
				}
				parent.find(appendpath).first().find('.jsSliderPage').eq(active).addClass('active')
				parent.find(appendpath).first().find('.jsSliderPage').first().addClass('first')
				parent.find(appendpath).first().find('.jsSliderPage').last().addClass('last')
			}
}

//  переключение страниц
var jsSliderChange = function(elm,pos) {
	var parent = elm.parents('.jsSliderOuter')
	var main = parent.children('.jsSliderMain')
	var blocks = main.children('.jsSliderInner').children('.jsSliderBlock');
	var option = main.data('option')
	var mainWidth = main.children('.jsSliderInner').innerWidth();
	var blockWidth = mainWidth/blocks.width();
	
	
	if (pos < 0) {
		pos = ( (blocks.width()*(blocks.length-1))/mainWidth ) }	
		
	if (pos > ( (blocks.width()*(blocks.length-1))/mainWidth ) ) {
		pos = 0 } 
		
	pos=Math.floor(pos)
	
	var currPage = main.data('page')
	main.data({'page':pos})
	
	//if (pos!=currPage) {
		main.data({'page':pos})
				
		var page = pos;
		var pos = pos*(main.data('option').blocksNum||defaultOption.blocksNum)
		main.children('.jsSliderPager').find('.jsSliderPage').removeClass('active').eq(page).addClass('active')
		
		jsSliderAnim(main,pos,main.data('option').animSpeed||defaultOption.animSpeed)
	
	//}
}

//  анимация переключения
var jsSliderAnim = function(parent,pos,speed) {
	var blocks = parent.children('.jsSliderInner').children('.jsSliderBlock');
	var option = parent.data('option')
	var mainWidth = parent.children('.jsSliderInner').innerWidth();
	var blockWidth = Math.floor(mainWidth/(option.blocksNum||defaultOption.blocksNum));
	blocks.each(function(){
		var ind=$(this).index()
		
		var leftStyle = (blockWidth*(ind-pos))
		if (leftStyle+blocks.width() > mainWidth)
			leftStyle+= parseInt(parent.css('padding-right'))+(option.borderPadding||defaultOption.borderPadding)
		if (leftStyle < 0)
			leftStyle-= parseInt(parent.css('padding-left'))+(option.borderPadding||defaultOption.borderPadding)
		
		var style = { left: leftStyle };
		if ((option.autoChange||defaultOption.autoChange) > 0) {
			clearTimeout(jsSliderTimeout[parent.attr('sliderid')])
		}
		$(this).stop().dequeue().animate(style,
		speed,
		function(){
			if ((option.autoChange||defaultOption.autoChange) > 0) {
				clearTimeout(jsSliderTimeout[parent.attr('sliderid')])
				jsSliderTimer((option.autoChange||defaultOption.autoChange),parent)
			}
		})
	})
}

