
// some of the functionality of this relies on the /m1/static/js/jquery-1.2.6.min.js file...
/*request for address list from pca based on the supplied postcode*/
/*params: postCode, accountCode, licenseCode, sequenceCode for 2 or more postcodes on the same page */
function pcaListAddresses(postCode,accountCode,licenseCode,sequenceCode){
    var scriptElement=$("#pcaListScript");
    var headElement=$("head");
    var url="https://services.postcodeanywhere.co.uk/inline.aspx?";
    url+="account_code="+accountCode;
    url+="&license_code="+licenseCode;
    url+="&action=lookup";url+="&type=by_postcode";
    url+="&postcode="+postCode;
    if(sequenceCode=='2'){
        url+="&callback=pcaCompleteShop";
    } else {
        url+="&callback=pcaComplete";
    }
    if(scriptElement){
        scriptElement.remove();
    }
    scriptElement=document.createElement("script");
    scriptElement.src=url;
    scriptElement.type="text/javascript";
    scriptElement.id="pcaListScript";
    headElement.append(scriptElement);

}

/*call back function from pca to retrieve the address list which are used to populate a select box*/
function pcaComplete() {

    if(pcaIsError) {
        $("#postcodeError").html(pcaErrorMessage).addClass("error");
    } else {
        $("#postcodeError").html("").removeClass("error");
        var selectElement = $("#postcode_select");

        if(selectElement){ removeAllOptions(selectElement);
        }
        if(pca_description.length==0) {
            clearAddressFields();
            $("#postcode_options").css("display", "none");
            $("#postcodeError").html("Sorry, no addresses found.").addClass("error");
        } else {  /* if address returned, then make relevant boxes visible and hidden*/
            $("#postcode_options").css("display", "block");
            $("#postcode_select").css("display", "block");
            $("#postcode_address").css("display", "none");
            $("#label_select").css("display", "block");
            for(var i=0;i<pca_description.length;i++) {
                if(selectElement){
                    addOption(selectElement,pca_description[i],pca_id[i]);    /* add all the addresses as options in selectElement */
                }
            }
        }
    }
}

/*call back function for shop because there can be more than one properties on the same page*/
function pcaCompleteShop(){
    if(pcaIsError) {
        $("#postcodeError2").html(pcaErrorMessage).addClass("error");
    } else {
        $("#postcodeError2").html("").removeClass("error");
        var selectElement = $("#imp_address2_select");
        if(selectElement){
            removeAllOptions(selectElement);
        }
        if(pca_description.length==0) {
            clearAddress2Fields();
            $("#imp_address2_options").css("display","none");
            $("#postcodeError2").html("Sorry, no addresses found.").addClass("error");
        } else {
            $("#imp_address2_options").css("display", "block");
            $("#postcode_address2").css("display", "none");
            for(var i=0;i<pca_description.length;i++) {
                addOption(selectElement,pca_description[i],pca_id[i]);
            }
        }
    }
}
/*function called from select element to send a request script based on the selected address*/
function populateAddress(optionId,accountCode,licenseCode,sequenceCode) {
    if(optionId!=null) {
        var scriptElement=$("pcaPopulateScript");
        var headElement=$("head");
        var url="https://services.postcodeanywhere.co.uk/inline.aspx?";
        url+="account_code="+accountCode;
        url+="&license_code="+licenseCode;
        url+="&action=fetch";
        url+="&id="+optionId;
        url+="&style=simple";
        if(sequenceCode=='2'){
            url+="&callback=populateCompleteShop";
        } else if(sequenceCode=='3'){
            url+="&callback=populateCompleteRegistration";
        } else {
            url+="&callback=populateComplete";
        }
        if(scriptElement) { scriptElement.remove(); } scriptElement=document.createElement("script");
        scriptElement.src=url;
        scriptElement.type="text/javascript";
        scriptElement.id="pcaPopulateScript";
        headElement.append(scriptElement);
    }
}

