﻿var UREGISTER = function() {
    var URL = {
        queryEmail: '/member/check/email',
        queryUsername: '/member/check/nickname'
    };
    var ID = {
            registerForm: 'registerForm',
            email: 'email',
            username: 'username'
    };
    var CLASSNAME = {
        inputError: 'input-error',
        errorCol: 'error-col',
        successCol: 'success-col'
    };
	var Initialize = {
		searchPanel: function() {
			//$.initSearch();
		},
		registerPanel: function() {
			var $registerForm = $('#'+ID.registerForm);
            $registerForm.get(0).reset();
			$registerForm.validate({
				errorClass: CLASSNAME.errorCol,
				errorElement: 'span',
				onkeyup: false,
				rules: {
					email: {
						required: true,
                        emailInUse: true,
						emailValidChars: true
					},
                    username: {
						//usernameInUse: true
						//remote: queryUsernameUrl
                        usernameValidChars: true
					},
					password: {
						required: true,
						minlength: 6
					},
					passwordConfirm: {
						required: true,
						equalTo: '#password'
					}
				},
				messages: {
					email: {
						required: '請填入E-mail'
					},
                    username: {
						//remote: jQuery.format('{0} 已被使用')
					},
					password: {
						required: '請填入密碼',
						minlength: '請填入6個字以上的密碼'
					},
					passwordConfirm: {
						required: '請填入密碼',
						equalTo: '填入的密碼與先前填入不同'
					}
				},
				errorPlacement: function(error, element){
                    if (element.is(':checkbox')) {
						element.removeClass('input-error');
					} else {
                        var $parent = element.parent();
                        if ($('div.'+CLASSNAME.successCol, $parent).length)
                            $('div.'+CLASSNAME.successCol, $parent).remove();
                        if ($('span.'+CLASSNAME.errorCol, $parent).length)
                            $('span.'+CLASSNAME.errorCol, $parent).remove();
                        error.insertAfter(element);
                        element.removeClass(CLASSNAME.errorCol)
                               .addClass(CLASSNAME.inputError);
					}
				},
				success: function(label){
                    var $parent = label.parent();
                    label.prev().removeClass(CLASSNAME.inputError);
                   $('span.'+CLASSNAME.errorCol, $parent).remove();
                    $('<div></div>').addClass(CLASSNAME.successCol)
                                    .insertAfter($('input', $parent));
				},
				submitHandler: function(form){
					$('<input />').attr('type', 'hidden')
                                  .attr('name', 'showError')
                                  .val('true')
                                  .appendTo(form);
                    form.submit();
				}
			});
			// Check if username has been in use.
            $.validator.addMethod('emailInUse', ValidateForm.email, '你填入的E-mail已被註冊');
            $.validator.addMethod('usernameInUse', ValidateForm.username, '你填入的暱稱已被註冊');
            // Check if there is any wrong character inputed.
            $.validator.addMethod('usernameValidChars', function(value, element){
                return this.optional(element) || (value.search(/^[a-z0-9\.-_]{3,20}$/i) != -1 ? true : false);
			}, '請填入正確的暱稱');
			$.validator.addMethod('emailValidChars', function(value, element){
				return this.optional(element) || (value.search(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/) != -1 ? true : false);
			}, '請填入正確的E-mail');
		},
		Ajax : function(){
			var loading = function(){
				
			};
			var complete = function(){
				
			}
			$.ajaxSetup({
				beforeSend: loading,
				error: complete,
				success: complete,
				complete: complete
			});
		}
	};
    var ValidateForm = {
        email: function(email){
            var parent = $('#'+ID.email).parent();
            var isValid = false;
            $.ajax({
                url: URL.queryEmail,
                type: 'post',
                data: 'value=' + email,
                cache: false,
                async: false,
                beforeSend: function(XMLHttpRequest) {
                    /*
                    var loading = $('span', parent).filter('.input-error');
                    if (loading.length > 0)
                        loading.addClass('input-loading').html('檢查E-mail中');
                    else
                        loading = $('<span></span>').addClass('input-loading').html('檢查暱稱中');
                    $('#labelUsername').before(loading);
                    */
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) {},
                success: function(data, textStatus){},
                complete: function(XMLHttpRequest, textStatus) {
                    /*
                    var loading = $('span', parent).filter('.input-error');
                    if (loading.length > 0)
                        loading.removeClass('input-loading').html('');
                    else
                        $('.input-loading', parent).remove();
                    var data = $.parseJSON(XMLHttpRequest.responseText);
                    isValid = data.valid;
                    */
                    var data = $.parseJSON(XMLHttpRequest.responseText);
                    isValid = data.valid;
                }
            });
            return isValid;
        },
        username: function(username){
            var parent = $('#'+ID.username).parent();
            var isValid = false;
            $.ajax({
                url: URL.queryUsername,
                type: 'post',
                data: 'value=' + username,
                cache: false,
                async: false,
                beforeSend: function(XMLHttpRequest) {},
                error: function(XMLHttpRequest, textStatus, errorThrown) {},
                success: function(data, textStatus){},
                complete: function(XMLHttpRequest, textStatus) {
                    var data = $.parseJSON(XMLHttpRequest.responseText);
                    isValid = data.valid;
                }
            });
            return isValid;
        }
    };
	(function(){
		for (var i in Initialize)
			Initialize[i]();
	})();
};

