
var totalSelectedToCompare = 0;
var disableAllFilterCallBack = false;
var ID_GLOBAL_RESULT_CONTAINER = 'globalResultsContainer';
var lastKeyHrmUsed;
var ID_GLOBAL_MAP_CONTAINER = 'globalMapContainer';
var ID_MAP_RESULT_CONTAINER = 'mapResultsContainer';
var ID_MAP_POI_CONTAINER = 'mapPoiContainer';
var ID_MAP_TEXT_OPEN = 'idTextOpenMap';
var ID_MAP_TEXT_CLOSE = 'idTextCloseMap';
var MAP_MANAGER_SINGLE_HOTEL_CACHE = [];
var globalHotelMap = null;
var globalHotelMapIsVisible = false;
var globalOpeningClosingMap = false;


function startResultsHotelAction()
{
  new Effect.Opacity(ID_GLOBAL_RESULT_CONTAINER, {duration:0.3, from:1.0, to:0.3});
}
function endResultsHotelAction()
{
  new Effect.Opacity(ID_GLOBAL_RESULT_CONTAINER, {duration:0.5, from:0.3, to:1.0});
  Tooltip.init();
  if (globalHotelMap != null){
    loadHotelsOnMap();    
  }
}

function sortResultsHotel(keyHrm, sort) {
  startResultsHotelAction();
  var sortTypeDir = sort.split('|');
  var options = {
    onComplete:endResultsHotelAction,
    asynchronous:true,
    parameters: PARAM['KEYRM'] + '=' + keyHrm + '&' + PARAM['SORTTYPE'] + '=' + sortTypeDir[0] +
      '&' + PARAM['SORTDIR'] + '=' + sortTypeDir[1] + '&' + PARAM['JSESSION_ID'] + '=' + CURRENT_JSESSIONID
  };
  lastKeyHrmUsed = keyHrm;
  new Ajax.Updater( ID_HOTEL_RESULTS_CONTAINER, URL_HOTEL__SORT, options);
}

function goToPageResultsHotel(keyHrm, page) {
  startResultsHotelAction();
  var options = {
    onComplete:endResultsHotelAction,
    asynchronous:true,
    parameters: PARAM['KEYRM'] + '=' + keyHrm + '&' + PARAM['PAGE'] + '=' + page
     + '&' + PARAM['JSESSION_ID'] + '=' + CURRENT_JSESSIONID
  };
  lastKeyHrmUsed = keyHrm;
  new Ajax.Updater( ID_HOTEL_RESULTS_CONTAINER, URL_HOTEL__CHANGE_PAGE, options);  
}

function changePageSize(keyHrm, pageSize) {
  startResultsHotelAction();
  var options = {
    onComplete:endResultsHotelAction,
    asynchronous:true,
    parameters: PARAM['KEYHRM'] + '=' + keyHrm + '&' + PARAM['PAGE_SIZE'] + '=' + pageSize
    + '&' + PARAM['JSESSION_ID'] + '=' + CURRENT_JSESSIONID
  };
  lastKeyHrmUsed = keyHrm;
  new Ajax.Updater( ID_HOTEL_RESULTS_CONTAINER, URL_HOTEL__CHANGE_PAGE_SIZE, options);  
}

function filterResultsHotel(keyHrm, withKey1, withValue1, withKey2, withValue2) {
  if(disableAllFilterCallBack)
    return;
  totalSelectedToCompare = 0;
  startResultsHotelAction();
  var options = {
    onComplete:endResultsHotelAction,
    asynchronous:true,
    parameters: PARAM['KEYHRM'] + '=' + keyHrm + '&' + withKey1 + '=' + withValue1 + 
      (withKey2 != null ? '&' + withKey2 + '=' + withValue2 : '') + '&' + PARAM['JSESSION_ID'] + '=' + CURRENT_JSESSIONID
  };
  lastKeyHrmUsed = keyHrm;
  new Ajax.Updater( ID_HOTEL_RESULTS_CONTAINER, URL_HOTEL__FILTER, options);  
}

