
window.onload = function() {
	
	var newmysteries_setup = function() {
		
		var iterate = function(list, fn) {
			if (!list || (list.length == 0)) { return; }
			for (var i=0; i< list.length; i++) { fn(list[i]); }
		}
		
		var is_true = function(list, fn) {
			var val = false;
			if (!list || (list.length == 0)) { return val; }
			for (var i=0; i< list.length; i++) { val = fn(list[i], val); }
			return val;
		}
		
		var setup_form = function(form) {
			
			if (!form.className.match(/\bpackage_schedule_form\b/)) return;
			
			var check_forms = function() {
				
				var form_has_selection = function(form) {
					
					var init_or_element_has_value = function(elem, init) {
						return (init || (('radio' === elem.type) && elem.checked && ('' !== elem.value)));
					}
					
					return is_true(form.elements, init_or_element_has_value);
				}
				
				var disable_form = function(form) {
					
					var disable_element = function(elem) {
						if (('radio' === elem.type) || ('submit' === elem.type)) {
							elem.disabled = true;
						}
					}
					
					if (!form_has_selection(form)) {
						iterate(form.elements, disable_element);
					}
				}
				
				var enable_form = function(form) {
					
					var enable_element = function(elem) {
						if (('radio' === elem.type) || ('submit' === elem.type)) {
							elem.disabled = false;
						}
					}
					
					iterate(form.elements, enable_element);
				}
				
				var update_label = function(label) {
					if (!label.htmlFor && !label.getAttribute('for')) { return; }
					
					var control = document.getElementById((label.htmlFor ? label.htmlFor : label.getAttribute('for')));
					
					if (!control) { return; }
					
					if (control.disabled) {
						label.style.color='lightgrey';
					} else if (control.checked) {
						label.style.color='darkred';
					} else {
						label.style.color='black';
					}
				}
				
				var init_or_form_has_selection = function(form, init) {
					return (init || form_has_selection(form));
				}
				
				if (is_true(document.forms, init_or_form_has_selection)) {
					iterate(document.forms, disable_form);
				} else {
					iterate(document.forms, enable_form);
				}
				
				iterate(document.getElementsByTagName('label'), update_label);
				
			}
			
			var try_check_forms = function() {
				try {
					check_forms()
				} catch(e) {
					//do nothing
				}
			}
			
			var setup_elements = function(input) {
				if ('radio' === input.type) input.onclick = try_check_forms;
			}
			
			iterate(form.getElementsByTagName('input'), setup_elements);
			
			check_forms();
			
		}
		
		iterate(document.forms, setup_form);
	}
	
	try{
		newmysteries_setup();
	} catch(e) {
		//do nothing
	}
}


