var urlRegex = new RegExp();    urlRegex.compile("^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-~_%\$&\?\/.+=:]+");
var emailRegex = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
var phoneRegex = /^([0-9(\)+\-])+$/;
var numericRegex  = /^\d+$/;
var passwordRegex = /^[a-zA-Z0-9]+([\(\)!@#\$%\^&\-=\+`~;"',\._]|[a-zA-Z0-9])+$/;

var Validation =
{
    Email : function(elemValue)
    {
        return (emailRegex.test(Validation.StringTrim(elemValue)));
    },
    EmailValidator : function(source, args)
    {
        args.IsValid = Validation.Email(args.Value);
    },
    Url : function(elemValue)
    {
        return (urlRegex.test(Validation.StringTrim(elemValue))) && (elemValue.length < 2048);
    },
    UrlValidator : function(source, args)
    {
        args.IsValid = Validation.Url(args.Value);
    },
    IsNumeric : function (elemValue)
    {
        return numericRegex.test(elemValue);
    },
    NumericValidator : function(source, args)
    {
        args.IsValid = Validation.IsNumeric(args.Value);
    },
    Phone : function (value)
    {
        return phoneRegex.test(value);
    },
    PhoneValidator : function(source, args)
    {
        args.IsValid = Validation.Phone(args.Value);
    },
    Password : function (value)
    {
       return passwordRegex.test(value);
    },
    PasswordValidator : function(source, args)
    {
        args.IsValid = Validation.Password(args.Value);
    },
    PasswordLength : function (value)
    {
        return (value.length > 5 && value.length < 25);
    },
    PasswordLengthValidator : function(source, args)
    {
        args.IsValid = Validation.PasswordLength(args.Value);
    },
    StringTrim : function(str)
    {
        return (!str) ? "" : str.replace(/\s/g,'');
    },
    ValidateNumeric : function (e)
    {
        var key = e.keyCode || e.which;
        if(key == 8 || key == 9 || key == 46){  return true;  }
        if((Site.SrcElement(e).value.length == 0 && key == 48) || (key < 48 || key > 57)){ return false; }
        return true;
    }
}
