/**
 * Function accordion()
 * Creates an accordion-like effect for Prototype
 */

var accordion = function(triggers, slides) {
	$$(triggers).each(function(el, idx) {
		el.observe('click', function(evt) {
			Event.stop(evt);
			$$(slides).each(function(el) {
				el.removeClassName('active');
			});
			$$(slides)[idx].toggleClassName('active');
		});
	});
};

/**
 * Function tabs()
 * Toggles the tabs on the product details page
 */

var tabs = function(tabs) {
	$(tabs).immediateDescendants().each(function(el) {
		el.observe('click', function() {
			if(!el.hasClassName('active')) {
				$(tabs).select('li.active')[0].removeClassName('active');
				el.addClassName('active');
			}
		});
	});
};

/**
 * Function foldMenu()
 * Creates a foldable menu
 */

var foldMenu = function(menu) {
	$(menu).immediateDescendants().each(function(el, id) {
		if(el.select('ul.sidebar-submenu').length > 0) {
			var trigger = el.select('a.main-cat');
			trigger[0].observe('click', function(evt) {
				Event.stop(evt);
				if(el.hasClassName('expanded')) {
					el.removeClassName('expanded');
					el.addClassName('collapsed');
				} else if(el.hasClassName('collapsed')) {
					el.removeClassName('collapsed');
					el.addClassName('expanded');
				}
				this.select('ul.sidebar-submenu')
			});
		}
	});
};

/**
 * Function lightBox()
 * Standard lightbox implementation
 */
var lightBox = function(thumbs, overlay) {
	$$(thumbs).each(function(el, idx) {
		el.observe('click', function(evt) {
			Event.stop(evt);
			if(el.readAttribute('rel')) {
				var wrapper = new Element('div', {
					'id': 'lightbox-wrapper'
				}).setStyle({
					'marginLeft': ((document.viewport.getDimensions().width - 220) / 2).ceil() + 'px',
					'display': 'block',
					'opacity': 0
				});
				$(overlay).insert({'after': wrapper}).setStyle({
					'display': 'block'
				});
				wrapper.fade({from: 0, to: 1, duration: 0.5});

				var visual = new Element('img',  {
					'src': el.readAttribute('rel'),
					'class': 'lighbox-visual'
				}).setStyle({
					'display': 'block',
					'opacity': 0
				});
				wrapper.insert(visual);

				if(visual.getDimensions()) {
					(function() {
						var morphString = 'height:' + visual.getDimensions().height + 'px; width:' + visual.getDimensions().width + 'px; margin-left:' + ((document.viewport.getDimensions().width - (visual.getDimensions().width + 20)) / 2).ceil() + 'px;';
						new Effect.Morph(wrapper, {
							style: morphString,
							duration: 0.5
						});
						(function() {
							visual.fade({from: 0, to: 1, duration: 0.5});
						}).delay(0.5);
					}).delay(0.75);
				}

				visual.observe('click', function(evt) {
					Event.stop(evt);
					wrapper.setStyle({'display': 'none'});
					$(overlay).setStyle({'display': 'none'});
					this.remove();
					wrapper.remove();
				});
				
				$(overlay).observe('click', function(evt) {
					Event.stop(evt);
					wrapper.setStyle({'display': 'none'});
					this.setStyle({'display': 'none'});
					visual.remove();
					wrapper.remove();
				});
			}
		});
	});
};

/**
 * Function homeSlides()
 * Animates the slides on the home page
 */

var homeSlides = function(slideClass, margin) {
	var slides = $$(slideClass);
	
	slides.each(function(el) {
		var restart = function(listener) {
			listener.start();
		};
		var thisEl = el;

		var trig = el.select('.slide-tip');
		var omover = trig[0].on('click', function() {
			omover.stop();
			if(thisEl.getStyle('margin-left') == '-535px') {
				thisEl.morph('margin-left:0px', { afterFinish: function () {
					var op = thisEl.select('.open');
					op[0].addClassName('closeBtn');		
				}
				});

			} else {
				thisEl.morph('margin-left:'+ margin, { afterFinish: function () {
                                        var op = thisEl.select('.open');
					op[0].removeClassName('closeBtn');
                                }});
			}
			restart.delay(0.5, omover);
		});
	});
};

document.observe('dom:loaded', function() {
	if($$('.lightbox') && $('overlay')) {
		lightBox('.lightbox', 'overlay');
	};

	if($('sidebar-menu')) {
		foldMenu('sidebar-menu');
	};

	if($('product-info-nav')) {
		tabs('product-info-nav');
	};

	if($$('.faq-question') && $$('.faq-answer')) {
		accordion('.faq-question', '.faq-answer');
	};

	if($$('.home-slide')) {
		homeSlides('.home-slide', '-535px');
	}
});

