//we need to inlide swf object script att all pages so we include it here
document.write('<script type="text/JavaScript" language="JavaScript" src="/assets/lib/swfobject/swfobject.js"></script>');
//we need this for addOnLoadListener() to be availabl on all pages
document.write('<script type="text/JavaScript" src="/assets/lib/scripts/xtmotion.core.js"></script>');


var AgntUsr = navigator.userAgent.toLowerCase();
var DomYes = document.getElementById ? 1 : 0;
var NavYes = AgntUsr.indexOf('mozilla') != -1 && AgntUsr.indexOf('compatible') == -1 ? 1 : 0;
var ExpYes = AgntUsr.indexOf('msie') != -1 ? 1 : 0;
var OprYes = AgntUsr.indexOf('opera') != -1 ? 1 : 0;
var Opr6OrLess = window.opera && navigator.userAgent.search(/opera.[1-6]/i) != -1; 
var DomNav = DomYes && NavYes ? 1 : 0;
var DomExp = DomYes && ExpYes ? 1 : 0;
var Nav4 = NavYes && !DomYes && document.layers ? 1 : 0;
var Exp4 = ExpYes && !DomYes && document.all ? 1 : 0;
var Linux = AgntUsr.indexOf('linux') != -1 || AgntUsr.indexOf('x11') != -1 ? 1 : 0;


function showLoadingAnimation() {
    if (typeof($("ajax_loading")) == "undefined") {
        return;
    }
    $("ajax_loading").style.display = "block";
}

function hideLoadingAnimation() {
    if (typeof($("ajax_loading")) == "undefined") {
        return;
    }
    $("ajax_loading").style.display = "none";
}

function P7_swapClass(){ //v1.4 by PVII
 var i,x,tB,j=0,tA=new Array(),arg=P7_swapClass.arguments;
 if(document.getElementsByTagName){for(i=4;i<arg.length;i++){tB=document.getElementsByTagName(arg[i]);
  for(x=0;x<tB.length;x++){tA[j]=tB[x];j++;}}for(i=0;i<tA.length;i++){
  if(tA[i].className){if(tA[i].id==arg[1]){if(arg[0]==1){
  tA[i].className=(tA[i].className==arg[3])?arg[2]:arg[3];}else{tA[i].className=arg[2];}
  }else if(arg[0]==1 && arg[1]=='none'){if(tA[i].className==arg[2] || tA[i].className==arg[3]){
  tA[i].className=(tA[i].className==arg[3])?arg[2]:arg[3];}
  }else if(tA[i].className==arg[2]){tA[i].className=arg[3];}}}}
}

function isUndefined(v) {
    var undef;
    return v===undef;
}

// These defaults should be changed the way it best fits your site
//var _POPUP_FEATURES = '';
// redefining default features

var _POPUP_FEATURES = 'location=0,  statusbar=1,  menubar=0,  width=500,  height=450, scrollbars=yes,resizable=yes';


function raw_popup(url, target, features) {
    // pops up a window containing url optionally named target, optionally having features
    if (isUndefined(features)) features = _POPUP_FEATURES;
    if (isUndefined(target  )) target   = '_blank';
    var theWindow = window.open(url, target, features);
    theWindow.focus();
    return theWindow;
}

function link_popup(src, features) {
    // to be used in an html event handler as in: <a href="..." onclick="link_popup(this,...)" ...
    // pops up a window grabbing the url from the event source's href
    return raw_popup(src.getAttribute('href'), src.getAttribute('target') || '_blank', features);
}

function printWindow(){
   bV = parseInt(navigator.appVersion)
   if (bV >= 4) window.print()
}

function trim(str) {
    return str.replace(/^\s*|\s*$/g,"");
}

///////////////////////////MD5 SCRIPT BEGIN///////////////////////////////
/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Copyright (C) Paul Johnston 1999 - 2000.
 * Updated by Greg Holt 2000 - 2001.
 * See http://pajhome.org.uk/site/legal.html for details.
 */

