autodemo.contact = new (function()
{
    var self = this;
    var formID = '#contact-form';
    var buttonText = ['Contact Us', 'Schedule a Call', 'Request a Quote'];
    var buttonIndex = 0;
    
    var buttonRotate = function()
    {
        ++buttonIndex;
        var text = buttonText[buttonIndex % buttonText.length];
        var e = $('li#contact-button a span');
        e.text(text);
        e.customFadeIn('slow');
        setTimeout(function(){ $('li#contact-button a span').customFadeOut('fast', buttonRotate); }, 5000);
    }
    
    var fillTime = function()
    {
        var c = $(formID);
        var hour = c.find('.hour');
        var minute = c.find('.minute');
        var o;
        
        hour.empty();
        minute.empty();
        
        for(var i = 1, l = 12; i <= l; i++)
        {
            o = document.createElement('option');
            o.setAttribute('value', i);
            if (i == 11) o.setAttribute('selected', 'selected');
            $(o).text(i);
            hour.append(o);
        }
        
        for(i = 0, l = 60; i < l; i += 15)
        {
            var s = i;
            if (i == 0) s = '00';
            o = document.createElement('option');
            o.setAttribute('value', s);
            $(o).text(s);
            minute.append(o);
        }
    }
    
    var getDaysInMonth = function(month, year)
    {
        return 32 - new Date(year, month, 32).getDate();
    }
    
    var resultsResponse = function(data)
    {
        if (data == 'ok')
        {
            autodemo.trackPageView('/register/contact');
            autodemo.trackConversion('contact');
            var c = $(formID);
            if (c.find('h2').length) c.find('h2').text('Thank You');
            var html = '<p>Thank you for your interest in Autodemo.</p>';
            html += '<p>We will be contacting you shortly.</p>'
            c.find('form').html(html);
        }
    }
    
    self.toggle = function(f)
    {
        var c = $(formID);
        if (c.is(':hidden'))
        {
            $(formID + ' form div.schedule-a-call').hide();
            $(formID + ' form div.request-a-quote').hide();
            
            var index = buttonIndex % buttonText.length;
            
            if (f != null)
            {
                switch(f)
                {
                    case 'call':
                        index = 1;
                        break;
                    case 'quote':
                        index = 2;
                        break;
                    case 'all':
                        index = 3;
                        break;
                    default:
                        index = 0;
                        break;
                }
            }
            
            switch(index)
            {
                case 1:
                    $('#contact-form form div.schedule-a-call').show();
                    break;
                case 2:
                    $('#contact-form form div.request-a-quote').show();
                    break;
                case 3:
                    $('#contact-form form div.schedule-a-call').show();
                    $('#contact-form form div.request-a-quote').show();
                    break;
            }
            
            autodemo.popupOpen = true;
            c.centerToWindow();
            c.showForm();
            autodemo.freezeScroller();
        }
        else
        {
            self.close();
        }
        return false;
    }
    
    self.close = function()
    {
        $(formID).hideForm();
        autodemo.freezeScroller(false);
        autodemo.popupOpen = false;
        return false;
    }
    
    self.setMonth = function(month)
    {
        var c = $(formID);
        var d = new Date();
        var c_month = d.getMonth() + 1;
        var c_date = d.getDate() + 1;
        var c_year = d.getFullYear();
        
        if (c_date > getDaysInMonth(c_month - 1, c_year))
        {
            c_date = 1;
            if (c_month == 12)
            {
                c_month = 1;
                ++c_year;
            }
        }
        
        // If a past month is selected, assume next year.
        if (month < c_month) ++c_year;
        c.find('.year').text(c_year);
        
        var tmp = c.find('.date');
        var s_date = parseInt(tmp.val());
        var o;
        
        if (isNaN(s_date) || s_date == 0) s_date = c_date;
        
        l = getDaysInMonth(month - 1, c_year);
        
        if (s_date > l)
        {
            s_date = 1;
        }
        
        tmp.empty();
        
        for(var i = 1; i <= l; i++)
        {
            o = document.createElement('option');
            o.setAttribute('value', i);
            if (i == s_date) o.setAttribute('selected', 'selected');
            $(o).text(i);
            tmp.append(o);
        }
    }
    
    self.validate = function()
    {
        var c = $(formID);
        var required = c.find('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;
                label.addClass('error');
            }
        }
        
        if (valid)
        {
            var form_vars = {};
            var inputs = c.find('div.required 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'] = c.find('input[name="newsletter"]:checked').val();
            form_vars['referrer'] = window.location.href;
            
            if (c.find('div.schedule-a-call').is(':visible'))
            {
                form_vars['schedule_a_call'] = 1;
                form_vars['schedule_date'] = [
                    c.find('select.month').val(),
                    c.find('select.date').val(),
                    c.find('span.year').text()
                ].join('-');
                form_vars['schedule_time'] = c.find('select.hour').val() + ':' + c.find('select.minute').val() + ' ' + c.find('input[name="ampm"]:checked').val();
            }
            
            if (c.find('div.request-a-quote').is(':visible'))
            {
                form_vars['request_a_quote'] = 1;
                form_vars['number_demos'] = c.find('select[name="request-number-demos"]').val();
                form_vars['number_minutes'] = c.find('select[name="request-number-minutes"]').val();
                form_vars['product_name'] = c.find('input[name="request-product-name"]').val();
                form_vars['timeframe'] = c.find('select[name="request-delivery"]').val();
            }
            
            $.post('/register/contact/', form_vars, resultsResponse);
        }
        
        return false;
    }
    
    self.handleEvent = function(ownerID, eventName)
    {
        if (ownerID == 'window')
        {
            switch(eventName)
            {
                case 'load':
                    if ($('li#contact-button a span'))
                    {        
                        if ($('#inline-contact-form').length)
                        {
                            formID = '#inline-contact-form';
                            $('li#contact-button').remove();
                        }
                        else
                        {
                            $('li#contact-button a span').text(buttonText[buttonIndex]);
                            setTimeout(function(){ $('li#contact-button a span').customFadeOut('fast', buttonRotate); }, 5000);

                            $('li#contact-button a').click(self.toggle);
                            if ($('a.contact-link').length)
                            {
                                $('a.contact-link').click(function()
                                {
                                    var type = null;
                                    var t = $(this);
                                    if (t.hasClass('c-call')) type = 'call';
                                    if (t.hasClass('c-quote')) type = 'quote';
                                    if (t.hasClass('c-all')) type = 'all';
                                    return autodemo.contact.toggle(type);
                                });
                            }

                            $('#contact-form form h3').click(function()
                            {
                                var c = $(this).attr('class');
                                var d = $('#contact-form form div.' + c);
                                d.toggle();
                                if (d.is(':visible'))
                                {
                                    $(this).css('background-image', 'url("/static/images/site/register/arrow-down.gif")');
                                }
                                else
                                {
                                    $(this).css('background-image', 'url("/static/images/site/register/arrow-right.gif")');
                                }
                                $('#contact-form').centerToWindow();
                            });
                        }

                        var c = $(formID);

                        var d = new Date();
                        var current_month = d.getMonth();
                        var current_date = d.getDate();
                        var current_year = d.getFullYear();
                        var tmp = c.find('.month');
                        var o;

                        tmp.empty();
                        for(var i = 0; i < 12; i++)
                        {
                            o = document.createElement('option');
                            o.setAttribute('value', i + 1);
                            if (i == current_month) o.setAttribute('selected', 'selected');
                            $(o).text(i + 1);
                            tmp.append(o);
                        }

                        self.setMonth(current_month + 1);
                        fillTime();

                        c.find('.month').change(function(){
                            autodemo.contact.setMonth($(this).val());
                        });
                    }
                    break;
                
                case 'ready':
                    if ($('div.remote-forms').length)
                    {
                        $.get('/static/html/forms/contact.html', {}, function(data)
                        {
                            $('div.remote-forms').append(data);
                        });
                    }
                    break;
            }
            
        }
    }
    
    autodemo.addEventListener(this, 'window');
});