<!-- 
//<![CDATA[
var mapviewer, searcher, loading, markers, search;
var search, search_form, search_qs, max_results, page, search_submitbtn;
var message, search_point, search_address, search_sales, search_aftersales;
var directions, route_form, route_qs, selected_dealer, route_point, route_address;
var pan_zoom_widget, map_type_widget;
var container;
var initDealer = false;
var initDealerFuncRef;
var funcRef = resultsLoaded;
var ambigFuncRef;
var max_zindex = 1000;
var dotw = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
var sections = ['searchDiv', 'recordListDiv', 'detailsDiv', 'getRouteDiv', 'routeStepsDiv', 'messageDiv', 'dealer_results_summary'];
var activeSections = [];
var red_colour = '#F02933';
var grey_colour = '#6A6A6A';
var route_colour = grey_colour;
var page_loaded = false;
var data_source = 'subaru_xdu';
var routeWindow;

var rfs = ['client_id', 'name', 'street', 'address2', 'address3', 'town', 'county', 'pc', 'phone', 'dealerphoto', 'sales_text', 'parts_text', 'service_text', 'sales', 'service', 'lat', 'lon'];

for (var i=0; i<dotw.length; i++) {
  rfs.push('sales_' + dotw[i].toLowerCase() + '_open');
  rfs.push('sales_' + dotw[i].toLowerCase() + '_close');
}

function readDealerId() {
  var url_bits = window.location.href.split('?');
  if (url_bits.length>1) {
    var param_strings = url_bits[1].split('&');
    var url_params = [];
    for (var i=0; i<param_strings.length; i++) {
      var split = param_strings[i].split('=');
      url_params[split[0]] = split[1];
    }
    if (typeof(url_params.dealer_id) != 'undefined') {
      initDealer = true;
      initDealerFuncRef = showInitialDealer;
      searcher = new MMSearchRequester( initDealerFuncRef );
      search = createSearchObject();
      search.filters.push(new MMSearchFilter('client_id', 'eq', url_params.dealer_id) );
      searcher.search( search );
    }
  }
}
readDealerId();

function showInitialDealer() {
  if (!page_loaded) {
    setTimeout('showInitialDealer()', 1000);
  } else {
    markers = new Array();
    if (resultsLoaded()) {
      result_id = markers[0].getAttribute('result_id');
      if (typeof(result_id) != 'undefined') {
        selected_dealer = result_id;
        contextMenuItems = ['search', 'route'];
      }
      zoomToDealer(0, 0);
    }
  }
}

function getURLParam(strParamName){
    var strReturn = "";
    var strHref = window.location.href;
    if ( strHref.indexOf("?") > -1 ){
        var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
        var aQueryString = strQueryString.split("&");
        for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
            if (aQueryString[iParam].indexOf(strParamName + "=") > -1 ){
                var aParam = aQueryString[iParam].split("=");
                strReturn = aParam[1];
                break;
            }
        }
    }
    return strReturn;
}

function onLoad() {
  page_loaded = true;
  // Remove any old maps
  var mv = document.getElementById( 'mapviewer' );
  while (mv.firstChild) {
    mv.removeChild(mv.firstChild);
  }
  // & show intial map
  mapviewer = new MultimapViewer( document.getElementById( 'mapviewer' ) );
  mapviewer.addEventHandler( 'click', function() { 
    var newPos = arguments[2];
    mapviewer.goToPosition( newPos, 9 );
    initSearch();
  } );
  showOverviewMap();
  container = document.getElementById ('widgetcontainer');
  
  // Add widgets
  // Pan/Zoom
  mapviewer.removeWidget ( pan_zoom_widget );
  pan_zoom_widget = new MMPanZoomWidget ( new MMBox( 10, 10 ), 'SubaruPanZoomWidget', true );
  mapviewer.addWidget ( pan_zoom_widget );
  // Map Type
  mapviewer.removeWidget ( map_type_widget );
  map_type_widget = new MMMapTypeWidget();
  mapviewer.addWidget ( map_type_widget );
  
  // get form elements
  search_form = document.getElementById( 'search_form' );
  search_qs = document.getElementById( 'qs' );
  search_sales = document.getElementById( 'sales_store' );
  search_aftersales = document.getElementById( 'aftersales_store' );
  max_results = document.getElementById( 'count' );
  page = document.getElementById( 'pagePag' );
  page.value = 1;
  search_submitbtn = document.getElementById( 'search_submitbtn' );
  loading = document.getElementById( 'loading' );
  message = document.getElementById( 'message' );
  directions = document.getElementById( 'getRouteDiv' );
  route_form = document.getElementById( 'route_form' );
  route_qs = document.getElementById( 'route_qs' );
  
  if (!initDealer) showOnly('searchDiv');
  
  loadingStatus(false, search_form);
  loadingStatus(false, route_form);
  
  if ( getURLParam('qs') ){        
            initSearch();
        }
  
  // This line adds support for contect menus (not tested)
  //addContextMenuSupport()
}

