var isError = false;
var errors = new Array();
var errorColor = "#ff6868";
var firstElement = "";
var firstElementType = "";

/*****************************************************************
* Possible Values for displayType:
*		"Alert"	-	Errors listed in an alert box
*		"Inline" -	Errors listed in div, span, table cell, or any other 
*					block-level element having an 'innerHTML' property
*****************************************************************/
function DisplayErrors(displayType, displayFieldID)
{
	if (isError)
	{
		//just in case they passed in the wrong case ...
		var displayChoice = displayType.toLowerCase();
		
		//show the display field, if applicable...
		var theDisplayField;
		if (displayChoice == "inline")
		{
			theDisplayField = document.getElementById(displayFieldID);
			theDisplayField.style.display="block";		
		}
		
		
		//Begin the error string...
		var displayString = "The following fields must be corrected:";
		if (displayChoice == "inline")
			displayString += "<br />";
		else
			displayString += "\n";
		
		//collect the errors into the error string...
		for(var i=0; i<errors.length; i++)
		{
			//add the appropriate separator character...
			if (displayChoice == "inline")
				displayString += "<br />";
			else
				displayString += "\n";
			
			//add this error...
			displayString += "- " + errors[i];
		}
		
		//show the combined error string...
		if (displayChoice == "inline")
			theDisplayField.innerHTML = displayString;
		else
			alert(displayString);
		
		//focus on the first error...
		if (firstElement != "")
		{
			if (firstElementType == "editor")
				ScrollToEditor(firstElement);
			else
				ScrollToElement(firstElement);	
		}
	}	
}

function MarkFieldBad(fieldID, message, scrollFieldID, elementType) 
{
	isError = true;
	errors[errors.length] = message;
	var theField = document.getElementById(fieldID);
	theField.style.backgroundColor = errorColor;
	
	if (firstElement == "")
	{
		if (scrollFieldID)
			firstElement = scrollFieldID;
		else
			firstElement = fieldID;
		
		if (elementType)
			firstElementType = elementType;
	}
}

function ResetErrors() 
{
	isError = false;
	errors = new Array();
	
	firstElement = "";
	firstElementType = "";
}

function MarkFieldGood(fieldID) 
{
	var theField = document.getElementById(fieldID);
	theField.style.backgroundColor = "";
}

function ScrollToElement(elementID) 
{
	var theElement = document.getElementById(elementID);
	while(theElement != null)
	{
		try { theElement.focus(); } catch(err){}
		theElement = null;
	}
	return;
}

function ScrollToEditor(editorID)
{
	var theEditor = GetRadEditor (editorID);
	while(theEditor != null)
	{
		theEditor.SetFocus();
		theEditor = null;
	}
}

function trim(fieldvalue)
{
	fieldvalue = fieldvalue.replace(/^\s*/, "");
	fieldvalue = fieldvalue.replace(/\s*$/, "");
	return fieldvalue;
}


function checkAlphaNumericNoBeginingEndingBlanks(fieldID, message)
{
  
	var temp = document.getElementById(fieldID).value;

	var regExpObjLeading = /^\s+/;
    var regExpObjTrailing = /\s+$/;

    if (regExpObjLeading.test(temp) || regExpObjTrailing.test(temp)) 
	{
	    document.getElementById(fieldID).value = trim(temp);
	    MarkFieldBad(fieldID, message);
	    return false;
	}
	else
	{
		MarkFieldGood(fieldID);
		return true;
	} 
}

function checkAlphaNumericRequired(fieldID, message, leaveSurroundingWhiteSpace)
{
    var temp = document.getElementById(fieldID).value;
    temp = trim(temp);

    if (!leaveSurroundingWhiteSpace) 
    {
        document.getElementById(fieldID).value = temp;
    }

    if (temp == "") 
    {
        MarkFieldBad(fieldID, message);
        return false;
    }
    else 
    {
        MarkFieldGood(fieldID);
        return true;
    }
}
function checkAlphaNumericSafeText(fieldID, message)
{
	var temp = document.getElementById(fieldID).value;
	temp = trim(temp);
	document.getElementById(fieldID).value = temp;
	if(temp.indexOf(";") >=0 || temp.indexOf("|") >=0)
	{
		MarkFieldBad(fieldID, message); 
		return false;
	} 
	else
	{
		MarkFieldGood(fieldID);
		return true;
	} 
}

