function print_r(theObj){
	if(theObj.constructor == Array ||
	theObj.constructor == Object){
		document.write("<ul>")
		for(var p in theObj){
			if(theObj[p].constructor == Array||
			theObj[p].constructor == Object){
				document.write("<li>["+p+"] => "+typeof(theObj)+"</li>");
				document.write("<ul>")
				print_r(theObj[p]);
				document.write("</ul>")
			} else {
				document.write("<li>["+p+"] => "+theObj[p]+"</li>");
			}
		}
		document.write("</ul>")
	}
}


function change_Dependent_Checkboxes(checked,element,dependentObjects,dependentObjectsState)
{
	var objArray = dependentObjects.split("...");
	var stateArray = dependentObjectsState.split("...");
	
	for ( var x=0, len=objArray.length; x<len; ++x ){

		switch(stateArray[x])
		{
			case ('even'):
				document.getElementById(objArray[x]).checked = checked;
				break;
				
			case ('odd'):
				document.getElementById(objArray[x]).checked = !checked;
				break;
		}
		
		if(document.getElementById(objArray[x]).checked){
			
			var dependencies = document.getElementById(objArray[x]).id
			var dependenciesArray = dependencies.split("_");
			var check_count = 0
			
			for ( var y=1, len2=dependenciesArray.length; y<len2; ++y ){
				if(document.getElementById('prefix_'+dependenciesArray[y]).checked==false){
					check_count += 1
				}
			}
			
			if (check_count > 0){
				document.getElementById(objArray[x]).checked = false
			}
		}
		
	}
}


function changeValue_OptIn(checked,element,defaultelem,dependentObjects,dependentObjectsState){
	
	if(dependentObjects!='' && dependentObjectsState!=''){
		change_Dependent_Checkboxes(checked,element,dependentObjects,dependentObjectsState)
	}
	
	// POSITIVE checkbox
	
	var checkArray = element.split("_");
	var defaultValues = defaultelem.split("_");
	
	var defaultValues_keys = new Array();
	var defaultValues_values = new Array();
	
	for ( var x=0, len=defaultValues.length; x<len; ++x ){
		
		var a = defaultValues[x].indexOf('.')
		var b = defaultValues[x].substring(0,a)
		var c = defaultValues[x].substring(a+1,defaultValues[x].length)
		
		defaultValues_keys[x] = b;
		defaultValues_values[x] = c;
	}
	
	delete x;
	
	if (checked == true){
		var result = element.lastIndexOf('_');
		if(result==6){
			//single element
			for ( var x=0, len=defaultValues_keys.length; x<len; ++x ){
				if (checkArray[1]==defaultValues_keys[x]){
					var id = x;
				}
			}
			delete x;
			document.getElementById(defaultValues_keys[id]).value = defaultValues_values[id];
		}else{
			//multi element
			for ( var i=0, len=checkArray.length; i<len-1; ++i ){
				for ( var x=0, len2=defaultValues_keys.length; x<len2; ++x ){
					if (checkArray[i+1]==defaultValues_keys[x]){
						var id = x;
					}
				}
				if(checkArray[i+1]==null){
				} else {
					document.getElementById(checkArray[i+1]).value = defaultValues_values[id];
				}
			}
		}

	} else {
		var result = element.lastIndexOf('_');
		if(result==6){
			//single element
			for ( var x=0, len=defaultValues_keys.length; x<len; ++x ){
				if (checkArray[1]==defaultValues_keys[x]){
					var id = x;
				}
			}
			delete x;
			document.getElementById(defaultValues_keys[id]).value = 1;
		} else {
			//multi element
//			if(document.getElementById('prefix_'+document.getElementById(checkArray[i+1]).name).checked == true){
				//DO NOTHING
//			} else {
				for ( var i=0, len=checkArray.length; i<len-1; ++i ){
					if (checkArray[i+1]==defaultValues_keys[i]){
						var id = i;
					}
					document.getElementById(checkArray[i+1]).value = 1;
				}
//			}
		}
	}
}

function changeValue_OptOut(checked,element,defaultelem,dependentObjects,dependentObjectsState){

	if(dependentObjects!='' && dependentObjectsState!=''){
		change_Dependent_Checkboxes(checked,element,dependentObjects,dependentObjectsState)
	}
	
	// NEGATIVE checkbox
	var checkArray = element.split("_");
	var defaultValues = defaultelem.split("_");
	
	var defaultValues_keys = new Array();
	var defaultValues_values = new Array();
	
	for ( var x=0, len=defaultValues.length; x<len; ++x ){
		
		var a = defaultValues[x].indexOf('.')
		var b = defaultValues[x].substring(0,a)
		var c = defaultValues[x].substring(a+1,defaultValues[x].length)
		
		defaultValues_keys[x] = b;
		defaultValues_values[x] = c;
	}
	
	delete x;

	if (checked == true){
		var result = element.lastIndexOf('_');
		if(result==6){
			//single element
			for ( var x=0, len=defaultValues_keys.length; x<len; ++x ){
				if (checkArray[1]==defaultValues_keys[x]){
					var id = x;
				}
			}
			delete x;
			document.getElementById(defaultValues_keys[id]).value = 1;
		}else{
			//multi element
			for ( var i=0, len=checkArray.length; i<len-1; ++i ){
				document.getElementById(checkArray[i+1]).value = 1;
			}
		}

	} else {
		var result = element.lastIndexOf('_');
		if(result==6){
			//single element
			for ( var x=0, len=defaultValues_keys.length; x<len; ++x ){
				if (checkArray[1]==defaultValues_keys[x]){
					var id = x;
				}
			}
			delete x;
			document.getElementById(defaultValues_keys[id]).value = defaultValues_values[id];
		}else{
			//multi element
			for ( var i=0, len=checkArray.length; i<len-1; ++i ){
//				if(document.getElementById('prefix_'+document.getElementById(checkArray[i+1]).name).checked == true){
					//DO NOTHING
//				} else {
					for ( var x=0, len2=defaultValues_keys.length; x<len2; ++x ){
						if (checkArray[i+1]==defaultValues_keys[x]){
							var id = x;
						}
					}
					document.getElementById(checkArray[i+1]).value = defaultValues_values[id];
//				}
			}
		}
	}
}

function populate_dpa_string(obj)
{
	if (obj.checked)
	{
		document.getElementById("dpa_answer_string").value += String(obj.value)
	}
	else
	{
		var myString = document.getElementById("dpa_answer_string").value
		myString = myString.replace(obj.value,'')
		document.getElementById("dpa_answer_string").value = myString
	}
}

function unpopulate_dpa_string(obj)
{
	if (obj.checked)
	{
		var myString = document.getElementById("dpa_answer_string").value
		myString = myString.replace(obj.value,'')
		document.getElementById("dpa_answer_string").value = myString
	}
	else
	{
		document.getElementById("dpa_answer_string").value += String(obj.value)
	}
}