/*
 * Convert a 32-bit number to a hex string with ls-byte first
 */
var hex_chr = "0123456789abcdef";
function rhex(num)
{
  var str = "";
  for(var j = 0; j <= 3; j++)
    str += hex_chr.charAt((num >> (j * 8 + 4)) & 0x0F) +
           hex_chr.charAt((num >> (j * 8)) & 0x0F);
  return str;
}

/*
 * Convert a string to a sequence of 16-word blocks, stored as an array.
 * Append padding bits and the length, as described in the MD5 standard.
 */
function str2blks_MD5(str)
{
  var i;
  var nblk = ((str.length + 8) >> 6) + 1;
  var blks = new Array(nblk * 16);
  for(i = 0; i < nblk * 16; i++) blks[i] = 0;
  for(i = 0; i < str.length; i++)
    blks[i >> 2] |= str.charCodeAt(i) << ((i % 4) * 8);
  blks[i >> 2] |= 0x80 << ((i % 4) * 8);
  blks[nblk * 16 - 2] = str.length * 8;
  return blks;
}

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally 
 * to work around bugs in some JS interpreters.
 */
function add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

/*
 * Bitwise rotate a 32-bit number to the left
 */
function rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
 * These functions implement the basic operation for each round of the
 * algorithm.
 */
