// form validation, make sure that form feilds were completed
// create the prototype on the String object
String.prototype.trim = function() 
{

 // skip leading and trailing whitespace
 // and return everything in between
  var x=this;
  x=x.replace(/^\s*(.*)/, "$1");
  x=x.replace(/(.*?)\s*$/, "$1");
  return x;
}

function exchangeValidate(f)
{
	 // get the string value from the 'keyword' element
  	var s = f.keyword.value;
  	// trim the string value and put it into the 'txtOut' element
	 f.keyword.value = s.trim();
	 // get the string value from the 'keyword' element
			if ((f.keyword.value == "" || f.keyword.value == null) && f.region.value == ""  && f.searchinclude[1].checked)
			{
				alert("No search criteria selected.");
				return false;
			}
}

//included in all forms to validate required fields, numerics, dates, etc.
function validateForm(f) {
	
		var strReqError = ""
		var strNumError = ""
		var strDateError = ""
		var strPhoneError = ""
		var strTextAreaError = ""
		var strMultiReqError = ""
		var multiReqPassed = ""
		var strUrlError = ""
		var strEmailError = ""
		var strYearError = ""
		
		for (var i = 0; i < f.elements.length; i++){
			var strLen = f.elements[i].name.length - 2
			var strLen2 = f.elements[i].name.length - 3
			var strLen3 = f.elements[i].name.length - 4
			// required fields
			if (f.elements[i].name.substring(strLen)=='_r'){
				if ((f.elements[i].type == 'select-one' && (f.elements[i][f.elements[i].selectedIndex].value == '' || f.elements[i][f.elements[i].selectedIndex].value == null  || f.elements[i][f.elements[i].selectedIndex].value == 'null')) || (f.elements[i].type != 'select-one' && f.elements[i].value == '')){
					 	
						if(strReqError != ''){strReqError += ", "}
						strReqError += f.elements[i].name.slice(2,-2);
				}
			}
			// for multiple requirement fields (i.e. enter a value in either this field or another)
			if (f.elements[i].name.substring(strLen2)=='_mr'){
					if(strMultiReqError != ''){strMultiReqError += ", "}
					strMultiReqError += f.elements[i].name.slice(2,-3);
				if ((f.elements[i].type == 'select-one' && f.elements[i][f.elements[i].selectedIndex].value != '') || (f.elements[i].type != 'select-one' && f.elements[i].value != '')){
					multiReqPassed = 'yes';
				}
			}
			// numeric fields
			if (f.elements[i].type != 'select-one' && (f.elements[i].name.substr(0,2)=='n_' || f.elements[i].name.substr(0,2)=='i_')){
				var newNum = f.elements[i].value
				newNum = newNum.replace(/,/g, "")
				
				if (newNum.length > 0 && (isNaN(newNum) || newNum < 0)){
					if(strNumError != ''){strNumError += ", "}
					strNumError += f.elements[i].name.slice(2);
					strNumError = strNumError.replace('_',' ','All')
				}
			}
			// phone number fields
			if (f.elements[i].type != 'select-one' && f.elements[i].name.substr(0,2)=='p_'){
				if (f.elements[i].value.length > 0 && 
						(isNaN(f.elements[i].value) || 
					  	(
								(f.elements[i].name.search('_1')>0 || f.elements[i].name.search('_2')>0)
								&& f.elements[i].value.length != 3
							)
								||(f.elements[i].name.search('_3')>0 && f.elements[i].value.length != 4)
						)
					 ){
					//trim up the field name to not include the 'p_' and the '_1', etc to see if it's already in the error string
					strPhoneField = f.elements[i].name.slice(2)
					endPosition = strPhoneField.search('_')
					strPhoneField = strPhoneField.slice(0,endPosition)
					//if the field name is not in the error string yet, add it on
					if (strPhoneError.search(strPhoneField) == -1){
						if(strPhoneError != ''){strPhoneError += ", "}
						strPhoneError += strPhoneField;
					}
				}
			}
			// year fields
			if (f.elements[i].type != 'select-one' && f.elements[i].name.substr(0,2)=='y_'){
				if (f.elements[i].value.length > 0 && (isNaN(f.elements[i].value) || f.elements[i].value.length != 4)){
					if(strYearError != ''){strYearError += ", "}
					strYearError += f.elements[i].name.slice(2);
				}
			}
			// url
			if (f.elements[i].type != 'select-one' && f.elements[i].name.substr(0,2)=='u_'){
				if (f.elements[i].value.length > 0 && f.elements[i].value.match("http://") == null){
					if(strUrlError != ''){strUrlError += ", "}
					strUrlError += f.elements[i].name.slice(2);
				}
			}
			// email
			if (f.elements[i].type != 'select-one' && f.elements[i].name.substr(0,2)=='e_'){
				//make sure it contains @ and it's not the last character, contains ".", and does not contain single quotes
				if (f.elements[i].value.length > 0 && (f.elements[i].value.charAt(f.elements[i].value.length - 1) == "@" || f.elements[i].value.match(".") == null || f.elements[i].value.match("'") != null || f.elements[i].value.match("@") == null)){
					if(strEmailError != ''){strEmailError += ", "}
					strEmailError += f.elements[i].name.slice(2);
				}
			}
			// date fields
			if (f.elements[i].name.substr(0,2)=='d_'){
				if (f.elements[i].value.length > 0 && chkdate(f.elements[i]) == false){
					if(strDateError != ''){strDateError += ", "}
					strDateError += f.elements[i].name.slice(2);
					
				}
			}
			// bit fields (required radio buttons)
			
	  	if ((f.elements[i].type == 'radio' || f.elements[i].type == 'checkbox') && f.elements[i].name.substr(0,2)=='b_' && f.elements[i].name.substring(strLen)=='_r'){
	  			var btnChecked = 'no'
				var field = f.elements[i];
				var grpName = field.name;
				
				var fieldName = f.elements[i].name.slice(2,-2);
				fieldName = fieldName.replace("_", " ");
				// need to accomodate for single checkboxes (if it has length (true) then it has more then one in the group)
				if (f.elements[grpName].length) 
				{ 
				
					for(var index=0; index<f.elements[grpName].length; index++) {
						if(f.elements[grpName][index].checked){
							btnChecked = 'yes'
							}
					}
				}
				else
				{
					if(f.elements[grpName].checked)
					{
					btnChecked = 'yes'
					}

				}
				
				
				if(btnChecked == 'no' && strReqError.indexOf(fieldName)< 0){
					if(strReqError != ''){strReqError += ", "}
					strReqError += fieldName.replace("_", " ");
				}
			
			}
			
			// text areas, max value check
			if (f.elements[i].type =='textarea' && f.elements[i].value.length >2000){
				if(strTextAreaError != ''){strTextAreaError += ", "}
				strTextAreaError += f.elements[i].name.slice(2);
			}
			// text areas, replace carriage returns
		 	if(f.elements[i].type =='textarea' && f.elements[i].value.length <=2000){
				f.elements[i].value = f.elements[i].value.replace('\\r\\n','\r\n')
			}
		}
		var strFullError = ""
		//if any errors found, change the form action line by adding the error to the URL
		if (strReqError != '' || strNumError != '' || strDateError != '' || strPhoneError != '' || strYearError != '' || strUrlError != '' || strEmailError != '' || strTextAreaError != '' || (strMultiReqError != '' && multiReqPassed != 'yes')) {
			strFullError = '?FormError='
			if (strReqError !=''){strFullError+='Please fill in these required fields: ' +strReqError.replace('_', ' ') +'<br />'}
			if (strMultiReqError != '' && multiReqPassed != 'yes'){strFullError+='Please fill in one of these required fields: ' +strMultiReqError.replace('_', ' ','ALL') +'<br />'}
			if (strNumError !=''){strFullError+='Please correct these numeric fields: ' +strNumError.replace('_', ' ') +'<br />'}
			if (strDateError !=''){
				strDateError = strDateError.replace('_r', '','ALL')
				strFullError+='Please correct these date fields: ' +strDateError.replace('_', ' ') +'<br />'
			}
			if (strPhoneError !=''){strFullError+='Please correct these phone fields: ' +strPhoneError.replace('_', ' ') +'<br />'}
			if (strYearError !=''){strFullError+='Please correct these year fields: ' +strYearError.replace('_', ' ') +'<br />'}
			if (strUrlError !=''){strFullError+='Please correct these url fields: ' +strUrlError.replace('_', ' ') +'<br />'}
			if (strEmailError !=''){strFullError+='Please correct these email fields: ' +strEmailError.replace('_', ' ') +'<br />'}
			if (strTextAreaError !=''){strFullError+='Please limit these text areas to 2000 characters: ' +strTextAreaError.replace('_', ' ') +'<br />'}
			
			f.action = f.action +strFullError
			f.submit()
		}else{
			return true;
		}
	}
	
