/*
 * Developed for the CRIF-HCI project by Thomson Consulting International.
 * TCI, 31st Floor, Centre Point, 103 New Oxford Street, London. WC1A 1PG.
 *
 * SOURCE FILE
 *	Registration.js
 *
 * DESCRIPTION
 *	Contains a set of functions relating to user registration.
 *
 * FUNCTIONS
 *	validateIndividualRegistration()
 *	validateCompanyRegistration()
 */

alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-'/_";
num = "0123456789.-'/()#";
alphanum = alpha + num;
username="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789.,-'";
password="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-+.0123456789";
name= "0123456789";
letter="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"


function validateIndividualRegistration (form) {

	if (!validateFieldCharacters("First name", form.first_name.value, username + " ", true)) {
		return false;
	}

	if (!validateFieldCharacters("Last name", form.last_name.value, username + " ", true)) {
		return false;
	}
	
	if (!validateFieldCharacters("Address", form.address.value, alphanum + "()\' ;./," + "#" + "&nbsp;", true)) {
		return false;
	}

	if (!validateFieldCharacters("City", form.city.value, alpha + " ", true)) {
		return false;
	}
	if (!validateFieldCharacters("Postal code", form.postal_code.value, alphanum + " ", true)) {
		return false;
	}
	if (!validateDropDown (form.country , 'NS', false)) {
		alert(localize("RequiredField", localize("Country")));
		return false;
	}



	if (!validateFieldCharacters("Phone number", form.phone_number.value, num + "/" + " " + "+", true)) {
		return false;
	}

	if (!validateFieldCharacters("Email address", form.email_address.value, alphanum + ".@" + "#", true)) {
		return false;
	}

	return true;
}



function validateCompanyRegistration (form) {

	if (!validateFieldCharacters(localize("First Name"), form.first_name.value, username + " ", true)) {
		return false;
	}

	if (!validateFieldCharacters(localize("Last Name"), form.last_name.value, username + " ", true)) {
		return false;
	}
	if (document.form1.company_name.value=="")
	{
	  var company_name=localize("company_name");
	  alert(localize("RequiredField", company_name));
	  return false;
    }

	if (document.form1.address.value=="")
	{
	  var Address=localize("Address");
	  alert(localize("RequiredField", Address));
	  return false;
    }

	if (!validateFieldCharacters(localize("City"), form.city.value, alpha + " ", true)) {
		return false;
	}
	
	if (!validateFieldCharacters(localize("Postal code"), form.postal_code.value, alphanum + " ", true)) {
		return false;
	}
	if (!validateTextBox(form.postal_code, 1, 10, 'alpha', localize("Postal code"),'')){
		return false;
	}
	
	if (!validateDropDown (form.country , '', false)) {
		alert(localize("RequiredField", localize("Country")));
		return false;
	}


	if (!validateFieldCharacters(localize("Phone number"), form.phone_number.value, num + '/+. ', true)) {
		return false;
	}


	if (!validateFieldCharacters(localize("Email address"), form.email_address.value, alphanum + '\@', true)) {
		return false;
	}



	//if (!validateCharacters(localize("Department"), form.office.value, letter + " " + ".&", true)) {
	//	return false;
	//}


	if (!validateCharacters(localize("Position"), form.position.value, letter + " ", true)) {
		return false;
	}

	form.submit();
	return true;
	
}



function validateDepositPayment (form) {
	return true;
}



function validateUsernamePassword (form) {
	return true;
}



function validateFieldCharacters (name, value, allowed, compulsory) {
	var valuestr = new String(value);
	var allowedstr = new String(allowed);
	var length = valuestr.length;
	if (compulsory && length == 0) {

		alert(localize('RequiredField', name));
		return false;
	}

	for (var i = 0; i < length; i++) {
		if (allowedstr.indexOf(valuestr.charAt(i)) == -1) {
			alert(localize("IllegalCharacters", name));
			return false;
		}
	}
	return true;
}



function validateFieldCharactersName (name, value, allowed, compulsory) {
	var valuestr = new String(value);
	var allowedstr = new String(allowed);
	var length = valuestr.length;
	if (compulsory && length == 0) {
		alert(localize("RequiredField", name));
		return false;
	}

	for (var i = 0; i < length; i++) {
		if (!(allowedstr.indexOf(valuestr.charAt(i)) == -1)) {
			alert(localize("IllegalCharacters", name));
			return false;
		}
	}
	return true;
}