function showOverviewMap() {
  mapviewer.goToPosition( new MMLatLon( 54.7, -4.5 ), 6 );
}

function addCustomizedMarker(total) {
    mapviewer.removeAllOverlays();
    var pos = mapviewer.getCurrentPosition();   
    var icon = new MMIcon( 'images/cluster.png' );
    icon.iconSize = new MMDimensions( 76, 66 );
    icon.textAnchor = new MMPoint(5, 40);
    icon.iconAnchor = new MMPoint( 16, 16 );
    mapviewer.createMarker( pos, {'label': 'Click to View Top 5 Results', 'text': total + ' Found', 'icon' : icon} );
    searchLat = search.point.lat;
    searchLon = search.point.lon;
    mapviewer.addEventHandler( 'click', function() { 
        document.location.href = 'search.htm?lat='+searchLat+'&lon='+searchLon;
    } );
}

function loadingStatus(bool, what) {
  // If we're loading values we want to disable the form elements
  // and display a spinning icon to show activity
  //inputs = what.getElementsByTagName( 'input' );
  //for (i=0; i<inputs.length; i++) {
    //inputs[i].disabled = bool;
  //}
  //loading.style.display = bool ? 'block' : 'none';
}

function createSearchObject() {
  var search = new MMSearch();
  search.return_fields = rfs;
  search.data_source = 'mm.clients.'+ data_source;
  return search;
}

function openInfoBox(type, target) {
  if( target.infoBoxOpened() ) {
    target.closeInfoBox();
  }
  else {
    target.openInfoBox( );
  }
}

function createGoecodeMarker(location, display_name, num) {
    var marker = mapviewer.createMarker(location, {'text' : num});
    marker.setInfoBoxContent('<p>' + display_name + ' <a href="#" onclick="clickedGeocodeMarker(' + num + '); return false;">(select)</a><' + '/p>');
    return marker;
}

function clickedGeocodeMarker(no) {
  var sel = document.getElementById('ambiguous_geocode_dropdown');
  sel.value = no-1;
  ambigFuncRef();
}

function createMarker(record, num) {
  // 3rd argument hides dealer details link in InfoBox
  
  var hideDetailLink = false;
  if (arguments.length > 2) hideDetailLink = arguments[2];
  
  var location = record.point;
  var icon = new MMIcon('images/marker.png');
  icon.iconSize = new MMDimensions(28, 32);
  //icon.iconSize = new MMDimensions(89, 35);
  icon.iconAnchor = new MMPoint(14, 16);
  icon.textAnchor = new MMPoint(10, 14);
  icon.infoBoxAnchor = new MMPoint(44, 0);
  //var marker = mapviewer.createMarker(location, { 'text': num });
  var marker = mapviewer.createMarker(location, { 'icon': icon, 'text': num });
  marker.setAttribute('result_id', num-1);
  var overviewText, moreInfoText, mobileText;
  overviewText = '<div class="infoBoxContent">\n';
  overviewText += '<p class="infoBoxStoreType">' + record.services + '</p>\n';
  overviewText += '<div class="infoBoxDetails">\n';
  overviewText += '<img class="infoBoxDealerImage" src="' + record.dealerphoto + '" />\n';
  overviewText += record.address + '\n';
  overviewText += '<br />\n';
  overviewText += record.phone + '<br />\n';
  overviewText += '<br />\n';
  overviewText += '<a href="#" onclick="requestDirections(' + (num-1) + '); return false;">Get directions to this dealer</a> <br />\n';   // Travel Directions link
  if (!hideDetailLink) overviewText += '<a href="#" onclick="zoomToDealer(0, ' + (num-1) + ')">More dealer details</a> <br />\n';   // Zoom to dealer link
  overviewText += '</div>\n';
  overviewText += '</div>';

  /* Map to mobile */
  var url = 'http://www.multimap.com/clients/content.cgi?client=subaru_xdu_mob_en&page=mm2m_submit&url=';
  url += escape( 'http://www.multimap.com/clients/browse.cgi?client=subaru_xdu_mob_en&f_client_id=' + Number( record.client_id ) );
  mobileText = '<div class="storeToMobile">';
  mobileText += '<iframe class="mobileFrame" style="font-size: 11px;" src="' + url + '">';
  mobileText += '</iframe>';
  mobileText += '</div>';

  //overviewText +=  + '<br />\n';
  moreInfoText = '<div class="infoBoxContent">\n';
  moreInfoText += '<h2>Opening hours</h2>\n';
  moreInfoText += '<br />\n';
  moreInfoText += '<table id="opening_hours">\n';
  moreInfoText += '<tbody>\n';
  for (var i=0; i<dotw.length; i++) {
    var openTime = eval('record.sales_' + dotw[i].toLowerCase() + '_open');
    var closeTime = eval('record.sales_' + dotw[i].toLowerCase() + '_close');
    // Add leading '0's if required
    if (openTime.split(':')[0].length < 2) openTime = '0' + openTime;
    if (closeTime.split(':')[0].length < 2) closeTime = '0' + closeTime;
    moreInfoText += '<tr>\n';
    moreInfoText += '<td>\n';
    moreInfoText += dotw[i] + ': ';
    moreInfoText += '</td>\n';
    moreInfoText += '<td class="opening_time">\n';
    moreInfoText += openTime.split(':').slice(0,2).join(':');
    moreInfoText += '</td>\n';
    moreInfoText += '<td class="between_times">\n';
    moreInfoText += ' - ';
    moreInfoText += '</td>\n';
    moreInfoText += '<td class="closing_time">\n';
    moreInfoText += closeTime.split(':').slice(0,2).join(':');
    moreInfoText += '</td>\n';
    moreInfoText += '</tr>\n';
  }
  moreInfoText += '</tbody>\n';
  moreInfoText += '</table>\n';
  //moreInfoText += '<br />\n';
  var tabs = [
    new MMInfoBoxTab( record.name, overviewText ),
    new MMInfoBoxTab( 'opening hours', moreInfoText ),
    new MMInfoBoxTab( 'Map2Mobile', mobileText )
  ];
  marker.setInfoBoxContent( tabs );
  // Original infoBox line
  //marker.setInfoBoxContent('<p>' + record.name + '<' + '/p>');
  return marker;
}

