$(document).ready(function()
    {
        $('.user_action').each(function()
        {
            $html = '<div class="buttons">';

            if($(this).next('.user_action').length==1)
            {
                $title = $(this).next('.user_action').children('h2').eq(0).text();
                $html += '<input type="button" class="next" value="Next - '+$title+'" />';
            }

            if($(this).prev('.user_action').length==1)
            {
                $title = $(this).prev('.user_action').children('h2').eq(0).text();
                $html += '<input type="button" class="previous" value="Previous - '+$title+'" />';
            }

            $html += '<div class="clear"></div></div>';

            $(this).append($html);
        });

        $('.buttons .next').click(function()
        {
            $user_action = $(this).parents('.user_action');

            if(validate($user_action))
            {
                $show = $user_action.next('.user_action');
                $show.show();
                $user_action.hide();
                $('#stages #stage_' + $show.attr('id')).addClass('current_stage');
                $('#stages #stage_' + $user_action.attr('id')).removeClass('current_stage');
            }
        });

        $('.buttons .previous').click(function()
        {
            $user_action = $(this).parents('.user_action');

            if(validate($user_action))
            {
                $show = $user_action.prev('.user_action');
                $show.show();
                $user_action.hide();
                $('#stages #stage_' + $show.attr('id')).addClass('current_stage');
                $('#stages #stage_' + $user_action.attr('id')).removeClass('current_stage');
            }
        });

        $('.user_action').eq(0).show();
        $('#stages li').eq(0).addClass('current_stage');

        $("#photography_award_form").submit(function()
        {
            return validate($(this));
        });
    });

function validate($object)
{
    $('div.error').remove();

    $errors = '';

    $object.find(':input.required').each(function()
    {
        $title = $(this).attr('title').substr(4);
        $name = $(this).attr('name').substr(4);
        $val = $(this).val();

        if($val=='')
        {
            $errors += '\n- ';

            if($title!='')
            {
                $errors += $title;
                $(this).after('<div class="error">'+$title+' is a required field</div>');
            }
            else
            {
                $errors += $name;
                $(this).after('<div class="error">'+$name+' is a required field</div>');
            }

            $errors += ' is a required field';
        }
        else
        {
            if($(this).hasClass('email'))
            {
                re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/
                if(!re.test($val))
                {
                    $errors += '\n- ';

                    if($title!='')
                    {
                        $errors += $title;
                        $(this).after('<div class="error">'+$title+' must be a valid email address</div>');
                    }
                    else
                    {
                        $errors += $name;
                        $(this).after('<div class="error">'+$name+' must be a valid email address</div>');
                    }

                    $errors += ' must be a valid email address';
                }
            }

            if($(this).hasClass('choose_one'))
            {
                if($("input[name='"+$name+"']:checked").size()!=1)
                {
                    $errors += '\n- You must choose one ';

                    if($title!='')
                    {
                        $errors += $title;
                        $(this).parents('p').append('<div class="error">You must choose one '+$title+'</div>');
                    }
                    else
                    {
                        $errors += $name;
                        $(this).parents('p').append('<div class="error">You must choose one '+$name+'</div>');
                    }
                }
            }

            if($(this).hasClass('terms'))
            {
                if(!$(this).is(':checked'))
                {
                    $errors += '\n- You must accept the Terms and Conditions';
                    $(this).parents('p').append('<div class="error">You must accept the Terms and Conditions</div>');
                }
            }
        
            if($(this).hasClass('image'))
            {
                $extension = $val.split('.').pop();

                switch($extension)
                {
                    case 'jpg':     break;
                    case 'jpeg':    break;
                    default:
                        $errors += '\n- ';

                        if($title!='')
                        {
                            $errors += $title;
                            $(this).after('<div class="error">'+$title+' must be a jpeg picture '+$extension+'</div>');
                        }
                        else
                        {
                            $errors += $name;
                            $(this).after('<div class="error">'+$name+' must be a jpeg picture '+$extension+'</div>');
                        }

                        $errors += ' must be a jpeg picture';
                        break;
                }
            }
        }
    });

    if($errors!='')
    {
        alert('You have the following errors:\n' + $errors);
        return false;
    }
    else
    {
        return true;
    }
}