Validation.addAllThese([
  [ 'validate-same-as-password', 
    'Password Confirmation does not match.', 
    { equalToField: 'user_Password'}
  ],
  [ 'validate-same-as-email', 
    'Email Confirmation does not match.', 
    { equalToField: 'user_Email'}
  ],
  [ 'validate-unique-username',
    'Sorry, that User Name is already taken.',
    function(v, elm) {
      return validateUnique(v,elm,siteroot + '/account/available.aspx','validate-unique-username');
    }
  ],
  [ 'validate-unique-email',
    'Sorry, that Email is already in use.',
    function(v, elm) {
      return validateUnique(v,elm,siteroot + '/account/email.aspx','validate-unique-email');
    }
  ],
  [ 'validate-password', 
    "Your password must be more than 5 characters and not be 'password' or the same as your name", 
    {
      minLength : 6,
      notOneOf : ['password','PASSWORD','1234567','0123456'],
      notEqualToField : 'user_UserName'
    }
  ]
]); 

function validateUnique(v,elm,url,validateClass) {
  if(elm._ajaxValidating && elm._hasAjaxValidateResult) {
    elm._ajaxValidating = false;
    elm._hasAjaxValidateResult = false;
    return elm._ajaxValidateResult;
  }
  var sendRequest = function() {
    var u = url + '?u=' + encodeURIComponent(v);
    new Ajax.Request(u,{
      onSuccess : function(response) {
        elm._ajaxValidateResult = eval(response.responseText);
        elm._hasAjaxValidateResult = true;
        Validation.test(validateClass,elm);
      }
    });
    elm._ajaxValidating = true;
    return true;
  }
  return elm._ajaxValidating || Validation.get('IsEmpty').test(v) || sendRequest();
};