function initSearch(paginationSet) {
  // This function is called with no arguments when initial search form is submitted
  // It is called with an address as the 1st arguement when resolving an ambiguous address
  showOnly('searchDiv');
  cleanUp();
  searcher = new MMSearchRequester( funcRef );
  // Set return fields and maximum number of records to return from search:
  search = createSearchObject();
  var type;
  //if (search_sales.checked == true) {
    //search.filters.push( new MMSearchFilter( 'sales', 'eq', '1' ) );
  //} else {
    //search.filters.push( new MMSearchFilter( 'sales', 'eq', '0' ) );
    //search.filters.push( new MMSearchFilter( 'service', 'eq', '1' ) );
  //}
  search.count = max_results.value;
  search.distance_units = 'miles'; 
  search.max_distance = 50; 

  if(!paginationSet){
    selected_page = page.value;
  } else {
    selected_page = Number(paginationSet);
  }
  var start_index = Number( ( ( Number(selected_page) - 1 ) * Number(max_results.value) ) + 1 );
  search.start_index = start_index;
  
  //if (arguments.length == 0) {  // Default search
  
    search.point = mapviewer.getCurrentPosition();
    // Clear saved location information
    search_point = false;
    search_address = false;
  //} else {                      // coords passed in
    //search.address = new MMLocation(arguments[0]);
  //}
  
  loadingStatus(true, search_form);
  searcher.search( search );
}

function cleanUp() {
  // Clean up the HTML containers
  var pagLinks = document.getElementById('dealer_more_button');
  pagLinks.style.display = 'none';
  
  while (message.firstChild) {
    message.removeChild(message.firstChild);
  }
  var record_list_div = document.getElementById('recordListDiv');
  var clear = ['recordList', 'routeSteps'];
  for (var i=0; i<clear.length; i++) {
    var a = document.getElementById(clear[i]);
    while (a.firstChild) {
      a.removeChild(a.firstChild);
    }
  }
  mapviewer.removeAllOverlays();
  
  markers = new Array();
}

