/* Cufon Text */

var map = null;
var slider = null;
var search = {};
var domain = '';
var searchLock = false;
var currentHash = '';
var markerPath = '/static/maps/icons/';
var overlayPath = null;

var mapResultTemplate = '<div id="map-result-${id}" class="map-results-item">' +
                        '{{if onMap(this)}}<div class="map-marker"><img src="${markerPath}marker${marker}.png" alt="Marker ${marker}" /></div>{{else}}<div class="no_map_icon">{{/if}}' +
                        '<div class="map-content"><h4 class="map-title"><a {{if onMap(this)}}class="map-local-link" href="#"{{else}}href="/${friendly_uri}"{{/if}}>${company}</a></h4>' +
                        '<p class="map-address">${street_address} ${suburb} ${state}</p>' +
                        '{{if has_phone}}<p class="map-phone" ><a class="ph-${id}" href="">View Phone Number</a></p>{{/if}}</div>{{if local}}{{else}}</div>{{/if}}' +
                        '</div>';

var mapResultsTemplate = '{{each search.listings}}' +
                        mapResultTemplate +
                        '{{/each}}';


var popupTemplate = '<div id="business-card-${id}" class="business-card business-card-${type}"><div class="business-card-close"><a href="#">close</a></div>' +
                      '<div class="business-card-header"><h4 class="business-card-title"><a href="/${friendly_uri}">${company}</a></h4></div>' +
                      '{{if logo}}<div class="business-card-logo"><a href="/${friendly_uri}/"><img src="${logo}" alt="${company} logo" /></a></div>' +
                      '{{else}}<div class="business-card-logo-empty"></div>{{/if}}' +
                      '<div class="business-card-content">' +
                      '{{if tagline}}<div class="business-card-desc">${tagline}</div>{{/if}}' +
                      '<div class="business-card-address"><a href="/${friendly_uri}"><p class="business-card-address">${street_address} ${suburb} ${state}</p></a></div>' +
                     '{{if has_phone}}<p class="business-card-phone"><a class="ph-${id}" href="">View Phone Number</a></p>{{/if}}' +
                      '<div class="business-card-full"><a href="/${friendly_uri}">View Details</a></div>' +
                      '</div></div>';
function onMap(address) {
  if (search.mapFailures) {
    if ($.inArray(address.id, search.mapFailures)) {
      return false;
    }
  }

  return true;
}

function clearResultFocus() {
  $('.map-results-item').removeClass('map-results-item-focus');
  $('.map-marker img').each(function() {
    var src = $(this).attr('src');

    if (overlayPath == null) {
      var src = src.replace(/\_over\.png/, '.png');
    } else {
      var src = src.replace(overlayPath, markerPath);
    }

    $(this).attr('src', src);
  });
}

function setResultFocus(markerId) {
  clearResultFocus();
  var selector = '#map-result-' + markerId;
  $(selector).addClass('map-results-item-focus');
  var img = $(selector).find('.map-marker img');
  var src = img.attr('src');

  if (overlayPath == null) {
    src = src.replace(/\.png/, '_over.png');
  } else {
    src = src.replace(markerPath, overlayPath);
  }

  img.attr('src', src);
}

function panToMarker(id) {
  if (map) {
    map.panToMarker(id, true);
    map.map.setZoom(10);
  }
}


function title(word) {
  return word.substr(0, 1).toUpperCase() + word.substr(1);
}

function toggleLoading() {
  if (searchLock) {
    searchLock = false;
    $('.loading-results').hide();
    var style = {'z-index': '0',
                 'opacity': '1.0'};
    $('#resultsetcontainer').css(style);
    $('#co-listings').css(style);
    $('.searching-container').css(style);
    $(':input[class*=predictive_category]').trigger('autocomplete-enable');
  } else {
    searchLock = true;
    // FIXME: remove the business cards. this should be moved to maps -> use events
    $('.business-card').hide().remove();
    $('.results_error').html('').hide();

    $('.nav-button').removeClass('nav-button-over');
    $('ul.navigation-drop').removeClass('navigation-drop-over');
    $('.navigation-drop-sub').removeClass('navigation-drop-sub-over');

    $(':input[class*=predictive_category]').trigger('autocomplete-disable');
    $('.loading-results').show();
    style = {'z-index': '999',
             'opacity': '0.5'};
    $('#resultsetcontainer').css(style);
    $('#co-listings').css(style);
    $('.searching-container').css(style);
  }
}

