var validHash = new Array() ;
var formName ;
var errorMessages = new Array()
var errorMessage = '' ;
var errorReqFields = '' ;
var reqGroups = new Array() ;
var rgChecked = new Array() ;
var focused = false ;

function formName( name )
{
	formName = name ;
}

function setErrorMessage( key, message )
{
	errorMessages[key.toLowerCase()] = message ;
}

function validField( field, confHash )
{
	this.validHash[field] = confHash ;
	
	if ( confHash['reqgroup'] )
	{
		if ( !reqGroups[confHash['reqgroup']] )
		{
			reqGroups[confHash['reqgroup']] = new Array() ;
		}
		
		reqGroups[confHash['reqgroup']][field] = confHash['text'] ;
		rgChecked[confHash['reqgroup']] = false ;
	}
}

function resetRGChecked()
{
	for ( var key in rgChecked )
	{
		rgChecked[key] = false ;
	}
}

function setFocus( field )
{
	if ( !focused )
	{	
		document.forms[this.formName].elements[field].focus() ;
		focused = true ;
	}	
}

function valid( field )
{
	var fieldHash = this.validHash[field] ;
	var fieldName = fieldHash['text'] ;
	var value ;
	var form = document.forms[this.formName] ;
	var object = form.elements[field] ;
	var validType = fieldHash['type'].toLowerCase() ;
	
	switch ( object.type )
	{
		case 'hidden':
		case 'password':
		case 'text':
		default:
			value = object.value ;
		break ;
	}
	
	if ( value.length == 0 && fieldHash['required'] )
	{
		errorReqFields += " - " + fieldName + "\n" ; 
//		errorMessage += errorMessages['required'].replace( /\$1/, fieldName ) + "\n" ;
		setFocus( field ) ;
		return false ;
	}

	if ( value.length == 0 && fieldHash['reqgroup'] && !rgChecked[fieldHash['reqgroup']] )
	{
		var tmpObject ;
		var tmpValue ;
		var ret = false ;
		var fieldNames = '' ;
		var firstField = '' ;
		
		for ( var key in reqGroups[fieldHash['reqgroup']] )
		{
			if ( fieldNames.length > 0 )
			{
				fieldNames += ', ' + reqGroups[fieldHash['reqgroup']][key] ;
			}
			else
			{
				fieldNames = reqGroups[fieldHash['reqgroup']][key] ;
			}
			
			if ( firstField.length == 0 )
			{
				firstField = key ;
			}
			
			tmpObject = form.elements[key] ;

			switch ( tmpObject.type )
			{
				case 'hidden':
				case 'password':
				case 'text':
				default:
					tmpValue = tmpObject.value ;
				break ;
			}
		
			ret = ret || ( tmpValue.length > 0 ) ;		
		}
		
		rgChecked[fieldHash['reqgroup']] = true ;
		
		if ( !ret )
		{
			errorMessage += errorMessages['reqgroup'].replace( /\$1/, fieldNames ) + "\n" ;
			setFocus( firstField ) ;
			return false ;
		}
	}
	
	// ===[csak akkor validalunk, ha irt is bele valamit]===============
	if ( value.length > 0 )
	{
		switch ( validType )
		{
			// ===[PHONE]=====================================================
			case 'phone':
				var regexp = /^[\(\)\-\/ 0-9]*$/ ;
				if ( !value.match( regexp ) )
				{
					errorMessage += errorMessages['phone'].replace( /\$1/, fieldName ) + "\n" ;
					setFocus( field ) ;
					return false ;
				}
			break ;
			
			// ===[EMAIL]=====================================================
			case 'email':
				var regexp = /^\w+([\.\_\-]?\w+)*\@\w+([\.\_\-\w]*)(\.\w{2,})$/ ;
				if ( !value.match( regexp ) )
				{
					errorMessage += errorMessages['email'].replace( /\$1/, fieldName ) + "\n" ;
					setFocus( field ) ;
					return false ;
				}
			break ;
			
/*			// ===[TEXT/DEFAULT]==============================================
			case 'text':
			default:
				if ( fieldHash['minlength'] && value.length < fieldHash['minlength'] )
				{
					message = errorMessages['minlength'].replace( /\$1/, fieldName ) ;
					message = message.replace( /\$2/, fieldHash['minlength'] ) ;
					alert( 'A(z) ' + fieldName + ' mezőnek legalább ' + fieldHash['minlength'] + ' hosszúnak kell legyen!' ) ;
					setFocus( field ) ;
					return false ;
				}
			break ;*/
		}
	}
	
	return true ;
}

function validate()
{
	var key ;
	var ret = true ;
	
	focused = false ;
	resetRGChecked() ;		
	errorMessage = '' ;	
	errorReqFields = '' ;	
	
	for ( key in this.validHash )
	{
		ret = valid( key ) && ret ;
	}
	
	if ( errorReqFields.length > 0 )
	{
		errorMessage = errorMessages['required'] + "\n" + errorReqFields + "\n" + errorMessage ;
	}
	
	if ( errorMessage.length > 0 )
	{
		alert( "\n" + errorMessage ) ;
	}
	
	return ret ;
}