function checkAlphaNumericMatchesText(fieldID, desiredText, message)
{
	var temp = document.getElementById(fieldID).value;
	temp = trim(temp);
	document.getElementById(fieldID).value = temp;
	if(temp != desiredText)
	{
		MarkFieldBad(fieldID, message); 
		return false;
	} 
	else
	{
		MarkFieldGood(fieldID);
		return true;
	} 
}

function checkAlphaNumericNotMatchesText(fieldID, forbiddenText, message)
{
	var temp = document.getElementById(fieldID).value;
	temp = trim(temp);
	document.getElementById(fieldID).value = temp;
	if(temp == forbiddenText)
	{
		MarkFieldBad(fieldID, message); 
		return false;
	} 
	else
	{
		MarkFieldGood(fieldID);
		return true;
	} 
}

function checkRichTextEditorRequired(fieldID, message)
{
	var theEditor = GetRadEditor(fieldID);
	var theHtml = theEditor.GetHtml();
	if (theHtml == "")
	{
		MarkFieldBad(fieldID, message, null, "editor"); 
		return false;
	}				
	else
	{
		MarkFieldGood(fieldID);
		return true;
	} 
}

function checkDateTimeRequired(hiddenFieldID, textBoxID, buttonID, message)
{
	var temp = document.getElementById(hiddenFieldID).value;
	if(temp == "")
	{
		MarkFieldBad(textBoxID, message, buttonID); 
		return false;
	} 
	else
	{
		MarkFieldGood(textBoxID);
		return true;
	} 
}
function checkTimeInTheFuture(ActivateTime, minutes, fieldName){
	var currentDate=new Date();
	
	if(ActivateTime < currentDate){
		MarkFieldBad(fieldName, fieldName + " must be "+minutes+" minutes into the future.") 
		return false;
	}
	else if(ActivateTime> currentDate){
		var oneMinute = 60 * 1000;
		var futureTime = new Date(currentDate.getTime()+ oneMinute * minutes);
		if(ActivateTime < futureTime){
			MarkFieldBad(fieldName, fieldName + " must be "+minutes+" minutes into the future.") 
			return false;	
		}
		return true;
	}
	
}
function checkRadioButtonListRequired(listName, message)
{   
	var theList = document.getElementById(listName);
	var theInputs = theList.getElementsByTagName("input");
	
	var selectedItem = null;
	
	for (var i=0; i<theInputs.length; i++)
	{	    
		if (theInputs[i].checked)
		{
			selectedItem = theInputs[i];
		}
	}
	
	if (selectedItem == null)
	{
		MarkFieldBad(listName, message); 
		return false;
	} 
	else
	{
		MarkFieldGood(listName);
		return true;
	}
}


function checkCheckBoxListRequired(containerID, message)
{
    var checkBoxList = document.getElementById(containerID);
	var arrayOfCheckBoxes= checkBoxList.getElementsByTagName("input");

	for(var i=0;i<arrayOfCheckBoxes.length;i++)
	{
	    if (arrayOfCheckBoxes[i].checked) 
	    {
	        MarkFieldGood(containerID);
			return true;
		}        
    }

    MarkFieldBad(containerID, message);
	return false;
}


function checkDropDownListRequired(fieldID, message)
{
	var theList = document.getElementById(fieldID);
	if ( theList.selectedIndex >= 0 )
	{
		var selectedItem = theList[theList.selectedIndex];
		var selectedValue = selectedItem.value;
		
		if (selectedValue < 0)
		{
			MarkFieldBad(fieldID, message); 
			return false;
		} 
		else
		{
			MarkFieldGood(fieldID);
			return true;
		} 
	}
	else
	{
		MarkFieldBad(fieldID, message); 
		return false;
	} 
}
function checkDropDownListRequiredWithFirstIndex(fieldID, message, firstValidIndex)
{
	
	var theList = document.getElementById(fieldID);
	if ( theList.selectedIndex >= firstValidIndex )
	{
		var selectedItem = theList[theList.selectedIndex];
		var selectedValue = selectedItem.value;
		
		if (selectedValue < firstValidIndex)
		{
			MarkFieldBad(fieldID, message); 
			return false;
		} 
		else
		{
			MarkFieldGood(fieldID);
			return true;
		} 
	}
	else
	{
		MarkFieldBad(fieldID, message); 
		return false;
	} 
}

