﻿TouchPointDependencyManager = Class.create({   
	initialize: function() {
        //Persist test results across pages
        this.TestResultsField = $('Dependency_TestResults');
        if (this.TestResultsField && this.TestResultsField.value != '' && this.TestResultsField.value != null)
        {
            this.TestResults = this.TestResultsField.value.evalJSON();
        }
        else
        {
            this.TestResults = {};
        }
	},
	
	Invoke: function(actionFieldType, containerID, actionName, expressionToEvaluate, actionFieldReportName, parameter) {
	    var fieldType = FieldManager.GetPublicFieldType(actionFieldType);
	    if (!fieldType)
	    {
			fieldType = {};
	    }

		var action = null;
		if (fieldType.DependencyActions && fieldType.DependencyActions[actionName])
		{
			action = fieldType.DependencyActions[actionName];
		}
		else if (this.DefaultDependencyActions[actionName])
		{
			action = this.DefaultDependencyActions[actionName];
		}
		if (!action) return;
		
        var result = false;
        if (expressionToEvaluate != null && expressionToEvaluate != '')
        {
            try
            {
                result = eval(expressionToEvaluate);
            }
            catch(ex)
            {
                if (actionFieldReportName != null && actionFieldReportName.length > 0)
                {
                    alert('Unable to evaluate dependency on field with report name:\r\n"' + actionFieldReportName + '"\r\n\r\nPlease make sure the dependency on this field is properly configured.');
                }
                else
                {
                    alert('Unable to evaluate a section dependency on this form.');
                }
            }
        }
        
        var dependentField = $(containerID);
        if (dependentField)
        {
			if (Object.isFunction(action))
			{
				action($(containerID), result);
			}
			else if (Object.isFunction(action.Action))
			{
				action.Action($(containerID), result, parameter);
			}
        }
	},
	
	Test: function(actionFieldType, containerID, testName, value) {
	    var fieldType = FieldManager.GetPublicFieldType(actionFieldType);
	    if (!fieldType) return false;

        var fieldTest = fieldType.DependencyTests.find(function(test) {
                                    return test.name == testName;
                                });
        if (fieldTest && fieldTest.Test)
        {
            var resultKey = containerID + testName + value;
            var container = $(containerID);
            if (container)
            {
                var result = fieldTest.Test(container, value);
                this.TestResults[resultKey] = result;
                this.TestResultsField.value = Sys.Serialization.JavaScriptSerializer.serialize(this.TestResults);
                return result;
            }
            else if (this.TestResults[resultKey] != null)
            {
                return this.TestResults[resultKey];
            }
        }
	},
	
	DefaultDependencyActions: {
		Hide: function(fieldContainer, conditionResult) {
			if (conditionResult)
			{
				Element.hide(fieldContainer);
	            
				var theInputs = fieldContainer.getElementsByTagName('input');
				var theSelects = fieldContainer.getElementsByTagName('select');
				var theTextAreas = fieldContainer.getElementsByTagName('textarea');
				for (var i = 0; i < theInputs.length; i++)
				{
					if ((theInputs[i].type == 'text'))
					{
						theInputs[i].value = '';
						if (Object.isFunction(theInputs[i].onkeyup))
						{
							theInputs[i].onkeyup();
						}
					}
					else if ((theInputs[i].type == 'checkbox' || theInputs[i].type == 'radio') && theInputs[i].checked)
					{
						theInputs[i].checked = false;
						var inputTable = $(theInputs[i]).up('table');
						if (inputTable && Object.isFunction(inputTable.onclick))
						{
							inputTable.onclick();
						}
					}
				}
			        
				for (var i = 0; i < theSelects.length; i++)
				{
					theSelects[i].selectedIndex = 0;
					if (Object.isFunction(theSelects[i].onchange))
					{
						theSelects[i].onchange();
					}
				}
			        
				for (var i = 0; i < theTextAreas.length; i++)
				{
					theTextAreas[i].value = '';
					if (Object.isFunction(theTextAreas[i].onkeyup))
					{
						theTextAreas[i].onkeyup();
					}
				}
			}
			else
			{
				Element.show(fieldContainer);
			}
		},
	    
		Disable: function(fieldContainer, conditionResult) {
			var isDisabled = conditionResult ? "true" : "";
			
			fieldContainer.disabled = isDisabled;
	            
			//Inputs
			$A(fieldContainer.getElementsByTagName("input")).each(function(input) {
						input.disabled = isDisabled;
					});
	        
			//Textarea
			$A(fieldContainer.getElementsByTagName("textarea")).each(function(input) {
						input.disabled = isDisabled;
					});
	                
			//Select
			$A(fieldContainer.getElementsByTagName("select")).each(function(input) {
						input.disabled = isDisabled;
					});
		}
	}
});


if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();