/***************************************************		fValidate	Copyright (c) 2000-2003	by Peter Bailey	www.peterbailey.net/fValidate/	fValidate.web.js	Included Validators	-------------------	email	url	ip	This file is only part of a larger validation	library	and will not function autonomously.	Created at a tab-spacing of four (4)****************************************************/fValidate.prototype.email = function( level ){	if ( this.typeMismatch( 'text' ) ) return;	if ( typeof level == 'undefined' ) level = 0;	var emailPatterns = [		/.+@.+\..+$/i,		/^\w.+@\w.+\.[a-z]+$/i,		/^\w[-_a-z~.]+@\w[-_a-z~.]+\.[a-z]{2}[a-z]*$/i,		/^\w[\w\d]+(\.[\w\d]+)*@\w[\w\d]+(\.[\w\d]+)*\.[a-z]{2,7}$/i		];	if ( ! emailPatterns[level].test( this.elem.value ) )	{		this.throwError();	}	}	fValidate.prototype.url = function( hosts, hostOptional, allowQS ){	if ( this.typeMismatch( 'text' ) ) return;	this.setArg( hosts, "http" );		var front = "^(?:(" + hosts.replace( /\,/g, "|" ) + ")\\:\\/\\/)";	var end   = ( Boolean( allowQS ) == true ) ? "(\\?.*)?$" : "$";	if ( Boolean( hostOptional ) == true ) front += "?";	var regex = new RegExp( front + "([\\w\\d-]+\\.?)+" + end );		if ( !regex.test( this.elem.value ) )	{		this.throwError( [this.elem.fName] );	}}	fValidate.prototype.ip = function( portMin, portMax ){	if ( this.typeMismatch( 'text' ) ) return;	portMin = this.setArg( portMin, 0 );	portMax = this.setArg( portMax, 99999 );	if ( !( /^\d{1,3}(\.\d{1,3}){3}(:\d+)?$/.test( this.elem.value ) ) )	{		this.throwError();	}	else	{		var part, i = 0, parts = this.elem.value.split( /[.:]/ );		while ( part = parts[i++] )		{			if ( i == 5 ) // Check port			{				if ( part < portMin || part > portMax )				{					this.throwError( [part, portMin, portMax], 1 );				}			}			else if ( part < 0 || part > 255 )			{				this.throwError();			}		}	}}//	EOF