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

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

var BCCommon = {
  showProgressBox: function() {
//    if (filterInProgress) {
    var box = ta.servlet.HACSearch.getFilterWaitOverlay().show();
    if (ta.remove('filter.map')) {
      box.setStyles({left:-9999, top:-9999});
      var sOuter = $('MVBL_MAP').getCoordinates();
      var sInner = box.getCoordinates();
      box.setStyles({
        left: sOuter.left + (sOuter.width - sInner.width) / 2,
        top:  sOuter.top + (sOuter.height - sInner.height) / 2
      });
    }
  },

  clearBCCookie: function() {
    var csv = Cookie.getRaw('TASession');

    if( csv ) {
      csv = csv.replace(/\*SEG\.\d+/, "");
      Cookie.setRaw('TASession', csv, {domain: cookieDomain, time:-1});
    }
  }
};

var BCAccommodation = {
  mapMorphed: function(idx, map) {
    var hideNav = $$('#LEFTNAV .toggle');
    var isNavHidden;
    if (hideNav && hideNav[0]) {
      isNavHidden = hideNav[0].hasClass('off');
    }

    var hideResultsCount = false;
    if (idx == 0) { // thumbnail
      var leaveDatesBlank = $('HAC_FORM').searchAll.checked;
      if (leaveDatesBlank) {
        $('HAC_SMRY').setStyle('display', 'none');
        $('HAC_HOTELS').setStyle('display', 'block');
        hideResultsCount = true;
      }
    }
    else if (idx == 1) {  // large map
      $('HAC_SMRY').setStyle('display', 'block');
      $('HAC_HOTELS').setStyle('display', 'none');
    }

    ta.maps.Sidebar.mapMorphed(idx, map);

    if (hideResultsCount && !ta.has('redesignEnabled'))
    {
      $('RESULT_COUNT').setStyle('display', 'none');
    }
    if (!isNavHidden) {  // hac always hides the nav
      hideNav[0].removeClass('off');
    }
  },

  onAjaxLoad: function() {
    var narrowForm = $('HAC_FORM_NARROW');
    var leaveDatesBlank = narrowForm.searchAll.checked;
    var largeMapVisible = $('LARGE_MAP').getStyle('display') == 'block';

    if (leaveDatesBlank && !largeMapVisible) {
      // show narrow form
      $('HAC_SMRY').setStyle('display', 'none');
      $('HAC_HOTELS').setStyle('display', 'block');
    }
    else {
      // wide form
      $('HAC_SMRY').setStyle('display', 'block');
      $('HAC_HOTELS').setStyle('display', 'none');
      BCAccommodation.showResultCount();
    }

    if (!leaveDatesBlank && !largeMapVisible) {
      BCAccommodation.showResultCount();
    }
    else {
      BCAccommodation.hideResultCount();
    }
  },

  hideResultCount: function() {
    if (!ta.has('redesignEnabled')) {
      var resultCount = $('RESULT_COUNT'); 
      if (resultCount) {
        resultCount.setStyle('display', 'none');
      }
    }
  },

  showResultCount: function() {
    if (!ta.has('redesignEnabled')) {
      var resultCount = $('RESULT_COUNT');
      if (resultCount) {
        resultCount.setStyle('display', 'block');
      }
    }
  },

  toggleDetails: function(id, bExpand) {
    toggleAccommodationDetails(id, bExpand);
    if (bExpand) {
      new Ajax('/ActionRecord?action=BusinessCenter-ShowDetails').request();
    }
  }
};

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

  mapMorphed: function(idx, map) {
    if (idx == 0) { // thumbnail
      $('EATERY_FILTER_CONTROLS_WIDE').setStyle('display', 'none');
      $('EATERY_FILTER_CONTROLS').setStyle('display', 'block');
    }
    else if (idx == 1) {  // large map
      $('EATERY_FILTER_CONTROLS_WIDE').setStyle('display', 'block');
      $('EATERY_FILTER_CONTROLS').setStyle('display', 'none');
    }

    ta.maps.Sidebar.mapMorphed(idx, map);
  },

  _resultsUpdated: function (txt, xml) {
    // preserve current display state of narrow form
    var narrowFormDisplay = $('EATERY_FILTER_CONTROLS').getStyle('display');
    $("EATERY_OVERVIEW_BOX").innerHTML = txt;
    window.behavior.apply($('EATERY_OVERVIEW_BOX'));
    $('EATERY_FILTER_CONTROLS').setStyle('display', narrowFormDisplay);

    var mapDiv = $('REST_MAP');
    if (mapDiv) {
      mapDiv.map.replaceMarkers(REST_MAP_MARKERS, 'restaurant', {pid: 1360, titlePID: 1360});
    }

    // update filters on wide form
    $("REST_FILTER_FORM_WIDE").innerHTML = $("REST_FILTER_FORM").innerHTML;;
    $("PRICE_FORM_WIDE").innerHTML = $("PRICE_FORM").innerHTML;

    ta.servlet.HACSearch.getFilterWaitOverlay().hide();
  },

  _updateList: function (sortOrder, action) {
    var filterForm;
    var priceForm;
    if ($('EATERY_FILTER_CONTROLS').getStyle('display') == 'block') {
      filterForm = $("REST_FILTER_FORM");
      priceForm = $("PRICE_FORM");
    }
    else {
      filterForm = $("REST_FILTER_FORM_WIDE");
      priceForm = $("PRICE_FORM_WIDE");
    }

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

    var url = window.location.protocol+'//'+window.location.host+'/BCACSearch';
    ops = {
      ajax: 1,
      geo: modelGeoId,
      t: 3
    };

    if (action) ops.Action = action;
    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;

    BCCommon.showProgressBox();

    new Ajax(url, {
      method: 'get',
      data: ops,
      evalScripts: true,
      onComplete: BCEatery._resultsUpdated,
      onFailure: function(t) {
        ta.servlet.HACSearch.getFilterWaitOverlay().hide();
      }
    }).request();
  },

  updateListByFilterChange: function(elmt)
  {
    BCEatery._updateList(null, BCEatery.ACTION_FILTERCHANGED);
  },

  sortChanged: function() {
    var fld = $('SORT_FORM').sortOrder;
    var sort = fld.value;
    BCEatery._updateList(sort);
  },

  pager: function(elmt, e) {
    new Event(e).preventDefault();
    filterSequenceID++;
    var data = null;
    if (ta.has('maps.map') && ta.retrieve('maps.moved')) {
      var map = ta.retrieve('maps.map');
      data = {
        mc: map.mapCenter().toUrlValue(),
        mz: map.getZoom()
      };
    }
    window.scrollTo(0,0);
    BCCommon.showProgressBox();
//    ta.servlet.HACSearch.getFilterWaitOverlay().show();

    new Ajax(elmt.href.replace(/#EATERY_LIST_CONTENTS/,'') + '?ajax=1&sequence=' + filterSequenceID, {
      'data': data,
      evalScripts: true,
      onComplete: BCEatery._resultsUpdated,
      onFailure: function(t) {
        ta.servlet.HACSearch.getFilterWaitOverlay().hide();
      }
    }).request();
  },

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

  bookingChanged: function(elmt) {
    var checked = elmt.checked;
    var fld = $('SORT_FORM').sortOrder;
    var sortOrder = BCEatery._newBookingSortValue(checked,fld.value);
    BCEatery._updateList(sortOrder, BCEatery.ACTION_FILTERCHANGED);
  }
};



