var focusField;
var errorMsg;
var useTinyMCE;
function checkForm(formObj)
{
	focusField			=	"";
	errorMsg			=	'<img src="images/gfx_error.gif" align="absmiddle" \/>&nbsp;&nbsp;&nbsp;';
	useTinyMCE			=	(typeof(useTiny)		!= 'undefined') ? true : false;
	emptyFields			=	(typeof(reqFields)		!= 'undefined') ? checkEmptyFields(formObj)			: false;
	emptyOtherFields	=	(typeof(reqOther)		!= 'undefined') ? checkEmptyOtherFields(formObj)	: false;
	emptyDynCheckFields	=	(typeof(reqDynCheck)	!= 'undefined') ? checkEmptyDynCheckFields(formObj)	: false;
	noMatch				=	(typeof(matchFields)	!= 'undefined') ? checkMatchFields(formObj)			: false;
	maxExceeded			=	(typeof(taMaxLength)	!= 'undefined') ? checkMaxExceeded(formObj)			: false;
	optsExceeded		=	(typeof(selMaxOpts)		!= 'undefined') ? checkOptsExceeded(formObj)		: false;
	specialFail			=	(typeof(specialFields)	!= 'undefined') ? checkSpecialFields(formObj)		: false;
	
	if(emptyFields || emptyOtherFields || emptyDynCheckFields || noMatch || maxExceeded || optsExceeded || specialFail)
	{
		document.getElementById("errorMsg").innerHTML = errorMsg + "<br />";
        if(focusField != '')
		{
			if(useTinyMCE && formObj.elements[focusField].type == 'textarea')
        	    tinyMCE.execCommand('mceFocus', false, formObj.elements[focusField]);
        	else
    			formObj.elements[focusField].focus();
		}
		return false;
	}
	return true;
}

function checkEmptyFields(formObj, useTinyMCE)
{
	hasError = false;
	for(i=0; i<reqFields.length; i++)
	{
		var isEmpty = false;
		var fieldType = formObj.elements[reqFields[i]].type;
		var fieldObj = formObj.elements[reqFields[i]];
		if(fieldType =="text" || fieldType == "password" || fieldType == "textarea" || fieldType == "file")
		{
            if(useTinyMCE)
                tinyMCE.triggerSave();
			if(emptyField(fieldObj))
			{
				isEmpty = true;
			}
		}
		else if(fieldType == "select-one" || fieldType == "select-multiple")
		{
			if(fieldObj.value=="")
			{
				isEmpty = true;
			}
		}
		else
		{
			getRadioValue(fieldObj);
			if(value=="")
			{
				isEmpty = true;
			}
		}
		if(isEmpty)
		{
			hasError = true;
			if(focusField == "")
                focusField = reqFields[i];
			document.getElementById(reqFields[i] + "Txt").style.color = "#900";
		}
		else
			document.getElementById(reqFields[i] + "Txt").style.color = "#000";
	}
	if(hasError)
	{
		errorMsg += "Please enter all required fields.<br />";
	}
		
	return hasError;
}

function checkEmptyOtherFields(formObj)
{
    hasError = false;
    var fieldObj = formObj.elements[reqOther[0]];
    var otherVal = reqOther[1];
    if(fieldObj.options[fieldObj.selectedIndex].value == otherVal)
    {
        for(i=0; i<reqOther[2].length; i++)
        {
            var isEmpty = false;
            var fieldObj = formObj.elements[reqOther[2][i]];
            if(emptyField(fieldObj))
			{
				isEmpty = true;
			}
            if(isEmpty)
    		{
    			hasError = true;
    			if(focusField == "")
    				focusField = reqOther[2][i];
    			document.getElementById(reqOther[2][i] + "Txt").style.color = "#900";
    		}
    		else
    			document.getElementById(reqOther[2][i] + "Txt").style.color = "#000";
        }
    }
    if(hasError && !emptyFields)
	{
		errorMsg += "Please enter all required fields.<br />";
	}
    
    return hasError;
}

function checkEmptyDynCheckFields(formObj)
{
	hasError = false;
	hasChecked = false;
	for(i=2; i<=reqDynCheck.length; i++)
	{
		if(formObj.elements[reqDynCheck[i]])
		{
			if(formObj.elements[reqDynCheck[i]].length)
			{
				for(j=0; j< formObj.elements[reqDynCheck[i]].length; j++)
				{
					if(formObj.elements[reqDynCheck[i]][j].checked)
						hasChecked = true;
				}
			}
			else
			{
				if(formObj.elements[reqDynCheck[i]].checked)
					hasChecked = true;
			}
		}
		if(hasChecked)
			break;
	}
	if(!hasChecked)
	{
		hasError = true;
		errorMsg += reqDynCheck[1];
		document.getElementById(reqDynCheck[0] + "Txt").style.color = "#900";
	}
	else
		document.getElementById(reqDynCheck[0] + "Txt").style.color = "#000";
		
	return hasError;
}

function checkMatchFields(formObj)
{
	hasError = false;
	for(i=0; i<matchFields.length; i++)
	{
		var fieldObj = formObj.elements[matchFields[i][0]];
		var matchFieldObj = formObj.elements[matchFields[i][1]];
		if(fieldObj.value != matchFieldObj.value)
		{
			hasError = true;
			errorMsg += matchFields[i][2] + " fields do not match.<br />";
			if(focusField == "")
				focusField = matchFields[i][0];
		}
	}
	return hasError;
}

function checkSpecialFields(formObj)
{
	hasError = false;
	for(i=0; i<specialFields.length; i++)
	{
		var fieldObj = formObj.elements[specialFields[i][0]];
		if(specialFields[i][2] == 'USPhoneNum')
		{
			regEx = /\(?\d{3}\)?[-.\s]?\d{3}[-.\s]\d{4}/;
			if(!regEx.test(fieldObj.value))
			{
				hasError = true;
				errorMsg += specialFields[i][1] + " field is incorrect.<br />";
				if(focusField == "")
					focusField = specialFields[i][0];
			}
		}
	}
	return hasError;
}

function checkMaxExceeded(formObj)
{
	hasError = false;
	for(i=0; i<taMaxLength.length; i++)
	{
		var fieldObj = formObj.elements[taMaxLength[i][0]];
		if(fieldObj.value.length > taMaxLength[i][2])
		{
			hasError = true;
			errorMsg += taMaxLength[i][1] + " field contains too many characters.<br />(Max: " + taMaxLength[i][2] + " characters)<br />(Current #: " + fieldObj.value.length + ")";
			if(focusField == "")
				focusField = taMaxLength[i][0];
		}
	}
	return hasError;
}

function emptyField(textObj)
{
	if (textObj.value.length ==0)
	{
		return true;
	}
	for (var i=0; i<textObj.value.length; ++i)
	{
		var ch = textObj.value.charAt(i);
		if (ch != ' ' && ch != '\t')
		{
			return false;
		} 
	}
	return true;
}

function getRadioValue(radioObj)
{
	value="";
	for(var i=0; i<radioObj.length; i++)
	{
		if(radioObj[i].checked)
		{
			value=radioObj[i].value;
			break;
		}
	}
	return value;
}