function filterResultsHotelByStarRating(keyHrm, fromStars, toStars) {
  filterResultsHotel(keyHrm, PARAM['FROM_STAR_RATING'], fromStars, PARAM['TO_STAR_RATING'], toStars );
}

function filterResultsHotelByUserRating(keyHrm, fromUserRating, toUserRating) {
  filterResultsHotel(keyHrm, PARAM['FROM_USER_RATING'], fromUserRating, PARAM['TO_USER_RATING'], toUserRating );
}

function filterResultsHotelByPrice(keyHrm, fromPrice, toPrice) {
  filterResultsHotel(keyHrm, PARAM['FROM_PRICE'], fromPrice, PARAM['TO_PRICE'], toPrice );
}

function filterResultsHotelByDistance(keyHrm, fromDistance, toDistance) {
  filterResultsHotel(keyHrm, PARAM['FROM_DISTANCE'], fromDistance, PARAM['TO_DISTANCE'], toDistance );
}
function filterResultsHotelByCityCityZoneOrPoi(keyHrm, selectedValue) {
  if( selectedValue.indexOf(';') > 0 )
    filterResultsHotelByPoi(keyHrm, selectedValue.split(';')[0], selectedValue.split(';')[1]);
  else
    filterResultsHotel(keyHrm, PARAM['BY_CITY_CITYZONE'], selectedValue);
}
function filterResultsHotelByCityCityZone(keyHrm, cityCityZone) {
  filterResultsHotel(keyHrm, PARAM['BY_CITY_CITYZONE'], cityCityZone);
}

function filterResultsHotelByHotelName(keyHrm, hotelName) {
  filterResultsHotel(keyHrm, PARAM['BY_HOTEL_NAME'], hotelName);
}

function filterResultsHotelSeTypeAgent(keyHrm, paymentTypeInHotel) {
  filterResultsHotel(keyHrm, PARAM['BY_SE_TYPE_AGENT'], paymentTypeInHotel);
}

function filterResultsHotelSeTypeMerchant(keyHrm, paymentTypeOnline) {
  filterResultsHotel(keyHrm, PARAM['BY_SE_TYPE_MERCHANT'], paymentTypeOnline);
}

function filterResultsHotelWithAccessForDisabled(keyHrm, withAccessForDisabled) {
  filterResultsHotel(keyHrm, PARAM['WITH_ACCESS_FOR_DISABLED'], withAccessForDisabled);
}
function filterResultsHotelWithFitnessCenter(keyHrm, withFitnessCenter) {
  filterResultsHotel(keyHrm, PARAM['WITH_FITNESS_CENTER'], withFitnessCenter);
}
function filterResultsHotelWithInternetServices(keyHrm, withInternetServices) {
  filterResultsHotel(keyHrm, PARAM['WITH_INTERNET_SERVICES'], withInternetServices);
}
function filterResultsHotelWithRestaurant(keyHrm, withRestaurant) {
  filterResultsHotel(keyHrm, PARAM['WITH_RESTAURANT'], withRestaurant);
}
function filterResultsHotelWithParking(keyHrm, withParking) {
  filterResultsHotel(keyHrm, PARAM['WITH_PARKING'], withParking);
}
function filterResultsHotelWithSwimmingPool(keyHrm, withSwimmingPool) {
  filterResultsHotel(keyHrm, PARAM['WITH_SWIMMING_POOL'], withSwimmingPool);
}
function filterResultsHotelWithPetsAccepted(keyHrm, withPetsAccepted) {
  filterResultsHotel(keyHrm, PARAM['WITH_PETS_ACCEPTED'], withPetsAccepted);
}function filterResultsHotelWithAirConditioned(keyHrm, withAirConditioned) {
  filterResultsHotel(keyHrm, PARAM['WITH_AIR_CONDITIONED'], withAirConditioned);
}

