/**
 * BRIN D'HERBE custom scripts
 *
 * Requires Prototype 1.6.
 *
 * @author Julien Vignolles <julien@ciblo.net>
 * @legals © 2008 Ciblo SA.
 */

var CART_NOTIFICATION_DURATION = 3;
var SEARCHBOX_PLACEHOLDER = 'Taper un mot clé';
var KEYWORD_PLACEHOLDER = 'Taper un mot clé';
var gAuthenticityToken = null;
var gAjaxSearchCompletion = null;

function ajaxifyCartFormAdder(e) {
  e.stop();
  this.request({
    onFailure: function(res) { alert(res.responseText); }
  });
}

function ajaxifyCartLinkAdders(e) {
  var link = e.findElement('a.cartAdder');
  if (!link) return;
  e.stop();
  new Ajax.Request(link.href, {
    method: 'post', parameters: { authenticity_token: gAuthenticityToken },
    onFailure: function(res) { alert(res.responseText); }
  });
}

function bindSizes() {
  var menu = $('fontSizes');
  menu && menu.observe('click', function(e) {
    var activator = e.findElement('a');
    if (!activator) return;
    e.stop();
    document.body.addClassName(activator.id);
    menu.select('a').each(function(link) {
      if (link == activator) {
        link.addClassName('selected');
      } else {
        link.removeClassName('selected');
        document.body.removeClassName(link.id);
      }
    });
  });
} // bindMenu

function bindSpecTogglers() {
  var links = $('productTabs');
  if (!links) return;
	var activeLink = links.select('li.active a').first(), activeItem = activeLink.up();

	function handleSpecEditorClick(e) {
		e.stop();
		var link = e.findElement('a'), item = link.up();
		link.blur();
		if (link == activeLink) return;
		activeItem.removeClassName('active');
		(activeItem = item).addClassName('active');
		$(activeLink.readAttribute('href').substring(1)).visualEffect('Fade', { duration: 0.25 });
		$((activeLink = link).readAttribute('href').substring(1)).visualEffect('Appear', { duration: 0.25 });
	} // handleSpecEditorClick

	links.select('a').invoke('observe', 'click', handleSpecEditorClick);
} // bindSpecTogglers

function hookCartAdders() {
  var notif = $('cartNotification');
  if (!notif) return;
  var form = $$('form#cartForm').first();
  form && form.observe('submit', ajaxifyCartFormAdder);
  var link = $(document.body).down('p.baseCart a');
  link && document.observe('click', ajaxifyCartLinkAdders);
  notif.down('.closer').observe('click', function(e) {
    e.stop();
    notif.hide();
  });
}

function initKeyWordsPlaceHolder() {
  var searchBox = $('edtMatch');
  if (!searchBox) return;
  function addPlaceholder() {
    if ($F(searchBox).blank())
      searchBox.setValue(KEYWORD_PLACEHOLDER).addClassName('placeholder');
  }

  function removePlaceholder() {
    if ($F(searchBox) == KEYWORD_PLACEHOLDER)
      searchBox.setValue('').removeClassName('placeholder');
  }

  addPlaceholder();
  searchBox.observe('focus', removePlaceholder);
  searchBox.observe('blur', addPlaceholder);
  searchBox.up('form').observe('submit', removePlaceholder);
}



function initSearchCompletions() {

  var searchBox = $('searchBox');
  if (!searchBox) return;

  function addPlaceholder() {
    if ($F(searchBox).blank())
      searchBox.setValue(SEARCHBOX_PLACEHOLDER).addClassName('placeholder');
  }

  function removePlaceholder() {
    if ($F(searchBox) == SEARCHBOX_PLACEHOLDER)
      searchBox.setValue('').removeClassName('placeholder');
  }

  addPlaceholder();
  searchBox.observe('focus', removePlaceholder);
  searchBox.observe('blur', addPlaceholder);
  searchBox.up('form').observe('submit', removePlaceholder);

  var opts = {
    method:   'get',
    callback: function(element) { return $(element).up('form').serialize(); },
    select:   'productName',
    onShow:   function(element, update){
      if (!update.style.position || update.style.position == 'absolute') {
        update.style.position = 'absolute';
        Position.clone(element, update, { setHeight: false, setWidth: false, offsetTop: element.offsetHeight });
      }
      Effect.Appear(update, { duration: 0.15 });
    }
  };

  new Ajax.Autocompleter('searchBox', 'searchBoxCompletions', gAjaxSearchCompletion, opts);
  if ($('edtMatch'))
    new Ajax.Autocompleter('edtMatch', 'edtMatchCompletions', gAjaxSearchCompletion, opts);
} // initSearchCompletions

function initCartShim() {
  var notif = $('cartNotification');
  var ie8 = Prototype.Browser.IE && navigator.userAgent.include('MSIE 8'); // yeah, this is lame and ineffective, but hey!
  if (!notif || !Prototype.Browser.IE || ie8) return;
  notif.insert({ top:
    '<iframe id="cartNotificationShim" style="position:absolute;left:0;top:0;width:100%;height:100%;_filter:alpha(opacity=0)" ' +
    'frameborder="0" scrolling="no"></iframe>'
  });
}

function showCartNotification() {
  var notif = $('cartNotification');
  if (!notif) throw 'Missing cart notification pad';
  notif.show();
}

document.observe('dom:loaded', function() {
  initCartShim();
  hookCartAdders();
  initSearchCompletions();
  initKeyWordsPlaceHolder();
  bindSizes();
  bindSpecTogglers();
});

