// JavaScript Document

function validateEmail(email){
	email = email.toLowerCase();
    var RegExp = /^((([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|\/|=|\?|\^|_|`|\{|\||\}|~)+(\.([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|\/|=|\?|\^|_|`|\{|\||\}|~)+)*)@((((([a-z]|[0-9])([a-z]|[0-9]|\-){0,61}([a-z]|[0-9])\.))*([a-z]|[0-9])([a-z]|[0-9]|\-){0,61}([a-z]|[0-9])\.)[\w]{2,4}|(((([0-9]){1,3}\.){3}([0-9]){1,3}))|(\[((([0-9]){1,3}\.){3}([0-9]){1,3})\])))$/
    return(RegExp.test(email));
} 

function validateURL(url){
    var RegExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;
    return(RegExp.test(url));
}

function validateZipCode(zip){
	//if(zip.length > 5) return false;
	/* *** test() finds match anywhere in the string.  Use ^ and $ to find an exact match: */
	/* For internation codes, require at least 5 alphanumerics:
	var reZip = /^\d{5}$/;
	*/
	var reZip = /^\w{5,}/;
	return(reZip.test(zip));
}

function validatePhone(phone){
	//###-###-#### fomat:
	//var rePhone = /^\d{3}\d{3}-\d{4}$/;
	//Any format that contains 10 digits:
	/*var rePhone = /\d{3}\d{3}\d{4}/;
	return(rePhone.test(phone));*/
	return true;
}

function validatePW(pw){
	var rePW = /\w{6,}/;
	var regTest = rePW.test(pw);
}

function validateStrongPW(pw){
	var validPW = /^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w{8,}$/;
	var regTest = validPW.test(pw);
	if (!regTest){ 
			alert('A password must contain at least 8 characters with at least 1 uppercase letter, 1 lowercase letter, and 1 digit.');
			return false;
	}
	return true;
}

function validateContactForm(thisForm, fieldsArr, nicenameArr){
	var message = validateForm(thisForm, fieldsArr, nicenameArr, true);
	if(thisForm.pass.value != thisForm.confirm_pass.value){
		message +="'Password' and 'Confirm Password' fields do not match.\n";
	}
	if(message != '') {
		alert(message);
		return false;
	}else{
		return true;
	}
}


function validateForm(thisForm, fieldsArr, nicenameArr, returnMsg){
	//alert('validateForm!');
	var message='';
	
	//alert(thisForm.name+': fieldsArr = '+fieldsArr+' fieldsArr.length = '+fieldsArr.length);
	for(var ii=0;ii<fieldsArr.length;ii++){
	
		switch(thisForm.elements[fieldsArr[ii]].type){
			case "password":
			case "text":
				if(thisForm.elements[fieldsArr[ii]].value == ''){ 
					message+="'"+nicenameArr[ii]+"' must not be empty.\n";
				}
				break;
			case "checkbox":
				if(thisForm.elements[fieldsArr[ii]].checked==false){
					message+="'"+nicename[ii]+"' must be selected.\n";
				}
				break;
			case "radio":
				var returnCheck=checkRadio(thisForm, thisForm.elements[fieldsArr[ii]].name);
					if(returnCheck==false){
						message+="'"+nicenameArr[ii]+"' must be selected.\n";
					}
				break;
			case "select-one":
			case "select-multiple":
				//alert('validate select:' +thisForm.elements[fieldsArr[ii]].name + ' = '+thisForm.elements[fieldsArr[ii]].selectedIndex);
				if(thisForm.elements[fieldsArr[ii]].selectedIndex==0){
					//alert('Please select an item from '+thisForm.elements[fieldsArr[ii]].name);
					message+="'"+nicenameArr[ii]+"' must not be empty.\n";
				}
				break;
			case "password":
				if(thisForm.elements[fieldsArr[ii]].value == ''){ 
					message+="'"+nicenameArr[ii]+"' must not be empty.\n";
				}
				break;
		}
	}
	if(returnMsg) return message;
	
	if(message != '') {
		alert(message);
		return false;
	}else{
		//alert('empty message: '+message);
		return true;
	}
}

function validateFieldFormat(thisForm, fieldsArr, nicenameArr){
	var message='';
	for(var ii=0;ii<fieldsArr.length;ii++){
		var fieldVal = thisForm.elements[fieldsArr[ii]].value;
		switch(fieldsArr[ii]){
			case "add_zip":
				if(!validateZipCode(fieldVal)){
					message+="'"+nicenameArr[ii]+"' must contain at least 5 alphanumeric characters.\n";
				}
				break;
			case "email":
				if(!validateEmail(fieldVal)){
					message+="'"+nicenameArr[ii]+"' is not a valid format.\n";
				}
				break;
			case "phone_main":
				if(!validatePhone(fieldVal)){
					message+="'"+nicenameArr[ii]+"' is not a valid format for phone number.\n";
				}
				break;
		}
	}
	if(message != '') {
		alert(message);
		return false;
	}else{
		return true;
	}
}

function checkRadio( formName, radioName){
	for(var i = 0; i < formName.elements.length; i++){
		if(formName.elements[i].name == radioName && formName.elements[i].checked == true){
			return true;
		}
	}
	return false;
} 	

function checkEmailTemplate(email_body, code){
	var message = '';
	if(email_body.indexOf('[COMPANY]') != -1){
		message += 'You forgot to add the Company Name in the email template.\n';
	}
	if(email_body.indexOf('[CODE]') != -1){
		message += 'You forgot to add the Org Code in the email template.';
	}else if(email_body.indexOf(code) == -1){
		message += 'The code you entered, \''+code+'\' was not found in the email template. Check that you entered it correctly.';
	}
	if(message==''){
		return true;
	}else{
		alert(message);
		return false;
	}
}

function validateCode(code){
	//var codeSplit = code.split(' ');
	var reCode = /\s/;
	var regTest = reCode.test(code);
	
	//if (codeSplit.length > 1){
	if(regTest){
		alert("'Code' cannot contain spaces.\n");
		return false
	}
	return true;
}

function validateNumUses(numuses){
	if(numuses==''){
		alert("'# Uses' cannot be empty.\n");
		return false;
	}else{
		var reCode = /\s/;
		var regTest = reCode.test(numuses);
		if(regTest){
			alert("'# Uses' cannot contain spaces.\n");
			return false
		}
		return true;
	}
}

function validateOrgCodeForm(email_body, thisForm, fieldsArr, nicenameArr){
	//alert("Is there anybody in there?");
	var code = document.getElementById('code').value;
	var validForm = validateForm(thisForm, fieldsArr, nicenameArr);
	var checkEmail = checkEmailTemplate(email_body, code);
	
	//alert('checkEmail is '+((checkEmail) ? 'true' :'false')+' and validForm is'+((validForm) ? 'true' : 'false'));
	//var check1 = (checkEmail) ? 'true' :'false';
	//alert(check1);
	if((checkEmail===true) && (validForm===true) && (validateCode(code))){
		//alert('validateOrgCodeForm = true');
		return true;	
	}else{
		//alert('validateOrgCodeForm = false');
		return false;
	}	
}