function cmn(q, a, b, x, s, t)
{
  return add(rol(add(add(a, q), add(x, t)), s), b);
}
function ff(a, b, c, d, x, s, t)
{
  return cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function gg(a, b, c, d, x, s, t)
{
  return cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function hh(a, b, c, d, x, s, t)
{
  return cmn(b ^ c ^ d, a, b, x, s, t);
}
function ii(a, b, c, d, x, s, t)
{
  return cmn(c ^ (b | (~d)), a, b, x, s, t);
}

/*
 * Take a string and return the hex representation of its MD5.
 */
function calcMD5(str)
{
  var x = str2blks_MD5(str);
  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;

    a = ff(a, b, c, d, x[i+ 0], 7 , -680876936);
    d = ff(d, a, b, c, x[i+ 1], 12, -389564586);
    c = ff(c, d, a, b, x[i+ 2], 17,  606105819);
    b = ff(b, c, d, a, x[i+ 3], 22, -1044525330);
    a = ff(a, b, c, d, x[i+ 4], 7 , -176418897);
    d = ff(d, a, b, c, x[i+ 5], 12,  1200080426);
    c = ff(c, d, a, b, x[i+ 6], 17, -1473231341);
    b = ff(b, c, d, a, x[i+ 7], 22, -45705983);
    a = ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
    d = ff(d, a, b, c, x[i+ 9], 12, -1958414417);
    c = ff(c, d, a, b, x[i+10], 17, -42063);
    b = ff(b, c, d, a, x[i+11], 22, -1990404162);
    a = ff(a, b, c, d, x[i+12], 7 ,  1804603682);
    d = ff(d, a, b, c, x[i+13], 12, -40341101);
    c = ff(c, d, a, b, x[i+14], 17, -1502002290);
    b = ff(b, c, d, a, x[i+15], 22,  1236535329);    

    a = gg(a, b, c, d, x[i+ 1], 5 , -165796510);
    d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
    c = gg(c, d, a, b, x[i+11], 14,  643717713);
    b = gg(b, c, d, a, x[i+ 0], 20, -373897302);
    a = gg(a, b, c, d, x[i+ 5], 5 , -701558691);
    d = gg(d, a, b, c, x[i+10], 9 ,  38016083);
    c = gg(c, d, a, b, x[i+15], 14, -660478335);
    b = gg(b, c, d, a, x[i+ 4], 20, -405537848);
    a = gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
    d = gg(d, a, b, c, x[i+14], 9 , -1019803690);
    c = gg(c, d, a, b, x[i+ 3], 14, -187363961);
    b = gg(b, c, d, a, x[i+ 8], 20,  1163531501);
    a = gg(a, b, c, d, x[i+13], 5 , -1444681467);
    d = gg(d, a, b, c, x[i+ 2], 9 , -51403784);
    c = gg(c, d, a, b, x[i+ 7], 14,  1735328473);
    b = gg(b, c, d, a, x[i+12], 20, -1926607734);
    
    a = hh(a, b, c, d, x[i+ 5], 4 , -378558);
    d = hh(d, a, b, c, x[i+ 8], 11, -2022574463);
    c = hh(c, d, a, b, x[i+11], 16,  1839030562);
    b = hh(b, c, d, a, x[i+14], 23, -35309556);
    a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
    d = hh(d, a, b, c, x[i+ 4], 11,  1272893353);
    c = hh(c, d, a, b, x[i+ 7], 16, -155497632);
    b = hh(b, c, d, a, x[i+10], 23, -1094730640);
    a = hh(a, b, c, d, x[i+13], 4 ,  681279174);
    d = hh(d, a, b, c, x[i+ 0], 11, -358537222);
    c = hh(c, d, a, b, x[i+ 3], 16, -722521979);
    b = hh(b, c, d, a, x[i+ 6], 23,  76029189);
    a = hh(a, b, c, d, x[i+ 9], 4 , -640364487);
    d = hh(d, a, b, c, x[i+12], 11, -421815835);
    c = hh(c, d, a, b, x[i+15], 16,  530742520);
    b = hh(b, c, d, a, x[i+ 2], 23, -995338651);

    a = ii(a, b, c, d, x[i+ 0], 6 , -198630844);
    d = ii(d, a, b, c, x[i+ 7], 10,  1126891415);
    c = ii(c, d, a, b, x[i+14], 15, -1416354905);
    b = ii(b, c, d, a, x[i+ 5], 21, -57434055);
    a = ii(a, b, c, d, x[i+12], 6 ,  1700485571);
    d = ii(d, a, b, c, x[i+ 3], 10, -1894986606);
    c = ii(c, d, a, b, x[i+10], 15, -1051523);
    b = ii(b, c, d, a, x[i+ 1], 21, -2054922799);
    a = ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
    d = ii(d, a, b, c, x[i+15], 10, -30611744);
    c = ii(c, d, a, b, x[i+ 6], 15, -1560198380);
    b = ii(b, c, d, a, x[i+13], 21,  1309151649);
    a = ii(a, b, c, d, x[i+ 4], 6 , -145523070);
    d = ii(d, a, b, c, x[i+11], 10, -1120210379);
    c = ii(c, d, a, b, x[i+ 2], 15,  718787259);
    b = ii(b, c, d, a, x[i+ 9], 21, -343485551);

    a = add(a, olda);
    b = add(b, oldb);
    c = add(c, oldc);
    d = add(d, oldd);
  }
  return rhex(a) + rhex(b) + rhex(c) + rhex(d);
}
///////////////////////////MD5 SCRIPT END/////////////////////////////////

///////////// BEGIN OF SHA2 //////////////////
function SHA256(s){

    var chrsz = 8;
    var hexcase = 0;

    function safe_add (x, y) {
        var lsw = (x & 0xFFFF) + (y & 0xFFFF);
        var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
        return (msw << 16) | (lsw & 0xFFFF);
    }

    function S (X, n) { return ( X >>> n ) | (X << (32 - n)); }
    function R (X, n) { return ( X >>> n ); }
    function Ch(x, y, z) { return ((x & y) ^ ((~x) & z)); }
    function Maj(x, y, z) { return ((x & y) ^ (x & z) ^ (y & z)); }
    function Sigma0256(x) { return (S(x, 2) ^ S(x, 13) ^ S(x, 22)); }
    function Sigma1256(x) { return (S(x, 6) ^ S(x, 11) ^ S(x, 25)); }
    function Gamma0256(x) { return (S(x, 7) ^ S(x, 18) ^ R(x, 3)); }
    function Gamma1256(x) { return (S(x, 17) ^ S(x, 19) ^ R(x, 10)); }

    function core_sha256 (m, l) {
        var K = new Array(0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0xFC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x6CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2);
        var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19);
        var W = new Array(64);
        var a, b, c, d, e, f, g, h, i, j;
        var T1, T2;

        m[l >> 5] |= 0x80 << (24 - l % 32);
        m[((l + 64 >> 9) << 4) + 15] = l;

        for ( var i = 0; i<m.length; i+=16 ) {
            a = HASH[0];
            b = HASH[1];
            c = HASH[2];
            d = HASH[3];
            e = HASH[4];
            f = HASH[5];
            g = HASH[6];
            h = HASH[7];

            for ( var j = 0; j<64; j++) {
                if (j < 16) W[j] = m[j + i];
                else W[j] = safe_add(safe_add(safe_add(Gamma1256(W[j - 2]), W[j - 7]), Gamma0256(W[j - 15])), W[j - 16]);

                T1 = safe_add(safe_add(safe_add(safe_add(h, Sigma1256(e)), Ch(e, f, g)), K[j]), W[j]);
                T2 = safe_add(Sigma0256(a), Maj(a, b, c));

                h = g;
                g = f;
                f = e;
                e = safe_add(d, T1);
                d = c;
                c = b;
                b = a;
                a = safe_add(T1, T2);
            }

            HASH[0] = safe_add(a, HASH[0]);
            HASH[1] = safe_add(b, HASH[1]);
            HASH[2] = safe_add(c, HASH[2]);
            HASH[3] = safe_add(d, HASH[3]);
            HASH[4] = safe_add(e, HASH[4]);
            HASH[5] = safe_add(f, HASH[5]);
            HASH[6] = safe_add(g, HASH[6]);
            HASH[7] = safe_add(h, HASH[7]);
        }
        return HASH;
    }

    function str2binb (str) {
        var bin = Array();
        var mask = (1 << chrsz) - 1;
        for(var i = 0; i < str.length * chrsz; i += chrsz) {
            bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32);
        }
        return bin;
    }

    function Utf8Encode(string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    }

    function binb2hex (binarray) {
        var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
        var str = "";
        for(var i = 0; i < binarray.length * 4; i++) {
            str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
            hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
        }
        return str;
    }
	 s = Utf8Encode(s);
    return binb2hex(core_sha256(str2binb(s), s.length * chrsz));

}
///////////// END OF SHA2 //////////////////

