
var slider={
	csszindex: 100,
	setupnav:function(config){
		config.$toc.each(function(index){
				$(this).attr('pagenumber', index+'pg')
			if (index > (config.$contentdivs.length-1))
				$(this).css({display: 'none'}) //hide redundant "toc" links
		})
		config.$toc.click(function(event){ //Assign click behavior to 'toc' links
			slider.slide(config, this.getAttribute('pagenumber'))
			config.pausetimer=config.pause
			event.preventDefault()
		})
		var $nextandprev=$("#"+config.nextprevid+" .next, #"+config.nextprevid+" .prev")
		$nextandprev.click(function(event){ //Assign click behavior to 'next' and 'prev' links
			slider.slide(config, this.getAttribute('loadpage'), this.getAttribute('buttontype'))
			config.pausetimer=config.pause
			event.preventDefault() //cancel default link action
		})
		slider.slide(config, config.selected)
		if (config.autorotate==true){ //auto rotate contents?
			config.stepcount=0 //set steps taken
			config.totalsteps=config.$contentdivs.length*config.autorotateconfig[1] //Total steps limit: num of contents x num of cycles
			slider.autorotate(config)
		}
	},
	
	slide:function(config, showpage, dir){
		var selected=parseInt(showpage)
		if (config.$togglerdiv.attr('lastselected')) {
			var lastselected=parseInt(config.$togglerdiv.attr('lastselected'))
		} else {
			lastselected=selected
		}
		if (selected>=config.$contentdivs.length){ //if no content exists at this index position
			//alert("No content exists at page "+(selected+1)+"! Loading 1st page instead.")
			selected=0
		}
		//direction check
		var fwdback=""
		if(dir=="previous"){
			fwdback="back"
		} else if (dir=="next") {
			fwdback="fwd"
		} else {
			fwdback=(lastselected<selected)? "fwd":"back"
		}
		//Test for toggler not being initialized yet, or user clicks on the currently selected page):
		if (config.$togglerdiv.attr('lastselected')==null || parseInt(config.$togglerdiv.attr('lastselected'))!=selected){
			if (config.animating==false) {
				//alert(config.animating)
				slider.aligncontents(config,lastselected,fwdback)
				var $selectedlink=config.$toc.eq(selected)
				config.$next.attr('loadpage', (selected<config.$contentdivs.length-1)? selected+1 : 0)
				config.$prev.attr('loadpage', (selected==0)? config.$contentdivs.length-1 : selected-1)
				var offset=""
				if(dir=="next"){
					offset=-config.width
				} else if (dir=="previous") {
					offset=config.width
				} else if (fwdback=="fwd") {
					offset=(selected-lastselected)*(-config.width)
				} else {
					offset=(lastselected-selected)*config.width
				}
				for (var i=0; i<=config.$contentdivs.length-1; i++) {
					var $target=config.$contentdivs.eq(i)
					var pos=$target.position().left
					var endpoint={left: pos+offset}
					if (i>=config.$contentdivs.length-1) {
						$target.animate(endpoint, config.speed, function() {
								config.animating=false
						});
					} else {
						$target.animate(endpoint, config.speed)
					}
					//check1+="endpoint: "+endpoint+" offset: "+offset +" i: "+i+"\n"
				}
				config.animating=true
				//alert(check1)
				config.$toc.removeClass('selected')
				$selectedlink.addClass('selected')
				config.$togglerdiv.attr('lastselected', selected+'pg')
			}
		}
	},

	aligncontents:function(config, showpage, dir){
		var selected=parseInt(showpage)
		if (config.$togglerdiv.attr('lastselected')) {
			var lastselected=parseInt(config.$togglerdiv.attr('lastselected'))
		} else {
			lastselected=showpage
		}
		var items = new Array()
		items[0]=lastselected
		var check=""
		for (var i=1; i<=config.$contentdivs.length; i++) {
			if(dir=="back") {
				items[i]=((lastselected-i+config.$contentdivs.length)%(config.$contentdivs.length))
				config.$contentdivs.eq(items[i-1]).css("left", (i-1)*(-config.width))
			} else {
				items[i]=((lastselected+i)%(config.$contentdivs.length))
				config.$contentdivs.eq(items[i-1]).css("left", (i-1)*config.width)
			}
			
			check+= "pos: "+(i-1)*config.width+" item: "+items[i-1]+" i: "+i+"\n"
		}
		//alert("dir: "+dir+"\n"+check+"\nlast: "+lastselected+"\nnext: "+selected)
		//alert(check+"\n lastselected: "+lastselected+"\n selected: "+selected+"\n dir: "+dir);	
	},
	
	autorotate:function(config){
		var rotatespeed=config.speed+config.autorotateconfig[0]
		window[config.togglerid+"timer"]=setInterval(function(){
			if (config.totalsteps>0 && config.stepcount>=config.totalsteps){
				clearInterval(window[config.togglerid+"timer"])
			}	else {
				if (config.pausetimer>0) {
					config.pausetimer--
				} else {
					var selected = parseInt(config.$togglerdiv.attr('lastselected'))
					var page=(selected<config.$contentdivs.length-1)? selected+1 : 0
					//config.$next.click()
					slider.slide(config, page, "next")
					config.stepcount++
				}
			}
		}, rotatespeed)
	},
	
	init:function(config){
		$(document).ready(function(){
			config.$sliderid=$("#"+config.sliderid)
			//config.$togglerdiv=$("#"+config.togglerid)
			config.$togglerdiv=$("#"+config.sliderid)
			config.$nextprevdiv=$("#"+config.nextprevid)
			config.$toc=config.$togglerdiv.children('.toc')
			config.$next=config.$nextprevdiv.children('.next')
			config.$prev=config.$nextprevdiv.children('.prev')
			config.$next.attr('buttontype', 'next')
			config.$prev.attr('buttontype', 'previous')
			var selected=config.selected
			config.selected=(isNaN(parseInt(selected))) ? config.selected : selected
			config.width=config.$sliderid.width()
			config.animating=false
			config.pausetimer=0
			config.$contentdivs=$("#"+config.sliderid+" ."+config.contentclass)
			slider.setupnav(config)
		})
	}
}