function filterResultsHotelByPoi(keyHrm, idPoiType, idPoi) {
  //GLog.write('Sono in filterResultsHotelByPoi, idPoiType=' + idPoiType + '/idPoi=' + idPoi);
  if( idPoiType==null || idPoiType == '' )
    return;
  if( idPoi!=null )
  {
    uncheckAndClearPoiOnMap(null);
    loadPoiOnMap(globalHotelMap, keyHrm, idPoiType, idPoi, false);
    filterResultsHotel(keyHrm, PARAM['ID_POI'], idPoi );
    if( !globalHotelMapIsVisible )
      showGlobalHotelMap();
  }
}

function selectToCompare(keyHrm, idWhr)
{
  var options = {
    onSuccess:function(t){
      if( t.responseText == '1' )
      {
        $('whr_'+idWhr+'_title').addClassName('selectedToCompare');
        totalSelectedToCompare++;
      }
      else
      {
        $('whr_'+idWhr+'_title').removeClassName('selectedToCompare');
        totalSelectedToCompare--;
      }
    },
    asynchronous:true,
    parameters: PARAM['KEYRM'] + '=' + keyHrm + '&' + PARAM['ID_WHR'] + '=' + idWhr
  };
  new Ajax.Request(URL_HOTEL__SELECT_TO_COMPARE, options);
}
    
function checkCompare()
{
  if( totalSelectedToCompare < CONST['MIN_SELECTED_TO_COMPARE'])
  {
    alert(MESSAGES['message.selecthoteltocompare']);
    return false;
  }
  return true;
}
      
function printDistance(distance)
{
  if(distance<1000)
    return '' + distance + '&nbsp;' + MESSAGES['label.meters'];
  else
    return '' + distance/1000 + '&nbsp;' + MESSAGES['label.kilometers'];
}
      
/*-----------------------------------------------------------
Toggles element's display value
Input: any number of element id's
Output: none 
---------------------------------------------------------*/
function toggleDisp() {
  for (var i=0;i<arguments.length;i++){
    var d = $(arguments[i]);
    if (d.style.display == 'none')
      d.style.display = 'block';
    else
      d.style.display = 'none';
  }
}

function closeTab(idPrefix, suffix, currentNumTab, numTabs)
{
  var idTabContent = idPrefix + suffix + 'Content' + currentNumTab;
  //var idTabClose   = idPrefix + suffix + 'Close' + currentNumTab;
  var idTabs       = idPrefix + suffix + 'Tabs';
  Effect.toggle( idTabContent ,'blind',{duration:0.5});
  //$(idTabClose).style.visibility = 'hidden';
  for (var i=1; i<=numTabs; i++)
  {
    var tabHeader = $(idPrefix + suffix + 'Header' + i);
    if(tabHeader!=null)
      tabHeader.removeClassName('active');
  }  
  $(idTabs).removeClassName('tabsOpen');
}
function toggleTab(idPrefix, suffix, currentNumTab, numTabs, closeIfOpen) 
{
  closeIfOpen = closeIfOpen == null ? true : closeIfOpen;
  var idTabHeader  = idPrefix + suffix + 'Header' + currentNumTab;
  var idTabContent = idPrefix + suffix + 'Content' + currentNumTab;
  //var idTabClose   = idPrefix + suffix + 'Close' + currentNumTab;
  var idTabs       = idPrefix + suffix + 'Tabs';
  
  if ($(idTabContent).style.display == 'none')
  {
    var somethingOpen = false;
    for (var i=1; i<=numTabs; i++)
    {
      var tabHeader = $(idPrefix + suffix + 'Header' + i);
      if(!tabHeader)
        continue;
      tabHeader.removeClassName('active');
      var tabContent = $(idPrefix + suffix + 'Content' + i);
      if(tabContent.style.display != 'none')
      {
        //Effect.toggle(idTabContent,'blind',{duration:0.5, queue:{scope:'menus', limit: 3}});
        toggleDisp(idPrefix + suffix + 'Content' + i);
        //$(idPrefix + suffix + 'Close' + i).style.visibility = 'hidden';
        somethingOpen = true;
      }
    }    
    if(tabHeader)
      tabHeader.blur();
    var tabContent = $(idTabContent);
    //tabContent.style.marginTop = '2px';
    if (!somethingOpen)
    {
      Effect.toggle(idTabContent,'appear',{duration:0.8});
    }
    else
    {
      toggleDisp(idTabContent);
    }
    //$(idTabClose).style.visibility = 'visible';
    $(idTabHeader).addClassName('active');
    $(idTabs).addClassName('tabsOpen');    
  }
  else if(closeIfOpen)
  {
    Effect.toggle(idTabContent,'blind',{duration:0.5});
    $(idTabHeader).removeClassName('active');
    $(idTabs).removeClassName('tabsOpen');    
  }
}
function showHotelMap(jsIdWhr, idWhr, keyHrm, latitude, longitude)
{
  var mapContainer = $(jsIdWhr + '_map');
  if (mapContainer.style.display == 'none')
  {
    mapContainer.style.display = 'block';
    window.setTimeout('showHotelMap(\'' +  jsIdWhr +  '\', ' + idWhr + ',' + keyHrm +', \'' + latitude + '\', \'' + longitude + '\');', 250);
    return;
  }
  var hotelMap = MAP_MANAGER_SINGLE_HOTEL_CACHE[jsIdWhr + '_map'];
  if( hotelMap == null )
  {
    hotelMap = new MapManager(jsIdWhr + '_map');
    MAP_MANAGER_SINGLE_HOTEL_CACHE[jsIdWhr + '_map'] = hotelMap;
  }  
  hotelMap.setJsonMarkerContentUrl(URL_HOTEL_MAP_MARKER_CONTENT);
  hotelMap.setJsonMarkerContentUrlParams(PARAM['KEYRM'] + '=' + keyHrm + '&' + PARAM['ID_WHR'] + '=');  
  hotelMap.setMarkerIconBaseUrl(STOREFRONT_CONTEXT + 'images/markerIcons/');
  hotelMap.show(latitude, longitude);
  loadSingleHotelOnMap(hotelMap, keyHrm, idWhr );
}

