/*
 * This file is /myjs/forms.js
 *
 *  bcmetis.ca\www\html\myjs\forms.js
 *  
 *  THERE IS ALSO A forms.js HERE:
 *  bcmetis.ca/bcmetis.ca/www/html/myjs/forms.js
 *  bcmetis.ca/bcmetis.ca/www/html/mnbcharvester/myjs/forms.js
 *
 * As of Sept 22, 2008, it contains only function checkForm()
 *
 * This file is being borrowed to contain other form related javascript functions
 *
 * */


function SetSelectSelected(SelectName, ValueToSelect)
{
	// alert('This is SetSelectSelected');

	with(window.document.forms[0])
	{
		// alert('length is ' + length);
		for (ij=0; ij < length; ij++)
		{
			// alert('elements[ij].name is ' + elements[ij].name);
			if (elements[ij].name == SelectName)
			{
				// alert ('found ' + SelectName);
				for (jk = 0; jk < elements[ij].length; jk++)
				{
// alert('options[jk].value is ' + elements[ij].options[jk].value + '; options[jk].text is ' + elements[ij].options[jk].text);

					if (elements[ij].options[jk].value == ValueToSelect || elements[ij].options[jk].text == ValueToSelect)
					{
						elements[ij].selectedIndex = jk;
						// alert ('Selecting (value) ' + elements[ij].options[jk].value);
					}
				}
			}
		}

	}
}


/**
 * Checks passed form object for required inputs.
 * Retrieves value of associated label if available for error message
 *
 * @param formObj Form object to be checked
 * @return bool false if a required field is empty, true otherwise
 */
function checkForm(formObj){
	// Set types of fields to be checked
	var fields = Array();
	fields.push(formObj.getElementsByTagName('input'));
	fields.push(formObj.getElementsByTagName('select'));
	fields.push(formObj.getElementsByTagName('textarea'));
	// fields.push(formObj.getElementsByTagName('radio'));

	var labels = formObj.getElementsByTagName('label');
	
	var missing=Array();
	
	// Loop through each set of fields
	for(var k=0 ; k<fields.length ; k++){

		// Loop through all fields of type
		for(var i=0; i < fields[k].length ; i++){

			// Check if field has been marked as required
			if(fields[k][i].className.indexOf('required') != -1){

				// check if field is empty
				if(fields[k][i].value==''){

					// search for a label element to get a better description
					if(fields[k][i].id!=''){
						for(var l=0; l<labels.length; l++){
							if(labels[l].htmlFor == fields[k][i].id){ // label is for current field
							     missing.push(labels[l].childNodes[0].nodeValue.replace(/^\s+|\s+$/g,""));// Get text inside label with whitespace trimmed
							     // TODO check that
							     break; // stop searching
							}
						}
						if(l==labels.length) // looped through all labels without match
							missing.push(fields[k][i].name); // add field's name attribute to array

					}
					// TODO handle nested label & input (eg. <label>Field <input /></label>)
					else
						missing.push(fields[k][i].name); // add field's name attribute to array
					
					fields[k][i].style.backgroundColor='#FFBBBB'; // highlight field red
				}
				else{ // Field has value
					fields[k][i].style.backgroundColor=''; // Remove special colouring
				}
			}// end if field is required
		}
	}
	if(missing.length>0){
		alert("Missing Fields: \n - "+missing.join("\n - "));
		return false;
	}
	return true;
}