function emptyResults() {
    $('#resultset').html('');
    $('.results_error').html('');
    $('.results_title').html('');
    $('.results_number').html('');
    $('.navigation-list').html('');
    $('#pagination').html('').hide();
    $('#cookie_trail').html('<a class="crumb_home" href="/">Home</a>');
    $('#cookie_trail').show();
    $('.map-container').hide();
    $('.search-button, .pc-submit').removeAttr('disabled');
}

function mapSearch(radius, lat, lng) {
  toggleLoading();

  var request = omg.search.requestWithParams(search,
                                              {'lat': lat,
                                              'lon': lng,
                                              'geodist': radius});

  delete request.params.page;
  document.location.hash = request.toHash();
  request.params.output = 'html';

  $.ajax({
      url: request.url,
      data: request.params,
      dataType: 'json',
      success: function(data) {
                populateResults(data);
                toggleLoading();
              },
      error: function(XMLHttpRequest, textStatus, errorThrown) {
                emptyResults();
                toggleLoading();
      }
  });
}


function rebuildMap() {
  var addresses = search.listings.slice();
  if (map) {
    map.addresses = [];
    addresses.reverse();
    for (var i in addresses) {
        var address = new omg.maps.Address();
        var a = $.extend(true, {}, search.listings[i]);
        address.set('company', a.company);
        address.set('local', a.local);
        address.set('has_phone', a.has_phone);
        address.set('friendly_uri', a.friendly_uri);
        address.set('id', a.id);
        address.set('logo', a.logo);
        address.set('street_address', a.street_address);
        address.set('suburb', a.suburb);
        address.set('id', a.id);
        address.set('city', a.city);
        address.set('state', a.state);
        address.set('tagline', a.tagline);
        address.set('postcode', a.postcode);
        address.set('latitude', a.latitude);
        address.set('longitude', a.longitude);
        address.set('marker', a.marker);
        address.set('position', a.position);
        map.addresses.push(address);
    }
    map.rebuild();

    if (search.lat && search.lng) {
      var latlng = new google.maps.LatLng(search.lat, search.lng);

      if (search.radius) {
        radius = search.radius;
      } else {
        radius = 4000;
      }

      map.setWidgetCoordinates(latlng);
      map.distanceWidget.set('distance', radius / 1000);

      $('#postcode-slider').slider('enable');
    } else {
      position = map.getWidgetPosition();
      if (position) {
        search.lat = position.lat();
        search.lng = position.lng();
        $('#postcode-slider').slider('enable');
      } else {
        $('#postcode-slider').slider('disable');
        $('.slider-bg').hide();
      }
    }

    $('.postcode-results').empty();

    if (search.listings.length > 0) {
      // $.tmpl(mapResultsTemplate, search).appendTo('.postcode-results');
    } else {
      $('.postcode-results').html('<p>No results found</p>');
    }

    mapLink();
    $('.map-results-item .map-title, .map-results-item .map-address').textOverflow();

  }

  buildSlider();

}

function mapLink() {
  $('.map-results-item .map-title a.map-local-link').live('click', function(e) {
    var result = $(this);
    var parent = result.parents('.map-results-item');
    if (parent.attr('id')) {
      var markerId = parent.attr('id').replace(/map\-result\-/, '');
      map.panToMarker(markerId, true);
    }
    return false;
  });
}

