var contractsImages = new Array(contractsImagesURLs.length);
for (x=0;x<contractsImagesURLs.length;x++) {
contractsImages[x] = new Image();
contractsImages[x].src = contractsImagesDir + contractsImagesURLs[x];
}
var contractsInterval = false;
var Wrapper;
var wrapperWidth;
var wrapperWidthSmall;

/* AJAX functions */
function ajaxPostProcess() {
  dhtmlHistory.initialize(); // AJAX history
  dhtmlHistory.addListener(historyChange); // AJAX history
  cache = new Array();
  ajax(query);
}

function historyChange(newLocation, historyData) { ajax(historyData); }

function ajax(file) {
  var currentRequest = file;
  var notFound = 'Page not found.';
  if (googleLoaded && file!='contact') { GUnload(); googleLoaded=false; } // Google maps unload
  if (file=='') return;
  var mainCopy = document.getElementById('main-copy');
  var roundel = document.getElementById('roundelJS');

  if (file==null || file=='null') { file=window.location.hash.split('#')[1]; } // This is for when someone types in a hash directly in the location bar, after having loaded the first page.
  try { page = pages[file][0]; }
  catch(e) { page=0; mainCopy.innerHTML = notFound; dhtmlHistory.add(file+query2,file+query2); }
  if (document.images) {
    for (var x=1;x<=6;x++) {
      if (x!=page) { document.getElementById('link'+x).src = linkUp[x].src; }
      else { document.getElementById('link'+page).src = linkOver[page].src; }
    }
  }
  mainCopy.focus(); // Take focus to an element with a defined "outline: none" style so as to remove anchor outline.
  if (page==0) return false;

  // Check for cached copy:

  try {
    if (cache[file]!==undefined) {
      if (file!='index') roundel.style.display = 'none';
      mainCopy.innerHTML = cache[file];
      document.getElementById('loading').style.display = 'none';
      if (file=='index') roundel.style.display = 'inline';
      dhtmlHistory.add(file+query2,file+query2);
      document.title = bwaTitle + ' - ' + pages[file][1];
      ajaxComplete(file);
      return false;
    }
  }
  catch (e) { }

  try { var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); }
  catch (e) { return true; }

  xmlhttp.onreadystatechange = function() {

    if (xmlhttp.readyState != 4) {
      document.getElementById('loading').style.display = 'block';
    }
    
    if (xmlhttp.readyState >= 3) {
      if (file!='index') roundel.style.display = 'none';
    }

    if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) {
      if (file=='index') roundel.style.display = 'inline';
      mainCopy.innerHTML = xmlhttp.responseText;			
      document.getElementById('loading').style.display = 'none';
      // prevents caching the wrong page if button is pressed before asynchronous loading is complete:
      if (currentRequest==file && file.indexOf('eu_construction_efficiency')==-1) cache[file] = xmlhttp.responseText;
      dhtmlHistory.add(file+query2,file+query2);
      document.title = bwaTitle + ' - ' + pages[file][1];
      ajaxComplete(file);
    }

    if ((xmlhttp.readyState == 4) && (xmlhttp.status != 200)) {
      document.getElementById('loading').style.display = 'none';
      mainCopy.innerHTML = notFound;
      dhtmlHistory.add(file+query2,file+query2);
      return false;
    }

  }

  xmlhttp.open("GET", './ajax.php?'+file, true);
  xmlhttp.send(null);
  
  return false;
}

function ajaxComplete(file) {
  setTimeout(clientListFolders,10);
  if (contractsInterval) clearInterval(contractsInterval);
  contractsInterval = setInterval(rollingContracts,11000);
  if (file=='contact') { contactMapLoad(); }
  if (file=='careers') { setTimeout(careers,10); }
  if (file=='eu_construction_efficiency_contact') { eucrContact(); }
  document.getElementById('main-copy').scrollTop = 0; // make sure the scroll position of main-copy is not inherited from another page.
  //	if (file=='eu_construction_efficiency_documents_full' || file=='eu_construction_efficiency_auth_action') setTimeout(eucrPostProcess,500);
}
/* -------------------------------------- */





/* "About" & "News" link Dropdown menu for IE */
function dropdownMenu(itemClass, itemIEClass, linkNum) {
  // IE fix for the "About" dropdown menu:
  if (document.all && document.getElementById) {
    dropdown = document.getElementById(itemIEClass).onmouseover=function() {
      this.className+=" "+itemClass;
      link_over(linkNum);
    }
    dropdown = document.getElementById(itemIEClass).onmouseout=function() {
      this.className=this.className.replace(" "+itemClass, "");
      link_up(linkNum);
    }
  } else {
    dropdown = document.getElementById(itemIEClass).onmouseover=function() {
      link_over(linkNum);
    }
    dropdown = document.getElementById(itemIEClass).onmouseout=function() {
      link_up(linkNum);
    }
  }
}
/* -------------------------------------- */