function validateCharacters (name, value, allowed, compulsory) {
	var valuestr = new String(value);
	var allowedstr = new String(allowed);
	var length = valuestr.length;
	for (var i = 0; i < length; i++) {
		if (allowedstr.indexOf(valuestr.charAt(i)) == -1) {
			alert(localize("IllegalCharacters", name));
			return false;
		}
	}
	return true;
}



function comparePassword (strCompare1,strCompare2)
{

	if (!(strCompare1==strCompare2))
	  {
	alert(localize("password mismatch"));
	return(false)
  }
	return true;
}


function validate_Password(form){

	minLen=8;
	maxLen=14;
	if (!validateFieldCharacters("Password", form.txtNewPassword.value, "alphanum", true)) 
		return false;

	if (form.txtNewPassword.value.length < minLen ) 
	{
		alert(top.localize("MinimumFieldSize", elementName, minLen));
		return false;
	}
						

	if (form.txtNewPassword.value.length > maxLen ) 
		{
		alert(top.localize("MaximumFieldSize", elementName, maxLen));
		return false;
	}
	if (!(comparePassword (form.txtNewPassword.value,form.txtConfirmPassword.value)))
		return false;		
	
return true;

}


function validateUserName_Password(form) 

{
	if (!validateFieldCharacters('UserID', form.UserID.value, username, true)) 
		{
		return false;
		}
	
	if (!validateTextBox(form.UserID, 5, 14, 'alpha', 'UserID',''))
		{
		return false;
		}
	if (!validateFieldCharacters("Password", form.Password.value, password, true)) 
		return false;
		
	
	if (!validateTextBox(form.Password, 8, 14, 'alpha', 'Password','' ))
		return false;		
	
	if (!(comparePassword(form.Password.value,form.Confirm.value)))
		return false;		
	
	if (!validateTextBox(form.first_name, 1, 255, 'alpha' , localize("First Name"))) {
			return false;
		}

	if (!validateTextBox(form.last_name, 1, 255, 'alpha' , localize("Last Name"))) {
			return false;
		}
	
	//if (!validateFieldCharactersName("FirstName", form.first_name.value, name, true)) 
	//	return false;

	//if (!ValidateTextBox2(form.first_name, 2, 50, 'alpha', 'UserID'))
	//	return false;		
		

	//if (!validateFieldCharactersName("LastName", form.last_name.value, name, true)) 
	//	return false;
		
	//if (!ValidateTextBox2(form.last_name, 2, 50, 'alpha', 'UserID','' ))
	//	return false;		

return true;
}


function validateTextBox(elementToCheck , minLen, maxLen, type , elementName, loc ) {
	
	var Result = false;
	assert(type == "alphanum" ||type == "alpha" || type == "num"  || type == "lung", "Unknown validation type \'" + type + "\'");
	// alpha validation
	if (type == 'alpha') {
	
		var length = elementToCheck.value.length;
		// case empty
		if (length == 0) {
			alert(localize("RequiredField", elementName));
			return false;
		}

		// case not extact
		if (minLen == maxLen && minLen != length) {
			alert(localize("ExactFieldSize", elementName, minLen));
			return false;
		}
		
		//case too short
		if (length < minLen ) {
			alert(localize("MinimumFieldSize", elementName, minLen));
			return false;
		}
				
		//case too long
		if (length > maxLen ) {
			alert(localize("MaximumFieldSize", elementName, maxLen));
			return false;
		}
	}
	// numeric validation	
	else {
		if (type =='lung')
			
			{
				var length = elementToCheck.value.length;
				
				if (length == 0) {
					alert(localize("RequiredField", elementName));
				return false;
				}
				if ( isNaN(elementToCheck.value))	{
					alert(localize("NumericField", elementName));
					return false;
				}
				//case too short
				if (length < minLen ) {
					alert(localize("MinimumFieldSize", elementName, minLen));
					return false;
				}
						
				//case too long
				if (length > maxLen ) {
					alert(localize("MaximumFieldSize", elementName, maxLen));
					return false;
				}
				
			}
			else
			{			
				//case empty
				if ( elementToCheck.value.length == 0) {
					alert(localize("RequiredField", elementName));
					return false;
				}
		
				// case not numeric
				if ( isNaN(elementToCheck.value))	{
					alert(localize("NumericField", elementName));
					return false;
				}
		
				// case too short
				if ( elementToCheck.value.length < minLen ) {
					alert(localize("MinimumNumericValue", elementName, minLen));
					return false;
				}
						
				// case too long
				if ( elementToCheck.value.length > maxLen ) {
					alert(localize("MaximumNumericValue", elementName, maxLen));
					return false;
				}
		}
	}

	return true;
}
