/* =========================================================
// jquery.panorama.js
// Author: OpenStudio (Arnault PACHOT)
// Mail: apachot@openstudio.fr
// Web: http://www.openstudio.fr
// Copyright (c) 2008 Arnault Pachot
// licence : GPL
// Some adaptions by Henk Groenen
========================================================= */
function Panorama() {
	logit("start Panorama");
	var debug = true;
	var this1 = this;
	var panoramaViewport, panoramaContainer,elemWidth = 600,elemHeight = 450,initial_speed,img_elem;
	var started = false;
	
	var settings = {
		viewport_width: 600,
		speed: 50000,
		direction: 'left',
		control_display: 'auto',
		start_position: 0,
		auto_start: true,
		mode_360: true
	};
	this.init = function(img,mode_360) {
		logit("init");
		settings.mode_360 = mode_360;
		if (img) {
			elemWidth = img.width;
			elemHeight = img.height;
			$(".panorama-container img").each(function() {
				logit("-----------------------------------new source:"+img.src);
				//$(this).attr("src",img.src).attr("width",elemWidth).attr("height",elemHeight);
				this.src = img.src;
				this.width = img.width;
				this.height = img.height;
			});
		}
		//elemWidth = parseInt($(img_elem).attr('width'));
		//elemHeight = parseInt($(img_elem).attr('height'));
		logit("elemWidth/elemHeight:"+elemWidth+"/"+elemHeight);
		settings.speed = initial_speed;
		$(panoramaContainer).css('margin-left', '0px');
	}
	this.start = function() {
		logit("start");
		$(panoramaContainer).stop();
		started = true;
		settings.direction = 'left';
		panorama_animate(panoramaContainer, elemWidth, settings);
	}
	this.stop = function() {
		$(panoramaContainer).stop();
		started = false;
		logit("stop:"+$(panoramaContainer).css("margin-left"));
	}
	this.setup = function(options) {
		logit("setup");
		if(options) {
			$.extend(settings, options);
			logit("option viewport_width:"+settings.viewport_width);
			initial_speed = settings.speed;
		}
		img_elem = $("#panorama");
		$(img_elem).css('position', 'relative')
			.css('margin', '0')
			.css('padding', '0')
			.css('border', 'none')
			.wrap("<div class='panorama-container'></div>");
		//if (settings.mode_360) 
		$(img_elem).clone().insertAfter(img_elem);
		
		panoramaContainer = $(img_elem).parent();
		panoramaContainer.wrap("<div class='panorama-viewport'></div>").parent().css('width',settings.viewport_width+'px')
			.append("<div class='panorama-control'><a href='#' class='panorama-control-left'><<</a> <a href='#' class='panorama-control-pause'>x</a> <a href='#' class='panorama-control-right'>>></a> </div>");
		
		panoramaViewport = panoramaContainer.parent();

		//elemHeight = 450;
		panoramaViewport.css('height', elemHeight+'px').find('a.panorama-control-left').bind('click', function() {
			$(panoramaContainer).stop();
			if (settings.direction == 'right') {
				var new_speed = parseInt(settings.speed/2);
				if (new_speed > 1000) settings.speed = new_speed;
			} else {
				settings.speed = initial_speed;
			}
			settings.direction = 'right';
			panorama_animate(panoramaContainer, elemWidth, settings);
			return false;
		});
		panoramaViewport.bind('click', function() {
			$(panoramaContainer).stop();
		});
		panoramaViewport.find('a.panorama-control-right').bind('click', function() {
			$(panoramaContainer).stop();
			if (settings.direction == 'left') {
				var new_speed = parseInt(settings.speed/2);
				if (new_speed > 1000) settings.speed = new_speed;
			} else {
				settings.speed = initial_speed;
			}
			settings.direction = 'left';
			logit('Right speed='+settings.speed);
			panorama_animate(panoramaContainer, elemWidth, settings);
			return false;
		});

 		panoramaViewport.find('a.panorama-control-pause').bind('click', function() {
 			logit("Click");
			$(panoramaContainer).stop();
			settings.speed = initial_speed;
			return false;
		});
		if (settings.control_display == 'yes') {
			panoramaViewport.find('.panorama-control').show();
		} else {
			panoramaViewport.bind('mouseover', function(){
				logit("mouseover");
				panoramaViewport.find('.panorama-control').show();
				return false;
			}).bind('mouseout', function(){
				logit("mouseout");
				panoramaViewport.find('.panorama-control').hide();
				return false;
			});
		}
		$(img_elem).parent().css('margin-left', '-'+settings.start_position+'px');
		if (settings.auto_start) {
			settings.speed = initial_speed;
			panorama_animate(panoramaContainer, elemWidth, settings);
		}
		this1.init();
	}
	var panorama_animate = function(element, elemWidth, settings) {
		var currentPosition = 0-parseInt($(element).css('margin-left'));
		if (!started) {
			logit("PANORAMA NOT STARTED BUT ANIMATED");
			return;
		}
		logit("Animate elemWidth/elemHeight:"+elemWidth+"/"+elemHeight);

		if (settings.direction == 'right') {
			
			$(element).animate({marginLeft: 0}, ((settings.speed / elemWidth) * (currentPosition)) , 'linear', function (){ 
				logit('End of right');
				if (settings.mode_360) {
					$(element).css('marginLeft', '-'+(parseInt(parseInt(elemWidth))+'px'));
					panorama_animate(element, elemWidth, settings);
				} else {
					settings.direction = 'left';
					panorama_animate(element, elemWidth, settings);
				}
			});
		} 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 (){ 
				logit('End of Left');
				if (settings.mode_360) {
					$(element).css('margin-left','0px'); 
					panorama_animate(element, elemWidth, settings);
				} else {
					settings.direction = 'right';
					panorama_animate(element, elemWidth, settings);
				}
			});
		}
	}
	function logit(text) {
		logitAll("panorama-"+text);
	}
}