var BCAttraction = {
  mapMorphed: function(idx, map) {
    if (idx == 0) { // thumbnail
      $('ATTRACTION_FILTER_WIDE').setStyle('display', 'none');
      $('ATTRACTION_FILTER').setStyle('display', 'block');
    }
    else if (idx == 1) {  // large map
      $('ATTRACTION_FILTER_WIDE').setStyle('display', 'block');
      $('ATTRACTION_FILTER').setStyle('display', 'none');
    }

    ta.maps.Sidebar.mapMorphed(idx, map);
  },

  _resultsUpdated: function (txt, xml) {
    var narrowFormDisplay = $('ATTRACTION_FILTER').getStyle('display');
    $("ATTRACTION_OVERVIEW_BOX").innerHTML = txt;
    window.behavior.apply($("ATTRACTION_OVERVIEW_BOX"));
    $('ATTRACTION_FILTER').setStyle('display', narrowFormDisplay);

//    var mapDiv = $('REST_MAP');
//    if (mapDiv) {
//      mapDiv.map.replaceMarkers(REST_MAP_MARKERS, 'restaurant', {pid: 1360, titlePID: 1360});
//    }

    $("ATTRACTION_FILTER_ALL_WIDE").innerHTML = $("ATTRACTION_FILTER_ALL").innerHTML;;

    ta.servlet.HACSearch.getFilterWaitOverlay().hide();
  },

  _updateList: function (url) {
    // todo: filtering

    var sortOrder = $('SORT_FORM').sortOrder.value;

    if (!url) url = window.location.protocol+'//'+window.location.host+'/BCACSearch';
    ops = {
      ajax: 1,
      geo: modelGeoId,
      t: 2
    };

    if (sortOrder) ops.sortOrder = sortOrder;

//    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;

    BCCommon.showProgressBox();

    new Ajax(url, {
      method: 'get',
      data: ops,
      evalScripts: true,
      onComplete: BCAttraction._resultsUpdated,
      onFailure: function(t) {
        ta.servlet.HACSearch.getFilterWaitOverlay().hide();
      }
    }).request();
  },

  updateListByFilterClick: function(elmt)
  {
    window.flyout.hide();
    BCCommon.showProgressBox();
    var url = elmt.href.replace(/#TtD/,'') + '?ajax=1';
    new Ajax(url, {
      evalScripts: true,
      onComplete: BCAttraction._resultsUpdated,
      onFailure: function(t) {
        ta.servlet.HACSearch.getFilterWaitOverlay().hide();
      }
    }).request();
  },

  sortChanged: function() {
    BCAttraction._updateList(null);
  },

  pager: function(elmt, e) {
    new Event(e).preventDefault();
    filterSequenceID++;
    var data = null;
    if (ta.has('maps.map') && ta.retrieve('maps.moved')) {
      var map = ta.retrieve('maps.map');
      data = {
        mc: map.mapCenter().toUrlValue(),
        mz: map.getZoom()
      };
    }
    window.scrollTo(0,0);
    BCCommon.showProgressBox();

    new Ajax(elmt.href.replace(/#ATTRACTION_OVERVIEW/,'') + '?ajax=1&sequence=' + filterSequenceID, {
      'data': data,
      evalScripts: true,
      onComplete: BCAttraction._resultsUpdated,
      onFailure: function(t) {
        ta.servlet.HACSearch.getFilterWaitOverlay().hide();
      }
    }).request();
  }
};


linkMap['js_EateryPager'] = BCEatery.pager;
linkMap['js_AttractionPager'] = BCAttraction.pager;


