function get_form_field_map(form_obj) {
	// put form fields in array indexed by field name
	var field_map = new Object;
	var form_fields = form_obj.getElementsByTagName("input");

	var f,cur_field,field_name;
	
	for(f = 0; f < form_fields.length; f++) {
		cur_field = form_fields[f];
		field_name = cur_field.getAttribute("name");
		
		if(field_name.length > 0) {
			field_map[field_name] = cur_field;
		}
	}
	
	return field_map;
}

function validate_download_form(form_obj) {
	var field_map = get_form_field_map(form_obj);
	clear_form_error_list();

	// determin required fields
	// required fields are listed in hidden input with name 'require'
	// if this is missing, validation is skipped
	if(!field_map["require"]) {
		return true;
	}
	
	var missing_fields = new Array;
	var reqfields_string = field_map["require"].value;
	var required_fields = reqfields_string.split(",");
	
	var f;
	
	for(f = 0; f < required_fields.length; f++) {
		var reqfield_name = required_fields[f];
	
		var reqfield = field_map[reqfield_name];
		var reqfield_val = reqfield.value;
		
		if(reqfield_val.length == 0) {
			missing_fields[missing_fields.length] = reqfield_name;
		}
	}

	if(missing_fields.length > 0) {
		display_list_title();
	
		for(f = 0; f < missing_fields.length; f++) {
			var missing_field_name = missing_fields[f];
			display_form_field_error(missing_field_name);
		}
		
		return false;
	}
	
	return true;
}

function display_form_field_error(field_name) {
	var error_container = document.getElementById('extra-info');
	if(!error_container) {
		return false;
	}

	var error_msgs = new Array;
	error_msgs["firstname"] = "Missing contact's first name.";
	error_msgs["lastname"] = "Missing contact's last name.";
	error_msgs["company"] = "Missing company name.";
	error_msgs["phone"] = "Missing telephone number.";
	error_msgs["email"] = "Missing e-mail address.";
	error_msgs["product"] = "Missing product code.";
	
	if(!error_msgs[field_name]) {
		// error msg not found
		return false;
	}
	
	var list = document.getElementById('_axFormErrList');
	if(!list) {
		list = document.createElement("ul");
		error_container.appendChild(list);
		list.id = "_axFormErrList";
	}
	
	
	var list_item = document.createElement("li");
	var list_item_text = document.createTextNode(error_msgs[field_name]);
	list_item.appendChild(list_item_text);
	list.appendChild(list_item);
}

function display_list_title() {
	var error_container = document.getElementById('extra-info');
	if(!error_container) {
		return false;
	}
	
	if(document.getElementById('_axFormErrTitle')) {
		// title already displayed
		return true;
	}
	
	var list_title = document.createElement("p");
	list_title.id = "_axFormErrTitle";
	list_title.className = "error";
	list_title.style.fontWeight = "bold";
	list_title_text = document.createTextNode("The Form was not submitted due to the following error(s):");
	list_title.appendChild(list_title_text);
	
	error_container.appendChild(list_title);
}

function clear_form_error_list() {
	var list_title = document.getElementById('_axFormErrTitle');
	if(list_title) {
		list_title.parentNode.removeChild(list_title);
	}

	var list = document.getElementById('_axFormErrList');
	if(list && list.parentNode.removeChild(list)) {
		return true;
	}
	
	return false;
}