function populateTiles(directory_path, listing_ids) {
  if (listing_ids) {

    var url = '/';

    if (directory_path) {
      url = directory_path;
    }

    var params = {'nmc': tiles_nmc};

    if (listing_ids.length > 0) {
      if ($.isArray(listing_ids)) {
        listing_ids = listing_ids.join(',');
      }
      params.listing_ids = listing_ids;
    }

    $.get(url, params, function(data) {
      $('.ad-tiles.category').replaceWith(data);
    });
  }
}


function calculateSlider(radius) {
  radius = parseInt(radius);
  sliderValue = 0;

  if (radius <= 10000) {
    sliderValue = 10 * radius / 2000;
  } else {
    sliderValue = 40 + radius / 1000;
  }
  return sliderValue;
}


function setSlider(radius) {
  if (slider) {
    sliderValue = calculateSlider(radius);
    $('#postcode-slider').slider('value', sliderValue);
  }
}

function populateResults(data) {
  if (typeof data != 'undefined') {
    $('#resultset').html(data.html);
    document.title = data.pageTitle;

    $('body').trigger('search-change');

    search.results_count = data.results_count;
    search.listings = data.listings;

    if (data.lon && data.lat) {
      search.lng = data.lon;
      search.lat = data.lat;
    } else {
      search.lng = null;
      search.lat = null;
    }

    if (data.geodist) {
      search.radius = data.geodist;
      setSlider(search.radius);
    } else {
      search.radius = null;
    }

    search.path = data.path;
    search.directory_path = data.directory_path;
    search.query = data.query;
    search.location = data.location;

    rebuildStaticMap();
    rebuildMap();
    populateTiles(data.directory_path, data.tile_listing_ids);

    $('.results_title').html(data.pageTitle);
    $('.results_number').html(data.results_count);

    if (data.paginationInner) {
      $('#pagination').html(data.paginationInner).show();
    } else {
      $('#pagination').html('').hide();
    }

    if (data.filterList) {
      $('.filters-wrapper').html(data.filterList);
    } else {
      $('.filters-wrapper').html('').hide();
    }

    $('.filter-container').html(data.filter);

    $('#cookie_trail').html(data.breadcrumbInner).show();
    $('.search-button, .pc-submit').removeAttr('disabled');

    if (typeof search.query.text_57 != 'undefined') {
      $('input[name=text_57]').val(search.query.text_57);
    }

    if (typeof search.query.text_47 != 'undefined') {
      $('input[name=text_47]').val(search.query.text_47);
    }

    // we have to rebuild the fancybox on search changed
    $('.business-email a').fancybox({type: 'iframe', width: 640, height: 530});

    $('.listing_item').each(function() {
      var id = $(this).data('id');
      zenit.track({event: 'business:search:impression', subject: id});
    });

    zenit.track({event: 'business:search:query', data: {count: search.results_count}});
  }
}


function rebuildStaticMap() {
  var zoom = '8';
  var center = 'Australia';

  if (typeof search.location != 'undefined' && search.location != '') {
      var center = search.location + ', Australia';
      zoom = '12';
  }

  var url = 'http://maps.google.com/maps/api/staticmap?center=' + center + '&zoom=' + zoom + '&size=300x250&maptype=roadmap&sensor=false';

  var count = 0;

  if (search.listings.length > 0) {
    for (var idx in search.listings) {
      var listing = search.listings[idx];
      if (listing.latitude && listing.longitude) {
        count++;
        var letter = String.fromCharCode('A'.charCodeAt(0) + count);
        url += '&markers=color:0xEEEEEE|label:' + letter + '|'
                + listing.latitude + ',' + listing.longitude;
      }
    }
  }

  $('#static_map_image').attr('src', url);
}

function failedPlot(addressId) {
 var address = null;

  $.each(search.listings, function(index, value) {
      if (value.id == addressId) {
        address = value;
      }
  });

  $('#map-result-' + addressId).replaceWith($.tmpl(mapResultTemplate, address));
}