function showHotelImageGallery(jsIdWhr, idWhr, keyHrm)
{
  var idImageGalleryContainer = jsIdWhr + '_slideShowGalleryContainer';
  var spinnerContainerObj = $(idImageGalleryContainer).firstDescendant();
  if( spinnerContainerObj!=null && $(spinnerContainerObj).hasClassName('spinnerContainer') )
  {
    var options = {
      //onComplete:getCurrentImageGallery,
      asynchronous:true,
      parameters: PARAM['KEYRM'] + '=' + keyHrm + '&' + PARAM['ID_WHR'] + '=' + idWhr
    };
    new Ajax.Updater( idImageGalleryContainer, URL_HOTEL_IMAGE_GALLERY_CONTENT, options);  
  }
}

function showHotelCancellationPolicies(jsIdWhr, idWhr, idPo, keyHrm)
{
  var idCancellationPoliciesContainer = jsIdWhr + '_cancellationPoliciesContainer';
  var spinnerContainerObj = $(idCancellationPoliciesContainer).firstDescendant();
  if( spinnerContainerObj!=null && $(spinnerContainerObj).hasClassName('spinnerContainer') )
  {
    var options = {
      //onComplete:getCurrentImageGallery,
      asynchronous:true,
      parameters: PARAM['KEYHRM'] + '=' + keyHrm + '&' + PARAM['ID_WHR'] + '=' + idWhr + '&' + PARAM['ID_PO'] + '=' + idPo
    };
    new Ajax.Updater( idCancellationPoliciesContainer, URL_HOTEL_POLICIES, options);  
  }
}

function changeCreditCardLogo(logo, basePath)
{
  $('idImgCreditCardLogo').src = basePath + 'icon_credit_card_' + ( logo != '' ? logo.toLowerCase() : 'nothing') + '.gif';
}

function bookingWorkFlow(execSubmit, idBtn) 
{
  Modalbox.show(MESSAGES['message.waiting_for_operation'], {title: MESSAGES['message.waiting'], width: 600, height: 100, overlayOpacity: .25}); 
  Modalbox.deactivate(); 
  setTimeout(function(){
    if(execSubmit)
      $(idBtn).submit();
    else
      eval('$(\'' + idBtn + '\').href');
  }, 1500); 
  return false;  
}

