/* Form Validator */

var patterns                =   new Object;

patterns.zipCode            = /\d{5}(-\d{4})?/;
patterns.emailAddress       = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
patterns.state              = /^(AK|AL|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NB|NC|ND|NH|NJ|NM|NV|NY|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VA|VT|WA|WI|WV|WY)$/i;
patterns.alpha              = /^[a-zA-Z\.\-]*$/;
patterns.alphanumeric       = /^\w+/;
patterns.unsigned           = /^\d+$/;
patterns.integer            = /^[\+\-]?\d*$/;
patterns.phone              = /^[\d\.\s\-]+$/;
patterns.empty              = /^\s+$/;
patterns.real               = /^[\+\-]?\d*\.?\d*$/;

function validate( aForm )
{
    var els                 =   aForm.elements;
    
    for ( var x = 0; x < els.length; x++)
    {
        var el             =   els[x];
     
        if (!el) continue;
        
        with (el)
        {
        
            var val             =   el.getAttribute("validate");
            var allow_empty	=   el.getAttribute("allow_empty");
 
            if(!val) continue;
        
            var pattern         =   patterns[val];
            var emptypattern    =   patterns['empty'];
            
            if (String(el.value).length < 1 || emptypattern.exec(el.value))
            {
                alert( el.getAttribute("displayname") + " failed validation.  Please fill out the highlighted areas on the form, and try again.");
                el.className =   'invalid ' + el.className;
                
                if (!el.nodeName == 'select')
                {
	                el.select();
	            }
	            
                el.focus();
                return false;
            }
           
            if (val == 'password')
            {
                var chk_el      =   els[x + 1];
                
                if (el.value != chk_el.value)
                {
                    alert("The passwords you entered do not match.  Please try again.");
                    chk_el.value    =   '';
                    el.value        =   '';
                    el.focus();
                    return false;
                }
                else if (el.value.length < 6)
                {
                    alert("Please choose a password with at least 6 characters.");
                    chk_el.value    =   '';
                    el.value        =   '';
                    el.focus();
                    return false;
                }
                
            }
           
            if(!pattern) continue;
            
            var ok              =   pattern.exec(el.value);
       
            if (! ok)
            {
                alert( el.getAttribute("displayname") + " failed validation.  Please enter a valid value.");
                el.className =   'invalid ' + el.className;
                el.select();
                el.focus();
                return false;
            }
        }
    }
    
    return true;
}

function validatePass( pass, check)
{
	var emptypattern		=	patterns['empty'];
	
	if ( (String(pass.value).length < 1 || emptypattern.exec(pass.value)) || (String(check.value).length < 1 || emptypattern.exec(check.value)) )
	{
		return false;
	}
		
	if (pass.value != check.value)
	{
		alert('The passwords you entered do not match.  Please try again.');
		
		highlightField( pass, true, true );
		highlightField( check, false, true );
		
		return false;
	}
		
	return true;
}

function highlightField( field, getsFocus, getsEmpty )
{
	field.style.background		=	'yellow';
	
	if ( getsFocus == true )
	{
		field.focus();
	}
	
	if ( getsEmpty == true )
	{
		field.value = '';
	}
}