MMI.Util.ns('MMI.Form.Display');
MMI.Form.Display = {
    questionDependencyCheck: function(questionHashName, questionDependentHashName) {
        // get the container
		var jelQuestionContainer = jQuery('#' + questionHashName + '_container');		
		var jelDependentQuestionContainer = jQuery('#' + questionDependentHashName + '_container');
		// get the value
		var jelInputElement = false;
		var currentValue = null;
        var isValidValue = false;
		//get the type
		var dependentFieldType = jQuery('.fieldDef_fieldType', jelDependentQuestionContainer).html().toLowerCase();
        var selector = '';
        var allowedAnswers = '';
        var allowedAnswer = '';
		switch(dependentFieldType) {
        	case 'checkbox':
                allowedAnswer = jQuery('.fieldDef_answer', jelQuestionContainer).html();
                if(allowedAnswer == '0' || allowedAnswer == 'off'){
                	allowedAnswer = false;
                }
                allowedAnswer = allowedAnswer ? 'on' : 'off';
                // Only get the value of the checkbox if it is actually checked - otherwise get the value of an empty jquery object which is an empty string.
                currentValue = jQuery('.eeweb_baseline_edit_dynamic_field:checked', jelDependentQuestionContainer).val();
        		if(currentValue == 1 || currentValue == 'on') {
                    currentValue = 'on';
        		} else {
        			currentValue = 'off';
        		}
                if(currentValue.toLowerCase() == allowedAnswer.toLowerCase()) {
                    MMI.Form.Display.questionDependencyShow(questionHashName);
                } else {
                    MMI.Form.Display.questionDependencyHide(questionHashName);
                }
            break;
            
        	case 'checkboxgroup' :
                selector = '.eeweb_baseline_edit_dynamic_field';
                if(dependentFieldType == 'radio' || dependentFieldType == 'checkboxgroup') {
                    selector = 'input:checked' + selector;
                }
        		jelInputElement = jQuery(selector, jelDependentQuestionContainer);
                isValidValue = false;
                allowedAnswers = jQuery('.fieldDef_answer', jelQuestionContainer).html().split(':::');
                jelInputElement.each(function() {
                    var jel = jQuery(this);
                    var parts = jel.attr('id').split('[');
                    var val = parts.pop().split(']').shift();
                    if(MMI.Util.inArray(val, allowedAnswers)) {
                        isValidValue = true;
                        return false;
                    }
                });

        		if(isValidValue) {
        			MMI.Form.Display.questionDependencyShow(questionHashName);
        		} else {
        			MMI.Form.Display.questionDependencyHide(questionHashName);
        		}
                break;
        	case 'option' :
        	case 'radio':
                selector = '.eeweb_baseline_edit_dynamic_field';
                if(dependentFieldType == 'radio' || dependentFieldType == 'checkboxgroup') {
                    selector = 'input:checked' + selector;
                }
        		jelInputElement = jQuery(selector, jelDependentQuestionContainer);
                isValidValue = false;
                allowedAnswers = jQuery('.fieldDef_answer', jelQuestionContainer).html().split(':::');
                jelInputElement.each(function() {
                    var jel = jQuery(this);
                    if(MMI.Util.inArray(jel.val(), allowedAnswers)) {
                        isValidValue = true;
                        return false;
                    }
                });
                    
        		if(isValidValue) {
        			MMI.Form.Display.questionDependencyShow(questionHashName);
        		} else {
        			MMI.Form.Display.questionDependencyHide(questionHashName);
        		}
        		
            break;
        	case 'text' :
        	case 'textarea' :
        	case 'html' :
                //stripTags
                selector = '.eeweb_baseline_edit_dynamic_field';
        		jelInputElement = jQuery(selector, jelDependentQuestionContainer);
                if(MMI.Util.stripTags(jelInputElement.val()) == '') {
                    MMI.Form.Display.questionDependencyHide(questionHashName);
                } else {
                    MMI.Form.Display.questionDependencyShow(questionHashName);
                }
                break;
        	case 'number' :
                    selector = '.eeweb_baseline_edit_dynamic_field';
                    jelInputElement = jQuery(selector, jelDependentQuestionContainer);
                    isValidValue = false;

                    var comparisonValue = parseFloat(jQuery('.fieldDef_answer', jelQuestionContainer).html());
                    var comparisonOperator = jQuery('.fieldDef_modifier', jelQuestionContainer).html();

                    var currentValueString = jelInputElement.val();
                    currentValue = parseFloat(currentValueString);
                    
                    switch(comparisonOperator) {
                        case '=':
                                comparisonOperator = '=';
                                if(currentValue == comparisonValue) {
                                    isValidValue = true;
                                }
                            break;
                        case '>':
                        case '&gt;':
                                comparisonOperator = '>';
                                if(currentValue > comparisonValue) {
                                    isValidValue = true;
                                }
                            break;
                        case '<':
                        case '&lt;':
                                comparisonOperator = '<';
                                if(currentValue < comparisonValue) {
                                    isValidValue = true;
                                }
                            break;
                        case '>=':
                        case '&gt;=':
                                comparisonOperator = '>=';
                                if(currentValue >= comparisonValue) {
                                    isValidValue = true;
                                }
                            break;
                        case '<=':
                        case '&lt;=':
                                comparisonOperator = '<=';
                                if(currentValue <= comparisonValue) {
                                    isValidValue = true;
                                }
                            break;
                        // default skipped intentionally
                    }
                    /**
                    MMI.log('Comparison Value: ' + comparisonValue);
                    MMI.log('Comparison Operator: ' + comparisonOperator);
                    MMI.log('Current Value: ' + currentValue);
                    /**/
                    if(isValidValue) {
                        MMI.Form.Display.questionDependencyShow(questionHashName);
                    } else {
                        MMI.Form.Display.questionDependencyHide(questionHashName);
                    }
                    return;
                    jelInputElement.each(function() {
                        var jel = jQuery(this);
                        if(MMI.Util.inArray(jel.val(), allowedAnswers)) {
                            isValidValue = true;
                            return false;
                        }
                    });

                    if(isValidValue) {
                        MMI.Form.Display.questionDependencyShow(questionHashName);
                    } else {
                        MMI.Form.Display.questionDependencyHide(questionHashName);
                    }
                    break;
        	default:
            //not allowed date, datetime, label, assoc, color
            return false;
		}
		 
		// hide/show based on value
    }
	,questionDependencyHide: function(questionHashName) {
		var jelQuestionContainer = jQuery('#' + questionHashName + '_container');
		jelQuestionContainer.hide();
	}
	,questionDependencyShow: function(questionHashName) {
		var jelQuestionContainer = jQuery('#' + questionHashName + '_container');
		jelQuestionContainer.show();
	}
	,questionRegisterCheck: function(questionHashName, questionDependentHashName) {
		//get the input field of the dependency question
		var jelDependentQuestionContainer = jQuery('#' + questionDependentHashName + '_container');
		var jelInputElement = jQuery('.eeweb_baseline_edit_dynamic_field', jelDependentQuestionContainer);
		jelInputElement.bind('change', MMI.Util.bind(function(questionHashName, questionDependentHashName) {
			MMI.Form.Display.questionDependencyCheck(questionHashName, questionDependentHashName);
		},
		jelInputElement, 
		[questionHashName, questionDependentHashName])
		).triggerHandler('change');
	}
};
