// This class is used to validate form elements on the 
// webpage.
function ValidationManager(validatorFactories, whichValidatorFactory) {
	// console.debug("BEGIN: ValidationManager()");
	if(arguments.length > 1) {
		// // console.debug("validatorFactories: " + validatorFactories);
		this.init(validatorFactories, whichValidatorFactory);
	}
	// console.debug("END: ValidationManager()");
}

ValidationManager.prototype.validatorFactories = null;
ValidationManager.prototype.whichValidatorFactory = null;

ValidationManager.prototype.init = function(validatorFactories, whichValidatorFactory) {
	// console.log("Begin: ValidationManager.init()");
	// console.log("validatorFactories: " + validatorFactories);
	// console.log("whichValidatorFactory: " + whichValidatorFactory);
	
	this.validatorFactories = validatorFactories;
	this.whichValidatorFactory =  whichValidatorFactory;
	
	// console.log("End: ValidationManager.init()");
};

ValidationManager.prototype.validateAllFields = function(whichValidatorFactoryOverriden) {

    // console.log("BEGIN: ValidationManager.validateAllFields()")
	// console.log("this.validatorFactories: " + this.validatorFactories);
	// console.log(this.validatorFactories[""+this.whichValidatorFactory]);
	
	var validatorFactory = null;
	
	if(whichValidatorFactoryOverriden != undefined)
	{
		validatorFactory = this.validatorFactories["" + whichValidatorFactoryOverriden];
	}
	else
	{
		validatorFactory = this.validatorFactories[""+this.whichValidatorFactory];
	}
	
	// TODO: Add support for the "*" character 
	//       which will indicate that it should use 
	//		 the default factory for creating formatters.
	
	var all_tested_valid = true;
	
	for(key in validatorFactory["fieldValidatorSettings"])
	{
		inputId = key;
        // console.log("validating field: " + inputId);

		var validationObject = validatorFactory["fieldValidatorSettings"][inputId];
		
		// console.debug("validator error: " + validationObject.errorMsg);
		// console.debug("validatorObject: " + validationObject.validator);
        
		var validator = validationObject["validator"];
		var errMsg = validationObject["errorMsg"];

        if(validator == null)
            throw "NULL Validator Exception!";

        if(errMsg == null)
            throw "NULL Error Message Exception!";

		try{
            // console.log("inputId: " + inputId);
			if(!validator.validate(inputId, errMsg))
			{
                // console.log("tested: false");
				all_tested_valid = false;
			}
		}catch(validationException) {
			// console.error("error: " + validationException);
		}
	}
	// console.log("END: ValidationManager.validateAllFields()")
	return all_tested_valid;
};