function showOnly() {
  // First argument is a string or array of sections to display
  // Second argument is a string of which element of the breadcrumb to display up to
  
  var what = false;
  var bc = false;
  if (arguments.length > 0) {
    what = arguments[0];
    if (typeof(what) == 'string') {
      what = [what];
    }
  }
  if (what) { // Check we have a valid section
    for (var i=0; i<what.length; i++) {
      if (!sections.inArray(what[i])) {
        return false;
      }
    }
  }
  // Do we have a 'display up to'?
  if (arguments.length > 1) {
    bc = arguments[1];
  }
  
  // Check if only message div is displayed & show at least the search breadcrumb (unless other supplied)
  if ((!bc && what.length == 1 && what[0] == 'messageDiv') || !what) bc = 'recordListDiv';
  
  // Display breadcrumb trail
  // Work out the latest section shown
  //$('breadcrumbDiv').style.display = 'none';
  var lastDiv = false;
  if (bc) {
    lastDiv = sections.indexOf(bc);
  } else {
    for (var i=0; i<what.length; i++) {
      // Ignore 'messageDiv'
      if (what[i] != 'messageDiv' && (!lastDiv || sections.indexOf(what[i]) > lastDiv)) lastDiv = sections.indexOf(what[i]);
    }
  }
  for (var i=0; i<sections.length; i++) {
    if ($(sections[i] + 'Link')) {
      if (i < lastDiv) {
        $(sections[i] + 'Link').addClassName('breadcrumbLinkActive');
        $(sections[i] + 'Link').removeClassName('breadcrumbLinkInactive');
        $(sections[i] + 'Link').removeClassName('breadcrumbLinkHidden');
        $('breadcrumbDiv').style.display = 'block';
      } else if (i== lastDiv) {
        $(sections[i] + 'Link').removeClassName('breadcrumbLinkActive');
        $(sections[i] + 'Link').addClassName('breadcrumbLinkInactive');
        $(sections[i] + 'Link').removeClassName('breadcrumbLinkHidden');
        $('breadcrumbDiv').style.display = 'block';
      } else {
        $(sections[i] + 'Link').removeClassName('breadcrumbLinkActive');
        $(sections[i] + 'Link').removeClassName('breadcrumbLinkInactive');
        $(sections[i] + 'Link').addClassName('breadcrumbLinkHidden');
        //$(sections[i] + 'Link').style.display = 'none';
      }
    }
  }
  
  var a;
  for (var i=0; i<sections.length; i++) {
    a = document.getElementById(sections[i]);
    if (!what || !what.inArray(sections[i])) {
      a.style.display = 'none';
    } else {
      a.style.display = 'block';
    }
  }
}

function resultsLoaded() {
  var container = document.getElementById('recordListDiv');
  // Results are now loaded, so re-enable form elements, and remove spinning icon:
  loadingStatus(false, search_form);
  
  // If an error code has been produced, display the explanation:
  if ( searcher.error_code ) {
    processSearchGeocodingErrors(searcher, 'search');
    return false;
  }
  
  var start_index_value = ( Number(max_results.value) * ( Number(selected_page) - 1 ) ) + 1;  
  var results_returned = 1;
  
  //var results_returned = true;
  //var start_index_value = 1;
  
  var sections_to_show = new Array();
  // Loop through each record set:
  var pagination = document.getElementById( 'paginationButtons' );
  pagination.innerHTML = '';
  for ( var count=0, l = searcher.record_sets.length; count < l; count++ ) {
    // If an error was returned for the record set, display details and return:
    if ( searcher.record_sets[count].error ) {
      var err =  '';
      if ( searcher.record_sets[count].error.error_explanation ) {
        err =  searcher.record_sets[count].error.error_explanation;
      } else {
        err =  translate_error_code(searcher.record_sets[count].error.error_code);
      }
      message.innerHTML = [message.innerHTML, err].join('<br />');
      showOnly(['searchDiv', 'messageDiv']);
      return;
    }
    // If not, check to see if individual records have been returned:
    var total = searcher.record_sets[count].totalRecordCount;
    if ( searcher.record_sets[count].records ) {
      var resultsCount = document.getElementById('dealer_results_summary_found');
      resultsCount.innerHTML = 'We have found <strong>'+total+'</strong> Dealerships in your chosen area.';
      searchLat = search.point.lat;
      searchLon = search.point.lon;
      var resultsLink = document.getElementById('dealer_results_summary_link');
      resultsLink.innerHTML = '<a href="search.htm?lat='+searchLat+'&lon='+searchLon+'">Click here to view the first five</a>';
      sections_to_show.push('searchDiv');
      sections_to_show.push('dealer_results_summary');
      addCustomizedMarker(total);
    } else {
      // No records have been returned. If a record count has been returned, display it,
      // otherwise display a message noting that no records were returned by the search:
      var el = document.getElementById('message');
      el.appendChild ( document.createTextNode( 'No results returned' ) );
      results_returned = false;
      sections_to_show.push('messageDiv');
    }
  }
  
  // Display the results
  showOnly(sections_to_show);
  
  if ( sections_to_show.inArray('recordListDiv') ) {
    mapviewer.goToPosition ( mapviewer.getAutoScaleLocation( markers ) );
  }
  
  return results_returned;
  
}

