V4.Wizard = function() {

    var stepNumber = 1;
    var totalSteps = 0;
    var formValidatorApi;

    var next = function(callback) {
        var isValid = formValidatorApi.checkValidity();

        if (!isValid && $(".error:visible").length > 0) {
            return;
        }

        $('.formRow').hide().find(":input").removeClass("hasError");
        $('.error').hide();
        stepNumber = stepNumber + 1;

        if (stepNumber == totalSteps) {
            $('#FormSubmitButton').show();
            $('#WizardBack').show();
            $('#WizardNext').hide();
        }
        $('#WizardBack').show();
        $('.jsWizardStep' + (stepNumber)).show();
        $('.jsWizardStep' + (stepNumber)+' .formText').parents(".formRow").show();        
        if (callback) {
            callback(stepNumber);
        }
        $(".moduleID-FM01 form :input:visible:first").focus();
    };

    var back = function() {
        $('.formRow').hide();
        stepNumber = stepNumber - 1;
        if (stepNumber != totalSteps) {
            $('#FormSubmitButton').hide();
            $('#FormResetButton').hide();
        }
        if (stepNumber == 1) {
            $('#WizardBack').hide();
        }
        $('#WizardNext').show();
        var fieldsToBeShown = $('.jsWizardStep' + (stepNumber) + ' :input:not(:disabled)');
        fieldsToBeShown.parents(".formRow").show();
        $('.jsWizardStep' + (stepNumber)+' .formText').parents(".formRow").show();
        $(".moduleID-FM01 form :input:visible:last").focus();
    };

    this.init = function(totalNumberOfSteps, inputFormValidatorApi, callbackForNextButton) {
        totalSteps = totalNumberOfSteps;
        formValidatorApi = inputFormValidatorApi;
        $('.formRow').hide();
        $('.jsWizardStep1').show();
        $('.jsWizardStep1').find(":input").removeAttr("disabled");
        stepNumber = 1;
        $('#FormSubmitButton').hide();
        $('#FormResetButton').hide();
        $('#WizardNext').click(function () {
            next(callbackForNextButton);
        });
        $('#WizardBack').click(back);
        $('#WizardNext').show();

        $(".moduleID-FM01 form :input:visible:first").focus();
    };

};

