var DataWheel={

	speed:500,
	bounces:3,
	loop:true,
	cellWidth:0,
	data:null,
	gotData:false,
	isSliding:false,
	isPreloaded:false,
	imgLoaded:[],
	feedFile:'',
	mediaPath:'',
	displayID:'',
	loadingID:'',
	numImages:0,
	currID:0,
	preload:0,
	loadImgTimeout:null,
	loadImgTime:1000,

	init:function(){
		if(DataWheel.speed<10){ alert('Speed should be set to a higher number');return false; }
		if(isNaN(DataWheel.cellWidth) || DataWheel.cellWidth<=0){ alert('Cell width must be specified');return false; }
		if(DataWheel.displayID==''){ alert('No display element specified');return false; }
		if(DataWheel.loadingID==''){ alert('No loading element specified');return false; }
		$('#'+DataWheel.displayID).empty().append('<div id="'+DataWheel.displayID+'_panels"></div>');
		var theme=parseInt(arguments[0]);
		theme=isNaN(theme)?0:theme;
		DataWheel.loadData(theme);
	},

	reinit:function(){
		DataWheel.isSliding=false;
		DataWheel.imgLoaded=[];
		DataWheel.numImages=0;
		DataWheel.currID=0;
		DataWheel.init(arguments[0]);
	},

	loadData:function(theme){
		var imid=parseInt($.cookie('TH_SESS_IMGID')?$.cookie('TH_SESS_IMGID'):$.cookie('TH_IMGID'));
		imid=isNaN(imid)?0:imid;
		var param={'tid':theme,'imid':imid}
		DataWheel.data=null;
		DataWheel.gotData=false;
		$.getJSON(
			DataWheel.feedFile,
			param,
			function(data){
				if(data){
					DataWheel.data=data;
					DataWheel.gotData=true;
					DataWheel.numImages=data.images.length;
					$('#'+DataWheel.displayID+'_panels').css({"width":((DataWheel.data.images.length+1) * DataWheel.cellWidth)+"px"});
					DataWheel.processData();
					DataWheel.currID=0;
				}else{
					clearTimeout(DataWheel.loadImgTimeout);
					$('#'+DataWheel.loadingID).hide();
				}
			}
		);
	},

	processData:function(){
		$('#'+DataWheel.displayID+'_panels').empty();
		DataWheel.displayImages();
		DataWheel.loadImages();
		DataWheel.displayText();
	},

	loadImages:function(){
		DataWheel.loadImgTimeout=setTimeout(function(){
			$('#'+DataWheel.loadingID).show();
		},DataWheel.loadImgTime);
		DataWheel.isPreloaded=false;
		DataWheel.imgLoaded=[];
		$.cookie('TH_SESS_IMGID',DataWheel.data.images[DataWheel.currID].id,{domain:'',path:'/'});
		if(DataWheel.currID<DataWheel.numImages-1) $.cookie('TH_IMGID',DataWheel.data.images[DataWheel.currID+1].id,{expires:365,domain:'',path:'/'});
		else $.cookie('TH_IMGID',DataWheel.data.images[0].id,{expires:365,domain:'',path:'/'});
		var loadImg=[];
		var keys=[];
		if(DataWheel.loop){
			if(DataWheel.currID==0){
				keys.push(DataWheel.numImages-1);
			}else if(DataWheel.currID>=DataWheel.numImages-1){
				keys.push(0);
			}
		}
		$.each(DataWheel.data.images,function(key,val){
			if((key<=DataWheel.currID+DataWheel.preload && key>=DataWheel.currID-DataWheel.preload) || jQuery.inArray(key,keys)>=0){
				loadImg[key]=new Image();
				$(loadImg[key]).attr("src",DataWheel.mediaPath+val.images.home).load(function(){
					DataWheel.imgLoaded[key]=true;
					DataWheel.checkLoaded();
				});
				if(loadImg[key].complete){
					DataWheel.imgLoaded[key]=true;
					DataWheel.checkLoaded();
				}
				$('#'+DataWheel.displayID+'_panels :nth-child('+(key+1)+')').attr({style:"background-image:url("+DataWheel.mediaPath+val.images.home+");"});
			}else{
				DataWheel.imgLoaded[key]=true;
			}
		});
	},

	displayImages:function(){
		$.each(DataWheel.data.images,function(key,val){
			$('#'+DataWheel.displayID+'_panels').append("\n\t\t<div class='"+DataWheel.displayID+"_panel'></div>");
		});
	},

	displayText:function(){
		if(DataWheel.data.images[DataWheel.currID].title.length>0){
			$('#info_title').html(DataWheel.data.images[DataWheel.currID].title);
			$('#info_text').html(DataWheel.data.images[DataWheel.currID].text);
		}else{
			$('#info_title').html(DataWheel.data.title);
			$('#info_text').html(DataWheel.data.text);
		}
	},

	hideText:function(){
//		$('#info_title').fadeOut();
//		$('#info_text').fadeOut();
	},

	step:function(steps){
		if(DataWheel.fullyLoaded()){
			if(DataWheel.loop && Math.abs(steps)>1){
				alert('Multiple steps cannot be used whilst looping is switched on');
			}
			var realsteps=DataWheel.getStepCount(steps);
			var dist=realsteps * DataWheel.cellWidth;
			if(realsteps>0){
				if(steps>0){
					dist='-='+dist;
					DataWheel.currID+=realsteps;
				}else{
					dist='+='+dist;
					DataWheel.currID-=realsteps;
				}
				DataWheel.hideText();
				DataWheel.scroll(dist);
				DataWheel.loadImages();
			}else{
				if(DataWheel.loop){
					DataWheel.hideText();
					if(steps<0){
						$('#'+DataWheel.displayID+'_panels').css({"left":"-"+DataWheel.cellWidth+"px"}).prepend("\n\t\t<div class='"+DataWheel.displayID+"_panel'></div>");
						$('#'+DataWheel.displayID+'_panels :first-child').attr({style:"background-image:url("+DataWheel.mediaPath+DataWheel.data.images[DataWheel.numImages-1].images.home+");"});
						dist='+='+DataWheel.cellWidth;
						DataWheel.currID=DataWheel.numImages-1;
						DataWheel.scrollLoop(dist,DataWheel.numImages-1,':first-child');
					}else{
						$('#'+DataWheel.displayID+'_panels').append("\n\t\t<div class='"+DataWheel.displayID+"_panel'></div>");
						$('#'+DataWheel.displayID+'_panels :last-child').attr({style:"background-image:url("+DataWheel.mediaPath+DataWheel.data.images[0].images.home+");"});
						dist='-='+DataWheel.cellWidth;
						DataWheel.currID=0;
						DataWheel.scrollLoop(dist,0,':last-child');
					}
				}else{
					if(steps>0)
						dir='left';
					else
						dir='right';
					DataWheel.scrollFail(dir);
				}
			}
		}
	},

	getStepCount:function(steps){
		if(steps<0)
			maxsteps=DataWheel.currID;
		else
			maxsteps=DataWheel.numImages-1-DataWheel.currID;
		return Math.min(maxsteps,Math.abs(steps));
	},

	scroll:function(dist){
		DataWheel.isSliding=true;
		$('#'+DataWheel.displayID+' #'+DataWheel.displayID+'_panels').animate(
			{left:dist},
			DataWheel.speed,
			function(){
				DataWheel.isSliding=false;
				DataWheel.checkLoaded();
				DataWheel.displayText();
			}
		);
	},

	scrollLoop:function(dist,wid,rem){
		DataWheel.isSliding=true;
		$('#'+DataWheel.displayID+' #'+DataWheel.displayID+'_panels').animate(
			{left:dist},
			DataWheel.speed,
			function(){
				DataWheel.isSliding=false;
				$('#'+DataWheel.displayID+'_panels '+rem).remove();
				$('#'+DataWheel.displayID+'_panels').css({"left":"-"+(DataWheel.cellWidth*(wid))+"px"});
				DataWheel.checkLoaded();
				DataWheel.loadImages();
				DataWheel.displayText();
			}
		);
	},

	scrollFail:function(dir){
		DataWheel.isSliding=true;
		$('#'+DataWheel.displayID+' #'+DataWheel.displayID+'_panels').effect(
			"bounce",
			{direction:dir,times:DataWheel.bounces,distance:100},
			300,
			function(){
				DataWheel.isSliding=false;
			}
		);
	},

	checkLoaded:function(){
		if(!DataWheel.isPreloaded){
			if(DataWheel.imgLoaded.length==DataWheel.numImages){
				DataWheel.isPreloaded=true;
				$.each(DataWheel.imgLoaded,function(key,val){
					if(!val){
						DataWheel.isPreloaded=false;
					}
				});
			}
		}
		if(DataWheel.isPreloaded){
			clearTimeout(DataWheel.loadImgTimeout);
			$('#'+DataWheel.loadingID).hide();
		}
	},

	fullyLoaded:function(){
		if(DataWheel.gotData && DataWheel.isPreloaded && !DataWheel.isSliding){
			return true;
		}
	}

}
