﻿var state = StateHandler.getInstance();
var emailErrors = new Array();
var loginErrors = new Array();
var submitErrors = new Array();
var surpressCurrent = false;
$(document).ready(function() {
    $("#top_nav a[rel='register']").removeClass("inactive").addClass("active");
    $("#ctl00_ContentPlaceHolderLeft_hiddenSubmit").attr('disabled', 'disabled');
    $(".submit").click(function() {
        valid = true;
        if (!checkName(true)) valid = false;
        if (!checkEmail(true)) valid = false;
        if (!checkPasswort(true)) valid = false;
        if (!checkPasswort2(true)) valid = false;
        if (!checkAGB()) valid = false;
        if (valid) {
            trackEvent("UserEvents", "ValidRegister");
            $("#ctl00_ContentPlaceHolderLeft_hiddenSubmit").attr('disabled', '');
            $("#ctl00_ContentPlaceHolderLeft_hiddenSubmit").click();
        }
        trackEvent("UserEvents", "InvalidRegister");
    });

    $("#name").blur(function() {
        checkName();
        $(this).keyup(function() {
            if (surpressCurrent) return;
            surpressCurrent = true;
            $(this).wait(1000, function() {
                checkName();
            });
        });
    });
    $("#email").blur(function() {
        checkEmail();
        $(this).keyup(function() {
            if (surpressCurrent) return;
            surpressCurrent = true;
            $(this).wait(1000, function() {
                checkEmail();
            });
        });
    });
    $("#password").blur(function() {
        checkPasswort();
        checkPasswort2();
        $(this).keyup(function() {
            if (surpressCurrent) return;
            surpressCurrent = true;
            $(this).wait(1000, function() {
                checkPasswort();
                checkPasswort2();
                surpressCurrent = false;
            });
        });

    });
    $("#password2").blur(function() {
        checkPasswort2();
        checkPasswort();
        $(this).keyup(function() {
            if (surpressCurrent) return;
            surpressCurrent = true;
            $(this).wait(1000, function() {
                checkPasswort2();
                checkPasswort();
                surpressCurrent = false;
            });
        });
    });
    $("#agbs").click(function() { checkAGB(); });


});
function checkName(force) {
    if ($("#name").val().length == 0 && !force)
        return false;
    if (force && $("#name").parent().next("#register_status_ok").length > 0)
        return true;
    var usr = $("#name").val();
    if (usr.length >= 3) {
        setIcon("#name", "loading");
        $.ajax({
            type: "POST",
            url: "/Service/User.asmx/CheckUsername",
            data: "{'username':'" + usr + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
                var json = eval('(' + msg.d + ')');
                surpressCurrent = false;
                if (json.available == "true") {
                    setIcon("#name", "success");
                    loginErrors[0] = undefined;
                    processErrorList("login");
                    return true;
                } else {
                    setIcon("#name", "warning");
                    loginErrors[0] = 'Dieser Name ist bereits vergeben';
                    processErrorList("login");
                    return false;
                }
            }
        });
    } else {
        setIcon("#name", "warning");
        loginErrors[0] = 'Der Name muss mindestens 3 Zeichen lange sein';
        processErrorList("login");
        surpressCurrent = false;
        return false;
    }
}
function checkEmail(force) {
    if ($("#email").val().length == 0 && !force)
        return false;
    if (force && $("#email").parent().next("#register_status_ok").length > 0)
        return true;
    var usr = $("#email").val();
    if (validateEmail(usr)) {
        setIcon("#email", "loading");
        $.ajax({
            type: "POST",
            url: "/Service/User.asmx/CheckEmail",
            data: "{'email':'" + usr + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
                surpressCurrent = false;
                var json = eval('(' + msg.d + ')');
                if (json.available == "true") {
                    emailErrors[0] = undefined;
                    setIcon("#email", "success");
                    processErrorList('email');
                    return true;
                } else {
                    setIcon("#email", "warning");
                    emailErrors[0] = 'Sie haben sich bereits unter dieser Email Adresse angemeldet.';
                    processErrorList('email');
                    return false;
                }
            }
        });
    } else {
        setIcon("#email", "warning");
        emailErrors[0] = 'Bitte geben Sie eine gültige Email Adresse ein.';
        processErrorList('email');
        surpressCurrent = false;
        return false;
    }
}
function checkPasswort2(force) {
    if ($("#password2").val().length == 0 && !force)
        return false;
    var pass = $("#password").val();
    var pass2 = $("#password2").val();
    if (pass.length < 5) {
        loginErrors[2] = 'Das Passwort sollte mindestens aus 5 Zeichen bestehen';
        setIcon("#password2", "warning");
        processErrorList('login');
        return false;
    } else {
        if (pass != pass2) {
            loginErrors[2] = 'Die Passwörter sind nicht indentisch';
            setIcon("#password2", "warning");
            processErrorList('login');
            return false;
        } else {
            loginErrors[2] = undefined;
            setIcon("#password2", "success");
            processErrorList('login');
            return true;
        }
    }
}
function checkPasswort(force) {
    if ($("#password").val().length == 0 && !force)
        return false;
    var pass = $("#password").val();
    if (pass.length < 5) {
        loginErrors[1] = 'Das Passwort sollte mindestens aus 5 Zeichen bestehen';
        setIcon("#password", "warning");
        processErrorList('login');
        return false;
    } else {
        loginErrors[1] = undefined;
        setIcon("#password", "success");
        processErrorList('login');
        return true;
    }
}
function checkAGB() {
    if ($("#agbs").attr("checked") == false) {
        submitErrors[0] = 'Bitte akzeptieren Sie unsere AGBs';
        setIcon("#agbs", "warning",true);
        processErrorList('submit');
        return false;
    } else {
        submitErrors[0] = undefined;
        setIcon("#agbs", "success",true);
        processErrorList('submit');
        return true;
    }
}