// URL and Email links for most memo fields
	// URL and Email links for most memo fields
	function DoPrompt(action, f){
		var blankInsertText;
		if (action == "url") {
			var thisURL = prompt("ADD URL: Enter the complete URL for the link you wish to add.\nExample: http://www.kingcounty.gov", "");
			if (thisURL == null){return;}
			
			blankInsertText = thisURL
			wrapSelection(thisURL,blankInsertText,f)
			f.focus();
			return;
		}
	
		if (action == "email") {
			var thisEmail = prompt("ADD EMAIL: Enter the complete email address that you wish to add.\nExample: name@domain.com", "");
			if (thisEmail == null){return;}
			
			blankInsertText = thisEmail
			wrapSelection('mailto:'+thisEmail,blankInsertText,f)
			f.focus();
			return;
		}
	}	
	// More url and email memo placement functionality
	function storeCaret (f) {
		if(document.getSelection){
			f.caretPos = document.getSelection(); 
			//alert(f.caretPos)
		}else if(f.createTextRange){ 
			f.caretPos = document.selection.createRange().text; 
		}else{
			f.caretPos = ''; 
		}
	}
	
	function wrapSelection(wrapbegin, blankInsertText, f) { 
		if (f.caretPos.text){
			if (f.caretPos.text.length == 0){
				f.caretPos.text = "<a href=" + wrapbegin + ">" + blankInsertText + "</a>"
			}else{
				f.caretPos.text = "<a href=" + wrapbegin + ">" + f.caretPos.text + "</a>"
			}
		}else if (f.caretPos){
			f.value = f.value.replace(f.caretPos, '<a href=' + wrapbegin + '>' + f.caretPos + '</a>')
		}else{
			f.value += "<a href=" + wrapbegin + ">" + blankInsertText + "</a>"
		}
		f.focus();
	}
//end wrap text