function translate_error_code(err_code) {
  var errors = {
    'MM_API_ERROR_DATA_SOURCE_NOT_PROVISIONED':               'The data source is not provisioned or set up yet.',
    'MM_API_ERROR_DATABASE_QUERY_FAILED':                     'The search request has failed.',
    'MM_API_ERROR_START_INDEX_GREATER_THAN_RESULT_SET_SIZE':  'The startIndex value passed in the request is greater than the total number of records returned in the result.',
    'MM_API_ERROR_UNSUPPORTED_SEARCH_TYPE':                   'An incorrect search parameter is being passed in the URL.',
    'MM_ERROR_SERVICE_NOT_PROVISIONED':                       'You not have access rights to this module of the Multimap API.',
    'MM_SEARCH_DIRECTION_REQUEST_FAILED':                     'Request has failed.',
    'MM_SEARCH_ERROR':                                        'Your search returned an error.',
    'MM_SEARCH_ERROR_UNSUPPORTED_SEARCH_TYPE':                'The submitted search parameters are not supported by the Multimap API web services.',
    'MM_SEARCH_START_INDEX_GREATER_THAN_RESULT_SET_SIZE':     'The search returned an error because the startIndex value passed in the request is greater than the total number of records returned in the result.',
    'MM_GEOCODE_NO_MATCHES':                                  'The address given cannot be geocoded.',
    'MM_ROUTE_ERROR_NO_ROUTE':                                'We could not generate navigation between the specified points.',
    'MM_ROUTE_ERROR_POINT_OUTSIDE_NETWORK':                   'One or more points are outside the coverage zone.',
    'MM_ROUTE_ERROR_SERVER_BUSY':                             'The request cannot be processed as the server is busy.',
    'MM_ROUTE_ERROR_START_END_POINTS_SAME':                   'The start and end points entered are the same, so a route cannot be generated.',
    'MM_SEARCH_MULTIPLE_MATCHES':                             'The search found multiple matches.',
    'MM_SEARCH_NO_MATCHES':                                   'Your search found no matches.',
    'MM_API_ERROR_REQUIRED_PARAMETERS_MISSING':               'A required parameter was missing from the request.'
  };
  if (typeof(errors[err_code]) != 'undefined') {
    return 'We\'re sorry, but there was a problem with the requested route. ' + errors[err_code];
  } else {
    return 'We\'re sorry, but there was a problem with the requested route.';
  }
}

function processSearchGeocodingErrors(type) {
  var err =  '';
  if ( searcher.error_explanation ) {
    err =  searcher.error_explanation;
  } else {
    err =  'Your request failed. Error code: ' + searcher.error_code;
  }
  if (searcher.error_code != 'MM_GEOCODE_MULTIPLE_MATCHES') {
    message.innerHTML = translate_error_code(searcher.error_code);
  } else {
    message.innerHTML = 'Multiple matches found for ' + search_qs.value + '.<br />Please select one from the list below.<br />';
    
    sel = generateAmbiguousSelect(searcher.result_set);
    sel.setAttribute('id', 'ambiguous_geocode_dropdown');
    ambigFuncRef = goToAmbiguousAddress;
    sel.onchange = ambigFuncRef;
    message.appendChild(sel);
    mapviewer.goToPosition(mapviewer.getAutoScaleLocation(searcher.result_set));
  }
  showOnly(['searchDiv', 'messageDiv']);
}

function generateAmbiguousSelect(results) {
  sel = document.createElement('select');
  
  var blank_opt = document.createElement('option');
  blank_opt.setAttribute('value', '');
  blank_opt.appendChild(document.createTextNode('Please select...'));
  sel.appendChild(blank_opt);
  
  //loop through the result set
  for (var count=0; count < results.length; count++) {
    var address = results[count].address;
    var opt = document.createElement('option');
    opt.setAttribute('value', count);
    optText = count+1 + '. ' + address.display_name;
    var optTextTooLong = (optText.length > 40);
    var optText = optText.substr(0, 40);
    if (optTextTooLong) optText += '...';
    opt.appendChild(document.createTextNode(optText));
    sel.appendChild(opt);
    createGoecodeMarker(results[count].coords, results[count].address.display_name, count+1);
  }
  return sel;
}

function goToAmbiguousAddress() {
  var sel = document.getElementById('ambiguous_geocode_dropdown');
  search_point = searcher.result_set[sel.value].coords;
  search_address = searcher.result_set[sel.value].address.display_name;
  search_qs.value = searcher.result_set[sel.value].address.display_name;
  initSearch(search_point);
}

function goToRouteAmbiguousAddress() {
  var sel = document.getElementById('ambiguous_geocode_dropdown');
  route_point = route.geocoding_errors[0].results[sel.value].coords;
  route_qs.value = route.geocoding_errors[0].results[sel.value].address.display_name;
  callRoute(route_point);
}

