/********************
 *
 *	JAVASCRIPT_FORMS.JS
 *	Form-specific javascript functions for ITC
 * 
********************/



// CLEARS A FORM FIELD IF IT MATCHES A SPECIFIED VALUE
function clearDefaultFieldValue(FormFieldObj, DefaultValue) {
	if (FormFieldObj.value == DefaultValue)
		FormFieldObj.value = '';
}



// SETS A DATE/TIME FIELD TO THE CURRENT DATE/TIME
function setDateTimeFields(InitFieldName, SetDate, SetTime, Timestamp) {
	
	InitFieldName_tmp = InitFieldName;
	Timestamp_tmp     = Timestamp;
	
	with (document) {
		
		if (SetTime) {
			
			var ampm = hour >= 12?'pm':'am';
			
			// hour
			var hour = Timestamp.substr(8,2);
			hour     = hour == 0?12:hour;
			
			getElementById(InitFieldName + '_hour_ID').selectedIndex =
			(Timestamp)?getSelectedIndex(getElementById(InitFieldName + '_hour_ID'), hour > 12?hour-12:hour):0;
			
			// minute
			getElementById(InitFieldName + '_minute_ID').selectedIndex =
			(Timestamp)?getSelectedIndex(getElementById(InitFieldName + '_minute_ID'), parseInt(Timestamp.substr(10,2))):0;
			
			// ampm		
			getElementById(InitFieldName + '_ampm_ID').selectedIndex =
			(Timestamp)?getSelectedIndex(getElementById(InitFieldName + '_ampm_ID'), ampm):0;
		}
	
		if (SetDate) {
		
			// year
			getElementById(InitFieldName + '_year_ID').selectedIndex =
			(Timestamp)?getSelectedIndex(getElementById(InitFieldName + '_year_ID'), Timestamp.substr(0,4)):0;
			
			// month
			getElementById(InitFieldName + '_month_ID').selectedIndex =
			(Timestamp)?getSelectedIndex(getElementById(InitFieldName + '_month_ID'), Timestamp.substr(4,2)):0;
			
			// Set the day last because it's ajax
			getDaysInMonth("document.getElementById(InitFieldName_tmp + '_day_ID').selectedIndex = (Timestamp_tmp)?" + 
			"getSelectedIndex(document.getElementById(InitFieldName_tmp + '_day_ID'), Timestamp_tmp.substr(6,2)):0;");
		}
	}
}


// GETS THE SelectedIndex FROM A SELECT MENU FROM A VALUE
function getSelectedIndex(SelectObj, FindValue) {
	for (var i = 0; i < SelectObj.length; i++) {
		if (SelectObj[i].value == FindValue)
			return i;
	}
}


// CONVERTS FORM DATA TO GET STRING
function convertFormDataToGETStr(formObj, AlternateParentElmntForFields) { 
		
	POSTDataArray = new Array();
	
	// Loop through form fields
	AltCounter = 0;
	ElmntsList = '';
	
	if (AlternateParentElmntForFields)
		LoopInObjectsArray = new Array(formObj.elements,
					       AlternateParentElmntForFields.getElementsByTagName('input'),
					       AlternateParentElmntForFields.getElementsByTagName('textarea'),
					       AlternateParentElmntForFields.getElementsByTagName('select')
					      );

	else
		LoopInObjectsArray = new Array(formObj.elements);
	
 	for (var i in LoopInObjectsArray) {
	
		for (var j = 0; j < LoopInObjectsArray[i].length; j++) {
			
			Elmnt = LoopInObjectsArray[i][j];
	
			Name  = '';
			Value = '';
			
			if (!Elmnt.disabled) {
			
				// Submit different information for various types of fields...
				switch (Elmnt.type) {
					
					// "Normal" field
					default:
						Name  = Elmnt.name;
						Value = Elmnt.value;
					break;
					
					// Radio
					case 'radio':
						if (Elmnt.checked) {
							Name  = Elmnt.name;
							Value = Elmnt.value;
						}
					break;
					
					// Checkbox
					case 'checkbox':
						Name  = Elmnt.name;
						Value = (Elmnt.checked)?Elmnt.value:'';
					break;
				}
				
				if (Name != '' && Name != 'undefined' && Name != undefined && Name != 'null' && Name != null) {
					POSTDataArray[AltCounter] = encodeURIComponent(Name) + '=' + encodeURIComponent(Value);
					AltCounter++;
				}
			}
		}
	}
	
	return POSTDataArray.join('&');
}

			
// PROCESSES AND OUTPUT FORM ERRORS
function outputFormErrors(formObj, formErrStrFromAJAX, ErrorOutputContainer) {
	
	// Error string is valid
	if (formErrStrFromAJAX.substr(0, 11) == 'FormErrors:') {
	
		ErrorOutput        = '';
		PipeExists         = formErrStrFromAJAX.match(/\|/);
		formErrStrFromAJAX = formErrStrFromAJAX.substring(11, formErrStrFromAJAX.length);
		formErrArray       = (PipeExists)?formErrStrFromAJAX.split('|'):Array(formErrStrFromAJAX);
		
		ErrorFieldsArray_array = new Array();
		
		for (var i in formErrArray) {
			SplitCharAt      = formErrArray[i].indexOf('=');
			ErrorFields      = formErrArray[i].substr(0, SplitCharAt);
			ErrorFieldsArray = (ErrorFields.indexOf(',') != -1)?ErrorFields.split(','):new Array(ErrorFields);
			ErrorOutput_tmp  = formErrArray[i].substr(SplitCharAt+1);
			
			if (ErrorOutput_tmp != '')
				ErrorOutput += '<li>' + ErrorOutput_tmp + '</li>';
	
			for (var j in ErrorFieldsArray) {
				try {
					document.getElementById(ErrorFieldsArray[j]).className = 'FieldLabel_Invalid';
				}
				catch (error) {
					//alert('Error with field: ' + ErrorFieldsArray[j] + '\n\n' + error.description);
				}
			}
			
			ErrorFieldsArray_array.push(ErrorFieldsArray);
		}
		
		ErrorOutputContainer.innerHTML = '<b>The form could not be processed for the following reasons...</b><ul>' + ErrorOutput + '</ul>';
		
		document.location.href = '#';
	}
	else
		alert(formErrStrFromAJAX);
}


// RESETS ERROR OUTPUT LABEL FIELDS TO ORIGINAL CLASSNAMES
function resetErrorOutputClassNames(InvalidClassName, ValidClassName, MasterTagName) {
	TagObjs = document.getElementsByTagName(MasterTagName);
	for (i in TagObjs) {
		if (TagObjs[i].className == InvalidClassName)
			TagObjs[i].className = ValidClassName;
	}
}


// TOGGLES A PASSWORD FIELD BACK/FORTH TO TEXT FIELD
function togglePasswordFields(SourceCheckObj, ObjIDsArray) {
	SetType = (SourceCheckObj.checked)?'text':'password';
	
	for (var i in ObjIDsArray)
		document.getElementById(ObjIDsArray[i]).type = SetType;
}


// COPIES THE VALUE OF A GIVEN FIELD TO THE SYSTEM CLIPBOARD
function copyFormFieldTextToClipboard(FieldObj) {
	TextToCopy = FieldObj.createTextRange();
	TextToCopy.execCommand("Copy");
}
