/*
 * jQuery Square Art Teaser Plugin 1.01 2010-07-26
 *
 * Copyright © 2010 Square Art
 * All rights reserved.
 * 
 * AUTHOR: Patrick Beyer - Square Art
 * WEB:    www.squareart.de
 * MAIL:   kontakt@squareart.de
 * 
 * REQUIRES: jquery.js (1.3 or later)
 *           jquery.hoverIntent.js (r5)
 *
 * SYNTAX: $(selector).squareTeaser(options);
 *
 * OPTIONS: 
 *
 *      current  {integer}  : ID from the current list item [default:1]
 *      last     {integer}  : ID from the last list item [default:0]
 *      overview {string}   : Selector from the list for overview [default:null]
 *      speed    {integer}  : Time for fade in and out in milliseconds [default:normal]
 *      stop     {bool}     : Flag if the animation is stopped [default:false]
 *      timeout  {integer}  : Time for delay in milliseconds [default:5000]
 * 
 * NOTE: This work is in the public domain,	
 *       and it is not supported in any way. Use it at your own risk.
*/
(function() {

    jQuery.fn.squareTeaser = function(options)
    {
        return this.each(function() {
            jQuery.squareTeaser(this, options);
        });
    };

    jQuery.squareTeaser = function(container, options)
    {
         var settings = {
            'current':          1,
            'last':             0,
            'overview':         null,
            'pause':            null,
            'pause_text_pause': 'Pause',
            'pause_text_start': 'Start',
            'speed':            'normal',
            'stop':             false,
            'timeout':          5000
        };
        
        jQuery.extend(settings, options);
        
        var view     = jQuery(container).children();
        var overview = null;
        
        if(settings.overview !== null)
        {
            overview = jQuery(settings.overview).children();
            jQuery(overview[settings.last]).addClass('current');
            
            jQuery(settings.overview+" li").hoverIntent({
                sensitivity: 1,
                interval: 50,
                timeout: 300,
                out: function(){},   
                over: function(){
                    timer            = clearTimeout(timer);
                    settings.current = jQuery(settings.overview+" li").index(this);
                    
                    jQuery.squareTeaser.show(view, overview, settings);
                }
            });
            
            jQuery(settings.overview).mouseout(function(){
                timer            = clearTimeout(timer);
                jQuery.squareTeaser.delay(view, overview, settings);
            });
        }
        
        setTimeout(function(){ jQuery(view[settings.last]).show();}, 100);

        jQuery.squareTeaser.delay(view, overview, settings);

        if(settings.pause !== null)
        {
            jQuery(settings.pause).mouseover(function()
            {
                jQuery.squareTeaser.pause(view, overview, settings)
            }).mouseout(function()
            {
                jQuery.squareTeaser.start(view, overview, settings)
            });
        }

               
        jQuery(container).mouseover(function()
        {
            jQuery.squareTeaser.pause(view, overview, settings)
        }).mouseout(function()
        {
            jQuery.squareTeaser.start(view, overview, settings)
        });
    };
    
    jQuery.squareTeaser.pause = function(view, overview, settings)
    {
        settings.stop = true;
        timer         = clearTimeout(timer);
            
        if(settings.pause !== null)
        {
            jQuery(settings.pause).html(settings.pause_text_start);
        }
    };
    
    jQuery.squareTeaser.start = function(view, overview, settings)
    {
        settings.stop = false;
        timer         = clearTimeout(timer);
            
        if(settings.pause !== null)
        {
            jQuery(settings.pause).html(settings.pause_text_pause);
        }
            
        jQuery.squareTeaser.delay(view, overview, settings);
    };
    
    jQuery.squareTeaser.delay = function(view, overview, settings)
    {
            timer = setTimeout(function(){ jQuery.squareTeaser.next(view, overview, settings);}, settings.timeout);
    };
    
    jQuery.squareTeaser.next = function(view, overview, settings)
    {
        if(settings.stop === false)
        {
            jQuery.squareTeaser.show(view, overview, settings);
            jQuery.squareTeaser.delay(view, overview, settings);
        }
    };
    
    jQuery.squareTeaser.show = function(view, overview, settings)
    {
        jQuery(view[settings.last]).stop(false, true).fadeOut(settings.speed);
        jQuery(view[settings.current]).stop(false, true).fadeIn(settings.speed);
        
            if(settings.overview !== null)
            {
                jQuery(overview[settings.last]).removeClass('current');
                jQuery(overview[settings.current]).addClass('current');
            }
        
            settings.last    = settings.current;
            settings.current = (settings.current+1);
            
            if(settings.current == view.length)
            {
                settings.current = 0;
            }
    }
})(jQuery);