vdf.AccessGateWay = {
	_sGatewayUsersID : 'gatewayUsers',
	_sGatewayUserRowClass : '.gatewayUserRow',
	_sMoveAtMaxLength : '.moveAtMaxLength',
	_sUsernameInactiveClass : 'inactiveUserContent',
	_eGatewayUsersElement : null,
	_aUserRows : [],
	iNumRowsToDisplay : 6,
	
	init : function () {
		vdf.AccessGateWay._eGatewayUsersElement = $(vdf.AccessGateWay._sGatewayUsersID);
		vdf.AccessGateWay._aUserRows = vdf.AccessGateWay._eGatewayUsersElement.select(vdf.AccessGateWay._sGatewayUserRowClass);
				
		vdf.AccessGateWay.validateMoreUserFields(vdf.AccessGateWay._aUserRows);
		vdf.AccessGateWay.createMoreUsersLink(vdf.AccessGateWay._eGatewayUsersElement);
		
		//listener for mobile skip
		var aMoveAtMaxLengthElements = $$(vdf.AccessGateWay._sMoveAtMaxLength);
		aMoveAtMaxLengthElements.each(function(eElement) {
			eElement.observe('keyup', vdf.AccessGateWay.nextInput);
		});
	},
		
	inputBlur : function (event) {
		var eTarget = $(event.target);
		if (eTarget.value === '') {
			eTarget.addClassName(vdf.AccessGateWay._sUsernameInactiveClass);
			eTarget.value = eTarget.title;
		}
	},
	
	inputFocus : function (event) {
		var eTarget = $(event.target);
		if (eTarget.value === eTarget.title) {
			eTarget.removeClassName(vdf.AccessGateWay._sUsernameInactiveClass);
			eTarget.value = '';
		}
	},
	
	nextInput : function (event) {
		if (event.keyCode >= 48 && event.keyCode < 105) {
			var eTarget = $(event.target);
			if (eTarget.value.length == eTarget.readAttribute('maxlength')) {
				try {
					eTarget.next('input').focus();
				}
				catch (exception) { }
			}
		}
	},
	
	addMoreUsers : function (event) {
		Event.stop(event);
		if (vdf.AccessGateWay.iNumRowsToDisplay < 30) {
			vdf.AccessGateWay.iNumRowsToDisplay = vdf.AccessGateWay.iNumRowsToDisplay + 6;
			vdf.AccessGateWay.showRows(vdf.AccessGateWay._aUserRows);
		}
		return false;
	},
	
	showRows : function (aRows) {
				
		for(var i = 0, j = aRows.length; i < j; i++) 
		{
			if(aRows[i].hasClassName('JShidden') && ( i <= (vdf.AccessGateWay.iNumRowsToDisplay-1) ) ) 
			{	
				aRows[i].tween({				
					alpha: {
						time: 0,
						duration: 0.4,
						start: 0,
						stop: 100,
						onStart : function(element){
							element.removeClassName("JShidden");						
						},
						transition: FX.quadInOut
					}
				});
				Animate.play();
			}
			
			if(vdf.AccessGateWay.iNumRowsToDisplay == 30) {
				vdf.AccessGateWay.eAddMoreUsersLink.hide();	
			}	
		}
	},
	
	createMoreUsersLink : function (eParent) {
		var eContainer = $(document.createElement("div"));
		
		var eAddMoreUsersLink = vdf.AccessGateWay.eAddMoreUsersLink =  $(document.createElement("a"));
		eAddMoreUsersLink.setAttribute('href', '#');
		eAddMoreUsersLink.update('Add more users');
		eAddMoreUsersLink.observe('click', vdf.AccessGateWay.addMoreUsers);

		eContainer.insert(eAddMoreUsersLink);
		eParent.insert(eContainer);
	},
	
	validateMoreUserFields : function (aRows) {
		
		aRows.each(function(element){
			
			var field = element.select("input.validateItem");
			
			vdf.newVOP.Form.personalDetails[field[0].id] = {				
				sFieldTitle : 'Additional users',
				ruleNames : ['value_required', 'mobile_regex' ],
				rules : {
					value_required : {	
						sValidationType: 'required_if',
						aParentFields: [field[1].id],
						aParentRuleValue: [true],
						sRuleValue : true, 
						sValidationMessage : "You need to tell us the first part of the gateway users mobile number.",
						sGroupID : "gatewayUsers"
					},
					mobile_regex : { 
						sValidationType: 'regex', 
						sRuleValue : /^07[0-9]{3}$/, 
						sValidationMessage : "Mobile no should be 11 digits(Numeric characters) starting with 07",
						sGroupID : "gatewayUsers"
					}
				}
			}
						
			vdf.newVOP.Form.personalDetails[field[1].id] = { 
				sFieldTitle : 'Additional users',
				ruleNames : ['value_required', 'mobile_minLength'],
				rules : {
					value_required : {	
						sValidationType: 'required_if',
						aParentFields: [field[0].id],
						aParentRuleValue: [true],
						sRuleValue : true, 
						sValidationMessage : "You need to tell us the second part of the gateway users mobile number.",
						sGroupID : "gatewayUsers"
					},
					
					mobile_minLength : { 
						sValidationType: 'regex', 
						sRuleValue : /^[0-9]{6}$/, 
						sValidationMessage : "Mobile no should be 11 digits(Numeric characters) starting with 07" ,
						sGroupID : "gatewayUsers"
					}
				}
			}
			
		});
	}
}


