/* =========================================================
// jquery.panorama.js
========================================================= */
(function($) {
	$.fn.panorama = function(options) {
	
		this.each(function(){ 
			var settings = {
				viewport_width: 430,
				viewport_height: 300,
				speed: 30000,
				direction: 'left',
				control_display: 'auto',
				start_position: 0,
				auto_start: true,
				mode_360: true
			};
			
			if(options) $.extend(settings, options);
		
			var elemWidth = parseInt($(this).attr('width'));
			var elemHeight = parseInt($(this).attr('height'));
			var currentElement = this;
			var panoramaViewport, panoramaContainer;
					

			$(this).css('position', 'relative')
				.css('margin', '0')
				.css('padding', '0')
				.css('border', 'none')
				.wrap("<div class='panorama-container'></div>");
			
			if (settings.mode_360) 
				$(this).clone().insertAfter(this);
			
			panoramaContainer = $(this).parent();
			panoramaContainer.wrap("<div class='panorama-viewport'></div>").parent().css({width : settings.viewport_width+'px', height : settings.viewport_height+'px'})
				.append("<div class='panorama-control'><a href='#' class='panorama-control-pause'>STOP</a><a href='#' class='panorama-control-left'>LEFT</a><a href='#' class='panorama-control-right'>RIGHT</a><a href='#' class='panorama-control-down'>UP</a><a href='#' class='panorama-control-up'>DOWN</a></div>");
			
			panoramaViewport = panoramaContainer.parent();

			panoramaViewport.find('a.panorama-control-left').bind('click', function() {
				$(panoramaContainer).stop();
				settings.direction = 'right';
				panorama_animate(panoramaContainer, elemWidth, elemHeight, settings);
				return false;
			});
			panoramaViewport.bind('click', function() {
				$(panoramaContainer).stop();
			});
			panoramaViewport.find('a.panorama-control-right').bind('click', function() {
				$(panoramaContainer).stop();
				settings.direction = 'left';
				panorama_animate(panoramaContainer, elemWidth, elemHeight, settings);
				return false;
			});
			panoramaViewport.find('a.panorama-control-pause').bind('click', function() {
				$(panoramaContainer).stop();
				return false;
			});
			panoramaViewport.find('a.panorama-control-up').bind('click', function() {
				$(panoramaContainer).stop();
				settings.direction = 'up';
				panorama_animate(panoramaContainer, elemWidth, elemHeight, settings);
				return false;
			});
			panoramaViewport.find('a.panorama-control-down').bind('click', function() {
				$(panoramaContainer).stop();
				settings.direction = 'down';
				panorama_animate(panoramaContainer, elemWidth, elemHeight, settings);
				return false;
			});
			
			if (settings.control_display == 'yes') {
				panoramaViewport.find('.panorama-control').show();
			} else {
				panoramaViewport.bind('mouseover', function(){
					$(this).find('.panorama-control').show();
					return false;
				}).bind('mouseout', function(){
					$(this).find('.panorama-control').hide();
					return false;
				});
				
			}
		
			$(this).parent().css('margin-left', '-'+settings.start_position+'px');

			if (settings.auto_start) 
				panorama_animate(panoramaContainer, elemWidth, elemHeight, settings);
			
		});
		
		function panorama_animate(element, elemWidth, elemHeight, settings) {
			currentPosition = 0-parseInt($(element).css('margin-left'));
			currentPositionUpDown = 0-parseInt($(element).css('margin-top'));
			
			if (settings.direction == 'right') {
			
				$(element).animate({marginLeft: 0}, ((settings.speed / elemWidth) * (currentPosition)) , 'linear', function (){ 
					if (settings.mode_360) {
						$(element).css('marginLeft', '-'+(parseInt(parseInt(elemWidth))+'px'));
						panorama_animate(element, elemWidth, elemHeight, settings);
					}
				});
				
			} else if(settings.direction == 'up') {
			
				var toplimit;
				toplimit = elemHeight-settings.viewport_height;
				$(element).animate({marginTop: -toplimit}, ((settings.speed / toplimit) * (toplimit - currentPositionUpDown))/10 , 'linear', function (){ });
				
			} else if(settings.direction == 'down') {
			
				var toplimit;
				toplimit = elemHeight-(settings.viewport_height+(elemHeight-settings.viewport_height));
				$(element).animate({marginTop: toplimit}, ((settings.speed / elemHeight) * (currentPositionUpDown))/3 , 'linear', function (){ });
				
			} else {
			
				var rightlimit;
				if (settings.mode_360) 
					rightlimit = elemWidth;
				else
					rightlimit = elemWidth-settings.viewport_width;
					
				$(element).animate({marginLeft: -rightlimit}, ((settings.speed / rightlimit) * (rightlimit - currentPosition)), 'linear', function (){ 
					if (settings.mode_360) {
						$(element).css('margin-left', 0); 
						panorama_animate(element, elemWidth, elemHeight, settings);
					}
				});
				
			}
		}
		
	};

$(document).ready(function(){
	$("img.panorama").panorama();
});
})(jQuery);
