﻿var Addresses

function displayAds(json) {
    if (json[0].addressFinder.address) {
        Addresses = json[0].addressFinder.address;

        var list = ele('address_list');

        var numberOfOptions = list.options.length
        if (numberOfOptions > 0) {
            for (i = 0; i < numberOfOptions; i++) {
                list.remove(0);
            }
        }

        addOption(list, '-- Please select one of the following Addresses --', '');

        for (i in Addresses) {
            var a = addrNode(Addresses[i]);
            if (a.length > 5) {
                addOption(list, a, i);
            }
        }

        ele('spac3').style.height = '325px';      
        ele('addrDiv').style.display = 'inline';
        list.style.display = 'inline';
    }
    else {
        ele('spac3').style.height = '325px';   
        alert("Sorry Address not found, Please enter your address.");
        ele('addrTable').style.display = 'inline';
    }
}

function addrNode(obj) {
    var addr = "";
    if (obj.houseNo != "" && obj.houseNo != null)
        addr += obj.houseNo + ", ";
    if (obj.street != "" && obj.street != null)
        addr += obj.street + ", ";
    if (obj.location != "" && obj.location != null)
        addr += obj.location + ", "
    if (obj.town != "" && obj.town != null)
        addr += obj.town + ", ";
    if (obj.county != "" && obj.county != null)
        addr += obj.county + ".";
    return addr;
}

function addOption(selectbox, text, value) {
    var optn = document.createElement("OPTION");
    optn.text = text;
    optn.value = value;
    selectbox.options.add(optn);
}

function clearBoxes() {
    ele('houseNotxt').value = "";
    ele('streetNametxt').value = "";
    ele('towntxt').value = "";
    ele('countytxt').value = "";
    Addresses = "";
    ele('addrTable').style.display = 'none';
}

function getAddress() {
    var s = ele('postcodetxt').value;

    clearBoxes();
 /*   try{
    min = 9;
    max = 12;
    num = Math.floor(Math.random() * (max - min + 1)) + min;
    SendMessageToFrame(num);
    }
    catch(err){}*/

    if (s == "") {
        alert('Please enter your postcode.');
        return false;
    }

    if (checkPostCode(s)) {
        s = checkPostCode(s);
        ele('postcodetxt').value = s;
    }
    else {
        alert("Postcode has invalid format");
        return false;
    }
    
    loadJSON('https://www.loan4payday.co.uk/PostCode.aspx?pc=' + s);
    
    return false;
}

function loadJSON(url) {
    var headID = document.getElementsByTagName("head")[0];
    var newScript = document.createElement('script');
    newScript.type = 'text/javascript';
    newScript.src = url;
    headID.appendChild(newScript);
}

function setAddress(sel) {
    var i = sel.value;
    var obj = Addresses[i]
    var town = obj.town;
    if (obj.location.length > 0)
        town = obj.location + ", " + obj.town;
    
    ele('houseNotxt').value = obj.houseNo;
    ele('streetNametxt').value = obj.street;
    ele('towntxt').value = town;
    ele('countytxt').value = obj.county;

    ele('addrDiv').style.display = 'none';
    ele('address_list').style.display = 'none';
    ele('addrTable').style.display = 'inline';
}

function ele(e) { return document.getElementById(e); }

function checkPostCode(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;
}