/* Client List Folders */
function clientListFolders() {

  folderClosedImg = new Image(); folderClosedImg.src = 'img/folder-closed.gif';
  folderOpenImg = new Image(); folderOpenImg.src = 'img/folder-open.gif';

  try {
    // Set up the Event Handlers for the Client List:
    clients = document.getElementById('client-list');
    document.getElementById('client-list-info').innerHTML = 'Click on the items';
    
    for (var i=0; i<clients.childNodes.length; i++) {
      clientsNode = clients.childNodes[i];
      if (clientsNode.nodeName=="LI") {
        for (var j=0; j<clientsNode.childNodes.length; j++) {
          clientsNode2 = clientsNode.childNodes[j];
          if (clientsNode2.nodeName=="DIV") {
            clientsNode2.onclick = function() {
              if (this.className.indexOf(' sector-click')==-1) {
                this.className += " sector-click";
                changeListImage(this,'open');
                this.scrollIntoView();
				window.scrollTo(0,0);
              } else {
                this.className=this.className.replace(" sector-click", "");
                changeListImage(this,'close');
              }
            }
            // Replace the open folder icon for non-JS browsers with the closed folder icon:
            var folderImg = clientsNode2.getElementsByTagName('img')[0];
            folderImg.src = folderClosedImg.src;
          }
        }
      }
    }
  }
  catch (e) { }
}

function changeListImage(cLnode, cLtodo) {
  var cLnode2 = cLnode.getElementsByTagName('img')[0];
  if (cLnode2.src.indexOf('folder-open.gif')!=-1) {
    cLnode2.src = folderClosedImg.src;
  } else {
    cLnode2.src = folderOpenImg.src;
  }
}
/* -------------------------------------- */




/* Google Contact Map */
function contactMapLoad() {

  if (self.GBrowserIsCompatible) {
    if (GBrowserIsCompatible()) {
      var mapDiv = document.createElement('div')
      mapDiv.id='googleMap';
      var sp2 = document.getElementById("contactInfo");
      var parentDiv = sp2.parentNode;
      parentDiv.insertBefore(mapDiv, sp2);
      
      googleLoaded = true;
      contactMap = new GMap2(document.getElementById("googleMap"));
      //contactMap.addControl(new GLargeMapControl());
      contactMapCenter = new GLatLng(54.5, -2.5);
      contactMapZoom = 5;
      
      if (document.all) { // IE fix.
        contactMap.setCenter(contactMapCenter, contactMapZoom, G_NORMAL_MAP);
      } else {
        contactMap.addControl(new GMapTypeControl());
        contactMap.setCenter(contactMapCenter, contactMapZoom, G_HYBRID_MAP);
      }
      
	  
      var bromley = new GLatLng(51.4061, 0.0182);
      var bromleyIE = new GLatLng(56.4061, 2.0182); // add 5 to lat and 2 to long.
	  var markerBromley = new GMarker(bromley);
	  
      var leeds = new GLatLng(53.7948, -1.539);
      var leedsIE = new GLatLng(58.4061, 0.461); // add 5 to lat and 2 to long.
	  var markerLeeds = new GMarker(leeds);
	  
	  if (document.all) {
	    GEvent.addListener(markerBromley, "infowindowopen", function() {contactMap.panTo(bromleyIE);} );
	    GEvent.addListener(markerLeeds, "infowindowopen", function() {contactMap.panTo(leedsIE);}   );
	  }

      GEvent.addListener(markerBromley, "click", function() {markerBromley.showMapBlowup(14, G_NORMAL_MAP);} );
      GEvent.addListener(markerLeeds, "click", function() {markerLeeds.showMapBlowup(14, G_NORMAL_MAP);} );
      
      GEvent.addListener(markerBromley, "infowindowclose", function() { 
        contactMap.setCenter(contactMapCenter, contactMapZoom, G_HYBRID_MAP);
      });
      
      GEvent.addListener(markerLeeds, "infowindowclose", function() {
        contactMap.setCenter(contactMapCenter, contactMapZoom, G_HYBRID_MAP);
      });
      
      contactMap.addOverlay(markerBromley, 1);
      contactMap.addOverlay(markerLeeds, 2);

    }
  }
}
/* -------------------------------------- */



