function FocusTextBox(Form) {
	if (Form==undefined)
		Form=document.forms[0];
	for (i=0; i<Form.elements.length; i++) {
		if (Form.elements[i].type.match(/text|password|select/)) {
			Form.elements[i].focus();
			break;
		};
	};
};

function ErrorMessageAlert(Message) {
	if (Message==undefined)
		Message='Oops! Field(s) highlighted require your attention!';
	var EMA=document.getElementById('ErrorMessageAlert');
	if (EMA!=undefined)
		EMA.innerHTML=Message;
	else alert(Message);
};
function EmptyFieldHighlight(Field, ErrorMessage) {
	AddClassToElement(Field, 'Error');
	if (document.getElementById('ErrorMessage_'+Field.name)) {
		document.getElementById('ErrorMessage_'+Field.name).innerHTML=ErrorMessage;
	};
};
function ClearFieldHighlight(Field) {
	RemoveClassFromElement(Field, 'Error');
	if (document.getElementById('ErrorMessage_'+Field.name))
		document.getElementById('ErrorMessage_'+Field.name).innerHTML='';
};

function ClearErrors(Form) {
	for (var i=0; i<Form.length; i++) {
		if (ElementIsOfClass(Form.elements[i], 'Error'))
			ClearFieldHighlight(Form.elements[i]);
	};
	FocusTextBox(Form);
};

var DoNotCheckEmailAddress=false;
function CheckFormNotEmpty(Form, Exceptions) {
	ClearErrors(Form);

	var error_i=-1;
	var CheckBoxChecked=false; var CheckBoxExists=false;
	var RadioOption=new Array(); var RadioUnchecked=0;
	var ConfirmationRequired=false;
	for (var i=0; i<Form.length; i++) {
	if (Exceptions==undefined || !Exceptions.match(new RegExp('(^|,\s*)'+Form.elements[i].name+'($|,)'))) {
		var ThisField=Form.elements[i];
		switch (ThisField.type) {
		case 'text':
		case 'textarea':
			if (Form.id=='LoginForm') {
				if (ThisField.value=='') {
					ThisField.id="Error";
					error_i=i;
				} else	ThisField.id='';
			} else if (ThisField.value=="") {
				EmptyFieldHighlight(ThisField, 'field is required');
				if (error_i<0)
					error_i=i;
			} else if (ThisField.name=='email_address' && Form.id!='LoginForm' && !DoNotCheckEmailAddress) {
				if (!CheckEmailAddress(ThisField)) {
					error_i=i;
				};
			};
			break;

		case 'password':
			if (ThisField.value=="" && !ThisField.name.match(/2$/)) {
				EmptyFieldHighlight(ThisField, 'password is required');
				if (error_i<0)
					error_i=i;
			} else if (ThisField.value.length<6) {
				EmptyFieldHighlight(ThisField, 'minimum 6 characters');
				if (error_i<0)
					error_i=i;
			};
			break;

		case 'file':
			if (ThisField.value=="") {
				EmptyFieldHighlight(ThisField, 'please choose a file to upload');
				error_i=i;
			}; break;

		case 'checkbox':
			if (ThisField.name=="confirmation") {
				if (!ThisField.checked) {
					ConfirmationRequired=i;
				};
			} else {
				if (ThisField.checked==true) {
					CheckBoxChecked=true;
				};
				CheckBoxExists=true;
			}; break;

		case 'radio':
			if (RadioOption[ThisField.name]==undefined) {
				eval('var FormRadioField=Form.'+ThisField.name+';');
				var ThisFieldChecked=false;
				for (i2=0; i2<FormRadioField.length; i2++) {
					if (FormRadioField[i2].checked) {
						ThisFieldChecked=true;
						break;
					};
				};
				if (!ThisFieldChecked) {
					EmptyFieldHighlight(ThisField, 'field is required');
					RadioOption[ThisField.name]=1;
					RadioUnchecked++;
				};
			};
			break;

		case 'select':
		case 'select-one':
			if (ThisField.options[ThisField.selectedIndex].value=="") {
				EmptyFieldHighlight(ThisField, 'choose an option');
				error_i=i;
			}; break;

		default:
			break;
		};

	};
	};

	if (error_i>=0) {
		if (Form.id!='LoginForm')
			ErrorMessageAlert();
		Form.elements[error_i].focus();
		return false;
	};
	if ((CheckBoxExists && !CheckBoxChecked) || RadioUnchecked) {
		ErrorMessageAlert('At least one selection must be made!');
		return false;
	};
	if (ConfirmationRequired!==false) {
		ErrorMessageAlert('Confirmation is required!');
		Form.elements[ConfirmationRequired].focus();
		return false;
	};
	return true;
};

function CheckFormAtLeastOneChecked(form) {
	for (var i=0; i<form.length; i++) {
		if (form.elements[i].type=="checkbox" && form.elements[i].checked==true) {
			return true;
		};
	};
//	SetErrorMessage("At least one must be checked!");
	return false;
};

function CheckInputNumbersOnly(input, specialallowed, Min, Max) {
	if (specialallowed==undefined)
		specialallowed='';
	var regexp=new RegExp('[^\\d'+specialallowed+']', 'g');
	input.value=input.value.replace(regexp, '');
	if (input.value=='') {
		input.value='0';
	};
	if (!isNaN(Min) && input.value<Min) {
		input.value=Min;
	};
	if (!isNaN(Max) && input.value>Max) {
		input.value=Max;
	};
	return true;
};

