﻿jQuery.noConflict();
var context = null;
var Validators = {
	requiredValidator: function (value) {
		return value != "";
	},

	emailValidator: function (value) {
		return /^.+@.{2,}\..{2,}$/i.test(value);
	},

	validate: function (form) {
		var contextFilter = '';
		if (context != null && context != '') {
			contextFilter = '[val-context="' + context + '"]';
		}

		var required = this.validateValues(jQuery('*[validate~="required"]' + contextFilter, form).get(), this.requiredValidator);
		var email = this.validateValues(jQuery('*[validate~="email"]' + contextFilter, form).get(), this.emailValidator);

		if (contextFilter != '') {
			context = null;
		}
		return required && email;
	},

	validateValues: function (elements, validator) {
		var valid = true;
		for (var i = 0; i < elements.length; i++) {
			if (!validator(jQuery(elements[i]).val())) {
				valid = false;
				this.setInvalid(elements[i]);
			}
			else { this.setValid(elements[i]); }
		}
		return valid;
	},

	setInvalid: function (element) {
		jQuery(element).parent('div').addClass('error');
	},

	setValid: function (element) {
		jQuery(element).parent('div').removeClass('error');
	},

	context: null,
	setContext: function (contextKey) {
		context = contextKey;
	},

	registerContext: function (container, contextKey) {
		jQuery("input[type='submit']", container).click(function () {
			Validators.setContext(contextKey);
		});

		jQuery("input[validate],textarea[validate]", container).attr("val-context", contextKey);
	},
	
	enableAutoValidationOnSubmit: function () {
		jQuery(document).ready(function () {
			jQuery("form").submit(function () {
				var valid = Validators.validate(this);
				if (!valid) {
					if (jQuery("*").hasClass("hintActive")) {
						jQuery('.hintActive[title]').inputHint();
					}
				}

				return valid;
			});
		});

	}
};