function checkAlphaNumericMaxLength(fieldID, len, message)
{
	var temp = document.getElementById(fieldID).value;
	temp = trim(temp);
	document.getElementById(fieldID).value = temp;
	if(temp != "")
	{
		if(temp.length > len)
		{
			MarkFieldBad(fieldID, message);
			return false;
		}  
		else
		{
			MarkFieldGood(fieldID);
			return true;
		} 
	}
	else
	{
		MarkFieldGood(fieldID);
		return true;
	} 
}

function checkAlphaNumericMinLength(fieldID, len, message)
{
	var temp = document.getElementById(fieldID).value;
	temp = trim(temp);
	document.getElementById(fieldID).value = temp;
	if(temp != "")
	{
		if(temp.length < len)
		{
			MarkFieldBad(fieldID, message); 
			return false;
		} 
		else
		{
			MarkFieldGood(fieldID);
			return true;
		} 
	}
	else
	{
		MarkFieldBad(fieldID, message);
		return false;
	}  
}

function checkNumeric(fieldID, message)
{
	var temp = document.getElementById(fieldID).value;
	temp = trim(temp);
	document.getElementById(fieldID).value = temp;
	if(temp != "")
	{
		if(isNaN(temp))
		{
			MarkFieldBad(fieldID, message); 
			return false;
		} 
		else
		{
			MarkFieldGood(fieldID);
			return true;
		} 
	}
	else
	{
		MarkFieldBad(fieldID, message); 
		return false;
	} 
}

function checkNonNegative(fieldID, message)
{
	var temp = document.getElementById(fieldID).value;
	temp = trim(temp);
	document.getElementById(fieldID).value = temp;
	if(temp != "")
	{
		if(!isNaN(temp))
		{
			temp = new Number(temp);
			if(temp < 0)
			{
				MarkFieldBad(fieldID, message); 
				return false;
			} 
			else
			{
				MarkFieldGood(fieldID);
				return true;
			} 
		}
		else
		{
			MarkFieldBad(fieldID, message);
			return false;
		}  
	}
	else
	{
		MarkFieldBad(fieldID, message);
		return false;
	} 
}

function checkNumericMax(fieldID, max, message)
{
	var temp = document.getElementById(fieldID).value;
	temp = trim(temp);
	document.getElementById(fieldID).value = temp;
	if(temp != "")
	{
		if(!isNaN(temp))
		{
			temp = new Number(temp);
			if(temp > max)
			{
				MarkFieldBad(fieldID, message); 
				return false;
			} 
			else
			{
				MarkFieldGood(fieldID);
				return true;
			} 
		}
		else
		{
			MarkFieldBad(fieldID, message);
			return false;
		}  
	}
	else
	{
		MarkFieldBad(fieldID, message);
		return false;
	} 
}

function checkNumericMin(fieldID, min, message)
{
	var temp = document.getElementById(fieldID).value;
	temp = trim(temp);
	document.getElementById(fieldID).value = temp;
	if(temp != "")
	{
		if(!isNaN(temp))
		{
			temp = new Number(temp);
			if(temp < min)
			{
				MarkFieldBad(fieldID, message); 
				return false;
			} 
			else
			{
				MarkFieldGood(fieldID);
				return true;
			} 
		}
		else
		{
			MarkFieldBad(fieldID, message);
			return false;
		}  
	}
	else
	{
		MarkFieldBad(fieldID, message);
		return false;
	} 
}

function checkText(fieldID, message)
{
	var temp = document.getElementById(fieldID).value;
	temp = trim(temp);
	document.getElementById(fieldID).value = temp;
	if(temp != "")
	{
		if(!isNaN(temp))
		{
			MarkFieldBad(fieldID, message); 
			return false;
		}
		else
		{
			MarkFieldGood(fieldID);
			return true;
		}
	}
	else
	{
		MarkFieldGood(fieldID);
		return true;
	}
}

