// JavaScript Document form-validation.js

/******************************************************************************/
/*  Paste this code into HTML <header>
/*  <script type="text/javascript" src="/common/formValidation.js"></script>  
/******************************************************************************/

/*******************************************************/
/*	Paste this code into HTML above form <table>
/*	<div id="errorMessage" style="color:#FF0000"></div>
/*******************************************************/

/*******************************************************/
/*	Paste this code into HTML in <form> description
/*	onsubmit="return validate(this)"
/*******************************************************/

var errorMsg;
var currentElement;
var errorArray = new Array();
var groupArray = new Array();

function validate(form){
	errorMsg = '';
	var count = form.elements.length;
	
	for (var i = 0; i < count; i++)	{
		currentElement = form.elements[i];
		//alert (currentElement.type);
		switch (currentElement.type)	{
			
			case 'hidden':
				break;

			case 'password':
				switch (currentElement.id) {
					case 'rPassword': 		CheckText();break;		//Check Password
				}
				break;		
			
			case 'text':
				switch (currentElement.id) {
					case 'rFullName': 		CheckText();break;		//Check Full Name
					case 'rFirstName': 		CheckText();break;		//Check First Name
					case 'rSurname': 			 CheckText();break;		//Check Last Name
					case 'rUsername': 		CheckText();break;		//Check Username
					case 'rPassword': 		CheckText();break;		//Check Password

					case 'rEmail': 				CheckText();break;		//Check Email
					case 'rPhone': 				CheckText();break;		//Check Phone
					case 'rMobile': 			CheckText();break;		//Check Mobile
					case 'rFax':		 			CheckText();break;		//Check Fax
					case 'rOrganisation':	CheckText();break;		//Check Organisation
					case 'rAddress': 			CheckText();break;		//Check Address
					case 'rSuburb': 			CheckText();break;		//Check Suburb
					case 'rState': 				CheckText();break;		//Check State
					case 'rPcode': 				CheckText();break;		//Check Pcode
					case 'rCountry': 			CheckText();break;		//Check Country

					case 'rProdCode': 		CheckText();break;		//Check Product Code
					case 'rProdName': 		CheckText();break;		//Check Product Name
					case 'rProdDesc': 		CheckText();break;		//Check Product Description
					case 'rProdPrice': 		CheckText();break;		//Check Product Price
					case 'rProdOrder': 		CheckText();break;		//Check Product Order
					case 'rProdWeight': 	CheckText();break;		//Check Product Weight
					case 'rStockNum': 		CheckText();break;		//Check Stock Number
					case 'rStockAlertNum': CheckText();break;		//Check Sock Alert Number

					case 'rCompanyName': 	CheckText();break;		
					case 'rTradingName': 	CheckText();break;		
					case 'rACN':				 	CheckText();break;		
					case 'rABN':				 	CheckText();break;		
					case 'rBankName':			CheckText();break;		
					case 'rAccountName':	CheckText();break;		
					case 'rBSB':				 	CheckText();break;		
					case 'rAccountNo':		CheckText();break;		

					case 'rCategoryName':			CheckText();break;		
					case 'rCategoryOrder':		CheckText();break;		

					/** Add extra required text fields here **/
					//case 'r': 			CheckText(currentElement, 18);break;	//Check 
				}
				break;
			
			case 'textarea':
				switch (currentElement.id) {
					case 'rMessage':		CheckText();break;		//Check Message
					case 'rEnquiry':		CheckText();break;		//Check Enquiry
				}
				break;
			
			case 'select-one':	
				if (currentElement.selectedIndex == -1){
					AddError(2); //Selected Error Message
				}else{
					currentElement.style.background="#ffffff";
				}
				break;

			case 'select-multiple':			
				var hasSelections = false;
				for (var smcount = 0; smcount < currentElement.options.length; smcount++)	{
					if(currentElement.options[smcount].selected) {
						hasSelections = true;
						currentElement.style.background="#ffffff";
						break;
					}
				}
				if(!hasSelections) {
					// nothing is selected
					AddError(2); //Selected Error Message
					break;
				}	
				break;

			case 'checkbox':
				switch (currentElement.id) {
					case 'companypasabove':	
						if (currentElement.checked)	{
							form.company_paddress.value = '';
							form.company_pcity.value = '';
							form.company_pstate.value = '';
							form.company_ppostcode.value = '';
							form.company_pcountry.selectedIndex = 14;
							form.company_phone.value = '';
							form.company_fax.value = '';
							form.company_mobile.value = '';
							form.company_email.value = '';
							form.company_secondaryemail.value = '';
							break;
						}else if (!currentElement.checked) {
							//second set of company fields become enabled	
							break;
						}
					case 'rTermsAgree': 		
						if (!currentElement.checked)	{
							AddError(3); break;
						}else if (currentElement.checked) {
							errorMsg = "";
						}						
				}
				break;
				if (!currentElement.checked)	{
					AddError(2); //Selected Error Message
				}
				break;
			
			case 'radio':
				switch (currentElement.id) {
					case 'rShipping': CheckRadio(form);break;		//Check Shipping options
					case 'rPayment': CheckRadio(form);break;		//Check Shipping options
				}	
				break;
		}
	}

	//Return Result
	return PrintResult();
}

