function validateAppForm (currForm)
{
	var bIsAllFormOk = true;
	
	if (validateAppPersonalInfo (currForm) == false)
	{
		bIsAllFormOk = false;
	}
	
	if (validateAppCourses (currForm) == false)
	{
		bIsAllFormOk = false;
	}
		
	if (validateAppHousing (currForm) == false)
	{
		bIsAllFormOk = false;
	}
	if (validateAppPayment (currForm) == false)
	{
		bIsAllFormOk = false;
	}
		
	return (bIsAllFormOk);
}

function validateAppPersonalInfo (currForm)
{
	var bIsOk = true;

	var SECTION_ERROR_NAME = "personalInfoErrors";
	
	var errorSection = document.getElementById(SECTION_ERROR_NAME);
	errorSection.innerHTML = "";	
	
	var firstName = stripWhitespace(currForm.FirstName.value);	
	var lastName = stripWhitespace(currForm.Surname.value);	
	var dateOfBirth = stripWhitespace(currForm.DateOfBirth.value);	
	var age = stripWhitespace(currForm.Age.value);	
	var countryOfBirth = stripWhitespace(currForm.CountryOfBirth.value);	
	var countryOfNationality = stripWhitespace(currForm.CountryOfNationality.value);	
	var sex = stripWhitespace(currForm.Sex.value);
	
	var address1 = stripWhitespace(currForm.StudentAddress1.value);
	var address2 = stripWhitespace(currForm.StudentAddress2.value);
	var city = stripWhitespace(currForm.StudentCity.value);
	var state = stripWhitespace(currForm.StudentState.value);
	var country = stripWhitespace(currForm.StudentCountry.value);
	var phone = stripWhitespace(currForm.StudentTel.value);
	var mail = stripWhitespace(currForm.email.value);
	
	if (isNull(firstName))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter your first name.");
	}
	if (isNull(lastName))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter your last name.");
	}
	if (isNull(dateOfBirth))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter your date of birth.");
	}
	else
	{
		if (!isValidDate(dateOfBirth))
		{
			bIsOk = false;
			writeError (SECTION_ERROR_NAME, "* Please enter your Birth date in the correct format: (mm/dd/yy).");
		}
	}
	if (isNull(age))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter your age.");
	}
	if (isNull(countryOfBirth))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter your country of birth.");
	}
	
	if (isNull(countryOfNationality))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter your country of nationality.");
	}
	if (isNull(sex))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please select your sex.");
	}
	if (isNull(address1) && isNull(address2))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter your address.");
	}
	if (isNull(city))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter your city.");
	}
	if (isNull(state))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter your state.");
	}
	if (isNull(country))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter your country.");
	}
	
	if (isNull(phone))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter your Telephone.");
	}
	
	if (isNull(mail))
	{
			bIsOk = false;
			writeError (SECTION_ERROR_NAME, "* Please enter your E-mail address.");
	}
	else
	{
		if (!checkEmailValid(mail))
		{
			bIsOk = false;
			writeError (SECTION_ERROR_NAME, "* Please enter a valid E-mail address.");	
		}
	}
	
	return (bIsOk);
}

function validateAppCourses (currForm)
{
	var bIsOk = true;

	var SECTION_ERROR_NAME = "coursesErrors";
	
	var errorSection = document.getElementById(SECTION_ERROR_NAME);
	errorSection.innerHTML = "";	
	
	var startDate = currForm.StartDate;	
	var needVisa = currForm.NeedsVisa;	
	var noVisa = currForm.DoesNotNeedVisa;	
	var tVisa = currForm.NeedsTransferVisa;	
	var study = currForm.StudiesUniversity;	
	var noStudy = currForm.DoesNotStudyUniversity;	
	
	//var dateOfBirth = stripWhitespace(currForm.DateOfBirth.value);	
	
	if (startDate.selectedIndex == 0)
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please select a starting date.");
	}
	
	if (needVisa.checked == false && noVisa.checked == false && tVisa.checked == false)
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please indicate whether or not you need the I-20 for a student vise.");
	}
	
	if (study.checked == false && noStudy.checked == false)
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please indicate whether or not you plan to study in an American university.");
	}
	
	return (bIsOk);
}

