// this script checks that the required fields are filled out
var field_is_correct_color = "";

function unhighlight_all(debug) {
	if ( !!(document.getElementById) ){
	
		// http://www.webreference.com/programming/javascript/operalies/
		// I take extra care with what gets returned from iz. 
		// I want to get a 'real' true or false, and not a null or an empty string. 
		// Prefixing !! to a condition test forces the true / false syntax to be returned.
		for (var i = 0; i < clo_array.length; i++){
			var element_name = clo_array[i].element_name_to_focus_on;
			// inspectStyle(document.getElementById("label_for_" + element_name));

			if (debug){
				alert(element_name);
			}
			if (clo_array[i].defaultColor){
				document.getElementById("label_for_" + element_name).style.color = clo_array[i].defaultColor; // document.getElementById("label_for_" + element_name).style.defaultColor;
			}
//			alert('+' + clo_array[i].element_name_to_focus_on + '+' + clo_array[i].defaultColor + "+" + clo_array[i].defaultcssText + '+');
		}
	}
	else if ( (navigator.appName.indexOf('Microsoft') != -1) && (parseInt(navigator.appVersion) == 4) ){
		for (var i = 0; i < clo_array.length; i++){
			var element_name = clo_array[i].element_name_to_focus_on;
			if (debug){
				alert(element_name);
			}
			document.all('label_for_' + element_name).style.color = clo_array[i].defaultColor;
		}
	}

	return true;
}

function inspectStyle(elm){
	if (elm.style){
		var str = "";
		for (var i in elm.style){
			str += i + ": " + elm.style[i] + "::";
		}
		alert(str);
	}
}

function highlight(conditional_logic_object) {
//	document.all('label_for_' + element_name).style.backgroundColor="red";

	var highlight_color = 'red';
//	var css_text = '{COLOR: red}';
	
	if ( !!(document.getElementById) ){
		// http://www.webreference.com/programming/javascript/operalies/
		// I take extra care with what gets returned from iz. 
		// I want to get a 'real' true or false, and not a null or an empty string. 
		// Prefixing !! to a condition test forces the true / false syntax to be returned.
//		conditional_logic_object.defaultColor = document.getElementById("label_for_" + conditional_logic_object.element_name_to_focus_on).style.color;

//		inspectStyle(document.getElementById("label_for_" + conditional_logic_object.element_name_to_focus_on));
//		alert(conditional_logic_object.defaultColor);
		
		document.getElementById("label_for_" + conditional_logic_object.element_name_to_focus_on).style.color = highlight_color;

		return true;
	}


/*
	According to:
	http://www.xs4all.nl/~ppk/js/layerwrite.html
	
	if I try to dynamically regenerate a layer, then I'll need to position it absolutely.
	This is probably against Nortel Policy (or at least it should be)
	
	if ((navigator.appName== 'Netscape') && (parseInt(navigator.appVersion) == 4)){
		var eval_statement = 'document.ids.label_for_' + element_name; // + '.style.color="' + highlight_color + '"';
		alert(eval_statement);
		eval(eval_statement);
		return true;
	}
*/

	if (	(navigator.appName.indexOf('Microsoft') != -1) && (parseInt(navigator.appVersion) == 4)	){
//		alert(parseInt(navigator.appVersion));
		conditional_logic_object.defaultColor = document.all('label_for_' + conditional_logic_object.element_name_to_focus_on).style.backgroundColor;
		document.all('label_for_' + conditional_logic_object.element_name_to_focus_on).style.color = highlight_color;
		return true;
	}
	
	return false;
}

function checkData (the_form, debug){
	var the_form_name = the_form.name;
	
	var alert_message_array = new Array();
	var satisfied_clo_array = new Array();
	
	var element_name_to_focus_on = "";
	
// 	------------------------------------------------------------
//	Process Conditional Logic
	for (var i = 0; i < clo_array.length; i++){
		var conditional_logic_object = clo_array[i];

		if (( !!(document.getElementById) ) && (! conditional_logic_object.defaultColorSet)){
			current_element = document.getElementById("label_for_" + conditional_logic_object.element_name_to_focus_on);
			var defaultColor = current_element.style.color;
			
			if (defaultColor == ''){
				if (field_is_correct_color != ''){
					defaultColor = field_is_correct_color;
				}
				else {
	//				inspectStyle(current_element);
					defaultColor = document.fgColor;
	//				defaultColor = 'black';
				}
			}
			conditional_logic_object.defaultColor = defaultColor;
			conditional_logic_object.defaultColorSet = true;
		}
		
//		alert(clo_array[i].get_query(true));
		if (conditional_logic_object.logic_satisfied()){
			alert_message_array[alert_message_array.length] = conditional_logic_object.alert_message;
			satisfied_clo_array[satisfied_clo_array.length] = conditional_logic_object;
			var element_type = get_type(conditional_logic_object.form_name, conditional_logic_object.element_name_to_focus_on);
			if ( (element_type != 'radio') && (element_type != 'checkbox') && (element_name_to_focus_on == "") ){
				element_name_to_focus_on = conditional_logic_object.element_name_to_focus_on;
			}
		}
	}
	
	if (alert_message_array.length > 0){
		if (element_name_to_focus_on != ""){
			the_form.elements[element_name_to_focus_on].focus();
		}
		var alert_message = "The following need to be fixed: ";

		if ((navigator.appName == 'Netscape') && (parseInt(navigator.appVersion) == 4) && (navigator.platform.indexOf("Mac") != -1)){
			// Navigator for mac can only show 254 characters of error message
			if (alert_message_array.length == 1){
				alert_message += alert_message_array[0];
			}
			else {
				var maximum_characters_a_mac_alert_can_display = 230;
				var more_message = "\n\t" + "[More]";
				var alert_message_length = alert_message.length + more_message.length;
				for (var i = 0; i < alert_message_array.length; i++){
					var new_alert_message_length = (alert_message_length + alert_message_array[i].length);
					if (	(new_alert_message_length < maximum_characters_a_mac_alert_can_display) 
/*						||
						(
						(new_alert_message_length - more_message.length < maximum_characters_a_mac_alert_can_display)
						&&
						(i == alert_message_array.length - 1)
						)
*/
						){
//						alert(new_alert_message_length + " " + maximum_characters_a_mac_alert_can_display);
						
						alert_message += ("\n\t- " + alert_message_array[i]);
						alert_message_length += alert_message_array[i].length;
					}
					else {
						alert_message += more_message;
						break;
					}
				}
			}
			
		}
		else {
			alert_message += "\n\t- ";
			if (alert_message_array.length == 1){
				alert_message += alert_message_array[0];
			}
			else {
				alert_message += alert_message_array.join("\n\t- ");
			}
		}
		alert(alert_message);

		unhighlight_all(debug);
		
		for (var i = 0; i < satisfied_clo_array.length; i++){
			var satisfied_conditional_logic_object = satisfied_clo_array[i];
			highlight(satisfied_conditional_logic_object);
/*
			var javascript_path_to_image = 'document.' + element_name + '_img';
			var image = eval(javascript_path_to_image);
			if (image){
				eval(javascript_path_to_image + ".src = 'images/star_red.gif'");
			}
*/
		}
		
		return false;
	}
	
	if (the_form_name == 'cu_website'){
		the_form.formname.value = formname_array[the_form.web_issue_type.options[the_form.web_issue_type.selectedIndex].value];
	}
	
//	alert(the_form.formname.value);
	
	return true;
}

