visibility = 'hidden';

document.observe("dom:loaded", function()
{
	/* Custom add to shopping cart functionality */
	if ($$('ol.product-list')[0]) {

		Event.observe(document, 'click', function(event) {
			$$('div.add2cart-visible').each( function(e) {
				if ((event.element() != e && !event.element().descendantOf(e) && event.element() != e.previous() && $$('span.add-to-shopping-cart').indexOf(event.element()) == -1) && visibility == 'visible') {
					e.removeClassName('add2cart-visible');
				}
			});
		});

		$$('span.add-to-shopping-cart').each( function(e) {
			// Store descendants
			var sCartHTML = e.descendants(),
				cartLinks = e.down('a'),
				cartLinksTitle = cartLinks.getAttribute('title');

			// Remove descendants
			e.update('');

			// Build new HTML
			newButtonText = document.createTextNode(PbLib.g('Add to shoppingcart'));
			e.appendChild(newButtonText);
			e.addClassName('atsc-modified');
			e.title = cartLinksTitle;

			var parentElem = e.up();
			var div = new Element('div', {'class' : 'add2cart'});

			var span = new Element('span');
			var spanText = document.createTextNode(PbLib.g('Quantity'));
			span.appendChild(spanText);

			div.insert(span).insert(sCartHTML[0]).insert(sCartHTML[1]);

			parentElem.appendChild(div);

			// Toggle visibility
			var elemDown = e.next();

			e.observe('click', function() {
				if (elemDown.hasClassName('add2cart-visible')) {
					elemDown.removeClassName('add2cart-visible');
					visibility = 'hidden';
				} else if (!elemDown.hasClassName('add2cart-visible')) {
					elemDown.addClassName('add2cart-visible');
					visibility = 'visible';
				}
			});
		});

		$$('div.add2cart a').each( function(e) {

			var elemUp = e.up();

			e.observe('click', function() {
				elemUp.addClassName('add2cart-adding');

				new PeriodicalExecuter(function(pe) {
					if (!e.down('img')) {
						elemUp.addClassName('add2cart-hidden');
						elemUp.removeClassName('add2cart-visible');
						elemUp.removeClassName('add2cart-adding');
						pe.stop();
					}
				}, 0.1);
			});
		});

	}
});
