/**
 * Highslide sur les iPaper
 */ 
var J = jQuery.noConflict(); 
var iPaper = function(){
    J('.ipaper').bind('click', function() {
      return hs.htmlExpand(this, {
       objectType: 'iframe',
       objectLoadTime: 'after',
       width: 1024,
       height: 768
      });
    });
}

/**
 * Menu accordéon colonne de gauche
 */ 
var accordionMenu = function(){
  J("ul.drawers").accordion({
    // the drawer handle
    header: 'div.drawer-handle',

    // our selected class
    selectedClass: 'open',
    
    // match the Apple slide out effect
    event: 'mouseover'
  });
}

/**
 * Toggle le formulaire de recherche
 */
var toggleSearchForm = function(){
	J("#toggle_search").click(function(){
    var state = J.cookie('search_block_state');
    switch(state){
    	case "expanded":
        collapseSearchBlock();
        break;
        
      default:
        expandSearchBlock();
        break;
    }
	})
}

/**
 * Referme le formulaire de recherche
 */
var collapseSearchBlock = function()
{
  var cssObj = {
    'display' : 'none'
  }
  J('#extended_search_block').css(cssObj)
  J('#toggle_search').css('background-image', 'url(/images/bg_4_more_criteria_button.png)')
  J.cookie('search_block_state', 'collapsed');	
}

/**
 * Déploie le formulaire de recherche
 */
var expandSearchBlock = function()
{
  var cssObj = {
  	'display' : 'block'
  }
  J('#extended_search_block').css(cssObj)
  J('#toggle_search').css('background-image', 'url(/images/bg_4_less_criteria_button.png)')
  J.cookie('search_block_state', 'expanded');
}

/**
 * Récupère l'état du formulaire de recherche
 */
var restoreSearchBlockState = function()
{
	var state = J.cookie('search_block_state');
  switch(state){
  	case 'expanded':
      expandSearchBlock();
  	  break;

  	case 'collapsed':
      collapseSearchBlock();
      break;
  }
}

/**
 * Menu contextuel pour le guide
 */
var contextMenu4Guide = function(){
  J(".contextMenu4Guide").contextMenu({
    menu: 'myMenu'
  });
}

J(document).ready(
  function(){
  	iPaper();
  	accordionMenu();
  	contextMenu4Guide();
  	toggleSearchForm();
  	restoreSearchBlockState();
  	
    
    /**
     * Gestion du formulaire de recherche
     */
    /* Mise à jour en cascade de la liste des départements selon la région sélectionnée */
    J('#region_id').selectChain({
      target: J('#departement_id'),
      url: '/search/cascadeDepartement',
      type: 'post',
  //    key: 'id',
  //    value: 'label',
      data: { ajax: true }
    }).trigger('change');
    
    /* Flush du cache de #commune lors du changement de département */
    J('#departement_id').change( function() {
      J('#commune').flushCache();
      J('#code_insee').flushCache();
      J('#zip_code').flushCache();
      J('#commune').val('');
      J('#code_insee').val('');
      J('#zip_code').val('');
    } );
    
    /* Formatage de la liste qui apparaît lors de l'autocomplétion */
    function format(commune) {
        return commune.acheminement + " ( " + commune.zip_code + " )";
      }
    
    /* Autocomplétion du champ commune */
    J("#commune").autocomplete("/search/autoSuggestCommune", {
    	width: 250,
    	max: 30,
    	cacheLength: 1,
      extraParams: {
        departement_id: function() { return J("#departement_id").val(); },
        region_id: function() { return J("#region_id").val(); }
      },
      parse: function(data) {
        return J.map(eval(data), function(row) {
          return {
            data: row,
            value: row.acheminement,
            result: row.acheminement
          }
        });
      },
      formatItem: function(item) {
        return format(item);
      }
    }).result(function(e, item) {
      J("#code_insee").val(item.code_insee);
      J("#zip_code").val(item.zip_code);
    });
    
    /*Envoi du formulaire */
    J('#run_search').click( function() {
      document.forms[1].submit();
    });
    
    /**
     * Gestion des tooltips
     */
    J('.tips').tooltip({ 
      track: true, 
      delay: 0, 
      showURL: false, 
      showBody: " | ", 
      opacity: 0.85 
    });
    
    J('.wait_function').tooltip({ 
      track: true,
      delay: 0,
      opacity: 0.85,
      bodyHandler: function() {
      	return 'Cette fonctionnalité sera activée très bientôt.';
      }
    });
    
    J('.wait_link').tooltip({ 
      track: true,
      delay: 0,
      opacity: 0.85,
      showURL: false,
      bodyHandler: function() {
        return 'Ce lien sera activé très bientôt.';
      }
    });
    
    /**
     * Valeur par défaut de champs qui disparaissent lors du focus
     */
    J('.example').example(function() {
    	return J(this).attr('title');
    });
  }
);