// Checks Radio Button groups for selection
function CheckRadio(form) {
	var checked = false;
	var alreadyTested = false;
	
	//Checks to see if this group name has been checked already
	for (var i = 0; i < groupArray.length; i++) {
		if (currentElement.id == groupArray[i]) {
			alreadyTested = true;
		}
	}
	
	if(!alreadyTested) {
		//Add to group to groupArray to record that it has been tested
		groupArray.push(currentElement.id);
		
		//Check all radio buttons with same name
		var count = 0;
		
		for(var i = 0; i < form.elements.length; i++) {
			if(form.elements[i].id == currentElement.id) {
				if(form.elements[i].checked == true) {
					checked = true;
				}
				count += 1;
			}
		}
		
		if (!checked) {
			AddError(2); //Selected Error Message
		}
	}
}

//Checks text fields for content
function CheckText(){	
	var value = currentElement.value;
	
	//If text field is empty, add error
	if (value == ''){
		AddError(0);  //Enter error Message
	//If text field has a specific id, check for validity
	} else {
		currentElement.style.background="#ffffff";
	}
	if (value != '') {
		switch (currentElement.id) {
			case 'rEmail': 					if (!CheckEmail(value)) { AddError(1); } break;				//Check for Valid Email Address
			case 'rPhone': 					if (!CheckForDigits(value)) { AddError(1); } break;		//Check for Valid Phone Number
			case 'rFax': 						if (!CheckForDigits(value)) { AddError(1); } break;		//Check for Valid Fax Number
			case 'rMobile': 				if (!CheckTenDigits(value)) { AddError(1); } break;		//Check for Valid Mobile Number
			case 'rPcode': 					if (!CheckFourDigits(value)) { AddError(1); } break;	//Check for Valid Post Code
			case 'rProdPrice':			if (!CheckTwoDec(value)) { AddError(1); } break;			//Check for Valid Two Decimal Number
			case 'rProdWeight':			if (!CheckForDigits(value)) { AddError(1); } break;			//Check for Valid Two Decimal Number
			case 'rStockNum':				if (!CheckForDigits(value)) { AddError(1); } break;			//Check for Valid Two Decimal Number
			case 'rStockAlertNum':	if (!CheckForDigits(value)) { AddError(1); } break;			//Check for Valid Two Decimal Number

			case 'rACN': 			if (!CheckForDigits(value)) { AddError(1); } break;
			case 'rABN': 			if (!CheckForDigits(value)) { AddError(1); } break;
			/**Add extra conditions here**/
			//case 'r...': 		if (!Check...(value)) { AddError(...); } break;	//Check for ...
		}
	//If text field is fine, proceed
	}
}

// Add specific error to errorMsg
// 0 == "Please enter a (element)
// 1 == "Please enter a Valid (element)
// 2 == "Please select a (element)
function AddError(index){
	if (index == 0) {
		errorMsg += "Please enter a <strong>" + currentElement.title + "</strong>.\n<br />";
	} else if (index == 1) {
		errorMsg += "Please enter a <strong>Valid " + currentElement.title + "</strong>.\n<br />"; 
	} else if (index == 2) {
		errorMsg += "Please select a <strong>Valid " + currentElement.title + "</strong>.\n<br />"; 
	} else if (index == 3) {
		document.getElementById("errorMessage").innerHTML =  "Please Agree to the <strong>Terms and Conditions</strong>.\n<br />";
		errorMsg += " "; 
	}
	currentElement.style.background="#ffdfdf";
}

//Prints resulting Error Message to Document or returns TRUE
function PrintResult(){
	if (errorMsg == "") {
		return true;
	}else if (errorMsg == " ") {
		return false;
	}else{
		document.getElementById("errorMessageLoginSignUp").innerHTML =  "Please repair the following errors.<br />" + errorMsg + "<br />";
		//alert(errorMsg)
		return false;
	}
}

//Checks for a valid email address
function CheckEmail(email) {
	var regexp = /^[a-zA-Z][a-zA-Z_0-9\-\.]*@[a-zA-Z][a-zA-Z_0-9\-]*(\.[a-zA-Z][a-zA-Z_0-9\-]*)+$/;
	return regexp.test(email);
}

//Checks that value contains only numerical digits.
function CheckForDigits(argVal) {
	var regexp = /^\d+$/;
	return regexp.test(argVal);
}
//Checks that value contains only 10 numerical digits.
function CheckTenDigits(argVal){
	var regexp = /^\d{10}$/;
	return regexp.test(argVal);
}
//Checks that value contains only 4 numerical digits.
function CheckFourDigits(argVal){
	var regexp = /^\d{4}$/;
	return regexp.test(argVal);
}
//Checks that value contains only 3 numerical digits.
function CheckThreeDigits(argVal){
	var regexp = /^\d{3}$/;
	return regexp.test(argVal);
}
//Checks that value contains only 2 numerical digits.
function CheckTwoDigits(argVal){
	var regexp = /^\d{2}$/;
	return regexp.test(argVal);
}
//Checks that value contains only numerical digits with two decials "1345.34".
function CheckTwoDec(argVal) {
	var regexp = /^\d*\.\d{2}$/;
	return regexp.test(argVal);
}
//Checks that value contains Currency  with $ and two decimals "$345.34".
function CheckCurrencyTwoDec(argVal) {
	var regexp = /^\$[0-9]+(\.[0-9][0-9])?$/;
	return regexp.test(argVal);
}