/*used to polpulate the address field based on the format from pca on selected address*/
function populateComplete() {
    if(pcaIsError) {
        $("#postcodeError").html(pcaErrorMessage).addClass("error");
    } else {
        $("#postcode_options").css("display", "none");
        $("#postcode_address").css("display", "block");
        var frm = document.forms['frmBody'];
        $("#postcodeError").html("");
        var A =frm.elements["__street1_"];
        var C=frm.elements["__street2_"];
        var E= frm.elements["__city_"];
        if(A || C || E) { A.value= pca_line1[0];
            C.value=pca_line2[0];
            E.value=pca_post_town[0];
        }
        updatePostcodeField();
    }
}
/*polpulate address field for shop property 2*/
function populateCompleteShop() {
    if(pcaIsError) {
        $("#postcodeError").html(pcaErrorMessage).addClass("error");
    } else {
        $("#imp_address2_options").css("display", "none");
        $("#postcode_address2").css("display", "block");
        var frm =document.forms['frmBody'];
        $("#postcodeError").html("");
        var B = frm.elements["__street1_imp_address2"];
        var D=frm.elements["__street2_imp_address2"];
        var F=frm.elements["__city_imp_address2"];
        if(B || D || F) { B.value=pca_line1[0];
            D.value=pca_line2[0];
            F.value=pca_post_town[0];
        }
        updatePostcodeField2();
    }
}

/*populate for registration pages including update details on accounts page*/
function populateCompleteRegistration() {
    if(pcaIsError) {
        $("#postcodeError").html(pcaErrorMessage).addClass("error");
    } else {
        $("#postcode_options").css("display", "none");
        $("#postcode_address").css("display", "block");
        var frm = document.forms['frmBody'];
        $("#postcodeError").html("");
        var A =frm.elements["accads-street-line1"];
        var C=frm.elements["accads-street-line2"];
        var E= frm.elements["accads-city"];

        if(A || C || E) { A.value= pca_line1[0];
            C.value=pca_line2[0];
            E.value=pca_post_town[0];
        }
    }
}

function clearAddressFields(){
    var frm = document.forms['frmBody'];
    if(frm.elements["__street1_"]){frm.elements["__street1_"].value=""};
    if(frm.elements["__street2_"]){frm.elements["__street2_"].value=""};
    if(frm.elements["__city_"]){frm.elements["__city_"].value=""};

    if(frm.elements["accads-street-line1"]){frm.elements["accads-street-line1"].value = ""};
    if(frm.elements["accads-street-line2"]){frm.elements["accads-street-line2"].value = ""};
    if(frm.elements["accads-city"]){frm.elements["accads-city"].value = ""};
}

function clearAddress2Fields(){
    var frm = document.forms['frmBody'];
    frm.elements["__street1_imp_address2"].value="";
    frm.elements["__street2_imp_address2"].value="";
    frm.elements["__city_imp_address2"].value="";
}

/*remove all options in the select element*/
function removeAllOptions(A){
    var a = new Array();
    A.children("option").each(function(x){
      a[x] = $(this).val();
      for (i=0;i<=a.length-1;i++){
          $(this).remove();
      }
    });
}

/*Add an option child to the select element*/
function addOption(B,D,C){
    var A=document.createElement("OPTION");
    A.innerHTML=D;
    A.value=C;
    B.append(A);
}


function verifyPostCodeRegex( postcode ) {

    var trimmedPostcode = postcode.replace(/^\s+|\s+$/g, '') ;
    trimmedPostcode = trimmedPostcode.toUpperCase();

    $("#postcodeError").html("").removeClass("error");

    var postcodeRegex = /^(([A-Z]{1,2}[0-9]{1,2}[A-Z]?)\s?([0-9][A-Z]{2})|(GIR)\s?(0AA))$/;

    if( !trimmedPostcode.match( postcodeRegex ) ){
        $("#postcodeError").html("Please supply a complete postcode.").addClass("error");
        return true;
    } else {
        return true;
    }

}