function CheckSelectedCount(form, max, additional_info) {
	var Total=0;
	for (var i=0; i<form.length; i++) {
		if (form.elements[i].type=="checkbox" && form.elements[i].checked==true) {
			Total++;
		};
	};

	if (!isNaN(max) && Total>max) {
		SetErrorMessage("Not more than "+max+((additional_info)?" "+additional_info+" ":"")+" can be selected!");
		return false;
	};
	return Total;
};

function CheckInputName(input, specialallowed) {
	input.value=input.value.replace(/(^\s+|\s+$)/g, "");
	var regexp=new RegExp("[^\\w"+specialallowed+"]", "g");
	input.value=input.value.replace(regexp, "");
	return true;
};

function CheckMaxCharacters(TextArea, Max) {
	if (TextArea.value.length>Max) {
		TextArea.value=TextArea.value.substr(0, Max);
//		TextArea.blur();
		return true;
	} else {
		return false;
	};
};

function UpdateCharsRemaining(TextArea, MaxChars, PlaceholderID) {
	CheckMaxCharacters(TextArea, MaxChars);
	var Placeholder=document.getElementById(PlaceholderID);
	Placeholder.innerHTML=MaxChars-TextArea.value.length;
	return true;
};

function CheckPasswords(password, password2) {
	var Error=false;
	if (!password2.value) {
		password2.focus();
		EmptyFieldHighlight(password2, '');
		Error=true;
	};
	if (password2.value.length<6) {
		password2.focus();
		EmptyFieldHighlight(password2, 'minimum 6 characters');
		Error=true;
	};
	if ((password.value=='' && password2.value=='') || !password.value) {
		password.focus();
		EmptyFieldHighlight(password, '');
		Error=true;
	};
	if (password.value.length<6) {
		password.focus();
		EmptyFieldHighlight(password, 'minimum 6 characters');
		Error=true;
	};
	if (password.value!=password2.value) {
//		password.value='';
//		password2.value='';
		password.focus();
		EmptyFieldHighlight(password, 'passwords do not match');
		EmptyFieldHighlight(password2, '');
		Error=true;
	};
	if (Error) {
		ErrorMessageAlert();
		return false;
	} else
		return true;
};

function CheckUploadImageType(FileInput) {
	if (!FileInput.value || FileInput.value.match(/(gif|jpg|jpeg|png)$/i))
		return true;
	else {
		FileInput.value='';
		FileInput.focus();
		EmptyFieldHighlight(FileInput.name, 'GIF/JPG/PNG images only');
		return false;
	};
};
function CheckUploadType(FileInput, AllowedExtensions) {
	if (!FileInput.value || FileInput.value.match(new RegExp('\.('+AllowedExtensions.replace(/\W/g, '|')+')$', 'i')))
		return true;
	else {
		FileInput.value='';
		FileInput.focus();
		EmptyFieldHighlight(FileInput.name, AllowedExtensions.replace(/\W/g, '/').toUpperCase()+' only');
		return false;
	};
};

function ToggleCheckboxes(Checkbox, NamePrefix) {
	if (Checkbox.checked)
		CheckAllCheckboxes(Checkbox.form, NamePrefix);
	else	UncheckAllCheckboxes(Checkbox.form, NamePrefix);
}

function CheckAllCheckboxes(Form, NamePrefix) {
	for (var i=0; i<Form.length; i++) {
	if ((NamePrefix==undefined || Form.elements[i].name.substr(0, NamePrefix.length)==NamePrefix) && Form.elements[i].type=='checkbox') {
		Form.elements[i].checked=true;
	};
	};
};
function UncheckAllCheckboxes(Form, NamePrefix) {
	for (var i=0; i<Form.length; i++) {
	if ((NamePrefix==undefined || Form.elements[i].name.substr(0, NamePrefix.length)==NamePrefix) && Form.elements[i].type=='checkbox') {
		Form.elements[i].checked=false;
	};
	};
};

function LoginPasswordCheck(ThisPassword) {
	if (ThisPassword.value=='' || ThisPassword.value.length<6) {
		ThisPassword.id='Error';
		ThisPassword.focus();
		return false;
	} else
		ThisPassword.id='';
	return true;
};
function CheckEmailAddress(EmailAddress) {
	if (EmailAddress.value=='' || !EmailAddress.value.match(/.+?@.+?\..+/)) {
		EmptyFieldHighlight(EmailAddress);
		EmailAddress.focus();
		return false;
	} else 
		ClearFieldHighlight(EmailAddress);
	return true;
};

function CheckEmailAliases(Textarea) {
	if (Textarea.value) {
		var Aliases=Textarea.value.split(/[^\w\.\_\-]+/m);
		var i;
		var InvalidAliases=new Array();
		var ValidAliases=new Array();
		for (i=0; i<Aliases.length; i++) {
			if (Aliases[i]!="") {
				if (!Aliases[i].match(/[\w\.\_\-]+/))
					InvalidAliases.push(Aliases[i]);
				else	ValidAliases.push(Aliases[i]);
			};
		};
		Textarea.value=ValidAliases.join("\n");
		if (InvalidAliases.length>0) {
			EmptyFieldHighlight(Textarea);
			return false;
		} else
			ClearFieldHighlight(Textarea);
	};
};
