function valid_zip ( oField ) {
	var nZip, bReturn=false, bReq=true;
	
	oField.value=trim ( oField.value );
	if ( bReq && oField.value == '' )
		bReturn=false;
	else if ( !bReq && oField.value == '' )
		bReturn=true;
	else {
		nZip=strip_chars ( oField.value, '-' );
		if ( isInteger ( nZip ) && ( nZip.length == 5 || nZip.length == 9 )) {
			if  ( nZip.length == 9 )
    			oField.value=reformat ( nZip, "", 5, "-", 4 );
			bReturn=true;
		}
    }
	
	return bReturn;
}

function valid_zip_multiple ( oField, tDelim, bPartialsOK, nMinPartial ) {
	var i, nZip, bReturn=false, bReq=true, nListLen, lNewList="";

	if ( !tDelim )
		var tDelim=",";

	oField.value=trim ( oField.value );
	if ( bReq && oField.value == '' )
		bReturn=false;
	else if ( !bReq && oField.value == '' )
		bReturn=true;
	else {
		bReturn=true;
		nListLen=list_length ( oField.value, tDelim );
		for ( i = 1; i <= nListLen; i ++ ) {
			nZip=strip_chars ( list_get_at ( oField.value, i, tDelim ), '-' );

			// IE javascript sees a carriage return in addition to the newline but FireFox does not so we strip it out anyway
			nZip=strip_chars ( nZip, '\r', '' );
			nZip=trim(nZip);
			
			if ( isInteger ( nZip ) && (( bPartialsOK && nZip.length >= nMinPartial ) || nZip.length == 5 || nZip.length == 9 )) {
				if ( nZip.length == 9 )
					nZip=reformat ( nZip, "", 5, "-", 4 );
			} else if ( nZip.length > 0 )
				bReturn=false;
			if ( nZip.length > 0 ) {
				if ( lNewList != "" )
					lNewList=lNewList + "\n" + nZip;
				else
					lNewList=lNewList + nZip;
			}
		}
		oField.value=lNewList;
    }

	return bReturn;
}

function valid_phone ( oField ) {
	var tPhone, bReturn=false, bReq=true;

	oField.value=trim ( oField.value );
	if ( bReq && oField.value == '' )
		bReturn=false;
	else if ( !bReq && oField.value == '' )
		bReturn=true;
	else {
		tPhone=strip_chars ( oField.value, '()- ' );
		if ( isInteger ( tPhone )) {
			if ( tPhone.length == 11 && tPhone.charAt ( 0 ) == '1' )
				tPhone=tPhone.substring(1,tPhone.length);
			if ( tPhone.length == 10 ) {
				oField.value=reformat ( tPhone, "(", 3, ") ", 3, "-", 4 );
				bReturn=true;
			} 
		}
    }
	
	return bReturn;
}

function valid_email ( oField ) {
	var i, nLen, tEmail, bReturn=false, bReq=true;

	oField.value=trim ( oField.value );
	if ( bReq && oField.value == '' )
		bReturn=false;
	else if ( !bReq && oField.value == '' )
		bReturn=true;
	else {
		i = 1;
		tEmail=oField.value;
    	nLen=tEmail.length;
	    while ( i < nLen && tEmail.charAt ( i ) != '@' )
			i ++;
		if ( !( i >= nLen || tEmail.charAt ( i ) != '@' )) {
			i += 2;
		    while ( i < nLen && tEmail.charAt ( i ) != '.' )
				i ++;
			if ( i >= nLen-1 || tEmail.charAt ( i ) != '.' )
				bReturn=false;
			else
				bReturn=true;
		}
	}
	
	return bReturn;
}
