var PatternsDict = new Object();

PatternsDict.Optional = /^$/;
PatternsDict.Mandatory = /$/;
PatternsDict.text = /^[a-zA-Z-'\s]+$/;
PatternsDict.forename = /^[a-zA-Z-'\s]{2,}/;
PatternsDict.currency = /^[0-9]+\.[0-9]{2}$/;
PatternsDict.currencyOptionalPence = /^([0-9]+\.[0-9]{2}$|[0-9\s]+$)/;
PatternsDict.currencyNoPence = /^[0-9\s]+$/;
PatternsDict.number = /^[0-9\s]+$/; 
PatternsDict.accnoval = /^[0-9\s]{8}/;
PatternsDict.PIN = /^[0-9]{6,}/;
PatternsDict.date = /^(((0[1-9]|[1-2][0-9]|3[0-1])(0[13578]|1[02]))|((0[1-9]|[1-2][0-9]|30)(0[469]|11))|((0[1-9]|[1-2][0-9])02))/; 
PatternsDict.addressLine1 = /^[0-9a-zA-Z-',\/()\"\&\.\s]+$/;
PatternsDict.addressrest = /^[0-9a-zA-Z-',\/()\"\&\.\s]+$/;
PatternsDict.postcode = /^[a-zA-Z]+[0-9]+[a-zA-Z]*\s[0-9][a-zA-Z][a-zA-Z]+$|[a-zA-Z]+[0-9]+[a-zA-Z]*[0-9][a-zA-Z][a-zA-Z]+$/; 
PatternsDict.email = /^[a-zA-Z\._\-0-9]+\@[a-zA-Z\.\-0-9]+$/;
PatternsDict.month = /^[0-9]|1[01]+$/;
PatternsDict.textSpecial = /^[a-zA-Z&-'\s]+$/;
regNotValid = /[^0-9]|^0/;
PatternsDict.AlphaNumeric = /^[0-9a-zA-Z-!:;"£%\*\?\+',\/()\"\&\.\s]+$/;
PatternsDict.comments = /^[0-9a-zA-Z-!:;"£%\*\?\+',\/()\"\&\.\s]+$/;
PatternsDict.time = /^[0-9]+$/
PatternsDict.check = /^[0-9\s]+$/;
PatternsDict.oneValue = /^[0-9\s]+$/;

function CompleteDate(theDate)
{
	//If date not entered return true because second life DOB is not mandatory
	if(theDate == "")
		return true;
	
	var dd = theDate.substr(0,2);
	var mm = theDate.substr(2,2);
	var yyyy = theDate.substr(4,4);
		
	now = new Date() 
	if ((dd > 0) && (mm > 0) && (mm < 13) && (yyyy < now.getFullYear()))
	{

		//If month <> Feb it don't matter if its a leap year or not!
		if (mm == 2)
		{
			//If current year is a round century mod by 400
			//else mod by 4 if no remainder then its a leap year 
			switch (yyyy.substr(2,2)) 
			{
				case 0:
					lpYr = yyyy % 400;
					break;
			
				default:
					lpYr = yyyy % 4;
			}
		
			// If its a leap year feb has 29 else 28
			if (lpYr == 0)
				ValidDate = /^(0[1-9]|[1-2][0-9])/;
			else
				ValidDate = /^(0[1-9]|1[0-9]|2[0-8])/;	
		}
		else
		{
			// months 1,3,5,7,8,10,12 days 1 - 31
			// months 4,6,9,11 days 1 - 30
			// feb dealt with above
			var ValidDate = /^(((0[1-9]|[1-2][0-9]|3[0-1])(0[13578]|1[02]))|((0[1-9]|[1-2][0-9]|30)(0[469]|11))|((0[1-9]|[1-2][0-9])02))/; 
    	}
	
		//test the date
		return ValidDate.test(theDate);
	}
	else
	{
		return false;
	}
}

function validateForm(theForm)
{	
		var elArr = document.theForm.elements;
		for(var i=0;i<elArr.length;i++)
		with(elArr[i])
		{
				var v=elArr[i].validator;
				var fieldstate = elArr[i].fieldstate;
				if(!v) continue;

				if(v == "dropdown")
				{
						if(elArr[i].selectedIndex <= 0) 
						{
								elArr[i].ok = false;
						}
						else
						{
								elArr[i].ok = true;
						}
				}
				else if (v == "divdrop")
				{
						if(elArr[i].value == "")
						{
								elArr[i].ok = false;
						}
						else
						{
								elArr[i].ok = true;
						}
				}
		
				else if(v == "radio")
				{
						var i;
						var chk=false;
						var radioArray = elArr[elArr[i].name];
						for(i=0;i<radioArray.length;i++)
						{
								chk = chk || radioArray[i].checked;
								elArr[i].ok = chk;
						}
				}
		
				else if(v == "date")
				{
						var theValue = value.replace(/[\/\|-]/g,"");
						if (CompleteDate(theValue))
						{
							elArr[i].ok = true;
						}
						else
						{
							elArr[i].ok = false;
						}
						
				}
						
				else
				{	
						var theValue = value;
						if (theValue == "" && fieldstate == "Mandatory")
						{
								elArr[i].ok = false;
						}
						else if (theValue == "" && fieldstate == "Optional")
						{
								elArr[i].ok = true;
						}
						else
						{
							var thePat = PatternsDict[v];
							var theTest = thePat.test(theValue);
							elArr[i].ok = theTest;
						}
				}
		}
}

function dateConcat(dateName,reg)
	{
	if(reg)
		{
		var concDateName = dateName.replace('_CHECK','');
		}else{
		var concDateName = dateName
		}
	if(document.theForm[concDateName + '1'])
		{
		if(document.theForm[dateName])document.theForm[dateName].value = document.theForm[concDateName + '1'].value + '/' + document.theForm[concDateName + '2'].value + '/' + document.theForm[concDateName + '3'].value;
		}else{
		if(document.theForm[dateName])document.theForm[dateName].value = document.layers[dateName + '_CONTROL'].document.theForm[concDateName + '1'].value + '/' + document.layers[dateName + '_CONTROL'].document.theForm[concDateName + '2'].value + '/' + document.layers[dateName + '_CONTROL'].document.theForm[concDateName + '3'].value;
		}
	}
  var dropdown = new Object();
  var divdrop = new Object();
  var radio = new Object();  