(function () {
    YAHOO.namespace('viewportApp.register');

    var Dom = YAHOO.util.Dom;
    var Event = YAHOO.util.Event;
    var xhr = YAHOO.util.Connect;
    YAHOO.viewportApp.register.nextUserCheck = 0;
    var available = 1;
    var check = 0;
    var pwFail = 0;

    YAHOO.viewportApp.register = {
        save: function() {
            var form = Dom.get('registerform');
            form.submit();
        },
        validate: function() {
            check = 0;
            pwFail = 0;
            Dom.addClass('pwError','hidden');
            Dom.addClass('usernameError','hidden');
            Dom.addClass('emailError','hidden');
            Dom.addClass('fieldError','hidden');

            Dom.batch(Dom.getElementsByClassName('mandatory', 'input'),function (elem) {
                switch (elem.id) {
                case 'email':
                    if (elem.value == '') {
                        Dom.addClass(elem.id+"Label","error");
                        Dom.removeClass('fieldError', 'hidden');
                        check++;
                    } else if (elem.value.search(/(\.@|\.\.|^@|^\.|@\.|,|;|.+@[0-9a-z\.-]*[^0-9a-z\.-])/i) != -1) {
                        Dom.addClass(elem.id+"Label","error");
                        Dom.removeClass('emailError', 'hidden');
                        check++;
                    } else {
                        Dom.removeClass(elem.id+"Label","error");
                    }
                    break;
                case 'username':
                    if (elem.value == '') {
                        Dom.addClass(elem.id+"Label","error");
                        Dom.removeClass('fieldError', 'hidden');
                        check++;
                    } else if (available < 1) {
                        Dom.addClass(elem.id+"Label","error");
                        Dom.removeClass('usernameError', 'hidden');
                    } else {
                        Dom.removeClass(elem.id+"Label","error");
                    }
                    break;
                case 'password2':
                    if (elem.value == '') {
                        Dom.addClass(elem.id+"Label","error");
                        Dom.removeClass('fieldError', 'hidden');
                        check++;
                    } else if (Dom.get('password').value !== Dom.get('password2').value) {
                        Dom.addClass("password2Label","error");
                        Dom.removeClass('pwError', 'hidden');
                        check++;
                    } else {
                        Dom.removeClass(elem.id+"Label","error");
                    }
                    break;
                default:
                    if (elem.value == '') {
                        Dom.addClass(elem.id+"Label","error");
                        Dom.removeClass('fieldError', 'hidden');
                        check++;
                    } else {
                        Dom.removeClass(elem.id+"Label","error");
                    }
                    break;
                }
            });
            YAHOO.viewportApp.register.refreshErrorBox();
            //YAHOO.viewportApp.register.checkUser();
            if (check === 0 && available > 0) {
                YAHOO.viewportApp.register.save();
            }
        },
        refreshErrorBox: function() {
            if (check <= 0 && available > 0 && pwFail <= 0) {
                Dom.addClass('errorContainer', 'hidden');
            } else {
                Dom.removeClass('errorContainer', 'hidden');
            }
        },
        checkUserTimer: function() {
            var now = new Date().getTime()
            if (YAHOO.viewportApp.register.nextUserCheck > now) {
                return;
            }
            YAHOO.viewportApp.register.nextUserCheck = now+300;
            setTimeout('YAHOO.viewportApp.register.checkUser()',300);
        },
        checkUser: function() {
             var Callback ={
                success:function (o){
                    var response = YAHOO.lang.JSON.parse(o.responseText);
                    if (parseInt(response.data) > 0) {
                        // Free
                        Dom.removeClass('usernameLabel', 'error');
                        Dom.addClass('usernameError', 'hidden');
                        available = 1;
                        YAHOO.viewportApp.register.refreshErrorBox();
                    } else {
                        // in Use
                        Dom.addClass('usernameLabel', 'error');
                        Dom.removeClass('usernameError', 'hidden');
                        available = 0;
                        YAHOO.viewportApp.register.refreshErrorBox();
                    }
                },
                failure:function (o){
                     /**
                     * TODO Meldung ausgeben: Kommunikation mit server gescheitert
                     */
                }
            };
            //YAHOO.viewportApp.register.available = 1;
            var username = Dom.get('username').value;

            if (username == '') {
                Dom.removeClass('usernameLabel', 'error');
                return false;
            }

            var postData = 'username='+username;
            var request = xhr.asyncRequest('POST', '/crud/checkUser.json', Callback, postData);
        },
        checkPW: function() {
            var pw1 = Dom.get('password').value;
            var pw2 = Dom.get('password2').value;
            if (pw1 !== '' && pw2 !== '') {
                if (pw1 !== pw2 && (pw1 !== '' && pw2 !== '')) {
                    Dom.addClass("password2Label","error");
                    Dom.removeClass('pwError', 'hidden');
                    pwFail = 1;
                    YAHOO.viewportApp.register.refreshErrorBox();
                } else {
                    Dom.removeClass("password2Label","error");
                    Dom.addClass('pwError', 'hidden');
                    pwFail = 0;
                    YAHOO.viewportApp.register.refreshErrorBox();
                }
            }

        },
        toggleHide: function() {
            if (Dom.hasClass('whyEmail', 'hidden')) {
                Dom.removeClass('whyEmail', 'hidden');
            } else {
                Dom.addClass('whyEmail', 'hidden');
            }
        }
    };

})();
