var searchParams = {};
var handles = [];


Ajax.Responders.register ({
  onComplete: function (){$('cont-droite').setOpacity (1);}
});


/* Callback mouseover/mouseout pour les elements
 * des listes */
function menuScrollListItemMouseOverOut_cb (e) 
{
  var li = Event.findElement (e, 'li');
  if (!li.hasClassName ('list-item-over')) 
    li.addClassName ('list-item-over');
  else
    li.removeClassName ('list-item-over');
}


function resetComponent (id)
{
  var items = null;
  if (id == 'categories')
  {
    items = $A($('sub-categories[]').getElementsByTagName('div'));
    items.each (function(i){i.style.display='none';});
    items = $A($('sub-categories[]').getElementsByTagName('li'));
    searchParams['sub-categories[]'] = new Array ();
    items.each (function(i){menuScrollListItemUncheck (i);});
  }
  id += '[]';
  items = $A($(id).getElementsByTagName('li'));
  searchParams[id] = new Array ();
  items.each (function(i){menuScrollListItemUncheck (i);});
  doSearch (id);
}

/* Callback de gestion des coches sur les categories */
function menuScrollListItemCategoriesMouseDown_cb (e) 
{
  var ul = Event.findElement (e, 'ul');
  var li = Event.findElement (e, 'li');
  var value = li.classNameGetValue('value:');

  items = $A($('sub-categories[]').getElementsByClassName('parent-' + value));

  if (!li.hasClassName ('list-item-checked')) 
  {
    menuScrollListItemCheck (li);
    items.each (function(i){
      menuScrollListItemCheck (i);
    });
  }
  else
  {
    menuScrollListItemUncheck (li);
    items.each (function(i){
      menuScrollListItemUncheck (i);
    });
  }

  if (document.getElementById ('sub-categories-cat-' + value))
    $('sub-categories-cat-' + value).toggle ();

  searchParams['page'] = 0;
  doSearch (ul.id);
}


/* Callback de gestion des coches sur les cases a cocher
 * des listes */
function menuScrollListItemMouseDown_cb (e) 
{
  var ul = Event.findElement (e, 'ul');
  var li = Event.findElement (e, 'li');

  if (!li.hasClassName ('list-item-checked')) 
    menuScrollListItemCheck (li);
  else
    menuScrollListItemUncheck (li);

  searchParams['page'] = 0;
  doSearch (ul.id);
}


/* Callback de gestion des reductions */
function menuReductionOnChange_cb (value) 
{
  if (!value) 
    searchParams['reduction'] = '';
  else
    searchParams['reduction'] = value;

  searchParams['page'] = 0;
  doSearch ();
}


/* Ordre de tri */
function searchResort (field) 
{
  searchParams['sort'] = field;
  doSearch (false);
}

/* Nombre de lignes du resultat de recherche */
function searchResizeLines (lines)
{
  searchParams['page'] = 0;
  searchParams['lines'] = lines;
  doSearch (false);
}

/* Acces a une page du resultat */
function searchChangePage (page)
{
  searchParams['page'] = page;
  doSearch (false);
}

function menuScrollListItemCheck (item)
{
  var pnode = (searchParams[item.parentNode.id]) ? 
    item.parentNode : item.parentNode.parentNode;
  item.addClassName ('list-item-checked');
  searchParams[pnode.id].push (item.classNameGetValue('value:'));
}

function menuScrollListItemUncheck (item)
{
  var value = item.classNameGetValue('value:');
  var pnode = (searchParams[item.parentNode.id]) ? 
    item.parentNode : item.parentNode.parentNode;
  item.removeClassName ('list-item-checked');
  searchParams[pnode.id] = 
    searchParams[pnode.id].without (value);
}


/* Callback de rafraichissement du contenu a l'aide du resultat
 * renvoye par la requete Ajax */
function contentRefresh_cb (r)
{
  var ids = [];
  var doc = r.responseXML;
  if (!doc || !doc.documentElement) return;
  ids = doc.documentElement.childNodes;
  for (var i = 0; i < ids.length; i++)
  {
    var id = ids[i];
    var content = '';
    if (!id.tagName) continue;
    if (isIE && id.childNodes[0])
      content = id.childNodes[0].nodeValue;
    else
      content = id.textContent;
    /* Mettre a jour la section */
    Element.update (id.tagName, content);
  }
}


/* On lance la requete de recherche */
function doSearch (id)
{
  $('cont-droite').setOpacity (0.50);
  searchParams['full-text'] = $('full-text').value;
  var h = $H(searchParams);
  id = (id) ? id : '';
  new Ajax.Request (
    '/ajax/index.php', 
    {
      postBody: 'action=search&' + h.toQueryString (),
      onSuccess: contentRefresh_cb
    }
  );
}

/* Initialisation du menu de la recherche */
function menuInit ()
{
  var menuItems = [];
  /* Parcourir les boites de coches et associer les evenements sur
   * chaque option */
  menuItems = document.getElementsByClassName('menu-scroll-list');
  for (var i = 0; i < menuItems.length; i++) 
  {
    var items = $A(menuItems[i].getElementsByTagName('li'));
    var cleanId = menuItems[i].id.substring (0,menuItems[i].id.length - 2);
    items.each (function(item){
      if (cleanId == 'categories')
        Event.observe (item, 'mousedown', 
	               menuScrollListItemCategoriesMouseDown_cb);
      else
        Event.observe (item, 'mousedown', menuScrollListItemMouseDown_cb);
      Event.observe (item, 'mouseover', menuScrollListItemMouseOverOut_cb);
      Event.observe (item, 'mouseout', menuScrollListItemMouseOverOut_cb);});
    searchParams[menuItems[i].id] = $A();
  }
  /* Boutons de reinitialisation */
  Event.observe ('categories-reset','mousedown',function(e){
                 resetComponent ('categories');});
  Event.observe ('sub-categories-reset','mousedown',function(e){
                 resetComponent ('sub-categories');});
  Event.observe ('budgets-reset','mousedown',function(e){
                 resetComponent ('budgets');});
  Event.observe ('brands-reset','mousedown',function(e){
                 resetComponent ('brands');});
  Event.observe ('sites-reset','mousedown',function(e){
                 resetComponent ('sites');});
}


Event.observe (window, 'load', menuInit);
