/**
 * FilterMappable module's javascript file
 *
 * Contains every scripts of the opticians' pages
 *
 * @author Benjamin Grandfond  <benjaming@theodo.fr>
 * @since  2009-12-09
 */

jQuery(document).ready(function()
{
  /**
   * Picto tooltips
   */
  al_small_tooltip('.icons li.speciality a');

  /**
   * supprime la valeur par défaut du input
   */
  //al_inputCleaner(jQuery('form.search-form input#filter_search_address'), jQuery('form.search-form input#filter_search_address').val());

  /**
   * Sélectionne le texte de l'input
   * author: cyrillej
   * since: 2010-01-07
   */
  jQuery('#address-search-form input').bind('click', function()
  {
    jQuery(this).select();
  });

  jQuery('form.mappable-form').find('input, select').bind('click', function(event)
  {
    if (jQuery(this).parents('.splittedcheckboxes').size())
    {
      return;
    }
    jQuery(this).parents('form.mappable-form').trigger('update');
  });
  // Faux événement
  jQuery('form.mappable-form').bind('update', function(event)
  {
    updateFilter(jQuery(this));
  });

  // Supprime les liens dans les labels
  jQuery('form.mappable-form').find('.label-link').each(function()
  {
    jQuery(this).parent().html(jQuery(this).html());
  });


}); // end of document.ready

/**
 * Ajoute un loader dans le container
 *
 * @param Boolean status true si loading
 * @param DOMElement container
 *
 * @author Benjamin Grandfond <benjaming@theodo.fr>
 * @since  2009-12-21
 */
var loading = function(status, container)
{
  var loader = jQuery('<div id="searchlist-loader" class="ajax-loader">'+loadingMsg+'</div>');

  if (status)
  {
    if (!jQuery(container).find('#searchlist-loader').length)
    {
      jQuery(container).append(loader);
    }
  }
  else
  {
    jQuery(container).find('#searchlist-loader').remove();
  }
}

/**
 * Créer la requête ajax lors d'un événement sur la google map
 *
 * @author Benjamin Grandfond <benjaming@theodo.fr>
 * @since  2009-12-21
 */
var updateOpticianList = function(url)
{
  updateRequest(updateOpticianListUrl);
}

var updateOphthalmologistList = function()
{
  updateRequest(updateOphthalmologistListUrl);
}

/**
 * Permet d'assurer l'unicité des requêtes ajax sur la google map
 */
var requesting = false; // l'état des requêtes ajax générées par les événements de la google map
var request = null;

var updateRequest = function(url)
{
  var bounds = map.getBounds();
  var center = map.getCenter();

  var data = { 'bounds': bounds, 'center' : center };

  updateRequestOrFilter(url, data);
}

var updateFilter = function(filter)
{
  var data = filter.serialize();
  var url = filter.attr('action');

  updateRequestOrFilter(url, data);
}

var updateRequestOrFilter = function(url, data)
{
  var content = jQuery('div#content .results, div#content .searchlist, div#content .paging');
  var container = jQuery('div#content .block-b');

  if (requesting) // y a-t-il déjà une requête de lancée
  {
    request.abort(); // on l'arrête !
    requesting = false;
  }

  request = jQuery.ajax({
    url: url,
    type: "POST",
    cache: false,
    data: data,
    dataType: "html",
    beforeSend: function(xhr)
    {
      requesting = true; // on fait une requête ajax !

      content.hide(); // on masque le contenu courant
      loading(true, container);
      map.clearMarkers(); // clear the map
    },
    complete: function(xhr, status)
    {
      content.remove();          // on supprime le contenu courant
      loading(false, container); // on enlève le loader aussi!

      requesting = false; // no request now :)
    },
    error: function(xhr, status, error)
    {
      // display what happened
    },
    success: function(data, status)
    {
      container.append(data); // ajout du nouveau contenu
    }
  });

  return request;
}
