// Form Validator


//alert("client side enabled");

var minimum;
var defaultMinimum = 2; // default value for minimum range comparison
var maximum;
var defaultMaximum = 99; // default value for maximum range comparison
var ErrorFieldCss = "displayError";
var ArErrors = new Array();

// Validation tests ************************************************************************************
function validateEmpty(field, errorField, errorMessage, fieldMin, fieldMax)
{
	// assign the minimum and maximum values and checks whether they exist, if they don't the functions will assign some default values
	var localError = 0;
	minimum = fieldMin; 
	maximum = fieldMax;	
	checkMinimumValue(); 
	checkMaximumValue();
	if( getValue(field) == "" || getValue(field) == null)
	{
		
		ArErrors.push(new objError(field, errorField, errorMessage));
		localError++;
	}
	
	if(getValue(field).length < minimum)
	{
		ArErrors.push(new objError(field, errorField, outPutMinimumErrorMsg(minimum)));
		localError++;
	}
	
	if(getValue(field).length > maximum)
	{
		ArErrors.push(new objError(field, errorField, outPutMaximumErrorMsg(maximum)));
		localError++;
	}
	
	if(localError == 0)
	{
		clearErrorField(errorField);	
	}
	
	resetMinimumMaximumValues();
}

function validateNumber(field, errorField, errorMessage)
{
	if(isNaN(getValue(field)))
	{
		ArErrors.push(new objError(field, errorField, errorMessage));
	}
	else
	{
		clearErrorField(errorField);
	}
}

function compareFields(field1, field2, errorField, errorMessage)
{
	if(getValue(field1) != getValue(field2))
	{
		ArErrors.push(new objError(field2, errorField, errorMessage));
	}
	else
	{
		clearErrorField(errorField);
	}
}

function validateEmail(field, errorField, errorMessage)
{
	EmailPart1 = document.getElementById(field).value.indexOf("@");
	EmailPart2 = document.getElementById(field).value.lastIndexOf(".");

	if (EmailPart1<1||EmailPart2-EmailPart1<2)
	{
		ArErrors.push(new objError(field, errorField, errorMessage));
	}
	else
	{
		clearErrorField(errorField);
	}
	
}

function validateSelect(field, errorField, errorMessage)
{
	var getSelectedIndex = document.getElementById(field).selectedIndex;
	if(getSelectedIndex == 0)
	{
		ArErrors.push(new objError(field, errorField, errorMessage));
	}
	else
	{
		clearErrorField(errorField);
	}	
}

// Other functions ************************************************************************************

function objError(strField, strErrorField, strMsg)
{
	this.field = strField;
	this.errorField = strErrorField;
	this.msg = 	strMsg;
}

function checkErrors()
{
		
	if(ArErrors.length > 0)
	{
		return false;
	}
	else if (ArErrors.length == 0)
	{
		return true;
	}	
}

function displayErrorsInField()
{
	// reset the field before populating
	for (i=0; i<ArErrors.length; i++)
	{
		document.getElementById(ArErrors[i].errorField).innerHTML = "";
	}
	
	for (i=0; i<ArErrors.length; i++)
	{
		document.getElementById(ArErrors[i].errorField).innerHTML += "<span class='"+ ErrorFieldCss + "'>" + ArErrors[i].msg + "</span><br />";
	}
}

// used to clear the fields if error messages existed on any previous check
function clearErrorField(strErrorField)
{
	//alert("clearErrorField called " + strErrorField);
	document.getElementById(strErrorField).innerHTML = "";
}

function getValue(whichField)
{
	theValue = document.getElementById(whichField).value;
	//alert(theValue);
	return theValue;
}

function checkMinimumValue()
{
	if(minimum == null)
	{
		minimum = defaultMinimum;
	}	
}

function outPutMinimumErrorMsg(intValue)
{	
	intValue = intValue - 1;
	// conditional check to clean up the sentence
	if (intValue == 1)
	{
	 endSentence = "";	
	}
	else
	{
	endSentence = "s";	
	}
	var msg = "You must enter more then " + intValue + " character" + endSentence; 
	return msg;
}

function checkMaximumValue()
{
	if(maximum == null)
	{
		maximum = defaultMaximum;		
	}	
}

function outPutMaximumErrorMsg(intValue)
{
	var msg = "You cannot exceed " + intValue + " characters"; 
	return msg;
}

function resetMinimumMaximumValues()
{
	minimum = null;
	maximum = null;
}