function Validator()
{
	this.aFieldList = [];
	
	this.validateFields = function()
	{
		bValidated = true;
		for(var i = 0; i < this.aFieldList.length; i++)
		{
			oField = document.getElementById(this.aFieldList[i][0]);
			sError = this.aFieldList[i][2];
			switch(this.aFieldList[i][1])
			{
				case "string":
					if(oField.value == '')
					{
						bValidated = false;
					}
					break;
				case "select":
					if(oField.selectedIndex == 0)
					{
						bValidated = false;
					}
					break;
				case "email":
					if(oField.value.indexOf('@',1)==-1 || oField.value.indexOf('.',3)==-1)
					{
						bValidated = false;
					}
					break;
				case "numeric":
					if(isNaN(oField.value))
					{
						bValidated = false;
					}
					break;
				case "datetime":
					aElements = oField.value.split(' ');
					if(aElements.length != 2)
					{
						bValidated = false;
					}
					else
					{
						if(!this.isDate(aElements[0]) || !this.isTime(aElements[1]))
						{
							bValidated = false;
						}
					}
					break;
			}
			if(!bValidated)
			{
				alert(sError);
				oField.focus();
				break;
			}
		}
		return bValidated;
	}
	
	this.getDaysPerMonth = function(iMonth, iYear)
	{
		var iFebruary = (new Date(iYear, 1, 29).getDate() == 29) ? 29 : 28;
		var aDays = Array(31, iFebruary, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
		
		return aDays[iMonth - 1];
	}
	
	this.isDate = function(sDate)
	{
		// Requires the field to be MM/DD/YYYY
		aDate = sDate.split("/");
		
		if(aDate.length != 3)
		{
			return false;
		}
		else
		{
			for(var i = 0; i < aDate.length; i++)
			{
				if(isNaN(aDate[i]))
				{
					return false;
				}
			}
			if(aDate[0].length != 2 || aDate[1].length != 2 || aDate[2].length != 4)
			{
				return false;
			}
			
			iMonth = parseInt(aDate[0]);
			iDay = parseInt(aDate[1]);
			iYear = parseInt(aDate[2]);
			
			if(iMonth < 1 || iMonth > 12)
			{
				return false;
			}
			if(iDay < 1 || iDay > this.getDaysPerMonth(iMonth, iYear))
			{
				return false;
			}
		}
		return true;
	}
	
	this.isTime = function(sTime)
	{
		aTime = sTime.split(":");
		
		if(aTime.length != 2)
		{
			return false;
		}
		else
		{
			for(var i = 0; i < aTime.length; i++)
			{
				if(isNaN(aTime[i]))
				{
					return false;
				}
			}
			if(aTime[0].length != 2 || aTime[1].length != 2)
			{
				return false;
			}
			
			iHour = parseInt(aTime[0]);
			iMinute = parseInt(aTime[1]);
			
			if(iHour < 0 || iHour > 23)
			{
				return false;
			}
			if(iMinute < 0 || iMinute > 59)
			{
				return false;
			} 
		}
		return true;
	}
	
	this.addField = function(sFieldName, sValidationType, sError)
	{
		this.aFieldList.push(Array(sFieldName, sValidationType, sError));
	}
}

function validateEditUsersForm()
{
	oValidator = new Validator();
	
	oValidator.addField("adm_username", "string", "Please enter a username.");
	oValidator.addField("adm_password", "string", "Please enter a password.");
	//oValidator.addField("adm_creation_time", "datetime", "Please enter a valid date and time in MM/DD/YYYY HH:MM format.");
	
	return oValidator.validateFields();
}

function validateEditParticipantsForm()
{
	oValidator = new Validator();
	
	oValidator.addField("adm_firstName", "string", "Please enter a first name.");
	oValidator.addField("adm_lastName", "string", "Please enter a last name.");
	
	return oValidator.validateFields();
}

function validateEditContentsForm()
{
	oValidator = new Validator();
	
	oValidator.addField("adm_title", "string", "Please enter a title.");
	oValidator.addField("adm_url", "string", "Please enter a URL.");
	//oValidator.addField("adm_post_time", "datetime", "Please enter a valid date and time in MM/DD/YYYY HH:MM format.");
	
	return oValidator.validateFields();
}

function validateEditPagesForm()
{
	oValidator = new Validator();
	
	oValidator.addField("adm_title", "string", "Please enter a title.");
	
	return oValidator.validateFields();
}

function validateEditTopicsForm()
{
	oValidator = new Validator();
	
	oValidator.addField("adm_title", "string", "Please enter a title.");
	
	return oValidator.validateFields();
}

function validateEditVideosForm()
{
	oValidator = new Validator();
	
	oValidator.addField("adm_title", "string", "Please enter a title.");
	//oValidator.addField("adm_path", "string", "Please enter a path to the video.");
	//oValidator.addField("adm_post_time", "datetime", "Please enter a valid date and time in MM/DD/YYYY HH:MM format.");
	
	return oValidator.validateFields();
}

function validateEditVideoCommentsForm()
{
	oValidator = new Validator();
	
	//oValidator.addField("adm_post_time", "datetime", "Please enter a valid date and time in MM/DD/YYYY HH:MM format.");
	
	return oValidator.validateFields();
}

function validateUserLoginForm()
{
	oValidator = new Validator();
	
	oValidator.addField("username", "string", "Please enter a username.");
	oValidator.addField("password", "string", "Please enter a password.");

	return oValidator.validateFields();
}

function validateEditCategoryForm()
{
	oValidator = new Validator();
	
	oValidator.addField("cat_name", "string", "Please enter a name.");
	
	return oValidator.validateFields();
}

function validateEditQuestionsForm()
{
	oValidator = new Validator();
	
	//oValidator.addField("adm_post_time", "datetime", "Please enter a valid date and time in MM/DD/YYYY HH:MM format.");
	oValidator.addField("adm_question", "string", "Please enter a question.");
	oValidator.addField("adm_answer", "string", "Please enter an answer.");
	
	return oValidator.validateFields();
}
function validateQAForm()

{
	oValidator = new Validator();
	
	oValidator.addField("txtEmail", "email", "Please enter a valid email address.");
	oValidator.addField("txtCity", "string", "Please enter a city.");
	//oValidator.addField("selState", "string", "Please select a state.");
	//oValidator.addField("txtPostal", "string", "Please enter a postal code.");
	oValidator.addField("selCountry", "string", "Please select a country.");
	oValidator.addField("question", "string", "Please enter a question.");
	
	return oValidator.validateFields();
}
