/* =============================================
    Author:			James Cavendish
    Create Date:	2008
    Description:	Validation functions used for input controls

    Copyright:		(C) 2009 Askaprice.com LLP. 
    Unauthorised modification or distribution is strictly prohibited. All rights reserved.

    WARNING:		This file was generated by code and gets overwritten with the copy from the Web DLL.
/* ============================================= */

/*
1 = No Numeric
2 = No Alpha
4 = Not Negative
8 = Percent
16 = NoSpecial
32 = NoSpace
*/


function validateInput(e, validationOptions) {
    var charCode;

    if (!e) var e = window.event;

    if (e.keyCode) charCode = e.keyCode;
    else if (e.which) charCode = e.which;

    var targ;

    if (!e) var e = window.event;
    if (e.target) targ = e.target;
    else if (e.srcElement) targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
        targ = targ.parentNode;

    if (charCode == 8 || charCode == 39 || charCode == 37 || charCode == 9) return;


    var txt = new String();
    var output = new String();
    var charString = new String();
    var foundDecimal = -1;

    txt = targ.value;
    
    for (var i = 0; i < txt.length; i++) {
        charString = txt.charAt(i);
        charCode = txt.charCodeAt(i);
        //perform relevant validation

        //No Alpha Characters
        if ((validationOptions & 2) == 2) {
            if ((charCode > 64 && charCode < 91) ||
                    (charCode > 96 && charCode < 123))
                continue;
        }

        //No Numeric Characters
        if ((validationOptions & 1) == 1) {
            if ((charCode > 47 && charCode < 58))
                continue;
        }

        //No Space Characters
        if ((validationOptions & 32) == 32) {
            if (charCode == 32)
                continue;
        }

        //No Special Characters (Except . space and -)
        if ((validationOptions & 16) == 16) {
            if ((charCode > 32 && charCode < 44) ||
                    (charCode > 57 && charCode < 65) ||
                    (charCode > 90 && charCode < 97) ||
                    (charCode > 122 && charCode < 127) ||
                    charCode == 47)
                continue;
        }

        if (foundDecimal > -1)
            foundDecimal++;

        if (charString == "." && foundDecimal == -1 && (validationOptions & 2) == 2) {
            foundDecimal = 0;
        }

        if (charString == '-' && i == 0 && (validationOptions & 4) == 4) {
            continue;
        }

        if (foundDecimal > 2) continue;
        output = output + charString;
       
    }

    if ((validationOptions & 8) == 8) {
        if (((Number)(output)) > 100)
            output = "100";
    }
    if (output != targ.value) {
        targ.value = output;
    }

}




function checkValidPostCode(toCheck) {

    // 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);

    // Overseas Territories
    pcexp.push(/^([A-Z]{4})(\s*)(1ZZ)$/i);

    // Load up the string to check
    var postCode = toCheck;

    // Assume we're not going to find a valid postcode
    var valid = false;

    // Check the string against the types of post codes
    for (var i = 0; i < pcexp.length; i++) {
        if (pcexp[i].test(postCode)) {

            // The post code is valid - split the post code into component parts
            pcexp[i].exec(postCode);

            // Copy it back into the original string, converting it to uppercase and
            // inserting a space between the inward and outward codes
            postCode = RegExp.$1.toUpperCase() + " " + RegExp.$3.toUpperCase();

            // If it is a BFPO c/o type postcode, tidy up the "c/o" part
            postCode = postCode.replace(/C\/O\s*/, "c/o ");

            // Load new postcode back into the form element
            valid = true;

            // Remember that we have found that the code is valid and break from loop
            break;
        }
    }

    // Return with either the reformatted valid postcode or the original invalid 
    // postcode
    if (valid) { return postCode; } else return false;
}