function handleRecord( record, num ) {
  // 3rd argument hides dealer details link in InfoBox
  
  var hideDetailLink = false;
  if (arguments.length > 2) hideDetailLink = arguments[2];
  
  if ( record.point ) {
    var marker = createMarker( record, num, hideDetailLink );
    markers.push(marker);
  }
  
  if (!hideDetailLink) {
    // Show the name in our records list. When the name is clicked, open
    //  our info box:
    var li = document.createElement ( 'li' );
    li.id = 'results_list_item_' + num;
    li.className = 'results_list_item';
    var divID = document.createElement ( 'div' );
    divID.className = 'dealer_number';
    divID.appendChild(document.createTextNode(num));
    var divBasics = document.createElement ( 'div' );
    divBasics.className = 'dealer_basics';
    var anchor = document.createElement ( 'a' );
    anchor.href = '#';
    anchor.className = 'dealer_name';
    anchor.appendChild(document.createTextNode(record.name));
    anchor.onclick = function () { openInfoBox ( 'click', marker ); return false; };
    var dash_text = document.createTextNode(' - ');
    var spanPhone = document.createElement('span');
    spanPhone.className = 'dealer_phonenumber';
    spanPhone.appendChild(document.createTextNode(record.phone));
    //var service = document.createElement('strong');
    //var service_text = document.createTextNode(record.services);
    //service.appendChild(service_text);
    var address = document.createElement ( 'p' );
    address.className = 'dealer_address';
    var address_text = '';
    if(record.street) address_text += record.street + ', ';
    if(record.address2) address_text += record.address2 + ', ';
    if(record.address3) address_text += record.address3 + ', ';
    if(record.town) address_text += record.town + ', ';
    if(record.pc) address_text += record.pc;
    var addressText = document.createTextNode(address_text);
    address.appendChild(addressText);
    var divLegend = document.createElement ( 'div' );
    divLegend.className = 'legend_list';
    if(record.sales == '1'){
        var imgLegend = document.createElement ( 'img' );
        imgLegend.alt = 'Sales';
        imgLegend.title = 'Sales';
        imgLegend.src = 'images/sales.gif';
        divLegend.appendChild(imgLegend);
    }
    if(record.service == '1'){
        var imgLegend = document.createElement ( 'img' );
        imgLegend.alt = 'Service';
        imgLegend.title = 'Service';
        imgLegend.src = 'images/service.gif';
        divLegend.appendChild(imgLegend);
    }
    var dealerLinks = document.createElement ( 'p' );
    dealerLinks.className = 'dealer_links';
    var legendLink = document.createElement ( 'a' );
    legendLink.className = 'legend_link';
    legendLink.href = '#';
    legendLink.appendChild(document.createTextNode('Legend'));
    dealerLinks.appendChild(legendLink);
    var line_text = document.createTextNode(' | ');
    dealerLinks.appendChild(line_text);
    var detailsLink = document.createElement ( 'a' );
    detailsLink.href = '#';
    detailsLink.className = 'dealer_more';
    detailsLink.appendChild(document.createTextNode('More Dealer details'));
    detailsLink.onclick = function () { zoomToDealer(record, num-1); return false; };
    dealerLinks.appendChild(detailsLink);
    divBasics.appendChild(anchor);
    divBasics.appendChild(dash_text);
    divBasics.appendChild(spanPhone);
    divBasics.appendChild(document.createElement('br'));
    divBasics.appendChild(address);
    divBasics.appendChild(divLegend);
    divBasics.appendChild(dealerLinks);
    li.appendChild(divID);
    li.appendChild(divBasics);
    //li.appendChild(service);
    //if (record.distance) {
      //var dist_text = document.createTextNode('(' + parseFloat(record.distance.miles).toFixed(2) + ' miles from here)');
      //li.appendChild(dist_text);
    //}
    return li;
  }
}

