﻿function Validation_IsInteger(sender, args)
{
    var pattern = new RegExp("^[0-9]*$");
  
    if (args.Value.match(pattern)) {
        var i = parseInt(args.Value);
   
        if (isNaN(i)) {
            args.IsValid = false;
        } else {
            args.IsValid = true;
        }
    } else {
        args.IsValid = false;
    }
}

function Validation_IsFloat(sender, args)
{
    var pattern = new RegExp("^[0-9]*(\.[0-9]+)?$");
  
    if (args.Value.match(pattern)) {
        var i = parseFloat(args.Value);
   
        if (isNaN(i)) {
            args.IsValid = false;
        } else {
            args.IsValid = true;
        }
    } else {
        args.IsValid = false;
    }
}

function Validation_IsEmail(sender, args)
{
    args.IsValid = true;

    if (!Validation_IsEmail_ValidChars(args.Value)) {  // check to make sure all characters are valid
        args.IsValid = false;
        return;
    }
    if (args.Value.indexOf("@") < 1) { //  must contain @, and it must not be the first character
        args.IsValid = false;
        return;
    } else if (args.Value.lastIndexOf(".") <= args.Value.indexOf("@")) {  // last dot must be after the @
        args.IsValid = false;
        return;
    } else if (args.Value.indexOf("@") == args.Value.length) {  // @ must not be the last character
        args.IsValid = false;
        return false;
    } else if (args.Value.indexOf("..") >=0) { // two periods in a row is not valid
	    args.IsValid = false;
	    return false;
    } else if (args.Value.indexOf(".") == args.Value.length) {  // . must not be the last character
	    args.IsValid = false;
	    return false;
    }
}

function Validation_IsEmail_ValidChars(email) {
  var parsed = true;
  var validchars = "abcdefghijklmnopqrstuvwxyz0123456789@.-_";
  for (var i=0; i < email.length; i++) {
    var letter = email.charAt(i).toLowerCase();
    if (validchars.indexOf(letter) != -1)
      continue;
    parsed = false;
    break;
  }
  return parsed;
}
function Validation_IsPostCode(sender, args) 
{
  // Permitted letters depend upon their position in the postcode.
  var alpha1 = "[abcdefghijklmnoprstuwyz]";                       // Character 1
  var alpha2 = "[abcdefghklmnopqrstuvwxy]";                       // Character 2
  var alpha3 = "[abcdefghjkstuw]";                                // Character 3
  var alpha4 = "[abehmnprvwxy]";                                  // Character 4
  var alpha5 = "[abdefghjlnpqrstuwxyz]";                          // Character 5
  

  // Array holds the regular expressions for the valid postcodes
  var pcexp = new Array ();

  // Expression for postcodes: AN NAA, ANN NAA, AAN NAA, and AANN NAA
  pcexp.push (new RegExp ("^(" + alpha1 + "{1}" + alpha2 + "?[0-9]{1,2})(\\s*)([0-9]{1}" + alpha5 + "{2})$","i"));
  
  // Expression for postcodes: ANA NAA
  pcexp.push (new RegExp ("^(" + alpha1 + "{1}[0-9]{1}" + alpha3 + "{1})(\\s*)([0-9]{1}" + alpha5 + "{2})$","i"));

  // Expression for postcodes: AANA  NAA
  pcexp.push (new RegExp ("^(" + alpha1 + "{1}" + alpha2 + "?[0-9]{1}" + alpha4 +"{1})(\\s*)([0-9]{1}" + alpha5 + "{2})$","i"));
  
  // Exception for the special postcode GIR 0AA
  pcexp.push (/^(GIR)(\s*)(0AA)$/i);
  
  // Standard BFPO numbers
  pcexp.push (/^(bfpo)(\s*)([0-9]{1,4})$/i);
  
  // c/o BFPO numbers
  pcexp.push (/^(bfpo)(\s*)(c\/o\s*[0-9]{1,3})$/i);

  // Load up the string to check
  var postCode = args.Value;

  // Assume we're not going to find a valid postcode
   args.IsValid = false;
  
  // Check the string against the types of post codes
  for ( var i=0; i<pcexp.length; i++) {
    if (pcexp[i].test(postCode)) {
  
      args.IsValid = true;
      
      break;
    }
  }
}

function Validation_IsUsername(sender, args)
{
    args.IsValid = true;
    
    if (args.Value.length < 6) {
        args.IsValid = false;
        return;
    }
    
    var rx = /^[a-z][a-z0-9]+$/i;
    if (!rx.test(args.Value)) {
        args.IsValid = false;
        return;
    }
}