autodemo.register = new (function()
{
    var self = this;
    var views = 0;
    var maxViews = 1;
    var clicked = {url: '', width: '', height: '', section: '', name: '', id: 0};
    var debug = window.location.host.indexOf('localhost') === 0;
    
    var addDemoView = function()
    {
        var demos = [];
        if ($.cookie('samples_demos') == null)
        {
            $.cookie('samples_demos', '', {path: '/', expires: 7})
        }
        else
        {
            demos = $.cookie('samples_demos').split();
        }
        
        if (clicked.id)
        {
            demos.push(clicked.id);
            $.cookie('samples_demos', demos.join(','), {path: '/', expires: 7});
        }
    }
    
    var demoViews = function()
    {
        if ($.cookie('samples_views') == null)
        {
            $.cookie('samples_views', 0, {path: '/', expires: 7});
        }
        return parseInt($.cookie('samples_views'));
    }
    
    var trackRegistration = function()
    {
        if (clicked.section)
        {
            if (demoViews() == 0)
            {
                pageTracker._trackEvent(clicked.sectionLong + ' Demo', '1st ask Registration', clicked.name);
            }
            else
            {
                pageTracker._trackEvent(clicked.sectionLong + ' Demo', '2nd ask Registration', clicked.name);
            }
            autodemo.trackPageView('/register/samples/' + clicked.sectionLong.toLowerCase());
            autodemo.trackConversion(clicked.sectionLong.toLowerCase());
        }
    }
    
    var showDemo = function()
    {
        return autodemo.launch(clicked.url, clicked.width, clicked.height);
    }
    
    var setClicked = function(url, width, height)
    {
        var m;
        clicked.url = url;
        clicked.width = width;
        clicked.height = height;
        clicked.section = 's';
        clicked.sectionLong = 'Software';
        clicked.name = '';
        clicked.id = 0;
        
        m = (/\/([^\/]+)\/samples:display\/(.+)\/(\d+)\/$/).exec(url);
        if (m)
        {
            clicked.section = m[1];
            switch(clicked.section)
            {
                case 'w':
                    clicked.sectionLong = 'Website';
                    break;
                case 's':
                default:
                    clicked.section = 's';
                    clicked.sectionLong = 'Software';
                    break;
            }
            clicked.name = unescape(m[2]);
            clicked.id = m[3];
        }
    }
    
    self.clearCookies = function()
    {
        $.cookie('samples_registered', null, {path: '/', expires: 0});
        $.cookie('samples_views', null, {path: '/', expires: 0});
        $.cookie('samples_demos', null, {path: '/', expires: 0});
    }
    
    self.validate = function()
    {        
        if ($.cookie('samples_registered'))
        {
            return showDemo();
        }
        
        var required = $('#register div.required input');
        var valid = true;
        var r, label;
        
        for(var i = 0, l = required.length; i < l; i++)
        {
            r = $(required[i]);
            label = r.siblings('label');
            label.removeClass('error');
            if (!r.val())
            {
                valid = false;
                if (demoViews() >= maxViews)
                {
                    label.addClass('error');
                }
            }
        }
        
        if (valid)
        {
            self.close();
            $.cookie('samples_registered', '1', {path: '/', expires: 365});
            var form_vars = {};
            var inputs = $('#register input[type="text"]');
            for(i = 0, l = inputs.length; i < l; i++)
            {
                var input = $(inputs[i]);
                form_vars[input.attr('name')] = input.val();
            }
            
            form_vars['newsletter'] = $('#register input[name="newsletter"]:checked').val();
            form_vars['comments'] = $('#register textarea[name="comments"]').val();
            form_vars['referrer'] = window.location.href;
            addDemoView();
            form_vars['demos_viewed'] = $.cookie('samples_demos');
            
            showDemo();
            if (!debug) $.post('/register/samples/', form_vars);
            trackRegistration();
            return false;
        }
        
        if (demoViews() < maxViews)
        {
            self.close();
            $.cookie('samples_views', demoViews() + 1, {path: '/', expires: 7});
            addDemoView();
            return showDemo();
        }
        
        return false;
    }
    
    self.close = function()
    {
        $('#register').hideForm();
        autodemo.freezeScroller(false);
        autodemo.popupOpen = false;
        return false;
    }
    
    self.check = function(url, width, height)
    {
        if ($('#register').is(':visible')) return false;
        
        setClicked(url, width, height);
        
        if ($.cookie('samples_registered'))
        {
            return showDemo();
        }        
        
        var msg = '';
        var title = '';
        
        if (demoViews() < maxViews)
        {
            title = 'Please register to view an Autodemo';
            msg = 'Thanks for your interest in Autodemo.  Registration is optional. (But don\'t be surprised if we ask you again!)';
            pageTracker._trackEvent(clicked.sectionLong + ' Demo', '1st ask', clicked.name);
        }
        else
        {
            title = 'Register to view another Autodemo';
            msg = 'We hope you liked the first Autodemo you viewed.  Please register to view more samples.';
            pageTracker._trackEvent(clicked.sectionLong + ' Demo', '2nd ask', clicked.name);
        }
        
        $('#register-message').html(msg);
        $('#register .register-content h2').text(title);
        
        $('#register').centerToWindow();
        $('#register').showForm();
        autodemo.popupOpen = true;
        autodemo.freezeScroller();
        
        return false;
    }
    
    self.handleEvent = function(ownerID, eventName)
    {
        if (ownerID == 'window' && eventName == 'ready')
        {
            if ($('div.remote-forms').length)
            {
                $.get('/static/html/forms/samples.html', {}, function(data)
                {
                    $('div.remote-forms').append(data);
                });
            }
            
            if (debug) this.clearCookies();
        }
    }
    
    autodemo.addEventListener(this, 'window');
});