var blanks = " \t\n\r";  // aka whitespace chars
var digits = "0123456789";
var digitsInZIPCode1 = 5;
var digitsInZIPCode2 = 9;

function isEmpty(s) {
	return ((s == null) || (s.length == 0));
}

function isBlank(s) {
	var i;
	if (isEmpty(s))
		return true;
	for (i=0; i<s.length; i++) {   
		var c = s.charAt(i);
		if (blanks.indexOf(c) == -1)
			return false;
	}
	return true;
}

function isDigit(c) {
	return ((c >= "0") && (c <= "9"));
}

function isInteger(s) {
	if (isBlank(s))
		return false;
	if ((s.charAt(0) == "-") || (s.charAt(0) == "+"))
		var i = 1;
	else
		var i = 0;
	for (i; i<s.length; i++) {   
		var c = s.charAt(i);
		if (!isDigit(c) && c != ",")
			return false;
	}
	
	return true;
}

function stripLeadingBlanks(s) { 
	var i = 0;
	while ((i < s.length) && (blanks.indexOf(s.charAt(i)) != -1))
	i++;
	return s.substring(i, s.length);
}

function stripTrailingBlanks(s) { 
	var i = s.length - 1;
	while ((i >= 0) && (blanks.indexOf(s.charAt(i)) != -1))
	i--;
	return s.substring(0, i+1);
}

function stripLeadingTrailingBlanks(s) { 
	s = stripLeadingBlanks(s);
	s = stripTrailingBlanks(s);
	return s;
}

function stripCharsNotInBag (s, bag) {
	var i;
	var returnString = "";

	for (i = 0; i < s.length; i++) {   
		var c = s.charAt(i);
		if (bag.indexOf(c) != -1) 
			returnString += c;
	}
	return returnString;
}

function isZIPCode(s) { 
	if (isBlank(s)) 
		return false;

	s = stripLeadingTrailingBlanks(s);

	if ((isInteger(s)) && (s.indexOf("-") == -1) &&  (s.length == digitsInZIPCode1))
		return true;

	if (s.indexOf("-") != 5)
		return false;

	s = stripCharsNotInBag(s, digits);

	if (s.length == digitsInZIPCode2)
		return true;   // #####-####
	else
		return false;  // not #####-####
}
