/* =========================================================
// jquery.panorama.js
// Author: OpenStudio (Arnault PACHOT)
// Mail: apachot@openstudio.fr
// Web: http://www.openstudio.fr
// Copyright (c) 2008 Arnault Pachot
// licence : GPL
========================================================= */
(function($) {
    $.fn.panorama = function(options) {
        this.each(function() {
            var settings = {
                viewport_width: 600,
                speed: 20000,
                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')
				.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();

            panoramaViewport.css('height', elemHeight + 'px').find('a.panorama-control-left').bind('click', function() {
                $(panoramaContainer).stop();
                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();
                settings.direction = 'left';
                panorama_animate(panoramaContainer, elemWidth, settings);
                return false;
            });
            panoramaViewport.find('a.panorama-control-pause').bind('click', function() {
                $(panoramaContainer).stop();
                return false;
            });

            if (settings.control_display == 'yes') {
                panoramaViewport.find('.panorama-control').show();
            } else if (settings.control_display == 'no') {
                panoramaViewport.find('.panorama-control').hide();
            } 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, settings);

        });
        function panorama_animate(element, elemWidth, settings) {
            currentPosition = 0 - parseInt($(element).css('margin-left'));

            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, 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() {
                    if (settings.mode_360) {
                        $(element).css('margin-left', 0);
                        panorama_animate(element, elemWidth, settings);
                    }
                });
            }


        }

    };

    $(document).ready(function() {
        $("img.panorama").panorama();
    });
})(jQuery);