function zoomToDealer(record, rec) {
  // Optional 3rd argument is the ZL

  selected_dealer = rec;
  cleanUp();
  showOnly();
  
  var morePag = document.getElementById('pagePag').value - 1;
  morePag = rec - (morePag * max_results.value);
  record = searcher.record_sets[0].records[morePag];
  //markers = [];
  handleRecord(record, (rec+1), true);
  loc = record.point;
  if (arguments.length < 3) {
    mapviewer.goToPosition(loc, 17);
  } else {
    mapviewer.goToPosition(loc, arguments[2]);
  }
  openInfoBox( 'click', markers[0] );
  
  // Remove these lines once data is available...
  /*
  alert('Generating sales_text for testing');
  record.sales_text = 'Ponthir Road Service Station is a long established local business that has been associated with the sales of new and used vehicles for the last 60 years. This experience enables us to offer you the best possible deal and service on your new or used Daihatsu.';
  record.parts_text = 'We stock the full range of Daihatsu parts and our helpful, courteous and knowledgeable staff are always willing to help with all of your parts requirements.';
  record.service_text = 'Our new workshops are now open and your Daihatsu service is available while you wait or we will be pleased to offer you, free of charge, a courtesy car from our fleet.  Andrew Nassa and his team look forward to welcoming you and you are assured a first class service every time!';
  */
  // End of test data
  
    var ul = document.createElement ( 'ul' );
    var li = document.createElement ( 'li' );
    li.id = 'results_list_item_1';
    li.className = 'results_list_item';
    var divID = document.createElement ( 'div' );
    divID.className = 'dealer_number';
    divID.appendChild(document.createTextNode('1'));
    var divBasics = document.createElement ( 'div' );
    divBasics.className = 'dealer_basics';
    var anchor = document.createElement ( 'a' );
    anchor.href = '#';
    anchor.className = 'dealer_name';
    anchor.appendChild(document.createTextNode(record.name));
    anchor.onclick = function () { openInfoBox ( 'click', marker ); return false; };
    var dash_text = document.createTextNode(' - ');
    var spanPhone = document.createElement('span');
    spanPhone.className = 'dealer_phonenumber';
    spanPhone.appendChild(document.createTextNode(record.phone));
    //var service = document.createElement('strong');
    //var service_text = document.createTextNode(record.services);
    //service.appendChild(service_text);
    var address = document.createElement ( 'p' );
    address.className = 'dealer_address';
    var address_text = '';
    if(record.street) address_text += record.street + ', ';
    if(record.address2) address_text += record.address2 + ', ';
    if(record.address3) address_text += record.address3 + ', ';
    if(record.town) address_text += record.town + ', ';
    if(record.pc) address_text += record.pc;
    var addressText = document.createTextNode(address_text);
    address.appendChild(addressText);
    var divLegend = document.createElement ( 'div' );
    divLegend.className = 'legend_list';
    if(record.sales == '1'){
        var imgLegend = document.createElement ( 'img' );
        imgLegend.alt = 'Sales';
        imgLegend.title = 'Sales';
        imgLegend.src = 'images/sales.gif';
        divLegend.appendChild(imgLegend);
    }
    if(record.service == '1'){
        var imgLegend = document.createElement ( 'img' );
        imgLegend.alt = 'Service';
        imgLegend.title = 'Service';
        imgLegend.src = 'images/service.gif';
        divLegend.appendChild(imgLegend);
    }
    var dealerLinks = document.createElement ( 'p' );
    dealerLinks.className = 'dealer_links';
    var legendLink = document.createElement ( 'a' );
    legendLink.className = 'legend_link';
    legendLink.href = '#';
    legendLink.appendChild(document.createTextNode('Legend'));
    dealerLinks.appendChild(legendLink);
    if(record.usedcarsurl){
        var line_text = document.createTextNode(' Visit us at ');
        dealerLinks.appendChild(line_text);
        var detailsLink = document.createElement ( 'a' );
        detailsLink.href = record.usedcarsurl;
        detailsLink.className = 'website_link';
        detailsLink.appendChild(document.createTextNode(record.usedcarsurl));
        dealerLinks.appendChild(detailsLink);
    }
    divBasics.appendChild(anchor);
    divBasics.appendChild(dash_text);
    divBasics.appendChild(spanPhone);
    divBasics.appendChild(document.createElement('br'));
    divBasics.appendChild(address);
    divBasics.appendChild(divLegend);
    divBasics.appendChild(dealerLinks);
    li.appendChild(divID);
    li.appendChild(divBasics);
    ul.appendChild(li);
    
  var divIndepth = document.createElement ( 'div' );
  divIndepth.className = 'in_depth';
  var detailsText = '';
  var detailsSections = ['Sales', 'Parts', 'Service'];
  for (var i=0; i<detailsSections.length; i++) {
    var textToInsert = record[detailsSections[i].toLowerCase() + '_text'];
    if (textToInsert != '') {
      detailsText += '<h4>' + detailsSections[i] + '</h4><p>' + textToInsert + '</p>';
    }
  }
  divIndepth.innerHTML = detailsText;
  //document.getElementById('dealerInfo').innerHTML = ul;
  var detailsBox = document.getElementById( 'dealerInfo' );
  detailsBox.appendChild(ul);
  detailsBox.appendChild(divIndepth);
  showOnly('detailsDiv');
}

function displayGetDirectionsDiv() {
  requestDirections(selected_dealer);
}

function requestDirections(rec) {
  // Populate route from hidden parameter identifying dealer
  selected_dealer = rec;
  var toDiv = document.getElementById('toDiv');
  // Clear To info before re-populating
  while (toDiv.firstChild) {
    toDiv.removeChild(toDiv.firstChild);
  }
  var toDivLabel = document.createElement('label');
  toDivLabel.setAttribute('for', 'toDealerName');
  toDivLabel.appendChild(document.createTextNode('To: '));
  toDiv.appendChild(toDivLabel);
  toDealerName = document.createElement('div');
  toDealerName.setAttribute('id', 'toDealerName');
  toDealerName.appendChild(document.createTextNode(searcher.record_sets[0].records[rec].name))
  toDiv.appendChild(toDealerName);
  toDiv.appendChild(document.createElement('br'));
  route_qs.value = search_qs.value;
  if (search_point) route_point = search_point;
  // Display route request form
  showOnly(['getRouteDiv']);
  helper_direct_to_directions();
}

