/*

0=ok
1=required and empty
2=not valid

*/

function valid_date ( oField, bReq ) {
	var nReturn=2;

	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.value=trim ( oField.value );
	if ( bReq && oField.value == '' )
		nReturn=1;
	else if ( !bReq && oField.value == '' )
		nReturn=0;
	else {
		if ( isDate ( oField.value ))
			nReturn=0;
	}

	return nReturn;
}

function valid_integer ( oField, bReq ) {
	var nReturn=2;

	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.value=trim ( oField.value );
	if ( bReq && oField.value == '' )
		nReturn=1;
	else if ( !bReq && oField.value == '' )
		nReturn=0;
	else {
		if ( isInteger ( oField.value ))
			nReturn=0;
	}

	return nReturn;
}

function valid_integer_range ( oField, nStart, nEnd, bReq ) {
	var nReturn=2;

	if ( typeof bReq == 'undefined' )
		var bReq=true;

	if (( nReturn=valid_integer ( oField, bReq )) == 0 ) {
		if ( oField.value >= nStart && oField.value <= nEnd )
			nReturn=0;
		else
			nReturn=2;
	}
	
	return nReturn;
}

function valid_money ( oField, bReq ) {
	var nReturn=2;

	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.value=trim ( oField.value );
	if ( bReq && oField.value == '' )
		nReturn=1;
	else if ( !bReq && oField.value == '' )
		nReturn=0;
	else {
		if ( oField.value.indexOf('.') == -1 )
			oField.value=trim( strip_chars ( oField.value, '$()' )) + '.00';
		else
			oField.value=trim( strip_chars ( oField.value, '$()' ), '0' );
		if ( isFloat ( oField.value, 2 ))
			nReturn=0;
		if ( oField.value.length > 0 ) {
			if ( oField.value.charAt(oField.value.length-1) == '.' )
				oField.value += '00';
			if ( oField.value.charAt(0) == '.' )
				oField.value='0' + oField.value;
		}
	}

	return nReturn;
}

function valid_percent ( oField, bReq ) {
	var nReturn=2;

	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.value=trim ( oField.value );
	if ( bReq && oField.value == '' )
		nReturn=1;
	else if ( !bReq && oField.value == '' )
		nReturn=0;
	else {
		if ( oField.value.indexOf('.') == -1 )
			oField.value=trim( strip_chars ( oField.value, '%()' )) + '.0000';
		else
			oField.value=trim( strip_chars ( oField.value, '%()' ), '0' );
		if ( isFloat ( oField.value, 4 ))
			nReturn=0;
		if ( oField.value.length > 0 ) {
			if ( oField.value.charAt(oField.value.length-1) == '.' )
				oField.value += '0000';
			if ( oField.value.charAt(0) == '.' )
				oField.value='0' + oField.value;
		}
	}

	return nReturn;
}

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 ( oField.value.substring ( 0, 4 ) == 'www.' )
			oField.value=oField.value.substring ( 4 );
		if ( !bDomainOnly ) {
			if ( bHTTP ) {
				if ( bSecure ) {
					oField.value='https://' + oField.value;
					nReturn=0;
				} else {
					oField.value='http://' + oField.value;
					nReturn=0;
				}
			}
		} else
			nReturn=0;
	}

	return nReturn;
}

function valid_credit_card ( oField, bReq ) {
	var nReturn=2;

	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.value=trim ( oField.value );
	if ( bReq && oField.value == '' )
		nReturn=1;
	else if ( !bReq && oField.value == '' )
		nReturn=0;
	else {
		if ( isCreditCard ( oField.value ))
			nReturn=0;
	}

	return nReturn;
}

function valid_zip ( oField, bReq ) {
	var nZip, nReturn=2;
	
	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.value=trim ( oField.value );
	if ( bReq && oField.value == '' )
		nReturn=1;
	else if ( !bReq && oField.value == '' )
		nReturn=0;
	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 );
			nReturn=0;
		}
    }
	
	return nReturn;
}

function valid_phone ( oField, bReq ) {
	var tPhone, nReturn=2;

	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.value=trim ( oField.value );
	if ( bReq && oField.value == '' )
		nReturn=1;
	else if ( !bReq && oField.value == '' )
		nReturn=0;
	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 );
				nReturn=0;
			} 
		}
    }
	
	return nReturn;
}

function valid_email ( oField, bReq ) {
	var i, nLen, tEmail, nReturn=2;

	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.value=trim ( oField.value );
	if ( bReq && oField.value == '' )
		nReturn=1;
	else if ( !bReq && oField.value == '' )
		nReturn=0;
	else if ( oField.value.length < 3 )
		nReturn=2;
	else {
		i=oField.value.indexOf ( '@' );
		if ( i == 0 || i == oField.value.length-1 || ( i != -1 && oField.value.length > i && oField.value.indexOf ( '@', i+1 ) != -1 ))
			nReturn=2;
		else if ( oField.value.indexOf ( ' ' ) != -1 )
			nReturn=2;
		else if ( oField.value.indexOf ( ',' ) != -1 )
			nReturn=2;
		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 ) != '.' )
					nReturn=2;
				else
					nReturn=0;
			}
		}
	}
	
	return nReturn;
}
