/**
 * @author msandow
 */

$.fn.powerPoint = function(options){	
	
	var powerpoint = new Object();
	powerpoint.defaults = {
        'delay': 3000
    };
    
	$.extend(powerpoint.defaults, options);
	
    powerpoint.called = $(this);
	powerpoint.targets = powerpoint.called.children().not('.powerPointControls');
    powerpoint.width = powerpoint.called.width();
	powerpoint.height = powerpoint.called.height();
	
	if (powerpoint.targets.length > 1) {
	
		powerpoint.targets.css({
			'position': 'absolute',
			'top': '0px',
			'left': '0px'
		}).show().each(function(){
			$(this).prependTo(powerpoint.called);
		});
		
		powerpoint.anchorStops = (powerpoint.width - 100) / powerpoint.targets.length;
		
		powerpoint.scrollAnchor = $('<div></div>').css({
			'position': 'absolute',
			'left': '50px',
			'height': '13px',
			'top': '15px',
			'width': (powerpoint.anchorStops - 2) + 'px',
			'background': 'transparent url("img/powerpoint_anchor.gif") top left repeat-x',
			'border': '1px solid #595959',
			'text-align': 'center',
			'color': '#595959',
			'padding': '0px'
		});
		
		powerpoint.scrollBar = $('<div></div>').css({
			'position': 'absolute',
			'left': '50px',
			'height': '15px',
			'top': '15px',
			'width': (powerpoint.width - 100) + 'px',
			'background': 'transparent url("img/powerpoint_bar.png") top left repeat'
		});
		
		powerpoint.controls = $('<div></div>').css({
			'position': 'absolute',
			'top': (powerpoint.height - 30) + 'px',
			'left': '0px',
			'width': powerpoint.width + 'px',
			'height': '30px',
			'padding': '0px'
		}).html('<img id="ppcLeft" src="img/powerpoint_left.gif" style="position:absolute;top:0px;left:0px;cursor:pointer;"><img id="ppcRight" src="img/powerpoint_right.gif" style="position:absolute;top:0px;left:' + (powerpoint.width - 50) + 'px;cursor:pointer;">').prepend(powerpoint.scrollBar).append(powerpoint.scrollAnchor).fadeTo(300, 0.3).appendTo(powerpoint.called);
		
		powerpoint.indent = 0;
		
		powerpoint.anchorCheck = function(direction){
			if (direction == 'forward') {
				if (powerpoint.indent < (powerpoint.targets.length - 1)) {
					powerpoint.indent++;
				}
				else {
					powerpoint.indent = 0;
				}
			}
			else {
				if (powerpoint.indent > 0) {
					powerpoint.indent--;
				}
				else {
					powerpoint.indent = powerpoint.targets.length - 1;
				}
			}
			$(powerpoint.scrollAnchor).animate({
				'left': ((powerpoint.anchorStops * powerpoint.indent) + 50) + 'px'
			}, 500);
		};
		
		powerpoint.autoscroll = function(){
			powerpoint.tempOrder = powerpoint.called.children().not(powerpoint.controls);
			powerpoint.activeSlide = powerpoint.tempOrder.get(powerpoint.targets.length - 1);
			$(powerpoint.activeSlide).fadeOut(500, function(){
				$(this).prependTo(powerpoint.called).show()
			});
			powerpoint.anchorCheck('forward');
		};
		
		powerpoint.startAuto = setInterval(function(){
			powerpoint.autoscroll();
		}, powerpoint.defaults.delay);
		
		$('#ppcLeft,#ppcRight').bind('mouseenter', function(){
			$(powerpoint.controls).fadeTo(300, 1.0);
		}).bind('mouseleave', function(){
			$(powerpoint.controls).fadeTo(300, 0.3);
		});
		
		
		powerpoint.prevSlide = function(){
			powerpoint.tempOrder = powerpoint.called.children().not(powerpoint.controls);
			powerpoint.activeSlide = powerpoint.tempOrder.get(powerpoint.targets.length - 1);
			powerpoint.requestedSlide = powerpoint.tempOrder.get(0);
			
			$(powerpoint.requestedSlide).insertBefore(powerpoint.activeSlide);
			
			$(powerpoint.activeSlide).fadeOut(500, function(){
				$(this).insertBefore(powerpoint.requestedSlide).show()
			});
			powerpoint.anchorCheck('backward');
			powerpoint.restart = setTimeout(function(){
				powerpoint.startAuto = setInterval(function(){
					powerpoint.autoscroll();
				}, powerpoint.defaults.delay);
			}, 15000);
		};
		
		powerpoint.nextSlide = function(){
			powerpoint.tempOrder = powerpoint.called.children().not(powerpoint.controls);
			powerpoint.activeSlide = powerpoint.tempOrder.get(powerpoint.targets.length - 1);
			$(powerpoint.activeSlide).fadeOut(500, function(){
				$(this).prependTo(powerpoint.called).show()
			});
			powerpoint.anchorCheck('forward');
			powerpoint.restart = setTimeout(function(){
				powerpoint.startAuto = setInterval(function(){
					powerpoint.autoscroll();
				}, powerpoint.defaults.delay);
			}, 15000);
		};
		
		powerpoint.tempOrder = powerpoint.called.children().not(powerpoint.controls);
		powerpoint.activeSlide = powerpoint.tempOrder.get(powerpoint.targets.length - 1);
		
		$('#ppcLeft').bind('click', function(){
			if ($(powerpoint.activeSlide).is(':not(:animated)')) {
				clearInterval(powerpoint.startAuto);
				clearInterval(powerpoint.restart);
				powerpoint.prevSlide();
			}
		});
		
		$('#ppcRight').bind('click', function(){
			if ($(powerpoint.activeSlide).is(':not(:animated)')) {
				clearInterval(powerpoint.startAuto);
				clearInterval(powerpoint.restart);
				powerpoint.nextSlide();
			}
		});
		
		/*
		$(powerpoint.scrollAnchor).bind('mousedown', function(){
			$(powerpoint.controls).bind('mousemove', function(e){
				powerpoint.parentOffset = powerpoint.controls.offset();
				powerpoint.clientCoords = e.pageX - Math.floor(powerpoint.parentOffset.left) - 50;
				if (powerpoint.clientCoords > 0 && powerpoint.clientCoords < (powerpoint.width - 100)) {
					$('#echo').text("(" + powerpoint.clientCoords + ")");
				}
			});
		});
		
		$(powerpoint.controls).bind('mouseup',function(){
			$(powerpoint.controls).unbind('mousemove');
		});
		*/
		
	}
};
