﻿(function($) {

    $.fn.contact_validation = function() {
        return this.each(function() {
            var $form = $(this);

            var $general_error = $form.find('.error-msg');

            var $inputs = $form.find('div.input input').not(':hidden').not(':checkbox');
            var $textarea = $form.find('div.input textarea');

            // form submit
            //            $form.submit(function() {
            //                //console.log('submit');
            //                $inputs.trigger('blur', [true]); // trigger blur on all fields to validate 
            //                $textarea.trigger('blur', [true]);

            //                if ($form.find('.input.error').size()) // prevent form from posting if errors are found
            //                {                    
            //                    $general_error.fadeIn();
            //                    return false;
            //                }
            //                //console.log('submit success');
            //            });

            if ($('#submit').length > 0) {
                $('#submit #submitSend').click(function() {


                    $inputs.trigger('blur', [true]); // trigger blur on all fields to validate    
                    $textarea.trigger('blur', [true]);

                    if ($form.find('.input.error').size()) // prevent form from posting if errors are found
                    {
                        $general_error.fadeIn();
                        return false;
                    }


                });
            }            

            // field focus
            $inputs.focus(function() {
                var $this = $(this);

                var $input_container = $this.parents('.input');

                var $msg_container = $input_container.find('p.msg');

                if (!$input_container.hasClass('success')) {
                    $msg_container.show();
                }

                if ($this.val() == '') {
                    $input_container.removeClass('success error');
                }
            });

            $inputs.keyup(function() {
                var $this = $(this);

                var $input_container = $this.parents('.input');

                var $msg_container = $input_container.find('p.msg');

                if ($this.val() != '') {
                    if (methods.validate($this)) {
                        $input_container.removeClass('error').addClass('success');
                        $msg_container.hide();
                    }
                }
                else {
                    $msg_container.show();
                    $input_container.removeClass('success error');
                }
            });

            $inputs.blur(function(event, ignore_empty) {
                var $this = $(this);
                var $input_container = $this.parents('.input');

                var $msg_container = $input_container.find('p.msg');
                if ($this.val() != '' || ignore_empty === true) {
                    var result = methods.validate($this);

                    if (result != 'skip') {
                        if (methods.validate($this)) {
                            $input_container.removeClass('error').addClass('success');
                        }
                        else {
                            $input_container.removeClass('success').addClass('error');
                        }
                    }
                }

                if (!$input_container.hasClass('error')) {
                    $msg_container.hide();
                }
            });

            $textarea.blur(function(event, ignore_empty) {
                var $this = $(this);
                var $input_container = $this.parents('.input');
                var $msg_container = $input_container.find('p.msg');
                if ($this.val() != '' || ignore_empty === true) {
                    var result = methods.validate($this);

                    if (result != 'skip') {
                        if (methods.validate($this)) {
                            $input_container.removeClass('error').addClass('success');
                        }
                        else {
                            $input_container.removeClass('success').addClass('error');
                        }
                    }
                }

                if (!$input_container.hasClass('error')) {
                    $msg_container.hide();
                }
            });
        });
    };

    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;
	    }
	};

})(jQuery);


$(function () {
    $('#tophead form').contact_validation();
});