function validateAppHousing (currForm)
{
	var bIsOk = true;

	var SECTION_ERROR_NAME = "houseingErrors";
	
	var errorSection = document.getElementById(SECTION_ERROR_NAME);
	errorSection.innerHTML = "";
	
	var needHousing = currForm.NeedsHousing;	
	var noNeedHousing = currForm.DoesNotNeedHousing;	
	
	if (needHousing.checked == false && noNeedHousing.checked == false)
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please indicate whether or not you need housing.");
	}
}

function validateAppPayment (currForm)
{
	var bIsOk = true;
	
	var SECTION_ERROR_NAME = "PaymentErrors";

	var errorSection = document.getElementById(SECTION_ERROR_NAME);
	errorSection.innerHTML = "";

	var firstName = stripWhitespace(currForm.NameonCard.value);
	var firstName = stripWhitespace(currForm.Amount.value);
	var firstName = stripWhitespace(currForm.CardNumber.value);
	var firstName = stripWhitespace(currForm.ExpiryMonth.value)
	var firstName = stripWhitespace(currForm.ExpiryYear.value)
	var firstName = stripWhitespace(currForm.CSC.value);	

	if (isNull(NameonCard))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter the name on the card.");
	}
	if (isNull(Amount))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter the amount to be paid.");
	}
	if (isNull(CardNumber))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter the card number.");
	}
	if (isNull(ExpiryMonth))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter the expiration month.");
	}
	if (isNull(ExpiryYear))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter the expiration year.");
	}
	if (isNull(CSC))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* Please enter the security code.");
	}

	
	return bIsOk;
}

function isValidDate(dateStr) 
{
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
	// To require a 4 digit year entry, use this line instead:
	// var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
	var matchArray = dateStr.match(datePat);
	
	if (matchArray == null) 
	{
		return false;
	}
}


function validateForm (currForm)
{
	var bIsAllFormOk = true;
	
	if (validatePersonalInfo (currForm) == false)
	{
		bIsAllFormOk = false;
	}

	if (validateCourses (currForm) == false)
	{
		bIsAllFormOk = false;
	}
	
	if (validateHouseing (currForm) == false)
	{
		bIsAllFormOk = false;
	}
	
	return (bIsAllFormOk);
}

function validateHouseing (currForm)
{
	var bIsOk = true;

	var SECTION_ERROR_NAME = "houseingErrors";

	var errorSection = document.getElementById(SECTION_ERROR_NAME);
	errorSection.innerHTML = "";

	var startDate = stripWhitespace(currForm.StartDate.value);	
	
	if ((currForm.NeedsHousing.checked == false) && (currForm.DoesNotNeedHousing.checked == false))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* You must choose whether or not you need housing.");
	}
	
	return bIsOk;
}


function validateCourses (currForm)
{
	var bIsOk = true;

	var SECTION_ERROR_NAME = "coursesErrors";

	var errorSection = document.getElementById(SECTION_ERROR_NAME);
	errorSection.innerHTML = "";

	var startDate = stripWhitespace(currForm.StartDate.value);	
	var weeks = currForm.WeeksStudying;	
	
	if (isNull(startDate))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* You must choose a start date.");
	}
	
	if (weeks.selectedIndex == 0)
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* You must choose How long you are interested in studying.");
	}
	
	return bIsOk;
}

