/***************************************************************
*  Copyright notice
*
*  (c) 2009 Stephan Schuler <stephan.schuler@netlogix.de>
*  All rights reserved
*
*  This script is part of the TYPO3 project. The TYPO3 project is
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
*
*  The GNU General Public License can be found at
*  http://www.gnu.org/copyleft/gpl.html.
*  A copy is found in the textfile GPL.txt and important notices to the license
*  from the author is found in LICENSE.txt distributed with these scripts.
*
*
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/




/**
 * Formular Validator
 *
 * $Id$
 */
var nxformvalidation_conditionalRequirement = {




	init: function() {
		nxformvalidation.onValidate(nxformvalidation_conditionalRequirement.onValidate);
	},




	overruleSplitter: '_',




	onValidate: function(restrictToSingleForm, validationAnyGroups) {

		for (var formId in validationAnyGroups) {
			if (!restrictToSingleForm || restrictToSingleForm==formId) {
				for (var anyBoxIdentifier in validationAnyGroups[formId]) {
					for (var i in validationAnyGroups[formId][anyBoxIdentifier]) {
						if(typeof validationAnyGroups[formId][anyBoxIdentifier][i] != 'function') {
							var overrule = nxformvalidation_conditionalRequirement.overruleElement(validationAnyGroups[formId][anyBoxIdentifier][i], anyBoxIdentifier);
							if (overrule) {
								validationAnyGroups[formId][anyBoxIdentifier][i]['overruled'] = true;
							}
						}
					};
				}
			}
		}

	},




	overruleElement: function(inputElement, anyBoxIdentifier) {

		var dependencyFound = false;
		var dependencySatisfied = false;
		if(typeof inputElement.inputField == 'undefined') {
			return false;
		}

		jQuery(inputElement.inputField.attr('class').split(' ')).each(function(classNameKey, className) {
			if (className.substr(0, 30) == 'nx-formvalidation-dependingon-') {
				dependencyFound = true;
				var dependingClass = className.substr(30).split(nxformvalidation_conditionalRequirement.overruleSplitter);
				var requiredValue = dependingClass.pop();
				dependingClass = dependingClass.join(nxformvalidation_conditionalRequirement.overruleSplitter);
				jQuery('input.'+dependingClass+':checked').each(function(dependingInputKey, dependingInput) {
					if (
						jQuery(dependingInput).val().toLowerCase() == requiredValue.toLowerCase()
					) {
						dependencySatisfied = true;
					}
				});
			}
		});

		return (dependencyFound && !dependencySatisfied);

	}




};




nxformvalidation.onInit(nxformvalidation_conditionalRequirement.init);