function callRoute() {
  var f_latlon;
  route_point = false;
  route_address = false;
  if (search_point && search_qs.value == route_qs.value) {
    f_latlon = search_point.toString().match(/-{0,1}[\d\.]+,-{0,1}[\d\.]+/);
  }
  var qs = route_qs.value;
  var t_lat = searcher.record_sets[0].records[selected_dealer].point.lat;
  var t_lon = searcher.record_sets[0].records[selected_dealer].point.lon;
  var dealer_name = searcher.record_sets[0].records[selected_dealer].name;
  var dir_href = 'directions.html';
  dir_href += '?to_latlon=' + t_lat + ',' + t_lon;
  dir_href += '&from_qs=' + escape(qs);
  if (f_latlon) dir_href += '&from_latlon=' + f_latlon;
  dir_href += '&dealer_name=' + escape(dealer_name);
  routeWindows = window.open( dir_href, 'routeWindow');
}

function breadcrumbClick(what) {
  if ($(what + 'DivLink').hasClassName('breadcrumbLinkInactive')) {
    return false;
  }
  cleanUp();
  showOnly();
  switch (what) {
    case 'search':
      showOverviewMap();
	  page.value = 1;
      break;
    case 'recordList':
      resultsLoaded();
      break;
    default:
  }
  showOnly(what + 'Div');
}


// code to add contect menu items
var contextMenuItems = ['search'];
function addContextMenuSupport() {
  // initSearch => remove route menu
  old_initSearch = initSearch;
  initSearch = function() {
    contextMenuItems = ['search'];
    var args = [];
    for (var i=0; i<arguments.length; i++) {
      args.push('arguments[' + i + ']');
    }
    var argStr = args.join(', ');
    return eval('old_initSearch(' + argStr + ');');
  };
  
  // Add eventHandler to marker clicks
  function openInfoBox() {
    result_id = arguments[1].getAttribute('result_id');
    if (typeof(result_id) != 'undefined') {
      selected_dealer = result_id;
      contextMenuItems = ['search', 'route'];
    } else {
    }
  }
  mapviewer.addEventHandler( 'click', openInfoBox );
  
  // Add eventHandler to add context menu items
  function addContextMenuItem( type, target, menu, pos, step ) {
    var menu_items = ['search', 'route'];
    var items = new Array();
    items['search'] = { label : 'Find dealers near here', onclick : function() { searchHere(pos); menu.remove(); }, className : 'MMaddmarker' };
    items['route'] = { label : 'Find directions from here', onclick : function() { routeFromHere(pos); menu.remove(); }, className : 'MMaddmarker' };
    var inert_items = new Array();
    inert_items['route'] = { label : 'Find directions from here', onclick : function() { alert('You need to find and click on a dealer marker first.'); }, className : 'MMaddmarkerDisabled' };
    var use_items = [];
    for (var i=0; i<menu_items.length; i++) {
      if (contextMenuItems.inArray(menu_items[i])) {
        use_items.push(items[menu_items[i]]);
      } else {
        use_items.push(inert_items[menu_items[i]]);
      }
    }
    menu.addItemsJSON( use_items );
  }
  mapviewer.removeEventHandler( 'contextMenu', addContextMenuItem );
  mapviewer.addEventHandler( 'contextMenu', addContextMenuItem );
    
  function searchHere(pos) {
    search_qs.value = 'Clicked location';
    search_point = pos;
    initSearch(pos);
  }
  
  function routeFromHere(pos) {
    if (typeof(selected_dealer) != 'undefined') {
      route_qs.value = 'Clicked location';
      route_point = pos;
      callRoute(pos);
    } else {
    }
  }
}

MMAttachEvent( window, 'load', onLoad );

// Helper functions...
Array.prototype.inArray = function (value) {
  // Returns true if the passed value is found in the
  // array.  Returns false if it is not.
  var i;
  for (i=0; i < this.length; i++) {
    // Matches identical (===), not just similar (==).
    if (this[i] === value) {
      return true;
    }
  }
  return false;
};

Array.prototype.indexOf = function (value) {
  // Returns true if the passed value is found in the
  // array.  Returns false if it is not.
  var i;
  for (i=0; i < this.length; i++) {
    // Matches identical (===), not just similar (==).
    if (this[i] === value) {
      return i;
    }
  }
  return false;
};

function helper_direct_to_directions() {
  // Triggered when clicking on the 'Get directions to this dealer' link.
  
  // You may want to add a popup msg or something here?
  
  // Automatically call the route for the original search location,
  // if visitor has not come to page using a dealer_id
  //if (route_qs.value != '') callRoute();
}
//]]> 
// -->