function checkZip(fieldID, fieldDisplayName)
{
	var fieldvalue = document.getElementById(fieldID).value;
	if (fieldvalue.length > 0)
	{
		var reformattedNum = zipformat(fieldvalue);
		if (reformattedNum.length > 0)
		{
			if(isNaN(reformattedNum))
			{
				MarkFieldBad(fieldID, fieldDisplayName + " must not contain text."); 
				return false;
			}	
			else if ((reformattedNum.length != 5)&&(reformattedNum.length != 9))
			{
				MarkFieldBad(fieldID, fieldDisplayName + " must contain 5 or 9 digits.");
				return false;
			}
			else if (reformattedNum.length == 5)
			{
				MarkFieldGood(fieldID);
				reformattedNum = reformattedNum;
			}
			else if (reformattedNum.length == 9)
			{
				MarkFieldGood(fieldID);
				reformattedNum =((reformattedNum.substring(0,5))+ "-" + (reformattedNum.substring(5,9)));
			}
			
			document.getElementById(fieldID).value = reformattedNum;
			return true;
		}
		else
		{
			MarkFieldBad(fieldID, fieldDisplayName + " must contain 5 or 9 digits.");
			return false;
		}
	}
	else
	{
		MarkFieldBad(fieldID, fieldDisplayName + " must contain 5 or 9 digits.");
		return false;
	}
}


function checkFips(fieldID, fieldDisplayName)
{
	var fieldvalue = document.getElementById(fieldID).value;
	if (fieldvalue.length > 0)
	{
		var reformattedNum = fipsformat(fieldvalue);
		if (reformattedNum.length > 0)
		{
			if(isNaN(reformattedNum))
			{
				MarkFieldBad(fieldID, fieldDisplayName + " must not contain text."); 
				return false;
			}	
			else if (reformattedNum.length != 5)
			{
				MarkFieldBad(fieldID, fieldDisplayName + " must contain 5 digits.");
				return false;
			}
			else if (reformattedNum.length == 5)
			{
				MarkFieldGood(fieldID);
				reformattedNum =((reformattedNum.substring(0,2))+ "-" + (reformattedNum.substring(2,5)));
			}
			
			document.getElementById(fieldID).value = reformattedNum;
			return true;
		}
		else
		{
			MarkFieldBad(fieldID, fieldDisplayName + " must contain 5 digits.");
			return false;
		}
	}
	else
	{
		MarkFieldBad(fieldID, fieldDisplayName + " must contain 5 digits.");
		return false;
	}
}


function checkSSN(fieldID, fieldDisplayName)
{
	var fieldvalue = document.getElementById(fieldID).value;
	if (fieldvalue.length > 0){
		var reformattedNum = ssnformat(fieldvalue);
		if (reformattedNum.length > 0)
		{
			if(isNaN(reformattedNum))
			{
				MarkFieldBad(fieldID, fieldDisplayName + " must not contain text.");
				return false;
			}
			else if (reformattedNum.length != 9)
			{
				MarkFieldBad(fieldID, fieldDisplayName + " must contain 9 digits.");
				return false;
			}
			else if (reformattedNum.length == 9)
			{
				MarkFieldGood(fieldID);
				reformattedNum =((reformattedNum.substring(0,3))+ "-" + (reformattedNum.substring(3,5)) + "-" + (reformattedNum.substring(5,9)));
			}
			
			document.getElementById(fieldID).value = reformattedNum;
			return true;
		}
		else
		{
			MarkFieldBad(fieldID, fieldDisplayName + " must contain 9 digits.");
			return false;
		}
	}
	else
	{
		MarkFieldBad(fieldID, fieldDisplayName + " must contain 9 digits.");
		return false;
	}
}

