/***************************************************************************************************************************************************************
  REQUIRES:
  - CUPH Commons Client Fields 1.1.0
  - CUPH Commons Client Validation 1.0.0
  - Prototype 1.6.0
  - Scriptaculous 1.8.0
***************************************************************************************************************************************************************/

if (CUPH === undefined) { var CUPH = function() { }; }

CUPH.StripesValidation = {
	apply: function(object) {
		var typeConverterFormats = $H({
			"GeneralDateConverter": [ "date" ],
			"EmailTypeConverter": [ "email" ],
			"PhoneNumberConverter": [ "phone", { allowExtension: true } ],
			"SocialSecurityNumberConverter": [ "ssn" ],
			"ZipCodeConverter": [ "zip", { isPlusFour: true } ]
		});

		$H(object).each(function(entry) {
			var applyValidation = {
				format: typeConverterFormats.keys().indexOf(entry.value["typeConverter"]) >= 0,
				required: entry.value.required
			};

			if (Object.values(applyValidation).indexOf(true) < 0) {
				return;
			}

			var elements = $N(entry.key).findAll(function(element) {
				try {
					return element.field();
				} catch(e) {
					return false;
				}
			});

			if (applyValidation.required) {
				elements.invoke("field").invoke("addIndicator", "required");
			}

			if (applyValidation.format) {
				elements.each(function(field) {
					field.observe("blur", function() {
						field.format.apply(field, typeConverterFormats.get(entry.value["typeConverter"]));
					});
				});
			}
		});
	}
}

