var phone_field_length=0;
function TabNext(obj,event,len,next_field) {
	if (event == "down") {
		phone_field_length=obj.value.length;
		}
	else if (event == "up") {
		if (obj.value.length != phone_field_length) {
			phone_field_length=obj.value.length;
			if (phone_field_length == len) {
				next_field.focus();
				}
			}
		}
	}



String.prototype.startsWith = function(str) 
{return (this.match("^"+str)==str)}

String.prototype.endsWith = function(str) 
{return (this.match(str+"$")==str)}

String.prototype.trim = function(){return 
(this.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, ""))}

function trim(val) 
{
    if(val === null || val == null || typeof val == 'undefined')
        return '';
    
	return val.replace(/^\s+|\s+$/g,"");
}

var StandardValidationOptions = { ErrorDiv: '', QueueErrors: true, AlertUser: false }
var Date_RegEx = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
var UK_Date_RegEx = /^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$/;
var Decimal_RegEx = /^\d+(?:\.\d{0,2})?$/;
var Numeric_RegEx = /^[0-9]*$/;
var Alpha_RegEx = /^[a-zA-Z\s]*$/;

var Email_RegEx = /^([0-9a-zA-Z]+[-._+&amp;])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$/;
function validateEditForm( )
{
    try
    {
        if(_FormValidationDisabled)
            return true;
    }catch(err){} //this is an override only
     
    var errors = new Array();
    try
    {
        var options = StandardValidationOptions;
        var div = 'workarea';

        if(arguments.length > 0)
            div = arguments[0];

        if(arguments.length > 1)
            options = $.extend({}, StandardValidationOptions, arguments[1] || {});

        if( options.ErrorDiv != '' )
        {           
            $('#' + options.ErrorDiv).html('');
        }      
        var lastField = "";
        var a = $('#' + div).find(':input');
        for(var arrayIndex = 0; arrayIndex < a.length; arrayIndex++)
        {               
            var elem = a[arrayIndex];
            var jq = $(elem);
            var name = elem.name;
            lastField = name;
            var type = elem.type;
            var val = "";
            try
            {
                val = trim(jq.val());
            }catch(ignore_ex)
            {
                val = elem.options[ elem.selectedIndex ];
            }
            var data = jq.metadata( {type: 'attr', name: 'rules' } );                             

            var fieldName = name;
            if(data.Name)
                fieldName = data.Name;
            else
            {
                var idx = fieldName.lastIndexOf('$');
                if(idx > -1)
                    fieldName = fieldName.substring(idx + 1);
            }
                              
            if( jq.hasClass( "Taken" ) )
            {
                errors[errors.length] = fieldName + ' value already taken. Please enter a unique value' ;
                if(!options.QueueErrors)
                {
                    alert( errors[errors.length - 1] );
                    $('#workarea').unblock(); 
                    return false;
                }
            }

            if ( data.Required )
            {
                switch(type)
                {
                    case "checkbox":
                        if(!elem.checked)
                            errors[errors.length] = fieldName + ' is required';
                        if(!options.QueueErrors)
                        {
                                $('#workarea').unblock();  
                                alert( errors[errors.length - 1] );
                                return false;
                        }
                        break;
                    case "radio":
                        break;
                    default:
                        if( val.length == 0 )
                        {
                            errors[errors.length] = fieldName + ' is required';
                            if(!options.QueueErrors)
                            {
                                $('#workarea').unblock();  
                                alert( errors[errors.length - 1] );
                                return false;
                            }
                        }                
                        break;
                }
            }
            
            if ( data.MinLength )
            {
                if( val.length < data.MinLength )
                {
                    errors[errors.length] = fieldName + ' must be at least ' + data.MinLength +  ' characters' ;
                    if(!options.QueueErrors)
                    {
                        alert( errors[errors.length - 1] );
                        $('#workarea').unblock();  
                        return false;
                    }
                }                
            }
            
            if ( data.MaxLength )
            {
                if( val.length > data.MaxLength )
                {
                    errors[errors.length] = fieldName + ' must be no more than ' + data.MaxLength +  ' characters' ;
                    if(!options.QueueErrors)
                    {
                        alert( errors[errors.length - 1] );
                        $('#workarea').unblock();  
                        return false;
                    }
                }                
            }

            if ( data.Regex )
            {
                if( val.length > 0 )
                {
                    var expression = new RegExp(data.Regex);
                    if ( !expression.test(val) )
                    {
                        var errorMessage = 'does not match expression of ' + data.Regex;
                        if(data.ErrorMessage)
                            errorMessage = data.ErrorMessage;
                        errors[errors.length] = fieldName + ' ' + errorMessage ;
                        if(!options.QueueErrors)
                        {
                            alert( errors[errors.length - 1] );
                            $('#workarea').unblock();  
                            return false;
                        }
                    }
                }
            }
            
            if ( data.DataType )
            {
                var expression;
                var errorMessage;
                switch(data.DataType)
                {
                    case 'ukdate':
                        expression = new RegExp(UK_Date_RegEx);
                        var errorMessage = 'is not a valid date';
                        break;                        
                    
                    case 'date':
                        expression = new RegExp(Date_RegEx);
                        var errorMessage = 'is not a valid date';
                        break;                        
                    case 'decimal':
                        expression = new RegExp(Decimal_RegEx);
                        var errorMessage = 'is not a valid decimal';                        
                        break;
                    case 'numeric':
                        expression = new RegExp(Numeric_RegEx);
                        var errorMessage = 'must contain only numbers';                        
                        break;
                    case 'alpha':
                        expression = new RegExp(Alpha_RegEx);
                        var errorMessage = 'must contain only letters';                        
                        break;                        
                    case 'email':
                        expression = new RegExp(Email_RegEx);
                        var errorMessage = 'is not a valid format';
                        break
                        
                    default:
                        alert('invalid Data Type ' + data.DataType); 
                        $('#workarea').unblock();  
                        return false;
                }
                
                if ( !expression.test(val) )
                {
                    errors[errors.length] = fieldName + ' ' + errorMessage ;
                    if(!options.QueueErrors)
                    {
                        alert( errors[errors.length - 1] );
                        $('#workarea').unblock();  
                        return false;
                    }
                }
            }
            
            if(data.NotValue)
            {
                if(val == data.NotValue)
                {
                    var errorMessage = 'is an invalid value';
                    if(data.ErrorMessage)
                        errorMessage = data.ErrorMessage;
                    errors[errors.length] = fieldName + ' ' + errorMessage ;
                    if(!options.QueueErrors)
                    {
                        alert( errors[errors.length - 1] );
                        $('#workarea').unblock();  
                        return false;
                    }
                }
            }
            
            if ( data.MinIndex )
            {
                alert(elem.selectedIndex); 
            }
            
            if(data.Match)
            {
                var njq = $(data.Match);
                var nval =  trim(njq.val());
                var ndata = njq.metadata( {type: 'attr', name: 'rules' } );                             
                var nfieldName = njq.name;
                if(ndata.Name)
                    nfieldName = ndata.Name;


                if(val != nval)
                {
                    var errorMessage = ' must match ' + nfieldName;
                    if(data.ErrorMessage)
                        errorMessage = data.ErrorMessage;
                    errors[errors.length] = fieldName + ' ' + errorMessage ;
                    if(!options.QueueErrors)
                    {
                        alert( errors[errors.length - 1] );
                        $('#workarea').unblock();  
                        return false;
                    }
                }
            }
        }    
    }catch(m)
    {
        alert("Error while validating form ["+lastField+"]: " + m.message);
    }
    if(options.QueueErrors && errors.length > 0)
    {
        if( options.AlertUser )
        {
            var message = "";
            for(var i = 0; i < errors.length; i++)
            {
                if(i > 0)
                    message = message + "\n";
                message = message + errors[i];
            }
            alert(message);
        }
        
        if( options.ErrorDiv != '' )
        {
            var message = "<ul>";
            for(var i = 0; i < errors.length; i++)
            {
                message = message + "<li>" + errors[i] + "</li>";
            }
            message = message + "</ul>";
            $('#' + options.ErrorDiv).html(message);
        }  
              
    }
    return (errors.length == 0);
}


  function doClear(theText) {if (theText.value == theText.defaultValue) {theText.value = ""}}


	
