function trim(str)
{
	if (str == null)
		return str;
	else
		return str.replace(/^\s+|\s+$/g,"");
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function ltrim(str)
{
	if (str == null)
		return str;
	else
		return str.replace(/^\s+/,"");
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function rtrim(str)
{
	if(str == null)
		return str;
	else
		return str.replace(/\s+$/,"");
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function isNotEmpty(val)
{
	return (val.length > 0);
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function isAtLeastLength(val, minLength)
{
	return (val.length >= minLength);
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function isAtLeastValue(val, minValue)
{
	return (val >= minValue);
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function isEmail(val)
{
	var emailRegEx = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
//	var emailRegEx = /^([\w]+)(.[\w]+)*@([\w]+)(.[\w]{2,3}){1,2}$/;
	return emailRegEx.test(val);
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function isAuthorFieldUnique(fieldName, val)
{
	var jsonResult = "helllllo";
//	var jsonResult = null;
	var pars = 'fieldName='+fieldName+'&val='+val+'&date='+Date();
	new Ajax.Request(daDomain+'/blimda/AutoForm/IsAuthorFieldUnique.asp', {
		parameters: pars,
		asynchronous: false,
		onSuccess: function(theResponse){jsonResult = theResponse.responseText.evalJSON();},
		onFailure: function(theResponse){alert("Server error.  Try again."); alert(theResponse.responseText);}
	});
	return jsonResult;
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function isAuthorNameUnique(val1, val2)
{
	var jsonResult = null;
	var pars = 'val1='+val1+'&val2='+val2+'&date='+Date();
	new Ajax.Request(daDomain+'/blimda/AutoForm/IsAuthorNameUnique.asp', {
		parameters: pars,
		asynchronous: false,
		onSuccess: function(theResponse){jsonResult = theResponse.responseText.evalJSON();},
		onFailure: function(theResponse){alert("Server error.  Try again.");}
	});
	return jsonResult;
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function isEntityFieldUnique(fieldName, val)
{
	var jsonResult = null;
	var pars = 'fieldName='+fieldName+'&val='+val+'&date='+Date();
	new Ajax.Request(daDomain+'/blimda/AutoForm/IsEntityFieldUnique.asp', {
		parameters: pars,
		asynchronous: false,
		onSuccess: function(theResponse){jsonResult = theResponse.responseText.evalJSON();},
		onFailure: function(theResponse){alert("Server error.  Try again.");}
	});
	return jsonResult;
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function isAuthorFieldUniqueNotSelf(fieldName, val, primKeyVal)
{
	var jsonResult = null;
	var pars = 'fieldName='+fieldName+'&val='+val+'&primKeyVal='+primKeyVal+'&date='+Date();
	new Ajax.Request(daDomain+'/blimda/AutoForm/IsAuthorFieldUniqueNotSelf.asp', {
		parameters: pars,
		asynchronous: false,
		onSuccess: function(theResponse){jsonResult = theResponse.responseText.evalJSON();},
		onFailure: function(theResponse){alert("Server error.  Try again.");}
	});
	return jsonResult;
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function isAuthorNameUniqueNotSelf(val1, val2, primKeyVal)
{
	var jsonResult = null;
	var pars = 'val1='+val1+'&val2='+val2+'&primKeyVal='+primKeyVal+'&date='+Date();
	new Ajax.Request(daDomain+'/blimda/AutoForm/IsAuthorNameUniqueNotSelf.asp', {
		parameters: pars,
		asynchronous: false,
		onSuccess: function(theResponse){jsonResult = theResponse.responseText.evalJSON();},
		onFailure: function(theResponse){alert("Server error.  Try again.");}
	});
	return jsonResult;
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function isEntityFieldUniqueNotSelf(fieldName, val, primKeyVal)
{
	var jsonResult = null;
	var pars = 'fieldName='+fieldName+'&val='+val+'&primKeyVal='+primKeyVal+'&date='+Date();
	new Ajax.Request(daDomain+'/blimda/AutoForm/IsEntityFieldUniqueNotSelf.asp', {
		parameters: pars,
		asynchronous: false,
		onSuccess: function(theResponse){jsonResult = theResponse.responseText.evalJSON();},
		onFailure: function(theResponse){alert("Server error.  Try again.");}
	});
	return jsonResult;
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function atLeastChecked(checkGroupName, min)
{
	var numChecked = 0;
	$$('input[name='+checkGroupName+'][type=checkbox]').each(function(aCheckbox)
	{if (aCheckbox.checked){numChecked++;}});

	return (numChecked >= min);
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function handleAParticularForm(formID, actionPage, divID)
{
	var jsonResult = "";
	var serializedParams = Form.serializeElements( $(formID).getElements() );
	var pars = serializedParams;
	new Ajax.Request(daDomain+actionPage, {
		parameters: pars,
		asynchronous: false,
		method: 'get',
		onSuccess: function(theResponse){jsonResult = theResponse.responseText.evalJSON();},
		onFailure: function(theResponse){jsonResult = "{'successfulInsert':false, 'message':'There was an error when processing your form.'}".evalJSON();}
	});
	if(jsonResult.successfulInsert)
	{
		$(divID).update(jsonResult.message)
	}
	else
	{
		$(divID).update(jsonResult.message);
	}
	return false;
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function validateAParticularFormORIGINAL(formID)
{
	var myForm;
	var myTruths;
	var shouldContinue = true;
	var serializedParams
	var jsonResult;

	myForm = $(formID).getElements();
	myForm = $A(myForm);

	myForm.each(function(formEl, i)
	{
//		$(formEl.name+"Warning").update("");
		$(formID).select("[name='"+formEl.name+"Warning']")[0].update("");

		if ($(formEl).hasClassName('authoremailUnique'))
		{
			if (!isAuthorFieldUnique("authoremail", $F(formEl)).isUnique){$(formID).select("[name='"+formEl.name+"Warning']")[0].insert("Email Address is taken."); shouldContinue = false;}
		}
		if ($(formEl).hasClassName('usernameUnique'))
		{
			if (!isAuthorFieldUnique("username", $F(formEl)).isUnique){$(formID).select("[name='"+formEl.name+"Warning']")[0].insert("Username is taken."); shouldContinue = false;}
		}
		if ($(formEl).hasClassName('isNotEmpty'))
		{
			if ( !isNotEmpty($F(formEl)) ){$(formID).select("[name='"+formEl.name+"Warning']")[0].insert("Must not be empty."); shouldContinue = false;}
		}
		if ($(formEl).hasClassName('isEmail'))
		{
			if (!isEmail($F(formEl))){$(formID).select("[name='"+formEl.name+"Warning']")[0].insert("Invalid Email Address."); shouldContinue = false;}
		}
		if ($(formEl).hasClassName('atLeastChecked'))
		{
			//$w(formEl.className)
			if (!atLeastChecked(formEl.name, 1)){$(formID).select("[name='"+formEl.name+"Warning']")[0].insert("At least 1 must be checked."); shouldContinue = false;}
		}
		if ($(formEl).hasClassName('isConfirmation'))
		{
			if(!($F(formEl.name.replace('confirm', '')) == $F(formEl.name))){$(formID).select("[name='"+formEl.name+"Warning']")[0].insert("Mismatch."); shouldContinue = false;}
		}
	});

	return shouldContinue;
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function joinFormWrapper(formID)
{
	var formObj = validateAParticularForm(formID);

	if(formObj == null)
	{
		alert('Error:  Check formID');
		return false;
	}

	if(!formObj.isValid)
	{
		displayErrors(formObj);
	}
	else
	{
		alert('congrats.  valid form.');
	}
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function validateAParticularForm(formID)
{
	var myForm;
	var myTruths;
	var shouldContinue = true;
	var serializedParams
	var jsonText;

	myForm = $(formID).getElements();
	myForm = $A(myForm);

	jsonText = "{\"elements\" : [";
	myForm.each(function(formEl, i)
	{
//		jsonText += " {\"element\" : \""+$(formEl).readAttribute('id')+"\" , ";
		jsonText += " {\"element\" : \""+formEl.name+"\" , ";
		jsonText += " \"elementValue\"  : \""+$F(formEl)+"\", ";

		if ($(formEl).readAttribute('title') != null)
		{
			jsonText += " \"elementTitle\"  : \""+$(formEl).readAttribute('title')+"\", ";
		}
		else
		{
			jsonText += " \"elementTitle\"  : \""+formEl.name+"\", ";
		}


		jsonText += " \"errors\"  : [";
		if ($(formEl).hasClassName('authoremailUnique'))
		{
			if (!isAuthorFieldUnique("authoremail", $F(formEl)).isUnique)
			{
				jsonText += "\"authoremailUnique\",";
				shouldContinue = false;
			}
		}
		if ($(formEl).hasClassName('usernameUnique'))
		{
			if (!isAuthorFieldUnique("username", $F(formEl)).isUnique)
			{
				jsonText += "\"usernameUnique\",";
				shouldContinue = false;
			}
		}
		if ($(formEl).hasClassName('isNotEmpty'))
		{
			if ( !isNotEmpty($F(formEl)) )
			{
				jsonText += "\"isNotEmpty\",";
				shouldContinue = false;
			}
		}
		if ($(formEl).hasClassName('isEmail'))
		{
			if (!isEmail($F(formEl)))
			{
				jsonText += "\"isEmail\",";
				shouldContinue = false;
			}
		}
		if ($(formEl).hasClassName('atLeastChecked'))
		{
			//$w(formEl.className)
			if (!atLeastChecked(formEl.name, 1))
			{
				jsonText += "\"atLeastChecked\",";
				shouldContinue = false;
			}
		}
		if ($(formEl).hasClassName('isConfirmation'))
		{
			if(!($F(formEl.name.replace('confirm', '')) == $F(formEl.name)))
			{
				jsonText += "\"isConfirmation\",";
				shouldContinue = false;
			}
		}

		if (jsonText.charAt(jsonText.length-1) == ",")
		{
			jsonText = jsonText.substring(0, jsonText.length-1);
		}
		jsonText += " ]},";
	});

	if (jsonText.charAt(jsonText.length-1) == ",")
	{
		jsonText = jsonText.substring(0, jsonText.length-1);
	}
	jsonText += "],";
	jsonText += "\"isValid\" : "+shouldContinue;
	jsonText += "}"
	jsonText = jsonText.evalJSON();

//	return false;
	return jsonText;
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function displayErrors(formObj)
{
	var errorMessages = new Array();
	errorMessages["authoremailUnique"]	=	"E-mail already exists.";
	errorMessages["usernameUnique"]		=	"Username already exists.";
	errorMessages["isNotEmpty"]			=	"<field> Cannot be empty.";
	errorMessages["isEmail"]			=	"'<val>' is not a valid email address.";
	errorMessages["atLeastChecked"]		=	"Must check at least one.";
	errorMessages["isConfirmation"]		=	"<field> Confirmation mismatch.";

	var errorMessageFormatted;
	var formEl;

	formObj.elements.each(function(formEl)
	{
		$(formEl.element+'Warning').update('');
		formEl.errors.each(function(elerror)
		{
			errorMessageFormatted = errorMessages[elerror].replace("<val>", formEl.elementValue);
			errorMessageFormatted = errorMessageFormatted.replace("<field>", formEl.elementTitle);
			$(formEl.element+'Warning').insert(errorMessageFormatted + '<br>');
		});
	});

	$('errorCount').update('There are '+countErroneousElements(formObj)+' errors in your form.');

	return false;
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function countErrors(formObj)
{
	var errorCount;
	errorCount = 0;

	if (formObj == null)
	{
		errorCount = -1
	}

	formObj.elements.each(function(formEl)
	{
		errorCount += formEl.errors.length
	});

	return errorCount;
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/
function countErroneousElements(formObj)
{
	var errorCount;
	errorCount = 0;

	if (formObj == null)
	{
		errorCount = -1
	}

	formObj.elements.each(function(formEl)
	{
		if (formEl.errors.length > 0)
		{
			errorCount += 1
		}
	});

	return errorCount;
}
/**--------------------------------------------------------------------------------------------------------**/

/**--------------------------------------------------------------------------------------------------------**/