﻿(function ($) {

    $.fn.reset_validation = function () {
        return this.each(function () {
            var $form = $(this);
            var $general_error = $form.find('.error-msg');
            var $inputs = $form.find('div.input.req input, div.input.req textarea').not(':checkbox').not(':button');

            // form submit
            $form.submit(function () {
                $inputs.trigger('blur', [false]); // trigger blur on all fields to validate                

                if ($(this).find('.input.error').size()) // prevent form from posting if errors are found
                {
                    $('.error-msg').fadeIn();
                    //                    $general_error.fadeIn();
                    $('html, body').animate({ scrollTop: 4 }, 'fast');
                    return false;
                }
            });

            // field focus
            $inputs.focus(function () {
                var $this = $(this);
                var $input_container = $this.parents('.input');
                var $msg_container = $input_container.find('.msg');
            });

            $inputs.keyup(function () {
                var $this = $(this);
                var $input_container = $this.parents('.input');
                var $msg_container = $input_container.find('.msg');

                if ($this.val() != '' || ignore_empty == false) {
                    if (methods.validate($this)) {
                        if ($this.attr('id') == "EmailAddress") {
                            methods.isEmailInUseReset($this);
                        }
                    }
                    else {
                        $input_container.removeClass('success, error');
                        $msg_container.show();
                        $('#yourEmail').show();
                        $('#doesNotExist').hide();
                    }
                }
            });

            $inputs.blur(function (event, ignore_empty) {
                var $this = $(this);
                var $input_container = $this.parents('.input');
                var $msg_container = $input_container.find('.msg');

                if ($this.val() != '' || ignore_empty == false) {                    
                    if (methods.validate($this)) {
                        if ($this.attr('id') == "EmailAddress") {
                            methods.isEmailInUseReset($this);
                        }
                    }
                    else {
                        $input_container.removeClass('success, error');
                        $msg_container.show();
                        $('#yourEmail').show();
                        $('#doesNotExist').hide();
                    }
                }
            });

            // trigger blur on all fields to validate
            $inputs.trigger('blur', [true]);
        });
    };

    var methods =
	{
	    validate: function ($input) {
	        var value = $input.val();
	        var validate_types = $input.attr('data_validate');
	        var validate_types = validate_types.split('|');

	        if ($.inArray('required', validate_types) == -1 && value == '') {
	            return 'skip';
	        }

	        var i, type, compare_val;

	        for (i in validate_types) {
	            type = validate_types[i];

	            if (type.indexOf('min[') != -1) {
	                compare_val = type.match(/\d+/)[0];

	                type = 'min';
	            }
	            if (type.indexOf('max[') != -1) {
	                compare_val = type.match(/\d+/)[0];

	                type = 'max';
	            }
	            else if (type.indexOf('match[') != -1) {
	                compare_field_name = type.replace('match[', '');
	                compare_field_name = compare_field_name.replace(']', '');

	                compare_val = $('input[name="' + compare_field_name + '"]').val();

	                type = 'match';
	            }

	            switch (type) {
	                case 'not-empty':
	                    if (value == '') {
	                        return false;
	                    }
	                    break;
	                case 'email':
	                    var pattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
	                    return pattern.test(value);
	                    break;
	                case 'min':
	                    if (value.length < compare_val) {
	                        return false;
	                    }
	                    break;
	                case 'max':
	                    if (value.length > compare_val) {
	                        return false;
	                    }
	                    break;
	                case 'match':
	                    if (value != compare_val) {
	                        return false;
	                    }
	                    break;
	                case 'org_no':
	                    var pattern = /^[0-9]{6}-[0-9]{4}$/;
	                    return pattern.test(value);
	                    break;
	                case 'phone':
	                    var pattern = /^[0-9+-]{6,20}$/;
	                    return pattern.test(value);
	                    break;

	                default:
	            }
	        }

	        return true;
	    },
	    isEmailInUseReset: function ($input) {
	        $.post("/SelfRegister/VerifyEmailsCowab", { emailInput: $input.val() }, function (data) {
	            if ($('#EmailAddress').val() != "") {
	                var $this = $input;
	                var $input_container = $this.parents('.input');
	                var $msg_container = $input_container.find('.msg');

	                if (data.validatedAnswer == "1") {
	                    $input_container.removeClass('error').addClass('success');
	                    $msg_container.hide();
	                }
	                else if (data.validatedAnswer == "0") {
	                    $msg_container.show();
	                    $input_container.removeClass('success').addClass('error');
	                    $('#yourEmail').hide();
	                    $('#doesNotExist').show();
	                }
	            }
	        });
	    }
	};

})(jQuery);

$(function () {
    $('#signup #resetPasswordFormPanel form').reset_validation();
});
