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_phone ( oField, bReq ) {
	var tPhone, bReturn=false;

	if ( typeof bReq == "undefined" )
		var bReq=true;

	oField.value=trim ( oField.value );
	if ( bReq && oField.value == '' )
		bReturn=false;
	else if ( !bReq && oField.value == '' )
		bReturn=true;
	else {
		bReturn=isAtLeastOneDigit ( oField.value );
/*
		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, bReq ) {
	var i, nLen, tEmail, bReturn=false;

	if ( typeof bReq == "undefined" )
		var bReq=true;

	/*i=oField.value.indexOf ( '@' );
	if ( i != -1 && oField.value.indexOf ( '@', i+1 ) != -1 )
		bReturn=false;
	else if ( oField.value.indexOf ( ' ' ) != -1 )
		bReturn=false;
	else if ( oField.value.indexOf ( ',' ) != -1 )
		bReturn=false;
	else {
		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;
			}
		}
	}*/

	if(bReq){
	var filter = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
	bReturn= filter.test(oField.value);
	} else {
		bReturn = true;
	}
	
	return bReturn;
}

function valid_url ( oField, bDomainOnly, bReq ) {
	var nReturn=2, bHTTP=false, bSecure=false;

	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.value=lowerString ( trim ( oField.value ));
	if ( bReq && oField.value == '' )
		nReturn=1;
	else if ( !bReq && oField.value == '' )
		nReturn=0;
	else {
		if ( oField.value.substring ( 0, 5 ) == 'https' ) {
			bHTTP=true;
			bSecure=true;
		} else if ( oField.value.substring ( 0,  4 ) == 'http' )
			bHTTP=true;
		if ( oField.value.substring ( 0, 5 ) == 'https' )
			oField.value=oField.value.substring ( 5 );
		if ( oField.value.substring ( 0, 4 ) == 'http' )
			oField.value=oField.value.substring ( 4 );
		if ( bDomainOnly ) {
			if ( oField.value.substring ( 0, 3 ) == 'ftp' )
				oField.value=oField.value.substring ( 3 );
		}
		while ( oField.value.substring ( 0, 1 ) == ':' 
			|| oField.value.substring ( 0, 1 ) == '/' 
			|| oField.value.substring ( 0, 1 ) == '.' ) {
			oField.value=oField.value.substring ( 1 );
		}
		if ( bDomainOnly && oField.value.substring ( 0, 4 ) == 'www.' )
			oField.value=oField.value.substring ( 4 );
		nReturn=0;
		if ( !bDomainOnly ) {
			if ( bHTTP ) {
				if ( bSecure )
					oField.value='https://' + oField.value;
				else
					oField.value='http://' + oField.value;
			}
		}
	}

	return nReturn;
}

function valid_creditcard ( oField, bReq ) {
	var v="0123456789", w="", tCardNumber, bReturn=false;

	if ( typeof bReq == "undefined" )
		var bReq=true;

	tCardNumber=strip_chars ( oField.value, ' -' );
	if ( bReq && tCardNumber == '' )
		bReturn=false;
	else if ( !bReq && tCardNumber == '' )
		bReturn=true;
	else {
		for (var i=0; i < tCardNumber.length; i++) {
			x=tCardNumber.charAt(i);
			if (v.indexOf(x,0) != -1)
				w += x;
		}
		
		var j=w.length / 2;
		if (j < 6.5 || j > 8 || j == 7) 
			bReturn=false;
		else {
			var k=Math.floor(j);
			var m=Math.ceil(j) - k;
			var c=0;
			
			for (var i=0; i<k; i++) {
				a=w.charAt(i*2+m) * 2;
				c += a > 9 ? Math.floor(a/10 + a%10) : a;
			}
			
			for (var i=0; i<k+m; i++) 
				c += w.charAt(i*2+1-m) * 1;
		
			bReturn=( c % 10 == 0 );
		}
	}

	return bReturn;
}