/* Downloads functions */
function filesizes() {
  var totalBytes = 0;
  var filelist = document.forms['downloadsForm'];
  for (var i=0; i<filelist.elements.length; i++) {
    files = filelist.elements[i];
    if (files.type=="hidden" && filelist.elements[(i-1)].checked==1) {
      totalBytes += parseInt(files.value);
    }
  }

  if (totalBytes>0) {
    document.getElementById('filesizeTotal').innerHTML = parseInt(totalBytes/1024) + ' kilobytes';
  } else {
    document.getElementById('filesizeTotal').innerHTML = '';
  }
}

function downloadsSubmit() {
  // This function validates the email address and name fields and then submits the form.
  var filelist = document.forms['downloadsForm'];
  document.getElementById('downloadsNameError').innerHTML = '';
  document.getElementById('downloadsEmailError').innerHTML = '';
  document.getElementById('downloadsFileError').innerHTML = '';

  var pattern = /^\s+|\s+$/g;
  var name = filelist['name'].value.replace(pattern, '');
  var company = filelist['company'].value.replace(pattern, '');
  var email = filelist['email'].value.replace(/\s+/g, '');
  var telephone = filelist['telephone'].value.replace(pattern, '');
  var error = false;

  pattern = /[-\w\.]+@[-\w]+[.]+[-\w\.]+$/;
  if (!pattern.test(email)) { 
    document.getElementById('downloadsEmailError').innerHTML = 'Please enter a valid email address.';
    error=true;
  }

  if (name.length == 0 || name.indexOf(' ')==-1) {
    document.getElementById('downloadsNameError').innerHTML = 'Please enter your name.';
    error=true;
  }


  var downloadsSelected = 0;
  for(i = 0; i < filelist.length; i++) {
    if (filelist[i].name.substr(0,9) == "download[" && filelist[i].checked) downloadsSelected += 1;
  }

  if (downloadsSelected == 0) {
    document.getElementById('downloadsFileError').innerHTML = '&ndash; no files selected &ndash;';
    error=true;
  }

  if (error) {
    document.getElementById('downloadsFormHead').scrollIntoView();
	window.scrollTo(0,0);
    return false;
  }

  filelist.submit();
  return false;
}
/* -------------------------------------- */



/* Resize functions */
function gauge() {
  if (self.innerWidth)
  {
    frameWidth = self.innerWidth;
    frameHeight = self.innerHeight;
  }
  else if (document.documentElement && document.documentElement.clientWidth)
  {
    frameWidth = document.documentElement.clientWidth;
    frameHeight = document.documentElement.clientHeight;
  }
  else if (document.body)
  {
    frameWidth = document.body.clientWidth;
    frameHeight = document.body.clientHeight;
  }
  return Array(frameWidth, frameHeight);
}


function resizePostProcess() {
  borderRight = document.getElementById("border-right");
  Wrapper = document.getElementById('wrapper');
  LoadingImg = document.getElementById('loading');
  if (IE6==1) {
    boxHack = 6; // wrapper border x 2.
  } else {
    boxHack = 0;
  }
  br = -127 + boxHack;
  wrapperWidth = 827 + boxHack;
  wrapperLeft = 70 - boxHack;
  wrapperWidthSmall = 780 + boxHack;
  wrapperLeftSmall = 64 - boxHack;
  loadingImgBottom = 53 - boxHack;
  resize();
  return;
}

function resize(windowSize) {

  windowSize = gauge();
  if (!windowSize[0]) { return; }

  // Remove the rhs image and move wrapper to lhs if viewport less than 1000px:
  var hoverImg = new Array();
  hoverImg[7] = (page=='careers') ? '-hover' : '';
  hoverImg[8] = (page=='cleaningBenchmark') ? '-hover' : '';
  
  if (windowSize[0]>1002) {
    try { document.getElementById('rollingContracts').style.display = 'inline'; } catch(e) { }
    borderRight.style.padding = '10px 0 10px 0';
    //document.getElementById('additionalNavigation2').style.marginTop = '0';
    borderRight.style.right = '-102px';
    Wrapper.style.width = wrapperWidth + 'px';
    Wrapper.style.left = wrapperLeft + 'px';
    //Wrapper.style.border = '1px solid #a0282e';
    LoadingImg.style.left = '275px';
    LoadingImg.style.bottom = loadingImgBottom+'px';
  } else {
    try { document.getElementById('rollingContracts').style.display = 'none'; } catch(e) { }
    //document.getElementById('additionalNavigation2').style.marginTop = '171px';
    //document.getElementById('additionalNavigation2').style.marginTop = '30px';
    borderRight.style.right = br + 'px';
    Wrapper.style.width = wrapperWidthSmall + 'px';
    Wrapper.style.left = wrapperLeftSmall + 'px';
    //Wrapper.style.border = 'none';
    LoadingImg.style.left = '275px';
    LoadingImg.style.bottom = (loadingImgBottom+boxHack)+'px';
  }

  return;
}
/* -------------------------------------- */



