function navOver(theId) {
	document.getElementById(theId).style.color = '#ffffff';
}

function navOut(theId) {
	document.getElementById(theId).style.color = '#515962';	
}

/* FORMS */
/* Common Regular Expressions */
var re1 = /^[A-Za-z\s\.]+$/;			// only allow letters, spaces and periods
var re2 = /^[A-Za-z\d\s\.\#\,]+$/;		// only allow letters, spaces, periods, pound sign, commas
var re3 = /^[0-9]+$/;					// only allow numeric
var re4 = /^[A-Za-z\s\.0-9]+$/;			// only allow letters, spaces, periods and numbers

/* Common Error Messages */
var em1 = 'required';
var em2 = 'invalid length';
var em3 = 'illegal characters';
var em4 = 'please select a file to upload';
var em5 = 'invalid file extension';

var fullNameStatus = false;
var companyNameStatus = true;
var emailAddressStatus = false;
var areaCodeStatus = false;
var prefixStatus = false;
var lineNumberStatus = false;
var phoneNumberStatus = false;
var phoneExtensionStatus = true;
var messageStatus = false;
var descriptionStatus = false;
var urlStatus = false;
var typeOfWebsiteStatus = false;

/* sets field error styles, error message colors */
function fieldError(fieldId, msgId, errorMsg, fieldStatus) {
	/* fieldId.style.border = '#70a6d8'; */	
	fieldId.style.background = '#282828';
	el = document.getElementById(msgId);
	el.style.color = '#b40001';	/* #107cae */									// error message text color
	el.innerHTML = errorMsg;										// set and display error message 	
	switch (fieldStatus){
		case 'fNS':
			fullNameStatus = false;
			break;
		case 'cNS':
			companyNameStatus = false;
			break;
		case 'eAS':
			emailAddressStatus = false;
			break;
		case 'aCS':
			areaCodeStatus = false;
			break;
		case 'pS':
			prefixStatus = false;
			break;
		case 'lNS':
			lineNumberStatus = false;
			break;
		case 'pES':
			phoneExtensionStatus = false;
			break;
		case 'mS':
			messageStatus = false;
			break;
		case 'dS':
			descriptionStatus = false;
			break;
		case 'urlS':
			urlStatus = false;
			break;
		case 'towS':
			typeOfWebsiteStatus = false;
			break;
	}	
}

/* sets field passed styles, removes error message */
function fieldPassed (fieldId, msgId, fieldStatus) {
	fieldId.style.background = 'transparent';						// input field background color
	el = document.getElementById(msgId);
	el.innerHTML = "&nbsp;";										// set and display error message to blank
	switch (fieldStatus){
		case 'fNS':
			fullNameStatus = true;
			break;
		case 'cNS':
			companyNameStatus = true;
			break;
		case 'eAS':
			emailAddressStatus = true;
			break;
		case 'aCS':
			areaCodeStatus = true;
			break;
		case 'pS':
			prefixStatus = true;
			break;
		case 'lNS':
			lineNumberStatus = true;
			break;
		case 'pES':
			phoneExtensionStatus = true;
			break;
		case 'mS':
			messageStatus = true;
			break;
		case 'dS':
			descriptionStatus = true;
			break;
		case 'urlS':
			urlStatus = true;
			break;
		case 'towS':
			typeOfWebsiteStatus = true;
			break;
	}
}

/* end configuration */ 

function trim(s)
{
  return s.replace(/^\s+|\s+$/, '');
}

function validateTemplate(fieldId, msgId, fieldStatus, expression, errorMsgOne, errorMsgTwo) {
	if (fieldId.value == "") { 												// empty field       
		fieldError(fieldId, msgId, errorMsgOne, fieldStatus);    	
	} else if (expression != '' && !fieldId.value.match(expression)) {		// field value does not match regular expression
		fieldError(fieldId, msgId, errorMsgTwo, fieldStatus);    	
	} else {
		fieldPassed(fieldId, msgId, fieldStatus);							// all tests passed		
	}
}

function validateEmail(fieldId, msgId, fieldStatus, errorMsgOne, errorMsgTwo, errorMsgThree) {
	var tfld = trim(fieldId.value);                     				// value of field with whitespace trimmed off
    var emailFilter = /^[^@]+@[^@.]+\.[^@]*\w\w$/ ;
    var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/ ;   
    if (fieldId.value == "") {											// if field is empty
		fieldError(fieldId, msgId, errorMsgOne, fieldStatus);
    } else if (!emailFilter.test(tfld)) {           				// check characters
		fieldError(fieldId, msgId, errorMsgTwo, fieldStatus);
    } else if (fieldId.value.match(illegalChars)) {						// field values match regular expression
		fieldError(fieldId, msgId, errorMsgThree, fieldStatus);
    } else {
		fieldPassed(fieldId, msgId, fieldStatus);										// all test passed 
    }
}

function validatePhone() {	
	areaCodeStatus = false;
	prefixStatus = false;
	lineNumberStatus = false;
	msgId = 'phoneMsg';
	
	el = document.getElementById('areaCode');
	/*el.style.background = '#0a0a0a';*/
	el = document.getElementById('prefix');
	/*el.style.background = '#0a0a0a';*/
	el = document.getElementById('lineNumber');
	/*el.style.background = '#0a0a0a';*/
	
	if (areaCodeStatus == false) {
		fieldId = document.getElementById('areaCode');
		validatePhoneHelper(fieldId, msgId, 3, 'aCS');
	}
	if (areaCodeStatus == true && prefixStatus == false) {
		fieldStatus = 'pS';
		fieldId = document.getElementById('prefix');
		validatePhoneHelper(fieldId, msgId, 3, 'pS');		
	}	
	if (areaCodeStatus == true && prefixStatus == true && lineNumberStatus == false) {
		fieldId = document.getElementById('lineNumber');
		validatePhoneHelper(fieldId, msgId, 4, 'lNS');
	}
	
	phoneNumberStatus = false;
	if (areaCodeStatus == true && prefixStatus == true && lineNumberStatus == true) {
		phoneNumberStatus = true;									// passed all tests			
	}
}

function validatePhoneHelper(fieldId, msgId, fieldLength, fieldStatus) {	
	el = document.getElementById(msgId);
	if (fieldLength == 3) { 
		var phoneExpression = /^\d{3}$/; 		// set expression for area code and prefix
	}
	else { 
		var phoneExpression = /^\d{4}$/; 						// set expression for line number
	}
	
	if (fieldId.value == "") {										// if empty field
		fieldError(fieldId, msgId, em1, fieldStatus);
	} else if (fieldId.value.length < fieldLength) {				// check field length
		fieldError(fieldId, msgId, em2, fieldStatus);	
	} else if(!fieldId.value.match(phoneExpression)) {				// field value does not match regular expression
		fieldError(fieldId, msgId, em3, fieldStatus);
	} else {		
		fieldPassed(fieldId, msgId, fieldStatus);		
	}
}

function validateZip(fieldId, msgId, errorMsgOne, errorMsgTwo, errorMsgThree){
    el = document.getElementById(msgId);
	//var zipExpression = /^\d{5}|\d{5}-\d{4}$/;
	var zipExpression = /^[0-9]{5}|[0-9]{5}\-\[0-9]{4}$/;
	if (fieldId.value.length == 0) {									// if empty field
		fieldError(fieldId, el, errorMsgOne);		
	} else if (fieldId.value.length != 5 && fieldId.value.length != 10) {	// check length
		fieldError(fieldId, el, errorMsgTwo);		
	} else if(!fieldId.value.match(zipExpression)) { 					// field value does not match regular expression
		fieldError(fieldId, el, errorMsgThree);
	} else {
		fieldPassed(fieldId, el);										// passed all tests 
	}
}

function validateSelect(fieldId, msgId, fieldStatus, errorMsgOne) {
	alert('here');
	var number = fieldId.selectedIndex;
	el = document.getElementById(msgId);
	if (number == 0) {												// user did not make a selection
		fieldError(fieldId, el, errorMsgOne, fieldStatus);
	} else {  
		fieldPassed(fieldId, el, fieldStatus);						// user made a selection
	}
}

function validateFileExtension (fieldId, msgId, acceptExts, errorMsgOne, errorMsgTwo) {
	el = document.getElementById(msgId);	
	if( fieldId.value.length == 0 ) { 								// field empty
		fieldError(fieldId, el, errorMsgOne); 							 
	} else { 
		var dot = fieldId.value.lastIndexOf(".");  
		if( dot == -1 ) {											// no period in file path
			fieldError(fieldId, el, errorMsgTwo); 
		} else {
			var thisExtension = fieldId.value.substr(dot,fieldId.value.length);	// grab field value file extension 
			if (acceptExts[thisExtension]) {						// check if correct file extension
				fieldPassed(fieldId, el);
			} else {   												// passed all tests
				fieldError(fieldId, el, errorMsgTwo);
			}
		}
	}
}

function onSelectShowHidden ( whichSelected, changeOn, showFieldID )
{
  var selected = whichSelected.selectedIndex;
  el = document.getElementById(showFieldID);
  if (selected == changeOn) { el.style.display = "block"; }	// user selected 'changeOn' option, show field using 'showFieldID'
  else { el.style.display = "none"; }	
}

function hideDiv(theFieldID) {	
	el = document.getElementById(theFieldID);
	el.style.display = "none";
}

function validateContactUs () {
	 if(fullNameStatus == true && companyNameStatus == true && phoneNumberStatus == true && messageStatus == true && phoneExtensionStatus == true) {
		return true;		
	 } else {
  	    /* need to validate all fields */
		el = document.getElementById('fullName');
		validateTemplate(el, 'fullNameMsg', 'fNS', re1, em1, em3);
		el = document.getElementById('companyName');
		if (el.value != "") {
			validateTemplate(el, 'companyNameMsg', 'cNS', re2, em1, em3);	
		} else {
			fieldPassed(el, 'companyNameMsg', 'cNS');
		}
		el = document.getElementById('emailAddress');
		validateEmail(el, 'emailAddressMsg', 'eAS', em1, 'seems invalid', em3);		
		validatePhone();
		el = document.getElementById('phoneExtension');
		if (el.value != "") {
			validateTemplate(el, 'phoneExtensionMsg', 'pES', re3, em1, em3);
		} else {
			fieldPassed(el, 'phoneExtensionMsg', 'pES');
		}
		el = document.getElementById('message');
		validateTemplate(el, 'messageMsg', 'mS', re4, em1, em3);
		return false;
	 }
}

function validateQuickContactUs () {
	 if(fullNameStatus == true && companyNameStatus == true && phoneNumberStatus == true && messageStatus == true && phoneExtensionStatus == true) {
		return true;		
	 } else {
  	    /* need to validate all fields */
		el = document.getElementById('fullName');
		validateTemplate(el, 'fullNameMsg', 'fNS', re1, em1, em3);
		el = document.getElementById('emailAddress');
		validateEmail(el, 'emailAddressMsg', 'eAS', em1, 'seems invalid', em3);		
		validatePhone();
		el = document.getElementById('phoneExtension');
		if (el.value != "") {
			validateTemplate(el, 'phoneExtensionMsg', 'pES', re3, em1, em3);
		} else {
			fieldPassed(el, 'phoneExtensionMsg', 'pES');
		}		
		el = document.getElementById('message');
		validateTemplate(el, 'messageMsg', 'mS', re4, em1, em3);
		return false;
	 }
}