/*********************************************************
*	EXTENSION OPTIONAL!!!
*********************************************************/
function checkPhoneNumber(fieldID, fieldDisplayName, acceptExtensions)
{
	var fieldvalue = document.getElementById(fieldID).value;
	fieldvalue = trim(fieldvalue);
	document.getElementById(fieldID).value = fieldvalue;
	
	if (fieldvalue.length > 0)
	{
		//Is this a Phone Number?
		var phoneTest;
		if (acceptExtensions)
		{
			phoneTest = new RegExp("^(\\((?:([2-9])(?!\\2|(?:11))\\d{2}|(?:[2-9](\\d)(?!\\3)\\d)|(?:888))\\)|(?:([2-9])(?!\\4|(?:11))\\d{2}|(?:[2-9](\\d)(?!\\5)\\d)|(?:888)))\\s*-?\\s*(([2-9])(?!(?:11))\\d{2})\\s*-?\\s*(\\d{4})\\s*-?\\s*(?:(?:e(?:\\.)?|x(?:\\.)?|xt(?:\\.)?|ex(?:\\.)?|ext(?:\\.)?|exts(?:\\.)?|extn(?:\\.)?|extnsn(?:\\.)?|extension(?:\\.)?)?\\s*(?::|-)?\\s*(\\d{1,8}))?$");
		}
		else
		{
			phoneTest = new RegExp("^(\\((?:([2-9])(?!\\2|(?:11))\\d{2}|(?:[2-9](\\d)(?!\\3)\\d)|(?:888))\\)|(?:([2-9])(?!\\4|(?:11))\\d{2}|(?:[2-9](\\d)(?!\\5)\\d)|(?:888)))\\s*-?\\s*(([2-9])(?!(?:11))\\d{2})\\s*-?\\s*(\\d{4})$");
		}
		var isPhone = phoneTest.exec(fieldvalue);
		
		if (isPhone)
		{
			//get its components...
			var areaCode = "";
			var prefix = "";
			var suffix = "";
			var ext = "";

			areacode = RegExp.$1;
			if (areacode.substring(0, 5) != "(")
			{
				areaCode = "(" + areaCode + ")";
			}
			prefix = RegExp.$6;
			suffix = RegExp.$8;
			
			ext = RegExp.$9;
			
			//re-format it...
			fieldvalue = areacode + " " + prefix + "-" + suffix;

			if (ext != null && ext != "")
			{
				fieldvalue += " ext. " + ext;
			}
			
			document.getElementById(fieldID).value = fieldvalue;
			
			MarkFieldGood(fieldID);
			return true;		
		}
		else
		{
			MarkFieldBad(fieldID, fieldDisplayName + " must be a Valid Phone Number.  ex:  (555) 555-5555"); 
			return false;
		}
		
	}
	else
	{
		MarkFieldBad(fieldID, fieldDisplayName + " must be a Valid Phone Number. ex:  (555) 555-5555"); 
		return false;
	}
}


function checkEmailAddress(fieldID, fieldDisplayName)
{
	var fieldvalue = document.getElementById(fieldID).value;
	fieldvalue = trim(fieldvalue);
	document.getElementById(fieldID).value = fieldvalue;
	
	if (fieldvalue.length > 0)
	{
		//Is this an Email Address?
		var emailTest = new RegExp("^([A-Z0-9](?:\\.?[A-Z0-9_%+-])*)@((?:[A-Z0-9-]+\\.)+(?:[A-Z]{2}|aero|arpa|asia|biz|cat|com|edu|coop|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel))$", "i");
		var isEmail = emailTest.exec(fieldvalue);

		if (isEmail)
		{			
			MarkFieldGood(fieldID);
			return true;		
		}
		else
		{
			MarkFieldBad(fieldID, fieldDisplayName + " must be a Valid Email Address."); 
			return false;
		}		
	}
	else
	{
		MarkFieldBad(fieldID, fieldDisplayName + " must be a Valid Email Address."); 
		return false;
	}		
}


function zipformat(editednumber)
{
	var count = 0;
	characterremover2 = new Array ('-');
	do
	{
		for (i=0; i<characterremover2.length; ++i)
		{
			editednumber=editednumber.replace(characterremover2[i],"");
		}	
		count = count + 1;	
	}while(count < 10)
	return (editednumber);
}


function fipsformat(editednumber)
{
	var count = 0;
	characterremover2 = new Array ('-');
	do
	{
		for (i=0; i<characterremover2.length; ++i)
		{
			editednumber=editednumber.replace(characterremover2[i],"");
		}	
		count = count + 1;	
	}
	while(count < 6)
	return (editednumber);
}


function ssnformat(editednumber)
{
	var count = 0;
	characterremover2 = new Array ('-');
	do{
		for (i=0; i<characterremover2.length; ++i)
		{
			editednumber=editednumber.replace(characterremover2[i],"");
		}	
		count = count + 1;	
	}while(count < 20)
	return (editednumber);
}

function isNonNegativeNumber(value)
{
	value = trim(value);
	if(value == "")
		return false;
	else
	{
		if(isNaN(value))
			return false;
		else
		{
			value = new Number(value);
			if(value < 0)
				return false;
			else
				return true;
		}
	}
}


function isInteger(value)
{
	value = trim(value);
	if(value == "")
		return false;
	else
	{
		if(isNaN(value))
			return false;
		else
		{
			var index = value.indexOf(".");
			if (index >= 0)
				return false;
			else
				return true;
		}
	}
}