function hash_str(s) {
	// this is only to make sure everything is hashed by sha256, no need to change lots of scripts
	h_method='sha256';
	switch (h_method) {		
		case 'sha256' : return SHA256(s);
		case  'md5' :
		default : return calcMD5(s);
	}
}


//////////////////// POSTCODE 

           
        var account_code='INFOL11111';
        var license_code='FH59-KP66-GY24-BN99';
        var machine_id='';
        
        function pcaByPostcodeBegin()
           {
              var postcode = document.forms[1]["postcode"].value;
              var scriptTag = document.getElementById("pcaScriptTag");
              var headTag = document.getElementsByTagName("head").item(0);
              var strUrl = "";
              
              document.getElementById("divLoading").style.display = '';
              
              //Build the url
              strUrl = "http://services.postcodeanywhere.co.uk/inline.aspx?";
              strUrl += "&action=lookup";
              strUrl += "&type=by_postcode";
              strUrl += "&postcode=" + escape(postcode);
              strUrl += "&account_code=" + escape(account_code);
              strUrl += "&license_code=" + escape(license_code);
              strUrl += "&machine_id=" + escape(machine_id);
              strUrl += "&callback=pcaByPostcodeEnd";
              
              //Make the request
              if (scriptTag)
                 {
                    //The following 2 lines perform the same function and should be interchangeable
                    headTag.removeChild(scriptTag);
                    //scriptTag.parentNode.removeChild(scriptTag);
                 }
              scriptTag = document.createElement("script");
              scriptTag.src = strUrl
              scriptTag.type = "text/javascript";
              scriptTag.id = "pcaScriptTag";
              headTag.appendChild(scriptTag);
              
              
              
           }

        function pcaByPostcodeEnd()
           {
              document.getElementById("divLoading").style.display = 'none';
              //Test for an error
              if (pcaIsError)
                 {
                    //Show the error message
                    document.getElementById("selectaddress").style.display = 'none';
                    document.getElementById("btnFetch").style.display = 'none';
                    alert(pcaErrorMessage);
                 }
              else
                 {
                    //Check if there were any items found
                    if (pcaRecordCount==0)
                       {
                          document.getElementById("selectaddress").style.display = 'none';
                          document.getElementById("btnFetch").style.display = 'none';
                          alert("Sorry, no matching items found. Please try another postcode.");
                       }
                    else
                       {
                          document.getElementById("tab_with_postcode_select_bar").style.display = ''; 
                          document.forms[1]["selectaddress"].style.display = '';
                          document.forms[1]["btnFetch"].style.display = '';
                                                    for (i=document.forms[1]["selectaddress"].options.length-1; i>=0; i--){
                              document.forms[1]["selectaddress"].options[i] = null;
                            }
                          for (i=0; i<pca_id.length; i++){
                            document.forms[1]["selectaddress"].options[document.forms[1]["selectaddress"].length] = new Option(pca_description[i], pca_id[i]);
                          }
                       }
                 }
           }
        
        function pcaFetchBegin()
           {
              var address_id = document.forms[1]["selectaddress"].value;
              var scriptTag = document.getElementById("pcaScriptTag");
              var headTag = document.getElementsByTagName("head").item(0);
              var strUrl = "";

              //Build the url
              strUrl = "http://services.postcodeanywhere.co.uk/inline.aspx?";
              strUrl += "&action=fetch";
              strUrl += "&id=" + escape(address_id);
              strUrl += "&account_code=" + escape(account_code);
              strUrl += "&license_code=" + escape(license_code);
              strUrl += "&machine_id=" + escape(machine_id);
              strUrl += "&callback=pcaFetchEnd";

              //Make the request
              if (scriptTag)
                 {
                    //The following 2 lines perform the same function and should be interchangeable
                    headTag.removeChild(scriptTag);
                    //scriptTag.parentNode.removeChild(scriptTag);
                 }
              scriptTag = document.createElement("script");
              scriptTag.src = strUrl
              scriptTag.type = "text/javascript";
              scriptTag.id = "pcaScriptTag";
              headTag.appendChild(scriptTag);
              
              document.forms[1]["selectaddress"].style.display = 'none';
              document.forms[1]["btnFetch"].style.display = 'none';
           }

        function pcaFetchEnd()
           {
              //Test for an error
              if (pcaIsError)
                 {
                    //Show the error message
                    alert(pcaErrorMessage);
                 }
              else
                 {
                    //Check if there were any items found
                    if (pcaRecordCount==0)
                       {
                          alert("Sorry, no matching items found");
                       }
                    else
                       {
                          
                          document.getElementById('add1').value = pca_line1[0];
                          document.getElementById('add2').value = pca_line2[0]; 
                          document.getElementById('city').value = pca_post_town[0];
                          document.getElementById('postcode').value = pca_postcode[0]; 
                          document.getElementById('country').value = pca_country[0];
                          document.getElementById('company').value = pca_organisation_name[0];
                          document.forms[1]["company"].value = '' + pca_organisation_name[0];
                          document.forms[1]["add1"].value = '' + pca_line1[0];
                          document.forms[1]["add2"].value = '' + pca_line2[0];
                          document.forms[1]["city"].value = '' + pca_post_town[0];
                          document.forms[1]["postcode"].value = pca_postcode[0];
                          document.forms[1]["country"].value = pca_country[0]; 
                          document.forms[1]["line3"].value = '' + pca_line3[0];
                          document.forms[1]["line4"].value = '' + pca_line4[0];
                          document.forms[1]["line5"].value = '' + pca_line5[0];

                       }
                 }
           }
        
   
   //////////////// END OF POSTCODE 