function manageBookingHotelDetails(idTitleToBold, idBodyToShow, idTitleToNormal, idBodyToHide)
{
  if( $(idBodyToShow).style.display == 'none' )
  {
    Effect.BlindUp(idBodyToHide, { duration: 0.5});
    Effect.BlindDown(idBodyToShow, { duration: 0.5, queue: 'end'}); 
    $(idTitleToBold).toggleClassName("active");
    $(idTitleToNormal).toggleClassName("active");
  }
}

function showGalleryFromThumbnail(resulJsId, resultId, keyHrm) 
{
  toggleTab(resulJsId, 'Main',1,2, false);
  toggleTab(resulJsId, 'Sub',3,5, false); 
  showHotelImageGallery(resulJsId, resultId, keyHrm);
}

/* Map management */

function initGlobalHotelMap(keyHrm)
{
  globalHotelMap = new MapManager(ID_MAP_RESULT_CONTAINER);
  globalHotelMap.removeGMapTypeControl();
  globalHotelMap.getMap().addControl(new CloseGlobalHotelMapControl());
  globalHotelMap.getMap().addControl(new GMapTypeControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(40,10)));
  globalHotelMap.setJsonMarkerContentUrl(URL_HOTEL_MAP_MARKER_CONTENT);
  globalHotelMap.setJsonMarkerContentUrlParams(PARAM['KEYRM'] + '=' + keyHrm + '&' + PARAM['ID_WHR'] + '=');
  globalHotelMap.setMarkerIconBaseUrl(STOREFRONT_CONTEXT + 'images/markerIcons/');
  loadHotelsOnMap(keyHrm);
}

/**
 * Open and close map of hotels
 */
function toggleGlobalHotelMap(keyHrm)
{
  if( globalOpeningClosingMap )
      return;
  globalOpeningClosingMap = true;
  if( globalHotelMapIsVisible )
  {
    hideGlobalHotelMap();
//    clearFilterResultsHotel(keyHrm);
  }
  else
    showGlobalHotelMap();
}
function showGlobalHotelMap() 
{
  if( !globalHotelMapIsVisible )
  {
    $('idOpenMapLabel').toggle();
    $('idCloseMapLabel').toggle();
    Effect.SlideDown(ID_GLOBAL_MAP_CONTAINER, {duration:1.0, afterFinish: function(){ globalHotelMap.showMe(); globalOpeningClosingMap = false;}});
    globalHotelMapIsVisible = true;
  }
}
function hideGlobalHotelMap() 
{
  if( globalHotelMapIsVisible )
  {
    $('idOpenMapLabel').toggle();
    $('idCloseMapLabel').toggle();
    Effect.SlideUp(ID_GLOBAL_MAP_CONTAINER, {duration:1.0, afterFinish: function(){ globalOpeningClosingMap = false;}});
    globalHotelMapIsVisible = false;
  }
}

function loadHotelsOnMap(keyHrm) 
{
  if( keyHrm == null )
      keyHrm = lastKeyHrmUsed;
  if( keyHrm==null || keyHrm=='')
    return;
  var options = {
    onSuccess:function(t){
      var totMarkers = globalHotelMap.loadJsonHotelMarkers(t.responseJSON);
      if( totMarkers == 0 )
        hideGlobalHotelMap();
    },
    parameters: PARAM['KEYRM'] + '=' + keyHrm,
    asynchronous:true
  };
  new Ajax.Request(URL_HOTEL_MAP_MARKERS_JSON, options);
}

function loadSingleHotelOnMap(mapObj, keyHrm, idWhr) 
{
  if( keyHrm == null )
      keyHrm = lastKeyHrmUsed;
  if( keyHrm==null || keyHrm=='')
    return;
  var options = {
    onSuccess:function(t){
      mapObj.loadJsonHotelMarkers(t.responseJSON);
    },
    parameters: PARAM['KEYRM'] + '=' + keyHrm + '&' + PARAM['ID_WHR'] + '=' + idWhr,
    asynchronous:true
  };
  new Ajax.Request(URL_HOTEL_MAP_MARKERS_JSON, options);
}

