/*
 This is just a temp. test file before putting it somewhere real...

 Greg Belote [gbelote@tripadvisor.com]
 03sep08
*/

// these correspond to the constants in tr/com/TripResearch/servlet/eatery/EateryOverviewServlet.java  If you change either, change the other
var ACTION_MAPCHANGED="MAP";
var ACTION_FILTERCHANGED="FILTER";

var updateList = function (offset, sortOrder, action) {
  // We need to 'pack' the price range into bits so we can pass to the URL
  var priceRange = 0;
  var checkboxes = $("PRICE_FORM").priceRange;
  for (i = 0; i < checkboxes.length; i++)
  {
      if (checkboxes[i].checked)
      {
          priceRange |= 1 << i;
      }
  }
  var filterForm = $("REST_FILTER_FORM");
  var cuisine = filterForm.cuisine[filterForm.cuisine.selectedIndex].value;
  var recFor = filterForm.recommendedFor[filterForm.recommendedFor.selectedIndex].value;

  var url = window.location.protocol+'//'+window.location.host+'/RestaurantSearch';

  ops = {
    ajax: 1,
    geo: modelGeoId
  };
  
  var typeInput = filterForm.type;
  if (typeInput) {
    url = window.location.protocol+'//'+window.location.host+'/BusinessCenter';
    ops.t = typeInput.value;
  }

  if (action) ops.Action = action;
  if (offset) ops.o = 'a' + offset;
  if (sortOrder) ops.sortOrder = sortOrder;
  if (cuisine > 0) ops.cat = cuisine;
  if (recFor > 0) ops.src = recFor;
  // Note that the price range filter uses the "p" short name parameter
  // in the URL, so we need to set the "pid" query parameter to our
  // packed price range value
  if (priceRange > 0) ops.pid = priceRange;
  
  var mapDiv = $('REST_MAP');
  if (mapDiv && mapDiv.moved) {
    var center = mapDiv.map.mapCenter();
    ops.mc = center.lat() + "," + center.lng();
    ops.mz = mapDiv.map.getZoom();
  }
  ops.mcr = RESET_MAP_POSITION.lat + "," + RESET_MAP_POSITION.lng;
  ops.mzr = RESET_MAP_POSITION.zoom;

  // clear results
  $("EATERY_LIST_CONTENTS").innerHTML = "";
  
  new Ajax(url, {
    method: 'get',
    data: ops,
    evalScripts: true,
    onComplete: function (txt, xml) {
      $("EATERY_OVERVIEW_BOX").innerHTML = txt;
      window.behavior.apply($("EATERY_OVERVIEW_BOX"));
      var mapDiv = $('REST_MAP');
      if (mapDiv) {
        mapDiv.map.replaceMarkers(REST_MAP_MARKERS, 'restaurant', {pid: 1360, titlePID: 1360});
      }
    }
  }).request();
};

var eateryUpdateListByFilterChange = function(offset, sortOrder)
{
	updateList(offset, sortOrder, ACTION_FILTERCHANGED);
};

var pageList = function(e) {
  e = new Event(e || window.event).stop();
  var a = $(e.target);
  if (!a.getTag() == 'a') a = a.getParent('a');
  var offset = 0;
  if (a.href.match(/\-oa(\d+)/)) offset = RegExp.$1;
  if(offset > 0) {
      window.location.href=location.href + '#EATERY_OVERVIEW_BOX';
  }
  updateList(offset);
};

var sortList = function(e) {
  updateList(null, this.options[this.selectedIndex].value);
};

rules['#EATERY_LIST_CONTENTS .js_pageLinks a'] = function(elmt) {
  elmt.addEvent('click', pageList);
};

rules['#sortOrder'] = function(elmt) {
  elmt.onchange = null;
  elmt.addEvent('change', sortList.bindAsEventListener(elmt));
};

rules['#REST_MAP_RECENTER'] = function(elmt) {
  elmt.addEvent('click', function() {
    $('REST_MAP').map.reset();
  });
};

var assetDeferFM2 = function(e) {
  var evnt = new Event(e || window.event).stop();
  var src = $(evnt.target);
  fmOnShow(src, true);
  assetDeferFM();
  fmOnShow(src);
};

rules['#EATERY_SEARCH_RESULTS'] = function(elmt) {
  var lnks = elmt.getElements('div.floatMap a');
  if (typeof fmThumb != "undefined") {
    var mapDiv = $(mapDivId);
    if (!mapDiv.map) { // haven't built floatable map yet
      fmThumb.addtl = new Array();
      fmThumb.addtl.push(lnks.addEvent('click', fmThumb.myDeferFn));
    }
    else {
      lnks.each(function(l) {fmThumb.fwin.addSource(l);});
    }
  }
  else {
    mapDivId = "mapFMDiv";
    fmThumb = $('REST_FM');
    fmThumb.myDeferFn = assetDeferFM2;
    fmThumb.delay = true;
    fmThumb.addtl = [lnks.addEvent('click', fmThumb.myDeferFn)];
    fmThumb.onShow = fmOnShow;
  }
};