function setIcon(element, type, before) {
    if(before)
        $(element).next("div").remove();
    else
        $(element).parent().next(".icon").remove();
    switch (type) {
        case 'warning':
            $(element).addClass("error");
            if(before)
                $(element).after('<div style="float:right;"><img src="http://static.appzapp.de/Images/icon_warning.png" width="25"/></Div>');
            else
                $(element).parent().after('<div id="register_status_warning" class="icon">&nbsp;</div>');
            break;
        case 'success':
            $(element).removeClass("error");
            if(before)
                $(element).after('<div style="float:right;"><img src="http://static.appzapp.de/Images/icon_ok.png" width="25"/></Div>');
            else
                $(element).parent().after('<div id="register_status_ok" class="icon">&nbsp;</div>');
            break;
        case 'loading':
            $(element).parent().after('<div id="register_status_loading" class="icon">&nbsp;</div>');
            break;
    }
}
function processErrorList(type) {
    switch (type) {
        case 'email':
            $(".mailErrors #register_error_message ul").empty();
            var showit = false;
            for (var k = 0; k < emailErrors.length; k++) {
                if (emailErrors[k] != undefined) {
                    $(".mailErrors #register_error_message ul").append("<li>" + emailErrors[k] + "</li>");
                    showit = true;
                }
            }
            if (showit) $(".mailErrors").show(); else $(".mailErrors").hide();
            break;
        case 'login':
            $(".loginErrors #register_error_message ul").empty();
            var showit = 0;
            for (var k = 0; k < loginErrors.length; k++) {
                if (loginErrors[k] != undefined) {
                    $(".loginErrors #register_error_message ul").append("<li>" + loginErrors[k] + "</li>");
                    showit++;
                }
            }
            if (showit > 0) {
                $(".loginErrors").show();
                if (showit > 1) $("#loginErrorCount").text(showit + " Probleme"); else $("#loginErrorCount").text(showit + " Problem");
            } else
                $(".loginErrors").hide();
            break;
        case 'submit':
            $(".submitErrors #register_error_message ul").empty();
            var showit = 0;
            for (var k = 0; k < submitErrors.length; k++) {
                if (submitErrors[k] != undefined) {
                    $(".submitErrors #register_error_message ul").append("<li>" + submitErrors[k] + "</li>");
                    showit++;
                }
            }
            if (showit > 0) {
                $(".submitErrors").show();
                if (showit > 1) $("#submitErrorCount").text(showit + " Probleme"); else $("#submitErrorCount").text(showit + " Problem");
            } else
                $(".submitErrors").hide();
            break;
            break;
    }
}
function validateEmail(text) {
    var mail_filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    return mail_filter.test(text);
}