function isValidUSPhoneNumber(txtPhone) {
	return RegExValidate('(\\d{3})\\D*(\\d{3})\\D*(\\d{4})\\D*(\\d*)$', txtPhone, 'i');
}

//return values
//	-2 = invalid township/north-south combination
//	-1 = not completely marked
//	 0 = all empty
//	 1 = valid TRS
function isValidTRS(northsouth, township, range, section) {
	var nEmpty = FieldIsEmpty(northsouth);
	var tEmpty = FieldIsEmpty(township);
	var rEmpty = FieldIsEmpty(range);
	var sEmpty = FieldIsEmpty(section);

	if(nEmpty && tEmpty && rEmpty && sEmpty)
		 return 0;	// all empty
	else if(!nEmpty && !tEmpty && !rEmpty && !sEmpty)
	{
		if((northsouth == '+') && (township > 3))
			return -2;	//invalid township/north-south combination
		else
			return 1;	// valid TRS
	}
		
	else
		return -1;	// some marked, others empty
}

function isValidTRSCounty(countyCode, northsouth, township, range, section) {
	if(section < 37)	return true;
	if( (section < 42) && (countyCode == "F001")) return true;		// alachua

	if( (section > 41) && ( (countyCode == "F023") ||				// columbia
							(countyCode == "F047") ||				// hamilton
							(countyCode == "F065") ||				// jefferson
							(countyCode == "F079") )) return true;	// madison

	return false;	
}

function isValidParcel(txtParcel) {
	if( isValidParcelID(txtParcel, "F001") ) return true;
	if( isValidParcelID(txtParcel, "F003") ) return true;
	if( isValidParcelID(txtParcel, "F007") ) return true;
	if( isValidParcelID(txtParcel, "F023") ) return true;
	if( isValidParcelID(txtParcel, "F029") ) return true;
	if( isValidParcelID(txtParcel, "F041") ) return true;
	if( isValidParcelID(txtParcel, "F047") ) return true;
	if( isValidParcelID(txtParcel, "F065") ) return true;
	if( isValidParcelID(txtParcel, "F067") ) return true;
	if( isValidParcelID(txtParcel, "F075") ) return true;
	if( isValidParcelID(txtParcel, "F079") ) return true;
	if( isValidParcelID(txtParcel, "F107") ) return true;
	if( isValidParcelID(txtParcel, "F121") ) return true;
	if( isValidParcelID(txtParcel, "F123") ) return true;
	if( isValidParcelID(txtParcel, "F125") ) return true;
	
	return false;
}

function isValidParcelID(txtParcel, txtCountyCode) {
	txtCountyCode = txtCountyCode.toUpperCase();

	switch(txtCountyCode) {
		case "F001": { //Alachua
			return RegExValidate('^[A-Z0-9]{5}-[A-Z0-9]{3}-[A-Z0-9]{3}$', txtParcel, 'i');
		}
		case "F003": { //Baker
			return RegExValidate('^[A-Z0-9]{2}-[A-Z0-9]{1}[NS]-[A-Z0-9]{2}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$', txtParcel, 'i');
		}
		case "F007": { //Bradford
			return RegExValidate('^[A-Z0-9]{5}-[A-Z0-9]{1}-[A-Z0-9]{5}$', txtParcel, 'i');
		}
		case "F023": { //Columbia
			return RegExValidate('^[A-Z0-9]{5}-[A-Z0-9]{3}$', txtParcel, 'i');
		}
		case "F029": { //Dixie
			return RegExValidate('^[A-Z0-9]{2}-[A-Z0-9]{2}-[A-Z0-9]{2}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$', txtParcel, 'i');
		}
		case "F041": { //Gilchrist
			return RegExValidate('^[A-Z0-9]{2}-[A-Z0-9]{2}-[A-Z0-9]{2}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$', txtParcel, 'i');
		}
		case "F047": { //Hamilton
			return RegExValidate('^[A-Z0-9]{4}-[A-Z0-9]{3}$', txtParcel, 'i');
		}
		case "F065": { //Jefferson
			return RegExValidate('^[A-Z0-9]{2}-[A-Z0-9]{2}[NS]-[A-Z0-9]{2}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$', txtParcel, 'i');
		}
		case "F067": { //Lafayette
			return RegExValidate('^[A-Z0-9]{2}-[A-Z0-9]{2}-[A-Z0-9]{2}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{5}$', txtParcel, 'i');
		}
		case "F075": { //Levy
			return RegExValidate('^[A-Z0-9]{2}-[A-Z0-9]{2}-[A-Z0-9]{2}-[A-Z0-9]{5}-[A-Z0-9]{3}-[A-Z0-9]{2}$', txtParcel, 'i');
		}
		case "F079": { //Madison
			return RegExValidate('^[A-Z0-9]{4}-[A-Z0-9]{3}-[A-Z0-9]{3}$', txtParcel, 'i');
		}
		case "F107": { //Putnam
			return RegExValidate('^[A-Z0-9]{2}-[A-Z0-9]{2}-[A-Z0-9]{2}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$', txtParcel, 'i');
		}
		case "F121": { //Suwannee
			return RegExValidate('^[A-Z0-9]{4}[NS][A-Z0-9]{2}E[A-Z0-9]{11}$', txtParcel, 'i');
		}
		case "F123": { //Taylor
			return RegExValidate('^[A-Z0-9]{5}-[A-Z0-9]{3}$', txtParcel, 'i');
		}
		case "F125": { //Union
			return RegExValidate('^[A-Z0-9]{2}-[A-Z0-9]{2}-[A-Z0-9]{2}-[A-Z0-9]{2}-[A-Z0-9]{3}-[A-Z0-9]{4}-[A-Z0-9]{1}$', txtParcel, 'i');
		}
		default: {
			return false;
		}
	}
}