function validatePersonalInfo (currForm)
{
	var bIsOk = true;

	var SECTION_ERROR_NAME = "personalInfoErrors";
	
	var errorSection = document.getElementById(SECTION_ERROR_NAME);
	errorSection.innerHTML = "";

	var firstName = stripWhitespace(currForm.FirstName.value);	
	var lastName = stripWhitespace(currForm.Surname.value);	
	var age = stripWhitespace(currForm.Age.value);	
	var countryOfBirth = stripWhitespace(currForm.CountryOfBirth.value);	
	var countryOfNationality = stripWhitespace(currForm.CountryOfNationality.value);	
	var sex = stripWhitespace(currForm.Sex.value);	
	var phone = stripWhitespace(currForm.StudentTel.value);	
	var email = stripWhitespace(currForm.email.value);	
	
	if (isNull(firstName))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* You must enter your first name.");
	}
	
	if (isNull(lastName))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* You must enter your last name.");
	}
	
	if (isNull(age))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* You must enter your age.");
	}
	
	if (isNull(countryOfBirth))
	{
			bIsOk = false;
			writeError (SECTION_ERROR_NAME, "* You must enter your country.");
	}
	
	if (isNull(countryOfNationality))
	{
			bIsOk = false;
			writeError (SECTION_ERROR_NAME, "* You must enter your country of nationality.");
	}
	
	if (isNull(sex))
	{
			bIsOk = false;
			writeError (SECTION_ERROR_NAME, "* You must select your sex.");
	}
	
	if (isNull(phone))
	{
			bIsOk = false;
			writeError (SECTION_ERROR_NAME, "* You must enter your phone number.");
	}
	
	if (isNull(email))
	{
		bIsOk = false;
		writeError (SECTION_ERROR_NAME, "* You must enter your E-mail.");
	}
	else
	{
		if (!checkEmailValid(email))
		{
			bIsOk = false;
			writeError (SECTION_ERROR_NAME, "* You must enter a valid E-mail address.");	
		}
	}
	
	return bIsOk;
	
}

function writeError (errorSectionName, theError)
{
	var errorSection = document.getElementById(errorSectionName);	
	errorSection.innerHTML += "<div class='errorMsg'>" + theError + "</div>";
}





function checkEmailValid (adress)
{
	var result;
	var localPartCharacters = "\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~";
	
	var localPart = "[" + localPartCharacters + "]";
	var localPartWithDot = "[" + localPartCharacters + "\\.]";
	var hostCharacters = "a-zA-Z0-9\\-";
	var host = "[" + hostCharacters + "]";
	var emailRE = new RegExp("^" + localPart + "(" + localPartWithDot + "+" + localPart + "|" + localPart + ")*" +
						"@" + host + "(\\." + host + "|" + host + ")*" + "$");
	
	result = emailRE.test(adress);
	
	return (result);
}

function isEnglishLetters (sValue)
{
	var re = /[a-zA-Z]/;
	return (re.test(sValue));
}

function onlyNumbers (sValue)
{
	var re = /^\d+$/;
	return(re.test(sValue));
}


function stripWhitespace (s)
{
    var i;
    var bag = " \t\n\r";
    var returnString = "";

    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }

    return returnString;
}

function isNull(s)
{
	return ((s == null) || (s.length == 0 ))
}

function yUniversity(form)
{
	form.DoesNotStudyUniversity.checked = false;
}

function nUniversity(form)
{
	form.StudiesUniversity.checked = false;
}
function yVisa(form)
{
	form.DoesNotNeedVisa.checked = false;
	form.NeedsTransferVisa.checked = false;
}

function nVisa(form)
{
	form.NeedsVisa.checked = false;
	form.NeedsTransferVisa.checked = false;
}

function tVisa(form)
{
	form.NeedsVisa.checked = false;
	form.DoesNotNeedVisa.checked = false;
}

function yHousing(form)
{
	form.DoesNotNeedHousing.checked = false;
}

function nHousing(form)
{
	form.NeedsHousing.checked = false;
}




/*
function checkField (value, isMendetory, fType, fieldName)
{
	var fieldValue = value.toString();
	
	if (isMendtory)
	{
		if (isnull(fieldValue))
		{
			return ERROR_1 + fieldName;
		}		
	}
	
	
	if (!isnull(fieldValue))
	{
		switch (fType) 
		{
		
			case STRING:
			{
				if (!isEnglishLetters(fieldValue))
				{
					return ERROR_4 + fieldName + " field.";
				}
				break;
			}
			case NUMBER:
			{
				if (!onlyNumbers(fieldValue))
				{
					return ERROR_2 + fieldName + " field.";
				}
				break;
			}
			case EMAIL:
			{
				if (!checkEmailValid(value))
				{
					return ERROR_3;	
				}
				break;
			}
			default:
			{
				break;
			}
		
		}
	}
	
	return true;
}
*/