function buildMap(markerId) {
  map = new omg.maps.Map();
  //map.adjustToWidget = true;
  map.mapId = 'map-canvas';
  map.failedPlotCallback = failedPlot;

  if (typeof results_color != 'undefined') {
    if (results_color == 'black') {
      map.overlayPath = '/static/campfire/layouts/results/red/images/';
      overlayPath = '/static/campfire/layouts/results/red/images/';
    }
  }

  map.create();

  var addresses = search.listings.slice();
  addresses.reverse();
  for (var i in addresses) {
      var address = new omg.maps.Address();
      var a = $.extend(true, {}, search.listings[i]);
      address.set('company', a.company);
      address.set('has_phone', a.has_phone);
      address.set('friendly_uri', a.friendly_uri);
      address.set('id', a.id);
      address.set('logo', a.logo);
      address.set('street_address', a.street_address);
      address.set('suburb', a.suburb);
      address.set('id', a.id);
      address.set('city', a.city);
      address.set('state', a.state);
      address.set('tagline', a.tagline);
      address.set('postcode', a.postcode);
      address.set('latitude', a.latitude);
      address.set('longitude', a.longitude);
      address.set('marker', a.marker);
      address.set('position', a.position);
      address.set('local', a.local);

      if ((address.latitude && address.latitude != '0') && (address.longitude && address.longitude != '0')) {
        map.addCoordinates(address);
      } else {
        map.addAddress(address);
      }
  }

  $('.custom-map').click(function() {
    map.addClickDistanceWidget(function() {});
  });

  if (search.lat && search.lng) {
    var latlng = new google.maps.LatLng(search.lat, search.lng);

    if (search.radius) {
      radius = search.radius;
    } else {
      radius = 4000;
    }

    map.setWidgetCoordinates(latlng);
    map.distanceWidget.set('distance', radius / 1000);

    $('#postcode-slider').slider('enable');
  } else {
    position = map.getWidgetPosition();
    if (position) {
      search.lat = position.lat();
      search.lng = position.lng();
      $('#postcode-slider').slider('enable');
    } else {
      $('#postcode-slider').slider('disable');
      $('.slider-bg').hide();
    }
  }

  $('.postcode-results').empty();

  search.missing = map.failures;

  if (search.listings.length > 0) {
    // $.tmpl(mapResultsTemplate, search).appendTo('.postcode-results');
  } else {
    $('.postcode-results').html('<p>No results found</p>');
  }

  mapLink();

  if (typeof markerId != 'undefined') {
    $('html, body').animate({scrollTop: 0}, 500);
    $('.map-container').show('slide', {'direction': 'up'}, 1000);
    $('#toggle-map').find('.nav-title').html('Hide Map');
    $('.map-results-item .map-title, .map-results-item .map-address').textOverflow();

    window.setTimeout(function() {
      map.panToMarker(markerId, true);
    }, 2000);

  }

  buildSlider();

   $('#map-canvas').show();
}

/* swap the sponsored listings */
function swap_cpc_listings(elem) {
    if (typeof(swap_cpc) != 'undefined') {
        if (swap_cpc == 1) {
            var adhtml = $('#' + elem + ' #ad-list').html();
            if (adhtml != null) {
                $('#end_of_paid_listings').html('<div id="ad-list">' + adhtml + '</div>').show();
                $('#' + elem + ' #ad-list #listing-1').hide();
                $('#' + elem + ' #ad-list #listing-2').hide();
                $('#' + elem + ' #ad-list #listing-3').hide();
                $('#end_of_paid_listings #listing-4').hide();
                $('#end_of_paid_listings #listing-5').hide();
                //$('#sidebar #ad-list').html('');
            }
        }
    }
}

