﻿/// <reference path="./jquery.min.js" />

(function() {
    $.fn.State = function(options) {
        var transitionType = {
            Forward: 0,
            Backward: 1,
            Reset: 2
        }

        var defaults = {
            startStep: 1,
            steps: [],
            nextButton: null,
            backButton: null,
            resetButton: null,
            onReset: null
        };
        var options = $.extend({}, defaults, options);
        var currentObj = $(this);
        var currentStep = options.startStep;

        var switchState = function(startStep, transition) {

            var newState = '';

            if (transition == transitionType.Forward) {
                newState = 'Step' + ++currentStep;
            } else if (transition == transitionType.Backward) {
                newState = 'Step' + --currentStep;
            } else if (transition == transitionType.Reset) {
                newState = 'Step' + startStep;
                currentStep = startStep;
            }

            // We need to remove the current
            currentObj.removeClass('Step1 Step2 Step3 Step4');
            currentObj.addClass(newState);
        };

        var nextClick = function(e) {
            e.preventDefault();

            var valid = true;
            $.each(options.steps, function(i, data) {
                if (currentStep == data.step && typeof (data.onNext) == 'function') {
                    valid = data.onNext();
                }
            });

            if (valid == true) {
                switchState(options.startStep, transitionType.Forward);
            }
        };

        var backClick = function(e) {
            e.preventDefault();

            switchState(options.startStep, transitionType.Backward);
        };

        var resetClick = function(e) {
            e.preventDefault();

            if (typeof (options.onReset) == 'function') {
                options.onReset();
            }

            switchState(options.startStep, transitionType.Reset);
        };

        $(options.nextButton).click(nextClick);
        $(options.backButton).click(backClick);
        $(options.resetButton).click(resetClick);
    };
})(jQuery);