function pnHelp() {
	var str = "";
	
	str += "All parcel numbers can contain\nboth letters and numbers.\n\n";
	str += "Alachua       xxxxx-xxx-xxx\n";
	str += "Baker           xx-x(N or S)-xx-xxxx-xxxx-xxxx\n";
	str += "Bradford      xxxxx-x-xxxxx\n";
	str += "Columbia      xxxxx-xxx\n";
	str += "Dixie             xx-xx-xx-xxxx-xxxx-xxxx\n";
	str += "Gilchrist        xx-xx-xx-xxxx-xxxx-xxxx\n";
	str += "Hamilton       xxxx-xxx\n";
	str += "Jefferson     xx-xx(N or S)-xx-xxxx-xxxx-xxxx\n";
	str += "Lafayette     xx-xx-xx-xxxx-xxxx-xxxxx\n";
	str += "Levy             xx-xx-xx-xxxxx-xxx-xx\n";
	str += "Madison        xxxx-xxx-xxx\n";
	str += "Putnam         xx-xx-xx-xxxx-xxxx-xxxx\n";
	str += "Suwannee    xxxx(N or S)xxExxxxxxxxxxx\n";
	str += "Taylor           xxxxx-xxx\n";
	str += "Union            xx-xx-xx-xx-xxx-xxxx-x\n";

	alert(str);
}

function isAllowedFileExtension(filename) {
	//cut out the path portion
	while( filename.indexOf("/", 0) > 0 )
		filename = filename.substr(filename.indexOf("/", 0) + 1, filename.length - filename.indexOf("/", 0))
	while( filename.indexOf("\\", 0) > 0 )
		filename = filename.substr(filename.indexOf("\\", 0) + 1, filename.length - filename.indexOf("\\", 0))

	var lastPeriod, i, fileExtension;
	lastPeriod = filename.indexOf(".", 0);
	i = lastPeriod;
	while(lastPeriod > 0) {
		i = lastPeriod;
		lastPeriod = filename.indexOf(".", i+1);
	}

	if(i > 0)
		fileExtension = filename.substr(i + 1, filename.length - i).toUpperCase();
	else
		fileExtension = "";

	switch(fileExtension) {
		case "GIF" :
		case "JPG" :
		case "JPEG" :
		case "PNG" :
		case "HTM" :
		case "HTML" :
		case "DOC" :
		case "DOCX" :
		case "XLS" :
		case "XLSX" :
		case "PDF" :
		case "TXT" : {
			return true;
			break;
		}
		default: {
			return false;
			break;
		}
	}
}