function pageSearch(e) {

  // in the case of that the search is undefined
  // just let the form submit normally
  if (typeof search == 'undefined' || typeof search.directory_path == 'undefined') {
    return true;
  }

  e.preventDefault();

  toggleLoading();

  $('.search-button, .pc-submit').attr('disabled', 'disabled');

  // We need to know which search was clicked ...
  var clicked_button = jQuery(e.target);

  // And we'll get each of the form elements ...
  var current_form = clicked_button.parent('form');
  var current_text_47 = current_form.find('#text_47');
  var current_text_57 = current_form.find('#text_57');

  // Now we'll take the search terms from the form fields ...
  var request = new omg.search.searchRequest(search,
                                            {text_47: current_text_47.val(),
                                             text_57: current_text_57.val()});

  if (!request) {
    return true;
  }

  var nmc = $('#nmc').html();
  if (nmc) {
      nmc = '&nmc=' + nmc.toString();
  } else {
      nmc = '';
  }

  window.location.hash = request.toHash();

  request.params.output = 'html';

  $.ajax({
      url: request.url,
      data: request.params,
      dataType: 'json',
      success: function(data) {
                populateResults(data);
                toggleLoading();

              },
      error: function(XMLHttpRequest, textStatus, errorThrown) {
                emptyResults();
                toggleLoading();
      }
  });

  return false;
}


function hashSearch() {
  if (window.location.hash.length == 0) {
    var request = omg.search.requestFromUrl(window.location.toString());
  } else {
    var request = omg.search.requestFromHash();
  }

  if (request.params.text_47) {
    $('#text_47').val(request.params.text_47);
  }

  if (request.params.text_57) {
      $('#text_57').val(request.params.text_57);
  }

  request.params.output = 'html';

  toggleLoading();
  $('.search-button, .pc-submit').attr('disabled', 'disabled');
   $.ajax({
      url: request.url,
      data: request.params,
      dataType: 'json',
      success: function(data) {
                populateResults(data);
                toggleLoading();
              },
      error: function(XMLHttpRequest, textStatus, errorThrown) {
                emptyResults();
                toggleLoading();
      }
  });

 }

function getCoordinates(e) {
  var posx = 0;
  var posy = 0;
  if (!e) var e = window.event;

  if (e.pageX || e.pageY) {
    posx = e.pageX;
    posy = e.pageY;
  } else if (e.clientX || e.clientY) {
    posx = e.clientX + document.body.scrollLeft +
           document.documentElement.scrollLeft;
    posy = e.clientY + document.body.scrollTop +
          document.documentElement.scrollTop;
  }

  return {x: posx,
         y: posy};
}

function buildSlider() {
  if (search.lat && search.lng) {
    // we need to know when the slider exists and doesn't
    // assign it to a global
    var sliderValue = 20;

    if (search.radius) {
      sliderValue = calculateSlider(search.radius);
    }


    if (!slider) {
      slider = $('#postcode-slider').slider({
        value: sliderValue,
        min: 10,
        max: 100,
        step: 10,
        change: function(event, ui) {
          if (!searchLock) {
            if (map.distanceWidget) {
              var latlng = map.getWidgetPosition();
              search.lat = latlng.lat();
              search.lng = latlng.lng();
            }
            mapSearch(map.getWidgetRadius(),
                      search.lat,
                      search.lng);
          }
        },
        slide: function(event, ui) {
            var distance = parseInt(ui.value);

            if (distance < 50) {
                distance = distance / 5;
            } else {
                distance = 10 + (distance - 50);
            }

            try {
              map.distanceWidget.set('distance', distance);
            } catch (e) { }
            var current = (parseInt(ui.value) / 10);
            $('#postcode-slider-legend li').removeClass('slider-enabled')
                                      .filter(':nth-child(' + current + ')')
                                      .addClass('slider-enabled');
        }
      });

      if (sliderValue) {
        $('#postcode-slider-legend li').filter(':nth-child(' + sliderValue / 10 + ')')
                                    .addClass('slider-enabled');
      }
    } else {
      setSlider(search.radius);
    }

    $('.map-container').addClass('browse-by-map-slider');
    $('.postcode-search-box').show();
  } else {
    $('.postcode-search-box').hide();
    $('.map-container').removeClass('browse-by-map-slider');
  }
}