/* EUCR Contact Obfuscator */

function eucrContact() {
  var mpe = new Array('.packham', String.fromCharCode(0x40),'michael', 'bwa.uk.net', 'to:', 'mail');
  var bwe = new Array ('.williams', String.fromCharCode(0x40),'bernard', 'bwa.uk.net', 'to:', 'mail');
  asMPJS = document.getElementById('asMP');
  asBWJS = document.getElementById('asBW');
  asMPJS.onmouseover = function() { asMPJS.href = mpe[5] + mpe[4] + mpe[2] + mpe[0] + mpe[1] + mpe[3]; }
  asBWJS.onmouseover = function() { asBWJS.href = bwe[5] + bwe[4] + bwe[2] + bwe[0] + bwe[1] + bwe[3]; }
}

/* -------------------------------------- */



/* Rollovers */
if (document.images) {
  var linkOver = new Array('', new Image(), new Image(), new Image(), new Image(), new Image(), new Image(), new Image(), new Image());
  var linkUp = new Array('', new Image(), new Image(), new Image(), new Image(), new Image(), new Image(), new Image(), new Image());
  for (var x=1; x<=8; x++) {
    linkOver[x].src = 'img/links/link'+x+'-hover.gif';
    linkUp[x].src = 'img/links/link'+x+'.gif';
  }
  var loadingImage = new Image();
  loadingImage.src = 'img/loading.gif';

  function link_over(a) {
    document["link"+a].src = linkOver[a].src;
  }

  function link_up(a) {
    if (a!=page) document["link"+a].src = linkUp[a].src;
  }
}
/* -------------------------------------- */

googleLoaded = false;

window.onload = function() {
  resizePostProcess();
  ajaxPostProcess();
  dropdownMenu('dropdownOver', 'border-left-dropdownIE', 2);
  dropdownMenu('dropdownOver2', 'border-left-dropdownIE2', 4);
  //eucrPostProcess();
}

window.onresize = function() { resize(); }

window.onunload = function() {
  if (googleLoaded) { GUnload(); } // Google maps unload
}


/* Careers */
/* ------------- */
function careers() {
  var careersEmail = new Array('recruitment', String.fromCharCode(0x40), 'bwa.uk.net', 'to:', 'mail');
  careersContact = document.getElementById('recruitmentContact');
  careersContact.onmouseover = function() { careersContact.href = careersEmail[4] + careersEmail[3] + careersEmail[0] + careersEmail[1] + careersEmail[2]; }
}

/* Benchmarking */
/* ------------- */
function cleaningBenchmarkSubmit() {
  var args = document.forms['cleaningBenchmarkForm'];
  formError = 0; labourError = 0;

  formError += benchmarkTest(args.quarter, true);
  formError += benchmarkTest(args.officetype, true);
  formError += benchmarkTest(args.area, true);
  labourError = benchmarkTest(args.labour, false);
  labourSpecError = benchmarkTest(args.labourspec, false);
  if (labourError+labourSpecError>1) {
    formError += 1;
    if (labourError==1) { benchmarkTest(args.labour, true); }
    else { benchmarkTest(args.labourspec, false); }
  }

  if (formError>0) {
    document.getElementById('benchmarkingResults').innerHTML = '<p class="benchmarkError">Please provide information for all the mandatory (*) fields.</span>';
    return false;
  }
  document.getElementById('benchmarkingResults').innerHTML = '';
  getString = 'quarter='+encodeURIComponent(args.quarter.value)+'&officetype='+encodeURIComponent(args.officetype.value)+'&area='+encodeURIComponent(args.area.value)+'&labour='+encodeURIComponent(args.labour.value)+'&labourspec='+encodeURIComponent(args.labourspec.value)+'&satisfaction='+encodeURIComponent(args.satisfaction.value)+'&occupants='+encodeURIComponent(args.occupants.value)+'&windowCleaning='+encodeURIComponent(args.windowCleaning.checked)+'&washroomSupplies='+encodeURIComponent(args.washroomSupplies.checked)+'&pestControl='+encodeURIComponent(args.pestControl.checked)+'&wasteDisposal='+encodeURIComponent(args.wasteDisposal.checked);
  benchmarkAjax(getString);
  return false;
}

