/**
 * Lancia una chiamata ajax per recuperare un array di punti
 * da visualizzare su mappa
 * @param string sourceData url da chiamare per la ricerca
 * @param hash param hash dei parametri da inviare alla ricerca
 * @param string listingContainer id dell'elemento che deve contenere il listing dei risultati.
 */
function showPointsOnMap(sourceData, param, listingContainer){
  
  //Richiesta ajax, parso json e creo array di dati
  new Ajax.Request(sourceData, { 
    parameters: param,
    onSuccess: function(transport) { 
      var textResult = transport.responseText;
      var result = textResult.evalJSON();
      var points = result.points;
      map.clearOverlays();
      bounds = null;
      bounds = new GLatLngBounds();
      map.setCenter(new GLatLng(0,0),0);

      points.each(function(s){
        markers[s.id] = createShopMarker(s.lat, s.lng, false, s.infoWindow, bounds);
      });
      
      map.setZoom(map.getBoundsZoomLevel(bounds));
      map.setCenter(bounds.getCenter());
      createPaginatedResultSet(sourceData, param, listingContainer, points, result.num_result, result.str_num_result, result.offset, result.limit);
      //ajax.Updater('formRicerca', 'stores/searchDescription', {parameters: param});
    }, 
    method: "get" 
  });
}

function showFlagship(countryCode, sourceData, listingContainer){
  
  //Richiesta ajax, parso json e creo array di dati
  new Ajax.Request(sourceData, { 
    onSuccess: function(transport) { 
      var textResult = transport.responseText;
      var points = textResult.evalJSON();
      map.clearOverlays();
      bounds = null; 
      bounds = new GLatLngBounds();
      map.setCenter(new GLatLng(0,0),0);

      points.each(function(s){
        markers[s.id] = createShopMarker(s.lat, s.lng, false, s.infoWindow, bounds);
      });
      
      map.setZoom(map.getBoundsZoomLevel(bounds));
      map.setCenter(bounds.getCenter());
      createResultSet(listingContainer, points);
    }, 
    method: "get" 
  });
}

function createResultSet(container, result){
  //Svuoto il container
  $(container).update();
  
  //Associo al container la classe dello scroll
  result.each(function(s){
    
    var resultItem = new Element('div',{
      'class':  'textInfoCercaBottom'
    }).update(s.listingInfo);
    
    
    $(container).insert(resultItem, 'after');
    $('store_link_' + s.id).setAttribute('href', 'javascript:triggerClick(\'' + s.id + '\')')
  });
  
  //Creo lo scroller
  document.infoCercaBottom = new ScrollBox($('infoCercaBottom'), {auto_hide: true});
}

function createPaginatedResultSet(sourceData, param, container, result, numResult, strResult, offset, limit){
 
  $(container).update(strResult);

  //Associo al container la classe dello scroll
  result.each(function(s){
    
    var resultItem = new Element('div',{
      'class':  'textInfoCercaBottom'
    }).update(s.listingInfo);
    
    $(container).insert(resultItem, 'after');
    $('store_link_' + s.id).setAttribute('href', 'javascript:triggerClick(\'' + s.id + '\')')
  });
  
  //Aggungo la paginazione
  $(container).insert(getPager(sourceData, param, container, numResult, offset, limit));
  
  //Creo lo scroller
  $('infoCercaBottom').setStyle({height : '273px'});
  document.infoCercaBottom = new ScrollBox($('infoCercaBottom'), {auto_hide: true});
}

function populateSelect(select, sourceData, param){
  new Ajax.Updater(select, sourceData, {parameters: param, method: 'get'});
}

function getPager(sourceData, param, container, numResult, offset, limit){
  
  var numPages = Math.ceil(numResult / limit);
  var actualPage = Math.floor(offset / limit) + 1;
  
  var pager = new Element("div", {id: "resultPager"});
  
  //Creo il tasto indietro
  if (actualPage > 1 ){
    param.set('offset',(10 * (actualPage-1)) - 10);
    var linkBack = new Element('a', {
      href: '#',
      'class':  'pageNext',
      href: "javascript:showPointsOnMap('" + sourceData + "', $H(" + param.toJSON() + "), '" + container + "');"
    }).update('&nbsp;');
    var pageSelect = new Element("span", {'class': "pageSelect back"}).insert(linkBack, 'after');
    pager.insert(pageSelect, 'top');
  }
  
  for (i = actualPage > 4 ? actualPage - 4 : 1 ; ((i <= actualPage + 4) && (i <= numPages)); i++)
  {
  
    
    param.set('offset',(10 * i) - 10);
    var linkToPage = new Element('a', {
      href: '#',  
      'class':  'linkToPage',
      href:  "javascript:showPointsOnMap('" + sourceData + "', $H(" + param.toJSON() + "), '" + container + "');"
    }).update(i);
    var pageSelect = new Element("span", {'class': actualPage == i ? "pageSelect actual" : "pageSelect" }).insert(linkToPage, 'after');
    pager.insert(pageSelect, 'after');
  }
  
  
  if (actualPage < numPages ){
    param.set('offset',(10 * (actualPage+1)) - 10);
    var linkNext = new Element('a', {
      href: '#',
      'class':  'pagePrevious',
      href: "javascript:showPointsOnMap('" + sourceData + "', $H(" + param.toJSON() + "), '" + container + "');"
    }).update('&nbsp;');
    var pageSelect = new Element("span", {'class': "pageSelect forward"}).insert(linkNext, 'after');
    pager.insert(pageSelect, 'bottom');
  }
  
  return pager;
}