window.addEvent('load', function() {
  if ($('REST_MAP')) {
    (function(){
      // show the loading overlay
      $('REST_MAP').getElement('.loading').show();
      // convert static map into google map
      new Asset.javascript(mapsJs);
      var gLoadUrl = 'http://maps.google.com/maps?file=api&v=2.118&key=' + gKey + '&c&async=2&callback=initNearbyMap2';
      new Asset.javascript(gLoadUrl);
      window.addListener('beforeunload', function(){
        window.addListener('unload', GUnload);
      });  
    }).delay(100);
  }
});

var initNearbyMap2 = function() {
  var mapDiv = $('REST_MAP');
  var ops = window[mapDiv.id];
  if (GBrowserIsCompatible() && ops) {
    mapDiv.empty();
    mapDiv.map = new TAMap(mapDiv, {
      origLat: ops.lat,
      origLng: ops.lng,
      zoom: ops.zoom,
      smallMap: true,
      typeControl: false,
      //scaleControl: false,
      homeIcon: false
    })
    .addEvent('onMove', mapMoved)
    .addEvent('onZoom', mapZoomed)
    .addEvent('onReset', mapReset)
    .addEvent('homePinOnly', function() {$('REST_ZOOM_ERR').show()})
    .addEvent('allPins', function() {$('REST_ZOOM_ERR').hide();});
    mapDiv.map.origOps = ops;
    mapDiv.map.options.origLat = RESET_MAP_POSITION.lat;
    mapDiv.map.options.origLng = RESET_MAP_POSITION.lng;
    mapDiv.map.options.zoom = RESET_MAP_POSITION.zoom;
    mapDiv.map.addIcon('restaurant', {
      iconPath: '/img2/maps/icons/restaurantNUM/',
      numbered: true
    });
    mapDiv.map.addMarkers(REST_MAP_MARKERS, 'restaurant', {pid: 1360, titlePID: 1360});
  }
};

var mapMoved = function(zoomChanged) {
  if (zoomChanged || this.gmap2.getZoom() < 10) return; // zoom handled separately; zoomed out too far
  $('REST_MAP_RECENTER').show();
  $('REST_MAP').moved = true;
  updateList(null, null, ACTION_MAPCHANGED);
};

var mapZoomed = function(oldZoom, newZoom) {
  $('REST_MAP_RECENTER').show();
  $('REST_MAP').moved = true;
  if (newZoom < 10) return; // zoomed out too far
  updateList(null, null, ACTION_MAPCHANGED);
};

var mapReset = function() {
  $('REST_MAP_RECENTER').hide();
  $('REST_MAP').moved = false;
  updateList(null, null, ACTION_MAPCHANGED);
};

var fmOnShow = function(src, locOnly) {
  if (typeof(src) == "undefined") src = $(new Event(window.event).target);
  if (src.id.match(/restmap(\d+)/)) {
    var num = RegExp.$1;
    var x = -1;
    for (i = 0; i < REST_MAP_MARKERS.length && x < 0; i++) {
      if (REST_MAP_MARKERS[i].num == num) x = i;
    }
    if (x < 0) return;
    var mapDiv = $(mapDivId);
    if (locOnly) { // before map is initialized
      window[mapDivId].locId = REST_MAP_MARKERS[x].locId;
      window[mapDivId].lat = REST_MAP_MARKERS[x].lat;
      window[mapDivId].lng = REST_MAP_MARKERS[x].lng;
      return;
    }
    mapDiv.map.origOps.locId = REST_MAP_MARKERS[x].locId;
    mapDiv.map.setHome(REST_MAP_MARKERS[x]);
    mapDiv.recenter.setContent(REST_MAP_MARKERS[x].customHover.title);
  }
};

var _newBookingSortValue = function(checked, val) {
  var tmp = val;
  tmp = tmp.replace(/be_/,"");
  if (checked) {
    tmp = "be_" + tmp;
  }
  return tmp;
};

var bookingChanged = function() {
  var sortForm = $('SORT_FORM');
  var checked = $('BOOKING_FORM').sortGroup.checked;

  var sortOrder = null;
  var options = sortForm.getElements('option'); // may be empty if drop down not used
  for(var i = 0; i < options.length; i++) {
    var opt = options[i];
    if (opt.selected) {
      sortOrder = _newBookingSortValue(checked,opt.value);
      break;
    }
  }
  updateList(null,sortOrder,ACTION_FILTERCHANGED);
};

var bookingChanged_Rev1 = function() {
  var fld = $('SORT_FORM').sortOrder;
  var checked = $('BOOKING_FORM') && $('BOOKING_FORM').sortGroup.checked;
  var sortOrder = _newBookingSortValue(checked,fld.value);
  updateList(null,sortOrder,ACTION_FILTERCHANGED);
};
