autodemo.home = new (function()
{
    var self = this;
    var logos = [];
    var domID = 'div#logo-scroller div.logos';
    var maxChildren = 6;
    var currentIndex = 0;
    var gaso = false;
    var paused = false;
    self.timerID = 0;
    
    var nextIndex = function()
    {
        var i = currentIndex;
        ++currentIndex;
        if (currentIndex == logos.length) currentIndex = 0;
        return i;
    }
    
    var makeImageLink = function(data)
    {
        var a = $(document.createElement('a'));
        a.attr('href', data.demo);
        a.attr('title', data.name);
        a.click(function()
        {
            return autodemo.home.launch($(this).attr('href'));
        });
        var img = $(document.createElement('img'));
        img.attr('src', data.image);
        img.attr('title', data.name);
        a.append(img);
        $(domID).append(a);
        return a;
    }
    
    var rotateLogos = function()
    {
        var s = $(domID);
        var n = maxChildren;
        
        if (logos.length > maxChildren)
        {
            if (s.children().length)
            {
                for(var i = 0; i < maxChildren; i++)
                {
                    $(s.children()[0]).remove();
                }
                s.scrollTop(0);
            }
            else
            {
                n = maxChildren * 2;
            }
        }
        
        for(var i = 1; i <= n; i++)
        {
            a = makeImageLink(logos[nextIndex()]);
            if (i % maxChildren == 0) a.addClass('last');
        }
    }
    
    var showAllLogos = function()
    {
        for(var i = 1, l = logos.length; i <= l; i++)
        {
            a = makeImageLink(logos[i - 1]);
            if (i % maxChildren == 0)
            {
                a.addClass('last');
                $(domID).append('<br>');
            }
        }
    }
    
    var scrollLogos = function()
    {
        if (paused) return;
        $(domID).animate({scrollTop: 96}, 500, null, rotateLogos);
    }
    
    var getDemos = function()
    {
        var url = '/samples:logos/';
        var m = (/^\/([^\/]+)/).exec(window.location.pathname);
        if (m)
        {
            url = '/' + m[1] + url;
        }
        
        $.get(url, null, function(data, response)
        {
            logos = eval(data);
            logos.pop();
            if (gaso)
            {
                showAllLogos();
            }
            else
            {
                rotateLogos();
                if (logos.length > maxChildren)
                {
                    $(domID).hover(function()
                    {
                        $(this).addClass('scroller-paused');
                        autodemo.home.pause();
                    },
                    function()
                    {
                        $(this).removeClass('scroller-paused');
                        autodemo.home.resume();
                    });
                    self.timerID = setInterval(scrollLogos, 6000);
                }
            }
        });
    }
    
    var findDemo = function(url)
    {
        for(var i = 0, l = logos.length; i < l; i++)
        {
            if (logos[i].demo == url)
            {
                return logos[i];
            }
        }
    }
    
    self.resume = function()
    {
        paused = false;
    }
    
    self.pause = function()
    {
        paused = true;
    }
    
    self.handleEvent = function(ownerID, eventName)
    {
        if (ownerID == 'window' && eventName == 'load')
        {
            self.init();            
        }
    }
    
    self.launch = function(url)
    {
        var data = findDemo(url);
        autodemo.register.check(url, data.width, data.height);
        return false;
    }
    
    self.init = function()
    {
        if (logos.length) return;
        if ($.cookie('GASO'))
        {
            gaso = true;
            $(domID).css('height', 'auto');
        }
        getDemos();
    }
    
    autodemo.addEventListener(this, 'window');
});