/**
 * @author Sjors
 *
window.addEvent('domready', function () {
	function fieldHasValueSet(field, checkValue) {
		var formQueryString = field.getParent('form').toQueryString(),
		    formNameValues  = formQueryString.split('&'),
			 nameValue, name, value;

		for (var i=0; i<formNameValues.length; i++) {
			nameValue = formNameValues[i].split('=');

			name  = nameValue[0];
			value = '';

			if (nameValue.length > 1) {
				for (var j=1; j<nameValue.length; j++) {
					value += nameValue[j];
				}
			}

			name  = decodeURIComponent(name);
			value = decodeURIComponent(value);

			if (field.get('name') == name && checkValue == value) {
				return true;
			}
		}

		return false;
	}

	$$('*[data-conditional-enabled]').each(function (el) {
		var condition  = el.get('data-conditional-enabled'),
			 nameValue  = condition.split('='),
			 fieldName  = nameValue[0],
			 fieldValue = nameValue[1];

		$$('input[name=' + fieldName +'], select[name=' + fieldName +'], textarea[name=' + fieldName +']').each(function (field) {
			var eventName;

			if (!fieldHasValueSet(field, fieldValue)) {
				el.setStyle('disabled', true);
			}

			if (field.get('type') == 'radio' || field.get('type') == 'checkbox' || field.get('tag') == 'select') {
				eventName = 'change';
			} else {
				eventName = 'keyup';
			}
			
			field.addEvent(eventName, function () {
				var changedField = $(this);

				if (!fieldHasValueSet(changedField, fieldValue)) {
					el.setStyle('disabled', true);
				} else {
					el.setStyle('disabled', false);
				}
			})
		});
	});
}); */

var FormConditionals = new new Class({
	scan: function (element) {
		var scanRoot = element || $(document);

		scanRoot.getElements('*[data-conditional-enabled]').each(function (el) {
			var condition  = el.get('data-conditional-enabled'),
				 nameValue  = condition.split('='),
				 fieldName  = nameValue[0],
				 fieldValue = nameValue[1];

			scanRoot.getElements('input[name=' + fieldName +'], select[name=' + fieldName +'], textarea[name=' + fieldName +']').each(function (field) {
				var eventName;

				if (!FormConditionals.checkValue(field, fieldValue)) {
					el.set('disabled', true);
				}

				if (field.get('type') == 'radio' || field.get('type') == 'checkbox' || field.get('tag') == 'select') {
					eventName = 'change';
				} else {
					eventName = 'keyup';
				}

				field.addEvent(eventName, function () {
					var changedField = $(this);

					if (!FormConditionals.checkValue(changedField, fieldValue)) {
						el.set('disabled', true);
					} else {
						el.set('disabled', false);
					}
				})
			});
		});
	},

	checkValue: function (field, checkValue) {
		var formQueryString = field.getParent('form').toQueryString(),
		    formNameValues  = formQueryString.split('&'),
			 nameValue, name, value;

		for (var i=0; i<formNameValues.length; i++) {
			nameValue = formNameValues[i].split('=');

			name  = nameValue[0];
			value = '';

			if (nameValue.length > 1) {
				for (var j=1; j<nameValue.length; j++) {
					value += nameValue[j];
				}
			}

			name  = decodeURIComponent(name);
			value = decodeURIComponent(value);

			if (field.get('name') == name && checkValue == value) {
				return true;
			}
		}

		return false;
	}
});

window.addEvent('domready', function () {
	FormConditionals.scan();
});