$(document).ready(function() {

  $('.bl').each(function() {
    var id = $(this).data('id');
    zenit.track({event: 'business:search:impression', subject: id});
  });

  if (typeof search != "undefined") {
    zenit.track({event: 'business:search:query', data: {count: search.results_count}});
  }

  // Need to put some events on the filter menus...
  $('.nav-drop-item a').live('click', function(e) {
    e.preventDefault();
    var link = $(this);
    toggleLoading();

    var request = omg.search.requestFromUrl(link.attr('href'));

    if (link.hasClass('keyword') || link.hasClass('category')) {
      $('input[name=text_47]').val(link.find('span').text());
    } else if (link.hasClass('location')) {
      $('input[name=text_57]').val(link.find('span').text());
      request.params.orderby = 'distance';
    }

    delete request.params.page;
    window.location.hash = request.toHash();
    request.params.output = 'html';

    $.ajax({
          url: request.url,
          data: request.params,
          dataType: 'json',
          success: function(data) {
                    populateResults(data);
                    toggleLoading();
                  },
          error: function(XMLHttpRequest, textStatus, errorThrown) {
                    emptyResults();
                    toggleLoading();
          }
      });

    return false;
  });


  $('.mega-drop-item a').live('click', function(e) {
    e.preventDefault();
    var link = $(this);
    toggleLoading();

    var request = omg.search.requestFromUrl(link.attr('href'));

    if (link.hasClass('keyword') || link.hasClass('category')) {
      $('input[name=text_47]').val(link.find('span').text());
    } else if (link.hasClass('location')) {
      $('input[name=text_57]').val(link.find('span').text());
      request.params.orderby = 'distance';
    }

    delete request.params.page;
    window.location.hash = request.toHash();
    request.params.output = 'html';

    $.ajax({
          url: request.url,
          data: request.params,
          dataType: 'json',
          success: function(data) {
                    populateResults(data);
                    toggleLoading();
                  },
          error: function(XMLHttpRequest, textStatus, errorThrown) {
                    emptyResults();
                    toggleLoading();
          }
      });

    return false;
  });

  $('.biz-website').live('click', function(e) {
     var url = $(this).data('image');
     var id = $(this).data('id');

     if ($('#' + id + '-website-tracker').length == 0) {
      $('<img id="' + id + '-website-tracker" class="website-tracker" width="0" height="0" src="' + url + '" />').appendTo('body');
    }
  });

  // we have a custom popup for the maps
  omg.maps.Map.prototype.attachClickEvent = function(marker, address) {
    me = this;
    google.maps.event.addListener(marker, 'click', function(event) {
    $('.business-card').hide().remove();
      me.markerRemoveAllFocus();

      // var overlay = $.tmpl(popupTemplate, address);
      // overlay.appendTo('body');
      overlay = new omg.maps.TemplateOverlay(me.map,
                                             $.tmpl(popupTemplate, address).get(0));
      me.offsetCenter(marker.position, 0, -80);
      markerId = marker.get('identity');
      setResultFocus(markerId);
      me.focusMarker(marker);
      return false;
    });
  }

  $('.business-card-close a').live('click', function() {
    $(this).parents('.business-card').hide().remove();
    map.markerRemoveAllFocus();
    clearResultFocus();
    return false;
  });

   $('h4.search-field-title').click(function() {
       var search_field_list = $(this).parent().children()[1];
       if ($(search_field_list).hasClass('hide')) {
           $(search_field_list).removeClass('hide');
       }
       else {
           $(search_field_list).addClass('hide');
       }
   });

   $('.show_hide a').live('click', function() {
       $('.nonpaid').toggle('fast');
       $('.show_hide').hide();
   });

   //show image previews
   $('.stat_icon.photos').live('mouseenter mouseleave', function(event) {
       if (event.type == 'mouseenter') {
         $('.image_preview', $(this).parents('.col_body_inner')).show(50);
       } else {
         var previewContainer = $('.image_preview', $(this).parents('.col_body_inner'));
         var timeoutPreview = null;

         previewContainer.bind('mouseenter mouseleave', function(evt) {
            if (evt.type == 'mouseenter') {
              if (timeoutPreview) {
                clearTimeout(timeoutPreview);
                timeoutPreview = null;
              }
            } else {
              var timeoutPreview = window.setTimeout(function() {
                  previewContainer.hide(50); }, 400);
            }
        });
       }
   });

  $('.static_map_wrapper a').fancybox({width: 640, height: 480, onComplete: function() {buildMap(); }});

  $('#pagination a').live('click', function(e) {
      e.preventDefault();
      toggleLoading();
      $('html, body').animate({scrollTop: 0}, 500);

      var link = $(this);
      var request = omg.search.requestFromUrl(link.attr('href'));
      window.location.hash = request.toHash();
      request.params.output = 'html';

      $.ajax({
            url: request.url,
            data: request.params,
            dataType: 'json',
            success: function(data) {
                      populateResults(data);
                      toggleLoading();
                    },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                      emptyResults();
                      toggleLoading();
            }
        });
      return false;
  });

  $('a.filter-item-remove').live('click', function(e) {
     e.preventDefault();
      toggleLoading();
      $('html, body').animate({scrollTop: 0}, 500);

      var link = $(this);
      var request = omg.search.requestFromUrl(link.attr('href'));
      window.location.hash = request.toHash();
      request.params.output = 'html';

      $.ajax({
            url: request.url,
            data: request.params,
            dataType: 'json',
            success: function(data) {
                      populateResults(data);
                      toggleLoading();
                    },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                      emptyResults();
                      toggleLoading();
            }
        });
      return false;
  });

   // $('.map-results-item').live('mouseover mouseout', function() {
   //   move = 'panToMarker(' + $(this).attr("id").replace(/map\-result\-/, "") + ')';
   //   setTimeout(move, 2000);
   // }, function() {
   //   move = 'panToMarker(' + $(this).attr("id").replace(/map\-result\-/, "") + ')';
   //   clearTimeout(move);
   // });
   //

    function wrapKeywords() {
        $('.keywords-mega').each(function() {
          var span = $(this);
          span.wrap($('<a rel="nofollow" class="keywords" href="' + span.data('url') + '"/>'));
        });
    }
    wrapKeywords();

    $('body').bind('search-change', function() {
        setTimeout(wrapKeywords, 300);
    });

  $('.col_map_link').live('click', function() {
      var id = $(this).attr('id');
      markerId = id.replace('col-map-', '');

       if (!map) {
        buildMap(markerId);
      } else {
        $('html, body').animate({scrollTop: 0}, 500);

        if ($('.map-container').is(':visible') == false) {
          $('.map-container').show('slide', {'direction': 'up'}, 1000);
          $('#toggle-map').find('.nav-title').html('Hide Map');
          $('.map-results-item .map-title, .map-results-item .map-address').textOverflow();
        }

        map.panToMarker(markerId, true);
      }

      return false;
  });

  $('.listing_item.premium .txt_company, .listing_item.premium .info_icon.txt_address, .special_offer .coupon-title').textOverflow();

  $('.business-email a').fancybox({type: 'iframe', width: 640, height: 530});

  $('.special-offers a').live('click', function() {
    var id = $(this).data('id');
    $('#' + id + '-coupons').slideToggle();
    return false;
  });

  $('.showphone a').live('click', function() {
      var container = $(this).parent();
      var id = $(this).data('id');
      var hash = $(this).data('hash');
      var call = $(this).data('enable');

      if (call == "1") {
        $(container).fancybox({type: 'iframe', width: 640, height: 300, href: '/static/secure_omg/click_to_call.php?id=' + id});
      }

      var add_loc = $('#additional_location_' + id).text();
      var add_uri = '&hash=' + hash;
      if (add_loc > 0) {
          add_uri = '&additional_loc_id=' + add_loc;
      }

      $.getJSON('http://' + location.hostname + '/static/secure_omg/businesslisting_details.php?data_type=phone&id=' + id + add_uri,
        function(data) {
          if (typeof data != 'undefined') {
            if (data.phone != '') {
              $(container).html(data.phone);
            }

            $(container).trigger('click.fb');

            if (data.tracking != '') {
              var tracking = $('<img border="0" width="0" height="0" src="' + data.tracking + '" />');
              tracking.appendTo('body');
            }
        }
        });
      return false;
  });

  $('.business-card-phone a, .map-phone a').live('click', function() {
    var container = $(this).parent();
    container.html('Loading...');
    var listing_id = $(this).attr('class').substring(3, $(this).attr('class').length);
    var add_loc = $('#additional_location_' + listing_id).text();
    var add_uri = '';
    if (add_loc > 0) {
        add_uri = '&additional_loc_id=' + add_loc;
    }

    if (phone_hashes && typeof phone_hashes[listing_id] !== 'undefined') {
        add_uri += '&hash=' + phone_hashes[listing_id];
    }

    $.getJSON('http://' + location.hostname + '/static/secure_omg/businesslisting_details.php?data_type=phone&id=' + listing_id + add_uri,
      function(data) {
        if (typeof data != 'undefined') {
          if (data.phone != '') {
            $(container).html(data.phone);
          }
          if (data.tracking != '') {
            var tracking = $('<img border="0" width="0" height="0" src="' + data.tracking + '" />');
            tracking.appendTo('body');
          }
      }
      });
    return false;
  });

  $('form[name=form_search]').live('submit', pageSearch);

  // Get all the search buttons on the page ..
  $('.search-button, .pc-submit').live('click', pageSearch);

  $(window).hashchange(function() {
    if (!searchLock) {
      var hash = location.hash;
      if (hash != currentHash) {
        hashSearch();
        currentHash = hash;
      }
    }
  });

  if (window.location.hash.length > 0) {
    $(window).hashchange();
  }

 $('.nav-button').live('mouseover mouseout', function(e) {
   var button = $(this);
   if (e.type == 'mouseover') {
     button.addClass('nav-button-over');
     button.siblings('ul').addClass('navigation-drop-over');
   } else {
     button.removeClass('nav-button-over');
     button.siblings('ul').removeClass('navigation-drop-over');
   }
 });

 $('ul.navigation-drop').live('mouseover mouseout', function(e) {
    if (e.type == 'mouseover') {
      $(this).addClass('navigation-drop-over');
      $(this).siblings('.nav-button').addClass('nav-button-over');
    } else {
      $(this).removeClass('navigation-drop-over');
      $(this).siblings('.nav-button').removeClass('nav-button-over');
      $('.navigation-drop-sub').removeClass('navigation-drop-over');
    }
 });

 $('.nav-drop-item').live('mouseover mouseout', function(e) {
   if (e.type == 'mouseover') {
    if ($(this).find('.navigation-drop-sub').length > 0) {
      $('.navigation-drop-sub').removeClass('navigation-drop-sub-over');
      $(this).parents('ul.navigation-drop').addClass('navigation-drop-over');
      $(this).parents('ul.navigation-drop').siblings('.nav-button').addClass('nav-button-over');
      $(this).find('.navigation-drop-sub').addClass('navigation-drop-sub-over');
    }
  } else {
    if ($(this).find('.navigation-drop-sub').length > 0) {
      $('.navigation-drop-sub').removeClass('navigation-drop-sub-over');
      $(this).parents('ul.navigation-drop').removeClass('navigation-drop-over');
      $(this).parents('ul.navigation-drop').siblings('.nav-button').removeClass('nav-button-over');
    }
  }
 });

 $('.navigation-drop-sub').live('mouseover mouseout', function(e) {
    if (e.type == 'mouseover') {
      $(this).addClass('navigation-drop-sub-over');
    } else {
      $(this).removeClass('navigation-drop-sub-over');
    }
 });

});



