/*
 jQuery dScroll 1.2
 2010-10-01
*/
(function($){
	jQuery.fn.dScroll = function(defaults){
		var opts = $.extend({},$.dScroll.defaults,defaults);
		return this.each(function(i){
			$.dScroll.init(opts,$(this));
		});
	}
	$.dScroll = {
		init: function(opts,sContainer){
			$.dScroll.done = true;
			/* Bestandteile ermitteln */
			var data = new Object();
			var interval;
			data['sContainer'] = sContainer;
			data['sArea'] = data['sContainer'].find(opts.pluginClass+'-area');
			data['sContent'] = data['sContainer'].find(opts.pluginClass+'-content');
			data['sNavigation'] = data['sContainer'].find(opts.pluginClass+'-navigation');
			data['sLabel'] = data['sContainer'].find(opts.pluginClass+'-navigation '+opts.pluginClass+'-label');;
			data['sControls'] = data['sContainer'].find(opts.pluginClass+'-navigation '+opts.pluginClass+'-controls');
			/* richtungsabhängig Daten auslesen */
			if(opts.direction == 'horizontal'){
				data['sAreaWidth'] = data['sArea'].width();
				data['sContentWidth'] = data['sContent'].width()-opts.offset;
				data['pages'] = Math.ceil(data['sContentWidth']/(data['sAreaWidth']+opts.offset));
			}else if(opts.direction == 'vertical'){
				data['sAreaHeight'] = data['sArea'].height();
				data['sContentHeight'] = data['sContent'].height()-opts.offset;
				data['pages'] = Math.ceil(data['sContentHeight']/(data['sAreaHeight']+opts.offset));
			}
			/* Label/Kontrollelemente anzeigen */
			if(data['pages'] > 1){
				data['sLabel'].show();
				data['sControls'].show();
			}
			/* Erster Durchlauf */
			$.dScroll.controller(data,opts,0);
			/* Events an Kontrollelemente binden */
			data['sControls'].find('a').unbind();
			data['sControls'].find('a').bind({
				click: function(){
					var multi = ($(this).attr('rel') == 'prev')?-1:1;
					$.dScroll.controller(data,opts,multi)
					return false;
				}
			});
		},
		controller: function(data,opts,multi){
			if($.dScroll.done){
				var disabledClass = 'disabled';
				if(opts.direction == 'horizontal'){
					var maxLeft = data['sContentWidth']*-1;
					var aktLeft = parseInt(data['sContent'].css('left'));
					var left = aktLeft-((data['sAreaWidth']+opts.offset)*multi);
					if(left <= 0 && left > maxLeft){
						$.dScroll.done = false;
						data['sContent'].animate({
							left: left+'px'
						},opts.speed,function(){
							$.dScroll.done = true;
							var page = (left*-1)/(data['sAreaWidth']+opts.offset)+1;
							if(opts.labelText != ''){
								var labelText = opts.labelText;
								labelText = labelText.replace('%i',page);
								labelText = labelText.replace('%n',data['pages']);
								data['sLabel'].text(labelText);
							}
							if(page == 1)
								data['sControls'].find(opts.pluginClass+'-prev').addClass(disabledClass);
							else
								data['sControls'].find(opts.pluginClass+'-prev').removeClass(disabledClass);
							if(page == data['pages'])
								data['sControls'].find(opts.pluginClass+'-next').addClass(disabledClass);
							else
								data['sControls'].find(opts.pluginClass+'-next').removeClass(disabledClass);
						});
					}
				}else if(opts.direction == 'vertical'){
					var maxTop = data['sContentHeight']*-1;
					var aktTop = parseInt(data['sContent'].css('top'));
					var top = aktTop-((data['sAreaHeight']+opts.offset)*multi);
					if(top <= 0 && top > maxTop){
						$.dScroll.done = false;
						data['sContent'].animate({
							top: top+'px'
						},opts.speed,function(){
							$.dScroll.done = true;
							var page = (top*-1)/(data['sAreaHeight']+opts.offset)+1;
							if(opts.labelText != ''){
								var labelText = opts.labelText;
								labelText = labelText.replace('%i',page);
								labelText = labelText.replace('%n',data['pages']);
								data['sLabel'].text(labelText);
							}
							if(page == 1)
								data['sControls'].find(opts.pluginClass+'-prev').addClass(disabledClass);
							else
								data['sControls'].find(opts.pluginClass+'-prev').removeClass(disabledClass);
							if(page == data['pages'])
								data['sControls'].find(opts.pluginClass+'-next').addClass(disabledClass);
							else
								data['sControls'].find(opts.pluginClass+'-next').removeClass(disabledClass);
						});
					}
				}
			}
		},
		defaults: {
			direction	: 'horizontal',
			labelText	: '',
			offset		: 0,
			pluginClass	: '.dscroll',
			speed		: 'normal'
		}
	}
})(jQuery);
