/*
*       Developed by Sean Ouimet
*       ©2009 Redman Technologies Inc.
*		www.redmantech.ca
*
*/

(function($) {
    $.realUtil = {};
    $.realUtil.centerImage = {};
    $.realUtil.rightImage = {};
    $.realUtil.leftImage = {};
    $.realUtil.rightImageStorage = {};
    $.realUtil.leftImageStorage = {};
    $.realUtil.gallery = {};
	$.realUtil.panes = {};
	$.realUtil.button = {};
	
    $.realUtil.Options = {
        Lheight: 185,
        Lwidth: 240,
        Lshrink:
                        function(dimension) {
                            return dimension * 0.7;
                        },
        startClass: 'start',
        slideSpeed: 'normal',
        gutterWidth: -22,
		gutterHeight: 18,
		
		container: '#flowtabs',
		button_container: '.view-listing-button'
    };

    $.fn.realFlow = function(options) {
        //global settings
        $.extend($.realUtil.Options, options);
        $.realUtil.gallery = $(this).css('cursor', 'pointer');
        $.realUtil.definePositions();

        //eliminate overflow
        $($.realUtil.Options.container).css('overflow', 'hidden');

		//setup our button:
		$.realUtil.button = $($.realUtil.Options.button_container);
		
		//jquery tools scrollable:
		$.realUtil.panes = $("#flowpanes").scrollable({size: 1, clickable: false }).circular({ api: true });

        //setup existing images
        var lastIndex = 0;
        var gallerySize = $.realUtil.gallery.each(function(i) {
            $(this).attr({
                'index': i,
                'prev': (i - 1),
                'next': (i + 1)
            }).css('position', 'absolute');
            $(this).attr('layout', 'landscape');
            lastIndex = i;
        }).hide().size();

        //fill in gallery with duplicates until there are at least 7
        var currIndex = 0;
        while (gallerySize < 7) {
            var $clone = $.realUtil.gallery.filter('[index=' + currIndex + ']').clone().attr({
                'index': lastIndex + 1,
                'prev': lastIndex,
                'next': lastIndex + 2
            }).removeClass($.realUtil.Options.startClass);
            $.realUtil.gallery.filter('[index=' + (lastIndex) + ']').after($clone);
            $.realUtil.gallery = $.realUtil.gallery.add('img[index=' + (lastIndex + 1) + ']');
            lastIndex++;
            currIndex++;
            gallerySize++;
        }
        $.realUtil.gallery.filter('[index=' + lastIndex + ']').attr('next', 0);
        $.realUtil.gallery.filter('[index=0]').attr('prev', lastIndex);

        //set images
        $.realUtil.setCenter($.realUtil.gallery.filter('.' + $.realUtil.Options.startClass).show());
        $.realUtil.setLeft($.realUtil.gallery.filter('[index=' + $.realUtil.centerImage.image.attr('prev') + ']').show());
        $.realUtil.setRight($.realUtil.gallery.filter('[index=' + $.realUtil.centerImage.image.attr('next') + ']').show());
        $.realUtil.setLeftStorage($.realUtil.gallery.filter('[index=' + $.realUtil.leftImage.image.attr('prev') + ']'));
        $.realUtil.setRightStorage($.realUtil.gallery.filter('[index=' + $.realUtil.rightImage.image.attr('next') + ']'));

        //bind events
        $.realUtil.leftImage.image.one('click', function(){ $.realUtil.slideRight(); $.realUtil.panes.prev(); });
        $.realUtil.rightImage.image.one('click', function(){ $.realUtil.slideLeft(); $.realUtil.panes.next(); });
        
        $($.realUtil.Options.container).resize(function() {
            $.realUtil.definePositions();
            $.realUtil.setCenter($.realUtil.centerImage.image);
            $.realUtil.setLeft($.realUtil.leftImage.image);
            $.realUtil.setRight($.realUtil.rightImage.image);
            $.realUtil.setLeftStorage($.realUtil.leftImageStorage.image);
            $.realUtil.setRightStorage($.realUtil.rightImageStorage.image);
        });

        //return the objects (for chaining purposes)
        return $(this);
    };
	$.realUtil.hideButton = function() {
		$.realUtil.button.children('a').attr('href', '');
		$.realUtil.button.fadeOut();
	}
	$.realUtil.showButton = function() {
		url = $.realUtil.centerImage.image.attr('ref');
		$.realUtil.button.children('a').attr('href', url);
		$.realUtil.button.fadeIn("fast");
	}
    $.realUtil.slideRight = function() {
		$.realUtil.hideButton();
		
        var liLeft = $.realUtil.leftImage.left($.realUtil.leftImageStorage.image, $.realUtil.leftImage.image);
        var riLeft = $.realUtil.rightImage.left($.realUtil.leftImage.image);
        var risLeft = $.realUtil.rightImageStorage.left($.realUtil.centerImage.image);
            $.realUtil.leftImageStorage.image.animate({
                'top': $.realUtil.leftImage.Ltop,
                'left': liLeft,
                'height': $.realUtil.leftImage.Lheight,
                'width': $.realUtil.leftImage.Lwidth,
                'opacity': 'show'
            },
            $.realUtil.Options.slideSpeed, 'linear', function() {
                $(this).one('click', function(){ $.realUtil.slideRight(); $.realUtil.panes.prev(); });
            });
   
            $.realUtil.leftImage.image.css({'z-index': $.realUtil.leftImage.Lzindex}).unbind().animate({
                'top': $.realUtil.centerImage.Ltop,
                'left': $.realUtil.centerImage.Lleft,
                'height': $.realUtil.centerImage.Lheight,
                'width': $.realUtil.centerImage.Lwidth
            },
            $.realUtil.Options.slideSpeed, 'linear', function() {
                $.realUtil.showButton();
            });
            $.realUtil.centerImage.image.css({'z-index': $.realUtil.centerImage.Lzindex}).unbind().animate({
                'top': $.realUtil.rightImage.Ltop,
                'left': riLeft,
                'height': $.realUtil.rightImage.Lheight,
                'width': $.realUtil.rightImage.Lwidth
            },
            $.realUtil.Options.slideSpeed, 'linear', function() {
                $(this).one('click', function(){ $.realUtil.slideLeft(); $.realUtil.panes.next(); });
            });

            $.realUtil.rightImage.image.css({'z-index': $.realUtil.rightImage.Lzindex}).unbind().animate({
                'top': $.realUtil.rightImageStorage.Ltop,
                'left': risLeft,
                'height': $.realUtil.rightImageStorage.Lheight,
                'width': $.realUtil.rightImageStorage.Lwidth,
                'opacity': 'hide'
            },
            $.realUtil.Options.slideSpeed, 'linear');
       
        $.realUtil.rightImageStorage.image = $.realUtil.rightImage.image;
        $.realUtil.rightImage.image = $.realUtil.centerImage.image;
        $.realUtil.centerImage.image = $.realUtil.leftImage.image;
        $.realUtil.leftImage.image = $.realUtil.leftImageStorage.image;
        $.realUtil.setLeftStorage($.realUtil.gallery.filter('[index=' + $.realUtil.leftImageStorage.image.attr('prev') + ']'));
    };

    $.realUtil.slideLeft = function() {
		$.realUtil.hideButton();
        var riLeft = $.realUtil.rightImage.left($.realUtil.rightImage.image);
        var liLeft = $.realUtil.leftImage.left($.realUtil.centerImage.image, $.realUtil.rightImage.image);
        var lisLeft = $.realUtil.leftImageStorage.left($.realUtil.leftImage.image, $.realUtil.centerImage.image, $.realUtil.rightImage.image);
            $.realUtil.rightImageStorage.image.animate({
                'top': $.realUtil.rightImage.Ltop,
                'left': riLeft,
                'height': $.realUtil.rightImage.Lheight,
                'width': $.realUtil.rightImage.Lwidth,
                'opacity': 'show'
            },
            $.realUtil.Options.slideSpeed, 'linear', function() {
                $(this).one('click', function(){ $.realUtil.slideLeft(); $.realUtil.panes.next(); });
            });
            $.realUtil.rightImage.image.css({'z-index': $.realUtil.centerImage.Lzindex}).unbind().animate({
                'top': $.realUtil.centerImage.Ltop,
                'left': $.realUtil.centerImage.Lleft,
                'height': $.realUtil.centerImage.Lheight,
                'width': $.realUtil.centerImage.Lwidth
            },
            $.realUtil.Options.slideSpeed, 'linear', function() {
                $.realUtil.showButton();
            });
            $.realUtil.centerImage.image.css({'z-index': $.realUtil.leftImage.Lzindex}).unbind().animate({
                'top': $.realUtil.leftImage.Ltop,
                'left': liLeft,
                'height': $.realUtil.leftImage.Lheight,
                'width': $.realUtil.leftImage.Lwidth
            },
            $.realUtil.Options.slideSpeed, 'linear', function() {
                $(this).one('click', function(){ $.realUtil.slideRight(); $.realUtil.panes.prev(); });
            });
            $.realUtil.leftImage.image.css({'z-index': $.realUtil.rightImage.Lzindex}).unbind().animate({
                'top': $.realUtil.leftImageStorage.Ltop,
                'left': lisLeft,
                'height': $.realUtil.leftImageStorage.Lheight,
                'width': $.realUtil.leftImageStorage.Lwidth, 'opacity': 'hide'
            },
            $.realUtil.Options.slideSpeed, 'linear');
        $.realUtil.leftImageStorage.image = $.realUtil.leftImage.image;
        $.realUtil.leftImage.image = $.realUtil.centerImage.image;
        $.realUtil.centerImage.image = $.realUtil.rightImage.image;
        $.realUtil.rightImage.image = $.realUtil.rightImageStorage.image;
        $.realUtil.setRightStorage($.realUtil.gallery.filter('[index=' + $.realUtil.rightImageStorage.image.attr('next') + ']'));
    };

    $.realUtil.setRightStorage = function(image) {
        $.realUtil.rightImageStorage.image = image;
            $.realUtil.rightImageStorage.image.hide().css({
                'top': $.realUtil.rightImageStorage.Ltop,
                'height': $.realUtil.rightImageStorage.Lheight,
                'width': $.realUtil.rightImageStorage.Lwidth,
				'z-index': $.realUtil.rightImage.Lzindex
            });
        $.realUtil.rightImageStorage.image.css('left', $.realUtil.rightImageStorage.left($.realUtil.rightImage.image));
    };

    $.realUtil.setLeftStorage = function(image) {
        $.realUtil.leftImageStorage.image = image;
            $.realUtil.leftImageStorage.image.hide().css({
                'top': $.realUtil.leftImageStorage.Ltop,
                'height': $.realUtil.leftImageStorage.Lheight,
                'width': $.realUtil.leftImageStorage.Lwidth,
				'z-index': $.realUtil.leftImage.Lzindex
            });
 
        $.realUtil.leftImageStorage.image
             .css('left', $.realUtil.leftImageStorage.left($.realUtil.leftImageStorage.image, $.realUtil.leftImage.image, $.realUtil.centerImage.image));
    };

    $.realUtil.setCenter = function(image) {
        $.realUtil.centerImage.image = image;
            $.realUtil.centerImage.image.css({
                'top': $.realUtil.centerImage.Ltop,
                'left': $.realUtil.centerImage.Lleft,
                'height': $.realUtil.centerImage.Lheight,
                'width': $.realUtil.centerImage.Lwidth,
				'z-index': $.realUtil.centerImage.Lzindex
            });
    };

    $.realUtil.setRight = function(image) {
        $.realUtil.rightImage.image = image;
            $.realUtil.rightImage.image.css({
                'top': $.realUtil.rightImage.Ltop,
                'height': $.realUtil.rightImage.Lheight,
                'width': $.realUtil.rightImage.Lwidth,
				'z-index': $.realUtil.rightImage.Lzindex
            });
        $.realUtil.rightImage.image.css('left', $.realUtil.rightImage.left($.realUtil.centerImage.image));
    };

    $.realUtil.setLeft = function(image) {
        $.realUtil.leftImage.image = image;
            $.realUtil.leftImage.image.css({
                'top': $.realUtil.leftImage.Ltop,
                'height': $.realUtil.leftImage.Lheight,
                'width': $.realUtil.leftImage.Lwidth,
				'z-index': $.realUtil.leftImage.Lzindex
            });
        $.realUtil.leftImage.image.css('left', $.realUtil.leftImage.left($.realUtil.leftImage.image, $.realUtil.centerImage.image));
    };

    $.realUtil.definePositions = function() {
		$.realUtil.centerImage.Lzindex = 6;
        $.realUtil.centerImage.Lheight = Math.round($.realUtil.Options.Lheight);
        $.realUtil.centerImage.Lwidth = Math.round($.realUtil.Options.Lwidth);
        $.realUtil.centerImage.Ltop = Math.round($($.realUtil.Options.container).height() / 2) - ($.realUtil.centerImage.Lheight / 2);
        $.realUtil.centerImage.Lleft = Math.round($($.realUtil.Options.container).width() / 2) - ($.realUtil.centerImage.Lwidth / 2);

		$.realUtil.leftImage.Lzindex = 4;
        $.realUtil.leftImage.Lheight = Math.round($.realUtil.Options.Lshrink($.realUtil.centerImage.Lheight));
        $.realUtil.leftImage.Lwidth = Math.round($.realUtil.Options.Lshrink($.realUtil.centerImage.Lwidth));
        $.realUtil.leftImage.Ltop = Math.round($.realUtil.centerImage.Ltop + (($.realUtil.centerImage.Lheight - $.realUtil.leftImage.Lheight - $.realUtil.Options.gutterHeight)));
        $.realUtil.leftImage.left = function(left, center) {

        return Math.round($.realUtil.centerImage.Lleft - ($.realUtil.leftImage.Lwidth + $.realUtil.Options.gutterWidth));
        
        };

		$.realUtil.rightImage.Lzindex = 5;
        $.realUtil.rightImage.Lheight = Math.round($.realUtil.Options.Lshrink($.realUtil.centerImage.Lheight));
        $.realUtil.rightImage.Lwidth = Math.round($.realUtil.Options.Lshrink($.realUtil.centerImage.Lwidth));
        $.realUtil.rightImage.Ltop = Math.round($.realUtil.centerImage.Ltop + (($.realUtil.centerImage.Lheight - $.realUtil.rightImage.Lheight - $.realUtil.Options.gutterHeight)));
        $.realUtil.rightImage.left = function(center) {
            
        return Math.round($.realUtil.centerImage.Lleft + ($.realUtil.centerImage.Lwidth + $.realUtil.Options.gutterWidth));
          
        };
        $.realUtil.leftImageStorage.Lheight = Math.round($.realUtil.Options.Lshrink($.realUtil.leftImage.Lheight));
        $.realUtil.leftImageStorage.Lwidth = Math.round($.realUtil.Options.Lshrink($.realUtil.leftImage.Lwidth));
        $.realUtil.leftImageStorage.Ltop = Math.round($.realUtil.leftImage.Ltop + (($.realUtil.leftImage.Lheight - $.realUtil.leftImageStorage.Lheight - $.realUtil.Options.gutterHeight)));
        $.realUtil.leftImageStorage.left = function(leftStorage, left, center) {

        return Math.round($.realUtil.leftImage.left(left, center) - ($.realUtil.leftImageStorage.Lwidth + $.realUtil.Options.gutterWidth));
        };
        $.realUtil.rightImageStorage.Lheight = Math.round($.realUtil.Options.Lshrink($.realUtil.rightImage.Lheight));
        $.realUtil.rightImageStorage.Lwidth = Math.round($.realUtil.Options.Lshrink($.realUtil.rightImage.Lwidth));
        $.realUtil.rightImageStorage.Ltop = Math.round($.realUtil.rightImage.Ltop + (($.realUtil.rightImage.Lheight - $.realUtil.rightImageStorage.Lheight - $.realUtil.Options.gutterHeight)));
        $.realUtil.rightImageStorage.left = function(right) {
        
		return Math.round($.realUtil.rightImage.left(right) + ($.realUtil.rightImage.Lwidth + $.realUtil.Options.gutterWidth));
        };
    };
})(jQuery);