/*

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.val(trim(oField.val()));
	if ( bReq && oField.val() == '' )
		nReturn=1;
	else if ( !bReq && oField.val() == '' )
		nReturn=0;
	else {
		if ( isDate ( oField.val()))
			nReturn=0;
	}

	return nReturn;
}

function valid_integer ( oField, bReq ) {
	var nReturn=2;

	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.val(trim(oField.val()));
	if ( bReq && oField.val() == '' )
		nReturn=1;
	else if ( !bReq && oField.val() == '' )
		nReturn=0;
	else {
		if ( isInteger ( oField.val() ))
			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.val() >= nStart && oField.val() <= nEnd )
			nReturn=0;
		else
			nReturn=2;
	}
	
	return nReturn;
}

function valid_money ( oField, bReq ) {
	var nReturn=2;

	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.val(trim(oField.val()));
	if ( bReq && oField.val() == '' )
		nReturn=1;
	else if ( !bReq && oField.val() == '' )
		nReturn=0;
	else {
		oField.val(trim(strip_chars(oField.val(),'$()'),'0'));
		if ( oField.val().indexOf('.') == -1 )
			oField.val(oField.val()+'.00');
		if ( isFloat ( oField.val(), 2 ))
			nReturn=0;
		if ( oField.val().length > 0 ) {
			if ( oField.val().charAt(oField.val().length-1) == '.' )
				oField.val(oField.val()+'00');
			if ( oField.val().charAt(0) == '.' )
				oField.val('0'+oField.val());
		}
	}

	return nReturn;
}

function valid_percent ( oField, bReq ) {
	var nReturn=2;

	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.val(trim(oField.val()));
	if ( bReq && oField.val() == '' )
		nReturn=1;
	else if ( !bReq && oField.val() == '' )
		nReturn=0;
	else {
		oField.val(trim(strip_chars(oField.val(),'%()'),'0'));
		if ( oField.val().indexOf('.') == -1 )
			oField.val(oField.val()+'.0000');
		if ( isFloat ( oField.val(), 4 ))
			nReturn=0;
		if ( oField.val().length > 0 ) {
			if ( oField.val().charAt(oField.val().length-1) == '.' )
				oField.val(oField.val()+'0000');
			if ( oField.val().charAt(0) == '.' )
				oField.val('0'+oField.val());
		}
	}

	return nReturn;
}

function valid_url ( oField, bDomainOnly, bReq ) {
	var nReturn=2, bHTTP=false, bSecure=false;

	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.val(lowerString(trim(oField.val())));
	if ( bReq && oField.val() == '' )
		nReturn=1;
	else if ( !bReq && oField.val() == '' )
		nReturn=0;
	else {
		if ( oField.val().substring ( 0, 5 ) == 'https' ) {
			bHTTP=true;
			bSecure=true;
		} else if ( oField.val().substring ( 0,  4 ) == 'http' )
			bHTTP=true;
		if ( oField.val().substring ( 0, 5 ) == 'https' )
			oField.val(oField.val().substring(5));
		if ( oField.value.substring ( 0, 4 ) == 'http' )
			oField.val(oField.val().substring(4));
		if ( bDomainOnly ) {
			if ( oField.val().substring(0,3) == 'ftp' )
				oField.val(oField.val().substring(3));
		}
		while ( oField.val().substring(0,1) == ':'
			|| oField.val().substring(0,1) == '/'
			|| oField.val().substring(0,1) == '.' ) {
			oField.val(oField.val().substring(1));
		}
		if ( oField.val().substring(0,4) == 'www.' )
			oField.val(oField.val().substring(4));
		if ( !bDomainOnly ) {
			if ( bHTTP ) {
				if ( bSecure ) {
					oField.val('https://' + oField.val());
					nReturn=0;
				} else {
					oField.val('http://' + oField.val());
					nReturn=0;
				}
			}
		} else
			nReturn=0;
	}

	return nReturn;
}

function valid_credit_card ( oField, bReq ) {
	var nReturn=2;

	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.val(trim(oField.val()));
	if ( bReq && oField.val() == '' )
		nReturn=1;
	else if ( !bReq && oField.val() == '' )
		nReturn=0;
	else {
		if ( isCreditCard ( oField.val()))
			nReturn=0;
	}

	return nReturn;
}

function valid_zip ( oField, bReq ) {
	var nZip, nReturn=2;
	
	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.val(trim(oField.val()));
	if ( bReq && oField.val() == '' )
		nReturn=1;
	else if ( !bReq && oField.val() == '' )
		nReturn=0;
	else {
		nZip=strip_chars ( oField.val(), '-' );
		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.val(trim(oField.val()));
	if ( bReq && oField.val() == '' )
		nReturn=1;
	else if ( !bReq && oField.val() == '' )
		nReturn=0;
	else {
		tPhone=strip_chars ( oField.val(), '()-. ' );
		if ( isInteger ( tPhone )) {
			if ( tPhone.length == 11 && tPhone.charAt ( 0 ) == '1' )
				tPhone=tPhone.substring(1,tPhone.length);
			if ( tPhone.length == 10 ) {
				oField.val(reformat( tPhone, "(", 3, ") ", 3, "-", 4 ));
				nReturn=0;
			} 
		}
    }
	
	return nReturn;
}

// 0=validates or ( not required and not there )
// 1=required and empty
// 2=bad

function valid_email ( oField, bReq ) {
	var i, nLen, tEmail, nReturn=2;

	if ( typeof bReq == 'undefined' )
		var bReq=true;

	oField.val(trim(oField.val()));

	if ( bReq && oField.val() == '' )
		nReturn=1;
	else if ( !bReq && oField.val() == '' )
		nReturn=0;
	else if ( oField.val().length < 3 )
		nReturn=2;
	else {
		i=oField.val().indexOf ( '@' );
		if ( i == 0 || i == oField.val().length-1 || ( i != -1 && oField.val().length > i && oField.val().indexOf ( '@', i+1 ) != -1 ))
			nReturn=2;
		else if ( oField.val().indexOf ( ' ' ) != -1 )
			nReturn=2;
		else if ( oField.val().indexOf ( ',' ) != -1 )
			nReturn=2;
		else {
			i = 1;
			tEmail=oField.val();
			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;
}