function benchmarkTest(test, flagError) {
  if (test.value=='default' || test.value=='' || test.value==0) {
    if (flagError) { test.style.color = 'red'; }
    return 1;
  }
  test.style.color = 'black'; return 0;
}

function benchmarkAjax(getString) {

  try { var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); }
  catch (e) { return true; }

  xmlhttp.onreadystatechange = function() {

    if (xmlhttp.readyState != 4) {
      document.getElementById('benchmarkingResults').innerHTML = '';
      document.getElementById('loading').style.display = 'block';
    }

    if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) {
      document.getElementById('benchmarkingResults').innerHTML = xmlhttp.responseText;
      document.getElementById('loading').style.display = 'none';
    }

    if ((xmlhttp.readyState == 4) && (xmlhttp.status != 200)) {
      document.getElementById('loading').style.display = 'none';
      document.getElementById('benchmarkingResults').innerHTML = '<span class="error">Error!  Cannot find results.</span>';
    }

  }

  xmlhttp.open("GET", './benchmarking/cleaning.php?'+getString, true);
  xmlhttp.send(null);
}

function benchmarkOccupants(x) {
  var args = document.forms['cleaningBenchmarkForm'];
  if (isNaN(x) || x==0) { args.area.value = ''; return; }
  densities = new Array();
  densities['default'] = 15;
  densities['cityprivate'] = 25;
  densities['nationalheadquarters'] = 20;
  densities['regional'] = 17;
  densities['localpublic'] = 14;
  densities['outoftownback'] = 12;
  if (isNaN(args.occupants.value.replace(/,/g, '')) || args.occupants.value=='' || args.occupants.value==0) {
    calcOcc = sigFig(x/densities[args.officetype.value],2);
    args.occupants.value = (calcOcc==0) ? '' : comma(calcOcc);
  }
}

function benchmarkChecked(test, id) {
  if (test==1) { document.getElementById(id+'Img').src='benchmarking/img/'+id+'-down.gif' }
  else { document.getElementById(id+'Img').src='benchmarking/img/'+id+'.gif' };
}

function benchmarkOpt(id) { // Hack for IE
  if (document.all) {
    formItem = document.forms['cleaningBenchmarkForm'][id];
    if (formItem.checked) { formItem.checked = false; benchmarkChecked(formItem.checked, id); } else { formItem.checked = true; benchmarkChecked(formItem.checked, id); }
  }
}

function benchmarkScrollDown() {
  document.getElementById('benchmarkGraph').scrollIntoView(true);
  window.scrollTo(0,0);
  var bc = new Array ('benchmarking', String.fromCharCode(0x40), 'bwa.uk.net', 'to:', 'mail');
  bcover = document.getElementById('benchmarkingContact');
  bcover.onmouseover = function() { bcover.href = bc[4] + bc[3] + bc[0] + bc[1] + bc[2]; }
}

function sigFig(value, sigFigs) {
  exponent = Math.floor(Math.LOG10E * Math.log(value) + 1);
  significand = value / Math.pow(10, exponent);
  significand = Math.round(significand * Math.pow(10, sigFigs)) / Math.pow(10, sigFigs);
  value = significand * Math.pow(10, exponent);
  return parseInt(value);
}

function comma(number) {
  str = new String(number).replace(/,/g, '');
  var val = new String();
  var num = str.length % 3;
  if (num == 0) { num = 3; }
  while (str.length > 0) {
    val += str.substring (0, num) + ",";
    str = str.substring (num);
    num = 3;
  }
  return val.substring (0, val.length - 1);
}

function rollingContracts() {
currentContractImage++;
if (currentContractImage>=contractsImages.length) { currentContractImage = 0; }

// Add or remove link.
var linkStart = '';
var linkEnd = '';
if (contractsImagesLinks[currentContractImage]!='') {
linkStart = '<a href="' + contractsImagesLinks [currentContractImage] + '">';
linkEnd = '</a>';
}
document.getElementById('border-right').innerHTML = linkStart + contractImagesImgTag + linkEnd;

contractsImages[currentContractImage].src = contractsImages[currentContractImage].src; // Resets the GIF animation for IE
document.getElementById('rollingContracts').src = contractsImages[currentContractImage].src;

clearInterval(contractsInterval);
contractsInterval = setInterval(rollingContracts,11000); // Resets the timer, since IE gets it out of sync [?when the window is minimized?]
}