/////////////////////////////////////////////
// Class - vdf.newVOP.Form.personalDetails
// Description - Validation rules for the form
/////////////////////////////////////////////
vdf.newVOP.Form.personalDetails = { 
		name : { 
			sFieldTitle : 'Gateway Owner',
			ruleNames : ['value_required', 'name_regex'],
			rules : {
				value_required : {	
					sValidationType: 'required', 
					sRuleValue : true, 
					sValidationMessage : "Please enter a name.",
					sGroupID : "ownerInfo"
				},
				
				name_regex : {
					sValidationType: 'regex',
					sRuleValue :/^[ a-zA-Z]+$/,
					sValidationMessage : "Name must not contain any characters other than alphabets.",
					sGroupID : "ownerInfo"
				}
			}
		},
		
		surname : { 
			sFieldTitle : 'Gateway Owner',
			ruleNames : ['value_required', 'surname_regex'],
			rules : {
				value_required : {	
					sValidationType: 'required', 
					sRuleValue : true, 
					sValidationMessage : "Please enter your surname.",
					sGroupID : "ownerInfo"
				},
				
				surname_regex : {
					sValidationType: 'regex',
					sRuleValue :/^[ a-zA-Z]+$/,
					sValidationMessage : "Surname must not contain any characters other than alphabets.",
					sGroupID : "ownerInfo"
				}
			}
		},
		
		mobileNumber : {
			sFieldTitle: 'Gateway Owner',
			ruleNames : ['mobile_required','mobile_regex'],
			rules : { 
				mobile_required : { 
					sValidationType: 'required', 
					sRuleValue : true, 
					sValidationMessage : "You need to tell us the first part of your mobile number.",
					sGroupID : "ownerInfo"
				}, 
				
				mobile_regex : { 
					sValidationType: 'regex', 
					sRuleValue : /^07[0-9]{3}$/ , 						
					sValidationMessage : "Mobile no should be 11 digits(Numeric characters) starting with 07",
					sGroupID : "ownerInfo"
				}
			}
		},
		
		mobileNumber2 : {
			sFieldTitle: 'Gateway Owner',
			ruleNames : ['mobile_required', 'mobile_minLength'],
			rules : { 
				mobile_required : { 
					sValidationType: 'required', 
					sRuleValue : true, 
					sValidationMessage : "You need to tell us the second part of your mobile number.",
					sGroupID : "ownerInfo"
				}, 
				
				mobile_minLength : { 
					sValidationType: 'regex', 
					sRuleValue :/^[0-9]{6}$/, 
					sValidationMessage : "Mobile no should be 11 digits(Numeric characters) starting with 07" ,
					sGroupID : "ownerInfo"
				}
			}
		},
		
		email : {
			sFieldTitle: 'Gateway Owner',
			ruleNames : ['email_required','email_regex'],
			rules : { 
				email_required : { 
					sValidationType: 'required', 
					sRuleValue : true, 
					sValidationMessage : "Please enter your email address." ,
					sGroupID : "ownerInfo"

				}, 
				email_regex : { 
					sValidationType: 'regex', 
					sRuleValue : /^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i, 
					sValidationMessage : "The email you entered is invalid." ,
					sGroupID : "ownerInfo"
				}
			}
		},
		

		repeatEmail : {
			sFieldTitle: 'Gateway Owner',
			ruleNames : ['email_required','email_matches'],
			rules : {
				email_required : { 
					sValidationType: 'required', 
					sRuleValue : true, 
					sValidationMessage : "You need to confirm your email address." ,
					sGroupID : "ownerInfo"
				}, 
				email_matches : { 
					sValidationType: 'matchesField', 
					sRuleValue : 'email', 
					sValidationMessage : "Your email and confirmed emails do not match.",
					sGroupID : "ownerInfo"
				}
			}
		},
		
		gatewayname : { 
			sFieldTitle : 'Gateway details',
			ruleNames : ['value_required'],
			rules : {
				value_required : {	
					sValidationType: 'required', 
					sRuleValue : true, 
					sValidationMessage : "You need to enter a gateway name.",
					sGroupID : "gatewayDetails"
				}			
			}
		},
		
		serialnumber : { 
			sFieldTitle : 'Gateway details',
			ruleNames : ['value_required', 'serial_regex', 'serial_minLength'],
			rules : {
				value_required : {	
					sValidationType: 'required', 
					sRuleValue : true, 
					sValidationMessage : "You need to tell us the gateway serial number.",
					sGroupID : "gatewayDetails"
				},
				
				serial_regex : {
					sValidationType: 'regex',
					sRuleValue :/^[0-9]+$/,
					sValidationMessage : "Serial number must contain digits only.",
					sGroupID : "gatewayDetails"
				},
				
				serial_minLength : { 
					sValidationType: 'minLength', 
					sRuleValue : 11, 
					sValidationMessage : "Your serial number must be 11 digits exactly." ,
					sGroupID : "gatewayDetails"
				}
			}
		},
		
		postcode : { 
			sFieldTitle : 'Gateway details',
			ruleNames : ['value_required', 'postcode_regex'],
			rules : {
				value_required : {	
					sValidationType: 'required', 
					sRuleValue : true, 
					sValidationMessage : "You need to enter a postcode.",
					sGroupID : "gatewayDetails"
				},
				
				postcode_regex : {
					sValidationType: 'regex',
					sRuleValue : /[A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1}?/i,
					sValidationMessage : "Please enter a valid first part for your postcode.",
					sGroupID : "gatewayDetails"
				}
			}
		},
		
		postcode2 : { 
			sFieldTitle : 'Gateway details',
			ruleNames : ['value_required', 'postcode_regex'],
			rules : {
				value_required : {	
					sValidationType: 'required', 
					sRuleValue : true, 
					sValidationMessage : "You need to enter the second part of the postcode.",
					sGroupID : "gatewayDetails"
				},
				
				postcode_regex : {
					sValidationType: 'regex',
					sRuleValue :/[0-9][A-Z]{2}/i,
					sValidationMessage : "Please enter a valid second part for your postcode.",
					sGroupID : "gatewayDetails"
				}
				
			}
		},
				
		acceptTC : {
			sFieldTitle: 'Terms and conditions',
			ruleNames : ['acceptTC_isNotEqual'],
			rules : {
				acceptTC_isNotEqual : { 
					sValidationType: 'required', 
					sRuleValue : true, 
					sValidationMessage : "You must accept the terms and conditions to continue.", 
					sErrorCode : ""
				}
			}
		}			
}