function loadPoiOnMap(mapObj, keyHrm, idPoiType, idPoi, disablePoiClick) 
{
  //keyHrm
  var params = PARAM['KEYRM'] + '=' + keyHrm
  //idPoiType
  params += '&' + PARAM['ID_POI_TYPE'] + '=' + idPoiType;
  if( idPoi != null )
    params += '&' + PARAM['ID_POI'] + '=' + idPoi;
  //get bounds
  var bounds = mapObj.getMap().getBounds();
  params += '&' + PARAM['NORTH'] + '=' + bounds.getNorthEast().lat();
  params += '&' + PARAM['EAST'] + '=' + bounds.getNorthEast().lng();
  params += '&' + PARAM['SOUTH'] + '=' + bounds.getSouthWest().lat();
  params += '&' + PARAM['WEST'] + '=' + bounds.getSouthWest().lng();
  if( disablePoiClick != null && disablePoiClick == true )
    params += '&' + PARAM['DISABLE_POI_CLICK'] + '=1';
  //GLog.write( 'params: ' + params)
  var options = {
    onSuccess:function(t){
      var tot = mapObj.loadJsonPOIMarkers(idPoiType, t.responseJSON);
      if( idPoi == null )
        $(mapObj.getIdMapContainer()+'_infoResult_'+idPoiType).update('&nbsp('+tot+')');
      else
      {
           var selectedPoi = t.responseJSON["places"][0];
           if( selectedPoi!= null )
           {
              $('singleSelectedPoiName').update(selectedPoi.name);
              $('singleSelectedPoiContainer').show();
           }
      }
    },
    parameters: params,
    asynchronous:true
  };
  new Ajax.Request(URL_POI_MAP_MARKERS_JSON, options);
}

function uncheckAndClearPoiOnMap(mapObj) {
  if( mapObj == null )
  {
    mapObj = globalHotelMap;
  }
  $(mapObj.getIdMapContainer()).up().select('input[type="checkbox"]').each(function(item)
  {
    if( item.checked )
      item.checked = false;
    });
  $(mapObj.getIdMapContainer()).up().select('span[class="infoResultPoiType"]').each(function(item)
  {
    item.update('');
    });
  $('singleSelectedPoiContainer').hide();
  mapObj.clearAllPOIMarkers();
} 
/**
 * show/hide markers on map for poiType
 */
function showHidePoiType(idMapRef, keyHrm, idPoiType, show, disablePoiClick) 
{
  var map = null;
  if( idMapRef != null)
    map = MAP_MANAGER_SINGLE_HOTEL_CACHE[idMapRef];
  else
    map = globalHotelMap;
  if( show )
  {
    //GLog.write('showHidePoiType->loadPoiOnMap for idPoiType ' + idPoiType);
    loadPoiOnMap(map, keyHrm, idPoiType, null, disablePoiClick);  
  }
  else
  {
    //GLog.write('showHidePoiType->map.clearPOIMarkers for ' + map.getIdMapContainer()+'_infoResult_'+idPoiType);
    map.clearPOIMarkers(idPoiType);
    $(map.getIdMapContainer()+'_infoResult_'+idPoiType).update('');
  }
}


function CloseGlobalHotelMapControl() {
}
CloseGlobalHotelMapControl.prototype = new GControl();
CloseGlobalHotelMapControl.prototype.initialize = function(globalHotelMap) {
    var container = new Element("div").update('<img style="padding: 5px; background:#99e57f; " src="' + STOREFRONT_CONTEXT + 'images/icon_close_map.gif"/>');
    GEvent.addDomListener(container, "click", function() {
        hideGlobalHotelMap();
      });
    globalHotelMap.getContainer().appendChild(container);
    return container;
  }
CloseGlobalHotelMapControl.prototype.getDefaultPosition = function() {
  return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(0, 0));
}
 


