//
// functions.js
//

//
// Theme Class
//
function Theme()
{
    this.Initialize = function()
    {
        jQuery('input.Date').change(
            function()
            {
                var element = jQuery(this);
                var value = element.val();
                var emptyString = /^[ ]*$/;

                if (emptyString.test(value))
                {
                    element.val('');

                    element.attr('data-isvalid', 'true');

                    return true;
                }

                var dateFormat = /^[ ]*(20[0-9]{2})-([0-1]*[0-9])-([0-3]*[0-9])[ ]*$/;

                if (dateFormat.test(value))
                {
                    var dateValues = dateFormat.exec(value);

                    var date = new Date(dateValues[1], dateValues[2] - 1, dateValues[3]);
                }
                else
                {
                    var milliseconds = Date.parse(value);

                    if (isNaN(milliseconds))
                    {
                        alert('The date format "' + element.val() + '" is not valid.');

                        element.attr('data-isvalid', 'false');

                        return false;
                    }

                    var date = new Date(milliseconds);
                }

                var now = new Date();
                var oneYearFromNow = new Date(now.getFullYear() + 1, now.getMonth(), now.getDate());

                if (date < now || date > oneYearFromNow)
                {
                    alert('Out of range');

                    element.attr('data-isvalid', 'false');

                    return false;
                }
                else
                {
                    element.val(date.getFullYear()
                        + '-'
                        + theme.PadLeft(date.getMonth() + 1, 2, '0')
                        + '-'
                        + theme.PadLeft(date.getDate(), 2, '0'));

                    element.attr('data-isvalid', 'true');

                    return true;
                }
            }
        );
    }

    this.PadLeft = function(value, desiredLength, paddingCharacter)
    {
        value = value.toString();

        if (value.length < desiredLength)
        {
            if (paddingCharacter && paddingCharacter.length >= 1)
            {
                paddingCharacter = paddingCharacter.charAt(0);
            }
            else
            {
                paddingCharacter = ' ';
            }

            while (value.length < desiredLength)
            {
                value = paddingCharacter + value;
            }
        }

        return value;
    }

    this.SubmitHTMLAjaxForm = function(formName)
    {
        var values = { 'actionCategory' : 'HTMLAjaxForm' };

        jQuery('.' + formName).each(
            function()
            {
                values[this.name] = jQuery(this).val();
            }
        );

        var form = jQuery('#form' + formName);

        theme.TransitionContent(
            form,
            '<p style="text-align: center;">Contacting Server...</p>',
            function()
            {
                jQuery.post(
                    '/',
                    values,
                    function(data)
                    {
                        var response = data.status;

                        if (data.trace)
                        {
                            response += '<textarea>' + data.trace + '</textarea>';
                        }

                        theme.TransitionContent(form, response);
                    },
                    'json'
                );
            }
        );
    }

    this.TransitionContent = function(jQueryElement, newContent, completedCallback)
    {
        jQueryElement.fadeTo(
            'slow',
            0.0,
            function()
            {
                // TODO: Add size animation

                jQueryElement.html(newContent);
                jQueryElement.fadeTo(
                    'slow',
                    1.0,
                    completedCallback);
            }
        );
    }
}

theme = new Theme();

//
// Initialize Theme
//

jQuery(document).ready(
    function()
    {
        theme.Initialize();
    }
);
