﻿if (typeof(AccountRegistration) != "object"){
    AccountRegistration = {};
}

    AccountRegistration.UpdateBreadCrumb = function(step) {
        $(".wizard_breadcrumb .wizard_breadcrumb_title_active").toggleClass("wizard_breadcrumb_title_active");

        if ($(".wizard_breadcrumb .wizard_breadcrumb_title").length > 0) {

            $($(".wizard_breadcrumb .wizard_breadcrumb_title")[step]).toggleClass("wizard_breadcrumb_title_active");
        }
    }

    AccountRegistration.WizardFinished = function(lastStep, fSubmit) {
        $("#step_" + lastStep).fadeOut("normal", function() {
            fSubmit(lastStep);
        });
    }

    AccountRegistration.ChangeSteps = function(from, to, steploaded) {
        var newStep = function() {
            AccountRegistration.UpdateBreadCrumb(to);
            $("#step_" + to).fadeIn("normal", function() {
                if (typeof (steploaded) == "function") {
                    steploaded($("#step_" + to));
                }
            });
        };

        AccountRegistration.HideHelp();

        if (from > -1) {
            $("#step_" + from).fadeOut("normal", function() {
                newStep();
            });
        }
        else {
            newStep();
        }
    }

    AccountRegistration.FixData = function() {
        $("#wizard_submitcontainer").fadeOut("fast", function() {
            $("#wizard_stepcontainer").show();
            $('#submitResult').hide();
            AccountRegistration.ChangeSteps(-1, 0, null);
        });
    }

    AccountRegistration.Submit = function() {
        $("#submitResult").hide();
        $(".submitStatus").show();

        $("#wizard_stepcontainer").fadeOut("normal", function() {
            $("#wizard_submitcontainer").fadeIn("normal", function() {

            AccountRegistration.GetUserObject(AccountRegistration.InternalSubmit, AccountRegistration.SubmitError);

            });
        });
    }

    AccountRegistration.CollectFormData = function(e) {
        var o = {};
        var a = e.serializeArray();
        $.each(a, function() {
            var nameArr = this.name.split("$");
            var name = nameArr[nameArr.length - 1];
            if (o[name]) {
                if (!o[name].push) {
                    o[name] = [o[name]];
                }
                o[name].push(this.value || '');
            } else {
            o[name] = this.value || '';
            }
        });
        return o;

    }

    AccountRegistration.InternalSubmit = function(user) {
        var formData = AccountRegistration.CollectFormData($("#wizard_stepcontainer input, #wizard_stepcontainer textarea, #wizard_stepcontainer select"));

        AccountRegistration.CollectUserProperties(user, formData);

        //fire WizardSubmit event
        $(document).trigger("WizardSubmit", [user, formData]);

        $.ajax({
            url: AccountRegistration.SubmitInfoSvc,
            cache: false,
            data: JSON.stringify(user),
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function(data) {
                if (data.Status == "Error") {
                    AccountRegistration.SubmitError(data.OutcomeText);
                }
                else {
                    AccountRegistration.SubmitSuccess("");
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                try {
                    var respObj = JSON.parse(XMLHttpRequest.responseText);
                    AccountRegistration.SubmitError(respObj.OutcomeText);
                }
                catch (e) {
                    AccountRegistration.SubmitError(textStatus + " [" + XMLHttpRequest.status + " " + XMLHttpRequest.statusText + "]");
                }
            },
            type: "POST"

        });
    }

    AccountRegistration.GetUserObject = function(f, fErr) {
        $.ajax({
            url: AccountRegistration.NewUserSvc,
            cache: false,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: ({}),
            success: function(data) {
                f(data);
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                var errMsg = "Error getting user object:" + textStatus + " [" + XMLHttpRequest.status + " " + XMLHttpRequest.statusText + "]";
                if (typeof (fErr) == "function") {
                    fErr(errMsg);
                }
                else {
                    alert(errMsg);
                }
            },
            method: "GET"

        });
    }

    AccountRegistration.CollectUserProperties = function(user, formData) {
        for (var prop in formData) {
            if (typeof (user[prop]) != "undefined") {
                user[prop] = formData[prop];
            }
        }
    }

    AccountRegistration.SubmitSuccess = function(html) {
        if ($.trim(html).length > 0) {
            AccountRegistration.SubmitError(html);
        }
        else {
            $(".wizard_breadcrumb").fadeOut("normal");
            $(".submitStatus").fadeOut("normal", function() {
                $("#submitResult").html("<div style=\"ar_success\">" + AccountRegistration.ThankYou + "</div>");

                if (AccountRegistration.FinishPage.length > 0) {
                    $("#submitResult").append("<div style=\"padding-top: 20px\"><a href=\"" + AccountRegistration.FinishPage + "\">continue</a></div>");
                }
                $("#submitResult").fadeIn();
            });
        }
    }

    AccountRegistration.SubmitError = function(error) {
        $("#.submitStatus").fadeOut("normal", function() {
            $("#submitResult").html("<div class=\"errorContainer\">" + error + "</div>");

            $("#submitResult").append("<div style=\"margin: 5px\">To attempt to submit your information again, click <a href=\"javascript: AccountRegistration.Submit();\">here</a>.</div>");

            $("#submitResult").append("<div style=\"margin: 5px\">To return to your user information, click <a href=\"javascript: AccountRegistration.FixData();\">here</a>.</div>");

            $("#submitResult").fadeIn();
        });
    }

    AccountRegistration.CheckUserName = function(userName, target) {
        userName = $.trim(userName);
        if (userName.length > 0) {
            AccountRegistration.CheckUserNameLoading(target, function() {
                $.ajax({
                    url: AccountRegistration.CheckNameSvc,
                    cache: false,
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    data: ({ UserName: userName }),
                    success: function(data) {
                        var html = "";
                        if (data.Status == "ERROR") {
                            html = "<span style=\"color: red\">" + data.OutcomeText + "</span>";
                        }
                        else {
                            html = "<span class=\"" + (data.OutcomeText == "available" ? "userNameAvailable" : "userNameNotAvailable") + "\">" + data.OutcomeText + "</span>";
                        }
                        AccountRegistration.ShowUserNameResults(target, html);
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown) {
                        var html = "";
                        html = "<span style=\"color: red\">" + textStatus + " [" + XMLHttpRequest.status + " " + XMLHttpRequest.statusText + "]</span>";
                        AccountRegistration.ShowUserNameResults(target, html);
                    },
                    method: "GET"

                });
            });

        }
    }


    AccountRegistration.CheckUserNameLoading = function(target, f) {
        target.fadeOut("fast",
		    function() {
		        target.html("<img src=\"/_layouts/images/AccountRegistration/Wizard/ajax-loader.gif\" style=\"vertical-align: middle\" />checking...");
		        target.fadeIn("fast", f);
		    }
	    );
    }

    AccountRegistration.ShowUserNameResults = function(target, html) {
        target.fadeOut("fast",
		    function() {
		        target.html(html);
		        target.fadeIn("fast");
		    }
	    );
		}

	AccountRegistration.Help =
    {
    }

    AccountRegistration.AddHelpInfo = function(obj) {
        for (var prop in obj) {
            if (typeof (obj[prop]) != "function") {
                AccountRegistration.Help[prop] = obj[prop];
            }
        }
    }

	AccountRegistration.DisplayEntryHelp = function(e, msg) {
	    $("#ar_helpInfo").show();
	    $("#ar_helpInfo").html(msg);
	    var spaceheight = $(e).offset().top - $("#wizard_stepcontainer").offset().top - 10;
	    $("#ar_heightSpacer").animate({ height: spaceheight }, 500);
	}

	AccountRegistration.HideHelp = function() {
	    $("#ar_helpInfo").hide();
	    $("#ar_heightSpacer").height(1);
	}



