$(window).addEvents({
	
	'domready': function() {
		// vertical menu functionality
		new MenuVert();
		
		// menu list title thumb hover
		if ($('menu'))
			new MenuListOp();
		
		// rating
		if ($('content').getElement('.rating'))
			new Rating();
			
		// reviews folding support
		if ($('reviews') && !$('reviews').hasClass('no-folding'))
			new ReviewsFolding();
			
		// gallery navigation support
		if ($('gallery'))
			new GalleryNav();
			
		// client sign in / fpass functionality
		if ($('client-op'))
			clientOp = new ClientOp();
			
		// cart operations
		Cart.mapPopupOp();
    Cart.mapReviewOp();
		if ($('content').getElement('.cart-menu-op'))
			Cart.mapMenuOp();
			
		if (Browser.Engine.trident && $('nav')) {
			var options = {};
			if ($('nav').hasClass('narrow'))
				options = { glideLabel: false, startImg: 0, startOffset: 1 };
			new Nav(options);
		}
		
		/*$(window).addEvent('scroll', function() {
			var scrollY = $(window).getScroll().y;
			if (scrollY <= 300)
				scrollY = 300;
			else
				scrollY += 20;
			
			var specials = $('floating');
			if (!specials.fx)
				specials.fx = new Fx.Tween(specials, { link: 'cancel', transition: 'back:out' });
			$clear(specials.int);
			specials.int = specials.fx.start.delay(50, specials.fx, ['top', scrollY]);
		});*/
		
		setPaperLeftRight();
		$(window).addEvent('resize', function() {
			setPaperLeftRight();
		});
	},
	
	'load': function() {
		if (!Browser.Engine.trident && $('nav')) {
			var options = {};
			if ($('nav').hasClass('narrow'))
				options = { glideLabel: false, startImg: 0, startOffset: 1 };
			new Nav(options);
		}

    $(document.body).getElements('img.captcha').addEvent('click', function(event) {
      var img = $(event.target);
      img.src = img.src.replace(/\?.*/, '') + '?' + (new Date());
      return false;
    });
		
		if ($('home'))
			Slideshow.init();
	}
	
});

var Nav = new Class({
	
	Extends: Options,
	options: {
		glideLabel: true,
		startImg: 2,
		startOffset: 99,
		labelShown: true
	},
	
	initialize: function(options) {
		this.container = $('nav');
		this.label = $('nav-label');
		this.setOptions(options);
		
		this.label.set('tween', { 'link': 'cancel' });
		this.imgCurr = this.container.getElements('img')[this.options.startImg];
		if (this.label.getStyle('display') == 'none')
			this.options.labelShown = false;
		
		this.width = this.container.getSize().x;
		this.widthTotal = this.container.getScrollSize().x;
		if (this.width < this.widthTotal) {
			this.widthTotal += 190;
			this.container.getElement('div').setStyle('width', this.widthTotal);
			this.container.getElement('p').clone().inject(this.container.getElement('div'));
			this.scrolled = 0;
			
			$(window).addEvents({ 'unload': this.stop.bind(this) });
			
			this.start();
		}
		
		this.container.getElement('div').addEvents({
			'mousemove': this.mouseMove.bindWithEvent(this),
			'mouseenter': this.mouseEnter.bind(this),
			'mouseleave': this.mouseLeave.bind(this)
		});
	},
	
	start: function() {
		if (!this.timer)
			this.timer = this.scrollContent.periodical(30, this);
	},
	
	stop: function() {
		if (this.timer) {
			$clear(this.timer);
			this.timer = null;
		}
	},
	
	scrollContent: function() {
		if (this.widthTotal - this.width - this.scrolled == 0)
			this.enquePhoto();
		
		if ((this.scrolled + this.options.startOffset) % 190 == 0) {
			this.imgCurr = this.container.getElements('img')[++this.options.startImg];
			this.updateLabel(this.imgCurr);
		}
		
		this.container.scrollLeft = ++this.scrolled;
	},
	
	enquePhoto: function() {
		this.container.getElement('p').getNext('p').clone().inject(this.container.getElement('div'));
		this.container.getElement('p').dispose();
		this.options.startImg--;
		this.scrolled -= 190;
	},
	
	mouseMove: function(event) {
		if (event.target.tagName != 'IMG') return;
		if (this.img == event.target) return;
		this.stop();
		this.img = $(event.target);
		
		this.container.getElements('img').setStyle('opacity', 0.5);
		this.img.setStyle('opacity', 1);
		
		this.updateLabel(this.img);
		if (this.options.glideLabel)
			this.moveLabel();
	},
	
	mouseEnter: function() {
		this.stop();
		
		if (!this.options.labelShown)
			this.label.setStyle('display', 'block');
	},
	
	mouseLeave: function() {
		this.container.getElements('img').setStyle('opacity', 1);
		this.start();
		this.img = null;
		if (this.options.glideLabel)
			this.resetLabelPosition();
		
		if (!this.options.labelShown)
			this.label.setStyle('display', 'none');
		else
			this.updateLabel(this.imgCurr);
	},
	
	updateLabel: function(img) {
		if (this.options.startImg == 0)
			this.label.setStyle('height', 'auto');
		
		if (!img.get('label'))
			img.set('label', (img.alt ? '<strong>' + img.alt + '</strong>' : '') + img.title).set('alt', '').set('title', '');
		this.label.getElement('div')
			.setStyle('opacity', 0)
			.set('html', img.get('label'))
			.tween('opacity', 1);
		
		if (this.options.startImg == 0)
			if (this.label.getSize().y < 73)
				this.label.setStyle('height', 73);
	},
	
	moveLabel: function() {
		var relative = this.container;
		var offset = 1;
		if (navigator.appName == 'Netscape' || navigator.appName == 'Opera') {
			relative = 'content';
			offset = -1;
		}
		var posImg = this.img.getPosition(relative).x + offset;
		
		var posLabel = posImg - 90;
		if (posLabel < 0)
			posLabel = 0;
		else if (posLabel > 382)
			posLabel = 382;
		
		var posLabelArrow = 145 - (90 - posImg + posLabel);
		if (posLabelArrow < -19)
			posLabelArrow = -19;
		else if (posLabelArrow > 307)
			posLabelArrow = 307;
			
		this.label.getElement('p').setStyle('margin-left', posLabelArrow);
		this.label.tween('left', posLabel);
	},
	
	resetLabelPosition: function() {
		this.label.getElement('p').setStyle('margin-left', 60);
		this.label.tween('left', 378);
	}
	
});

var MenuVert = new Class({
	
	initialize: function() {
		$$('.menu-vert a.sub1').addEvent('click', this.toggleL1Menu.bindWithEvent(this));
		$$('.menu-vert a.sub2').addEvent('click', this.toggleL2Menu.bindWithEvent(this));
		
		this.l1 = $$('.menu-vert a.l1-item-on')[0];
		this.l2 = $$('.menu-vert a.l2-item-on')[0];
	},
	
	toggleL1Menu: function(event) {
		var a = $(event.target);
		
		if (a.tagName == 'SPAN')
			a = a.getParent();
		
		a.blur();
		event.stop();
		
		if (this.l1) {
			this.l1.removeClass('l1-item-on').addClass('l1-item');
			var sm = this.l1.getNext();
			if (sm && sm.tagName == 'DIV') {
				sm
					.setStyle('height', sm.getSize().y)
					.set('tween', {
						'link': 'cancel',
						'transition': 'expo:in',
						onComplete: function(e) {
							e.setStyle('display', 'none')
						}
					})
					.tween('height', 0);
			}
		}
		
		if (a == this.l1) {
			this.l1 = null;
			return;
		}
		
		this.l1 = a;
		this.l1.removeClass('l1-item').addClass('l1-item-on');
		var sm = this.l1.getNext();
		sm
			.setStyle('display', 'block')
			.set('tween', {
				'link': 'cancel',
				'transition': 'expo:out',
				onComplete: function(e) {
					e.setStyle('height', 'auto')
				}
			})
			.tween('height', sm.getScrollSize().y);
	},
	
	toggleL2Menu: function(event) {
		var a = $(event.target);
		a.blur();
		event.stop();
		
		if (this.l2) {
			this.l2.removeClass('l2-item-on').addClass('l2-item');
			var sm = this.l2.getNext();
			if (sm && sm.tagName == 'UL')
				sm
					.setStyle('height', sm.getSize().y)
					.set('tween', {
						'link': 'cancel',
						'transition': 'expo:in',
						onComplete: function(e) {
							e.setStyle('display', 'none')
						}
					})
					.tween('height', 0);
		}
		
		
		if (a == this.l2) {
			this.l2 = null;
			return;
		}
		
		this.l2 = a;
		this.l2.removeClass('l2-item').addClass('l2-item-on');
		var sm = this.l2.getNext();
		sm
			.setStyle('display', 'block')
			.set('tween', { 'link': 'cancel', 'transition': 'expo:out' })
			.tween('height', sm.getScrollSize().y - (Browser.Engine.presto ? 0 : 7));
	}
	
});

var MenuListOp = new Class({
	
	initialize: function() {
		$$('#content .item .suggestions a.toggle').addEvent('click', this.suggestionsToggle.bindWithEvent(this));
		$('content').getElements('.item .suggestions div a').addEvents({
			'mouseenter': this.showThumb.bindWithEvent(this),
			'mouseleave': this.hideThumb.bindWithEvent(this)
		});
	},
	
	suggestionsToggle: function(event) {
		var div = $(event.target).getNext('div');
		
		if (!div.fx) {
			div.fx = new Fx.Tween(div, { 'link': 'cancel', duration: 'short' });
			div.size = div.getScrollSize().y;
		}
		
		if (this.suggestionsOpened)
			this.suggestionsOpened.fx.start('height', 0);
		
		if (div.getStyle('height').toInt() == 0) {
			div.fx.start('height', div.size);
			this.suggestionsOpened = div;
		}
		else {
			div.fx.start('height', 0);
			this.suggestionsOpened = null;
		}
			
		return false;
	},
	
	showThumb: function(event) {
		var a = $(event.target);
		if (!a.rel) return;
		var parent = a.getParent('.suggestions');
		if (!a.thumb) {
			a.thumb = new Element('span', { 'class': 'thumb' })
				.adopt(new Element('strong').set('html', '&nbsp'))
				.adopt(new Element('img', { 'src': a.rel }))
				.inject(parent, 'top');
			a.pos = a.getPosition(parent);
			a.size = a.getSize();
		}
		a.thumb.setStyles({ 'display': 'block', 'margin-top': a.pos.y + 30, 'margin-left': a.pos.x });
	},
	
	hideThumb: function(event) {
		var a = $(event.target);
		if (!a.rel || !a.thumb) return;
		a.thumb.setStyle('display', 'none');
	}
	
});

var Rating = new Class({
	
	initialize: function() {
		$('content').getElements('.rating').addEvents({
			'mouseenter': this.setInitial.bindWithEvent(this),
			'mouseleave': this.restoreInitial.bindWithEvent(this),
			'mousemove': this.change.bindWithEvent(this),
			'click': this.rate.bindWithEvent(this)
		});
	},
	
	setInitial: function(event) {
		var cont = this.getCont(event.target);
		if (!cont.span) {
			cont.posX = cont.getPosition().x;
			cont.span = cont.getElement('span');
		}
		cont.initial = cont.span.getStyle('width').toInt();
	},
	
	restoreInitial: function(event) {
		var cont = this.getCont(event.target);
		cont.span.setStyle('width', cont.initial);
	},
	
	change: function(event) {
		var cont = this.getCont(event.target);
		if (!cont.span) return;
		cont.curr = Math.floor((event.page.x - cont.posX) / 22) + 1;
		cont.span.setStyle('width', cont.curr * 22);
	},
	
	getCont: function(elem) {
		var elem = $(elem);
		return elem.hasClass('rating') ? elem : elem.getParent();
	},
	
	rate: function(event) {
		var cont = this.getCont(event.target);
		if (cont.getElement('strong')) return;
		
		if (!cont.req) {
			cont.req = new Request({
				link: 'cancel',
				onComplete: function(response) {
					var cont = this.obj;
					cont.setStyle('background-image', 'url(/images/rating_star_specials.png)');
					cont.getElement('strong').dispose();
					cont.span.setStyles({ display: 'block', width: cont.initial });
					
					if (response.trim().match(/\d+/)) {
						alert('Success!');
						cont.initial = Math.round(response.trim().toFloat() * 22) - 1;
						cont.span.setStyle('width', cont.initial);
						cont.title = 'You ate it, now rate it! (Rating: ' + response.trim().toFloat() + ')';
					}
					else
						alert(response.trim());
				}
			});
			cont.req.obj = cont;
		}
		cont.span.setStyle('display', 'none');
		cont
			.setStyle('background-image', 'none')
			.adopt(new Element('strong').set('html', 'please wait...'));
		cont.req.options.url = '/menu/rating/' + cont.id.replace(/rating/, '') + '/' + cont.curr;
		cont.req.send();
	}
	
});

var ReviewsFolding = new Class({
	
	initialize: function() {
		$('content').getElements('a.title').addEvent('click', this.titleClick.bindWithEvent(this));
		$('content').getElements('a.hide').addEvent('click', this.hideClick.bindWithEvent(this));
	},
	
	titleClick: function(event) {
		event.target.blur();
		this.toggleFold(event.target.getNext('.fold'));
		event.stop();
	},
	
	hideClick: function(event) {
		this.toggleFold(event.target.getParent().getNext('.fold'));
		event.stop();
	},
	
	toggleFold: function(fold) {
		if (!fold.fx) {
			fold.fx = new Fx.Tween(fold, {
				'link': 'cancel',
				onComplete: function(fold) {
					var a = fold.getPrevious('.title');
					if (fold.folded) {
						fold.getPrevious('.author').getElement('a.hide').setStyle('display', 'inline');
						a.title = 'click to hide review';
					}
					else
						a.title = 'click to show review';
				}
			});
			fold.folded = 0;
			fold.size = fold.getScrollSize().y;
		}
		if (fold.folded) fold.getPrevious('.author').getElement('a.hide').setStyle('display', 'none');
		fold.fx.start('height', fold.folded ? 0 : fold.size);
		fold.folded = (fold.folded + 1) % 2;
	}
	
});

var GalleryNav = new Class({
	
	initialize: function() {
		$('gallery').getElements('table a').addEvents({
			'click': this.navBottom.bindWithEvent(this),
			'mouseenter': this.showThumb.bindWithEvent(this),
			'mouseleave': this.hideThumb.bindWithEvent(this)
		});
		$('nav').getElements('a').addEvent('click', this.navTop.bindWithEvent(this));
		this.selected = $('gallery').getElement('a.number-on');
	},
	
	navBottom: function(event) {
		var a = event.target;
		event.stop();
		if (a.hasClass('nav-off')) return;
		a.blur();
		
		if (a.hasClass('nav')) {
			var td = this.selected.getParent();
			var td1 = a.hasClass('right') ? td.getNext('td') : td.getPrevious('td');
			if (!td1) {
				var tr = a.hasClass('right') ? td.getParent('table').getNext('table').getElement('tr') : td.getParent('table').getPrevious('table').getElement('tr');
				td1 = a.hasClass('right') ? tr.getFirst('td') : tr.getLast('td');
			}
			a = td1.getElement('a');
		}
		this.change(a);
	},
	
	navTop: function(event) {
		var a = event.target.getParent('a');
		event.stop();
		
		a = $('gallery').getElement('table a[rel=' + a.rel + ']');
		this.change(a);
	},
	
	change: function(a) {
		if (this.selected == a) return;
		
		this.selected.removeClass('number-on').addClass('number');
		this.selected = a;
		this.selected.removeClass('number').addClass('number-on');
		$('desc').set('html', a.title);
		imgLoader.load('gallery-large', this.selected.get('href'));
		
		if (this.selected.getParent().getPrevious('td') || this.selected.getParent('table').getPrevious('table'))
			$('gallery').getElement('a.left').removeClass('nav-off').addClass('nav');
		else
			$('gallery').getElement('a.left').removeClass('nav').addClass('nav-off');
		if (this.selected.getParent().getNext('td') || this.selected.getParent('table').getNext('table'))
			$('gallery').getElement('a.right').removeClass('nav-off').addClass('nav');
		else
			$('gallery').getElement('a.right').removeClass('nav').addClass('nav-off');
	},
	
	showThumb: function(event) {
		var a = event.target;
		if (a.hasClass('left') || a.hasClass('right')) return;

		a.pos = a.getPosition('content');
		$('gallery-thumb').getElement('img').set('src', a.get('href').replace(/_l$/, ''));
		$('gallery-thumb').setStyles({
			'display': 'block',
			top: a.pos.y - 100,
			left: a.pos.x - 45
		});
	},
	
	hideThumb: function(event) {
		var a = event.target;
		if (a.hasClass('left') || a.hasClass('right')) return;
		
		$('gallery-thumb').setStyle('display', 'none');
	}
	
});

var ClientOp = new Class({

	initialize: function() {
		$('client-op').getElements('a.knob').addEvent('click', this.toggleAreas.bindWithEvent(this));
		
		$('client-op').getElements('input').addEvents({
			'focus': function(event) {
				var input = $(event.target);
				if (input.hasClass('button')) return;
				if (!input.val) input.val = input.value;
				if (input.value == input.val) input.value = '';
			},
			'blur': function(event) {
				var input = $(event.target);
				if (input.hasClass('button')) return;
				if (input.value == '') input.value = input.val;
			},
			'keydown': function(event) {
				if (event.code == 13)
					$(event.target).form.getElement('input.button').fireEvent('click');
			}
		});
		
		$('client-op').getElements('input.button').addEvent('click', this.submitForm);
	},
	
	toggleAreas: function() {
		if (!$('client-op').fx)
			$('client-op').fx = new Fx.Scroll('client-op', { transition: 'expo:out' });
		$('client-op').fx.start($('client-op').scrollLeft == 0 ? 210 : 0, 0);
		
		if (arguments.length)
			$(arguments[0].target).blur();
			
		return false;
	},
	
	submitForm: function() {
		var button = this;
		
		if (!button.as)
			button.as = new AjaxSubmit(button.form, {
				url: button.form.action,
				button: button,
				onSuccess: function() {
					if (this.url.match(/sign-in$/))
						location.href = this.button.form.url.value;
					else {
						alert('Your password has been reset and sent to your e-mail address!');
						this.button.form.reset();
						$('code-fpass').set('src', '/code/fpass?' + (new Date()));
						clientOp.toggleAreas();
					}
				},
				onFailure: function(response) {
					alert(response.errors.message);
				}
			});
		button.as.send();
	}

});

var Cart = {};

Cart.mapMenuOp = function() {
	$$('#cart table tr').each(function(tr) {
		var parent = $(tr.id.replace('item', 'menu-op'));
    if (!parent) return;
    parent.getElement('strong').set('text', tr.getElement('span.qty').get('text'));
		new Fx.Scroll(parent, { offset: { x: 0, y: 18 }, duration: 0 }).start();
	});
  // return if any argument sent (already mapped - see login)
  if (arguments.length == 1) return;
	$$('.cart-menu-op a').addEvent('click', function(event) {
    var cont = $(event.target).getParent('div');
    $(event.target).blur();
    var count = cont.getElement('span strong');
		var val = count.get('text').toInt()
    var val = val + ($(event.target).get('text') == '[-]' ? -1 : 1);
    if (val < 0) return;
		
		var prod_id = cont.id.replace(/cart-menu-op/, '');
    count.set('text', val);
    
    if (!cont.fx)
      cont.fx = new Fx.Scroll(cont, { duration: 'short', link: 'cancel' });
    cont.fx.start(0, !val ? 0 : 18);
    
    if (!cont.req)
      cont.req = new Request({
        link: 'cancel',
        onRequest: function() {
          Cart.refresh();
        },
        onComplete: function() {
          Cart.refresh(true);
        }
      });
    cont.req.options.url = (!val ? '/cart/remove/' : '/cart/update/') + prod_id + (!val ? '' : '/' + val);
    cont.req.send();
    
    return false;
  });
};
Cart.mapReviewOp = function() {
  if (!$('cart-review')) return;
  
  $$('#cart-review td.op a').addEvent('click', function(event) {
    var a = $(event.target).tagName != 'A' ? $(event.target).getParent() : $(event.target);
    if (a.tagName != 'A' || a.getParent().tagName == 'P') return;
    var tr = a.getParent('tr');
    var span = tr.getElement('span.qty');
    var prod_id = tr.id.replace(/cart-item/, '');
    var val = a.get('text') == '[-]' ? span.get('text').toInt() - 1 : span.get('text').toInt() + 1;
    if (val < 0) return;
    
		if (!val)
			tr.getNext().dispose();
		
    if (!tr.req)
      tr.req = new Request({
        link: 'cancel',
        onRequest: function() {
          $('totals').set('html', '<tr class="fd"><td>&nbsp;</td><td colspan="3">calculating totals...</td></tr>');
					if ($('opts' + prod_id))
						$('opts' + prod_id).set('html', 'please wait...');
        },
        onComplete: function(prod_id) {
          if (!$('totals')) return;
					
          if (!Cart.reqTotal)
            Cart.reqTotal = new Request.HTML({
							update: 'totals',
              link: 'cancel',
              url: '/cart/review-totals',
              onRequest: function() {
								$('totals').set('html', '<tr class="fd"><td>&nbsp;</td><td colspan="3">calculating totals...</td></tr>');
							}
            });
          Cart.reqTotal.get();
					
					if (prod_id && $('opts' + prod_id)) {
						if (!Cart.reqOptions)
							Cart.reqOptions = [];
						if (!Cart.reqOptions[prod_id])
							Cart.reqOptions[prod_id] = new Request.HTML({
								link: 'cancel',
								update: $('opts' + prod_id),
								url: '/cart/options/' + prod_id,
								onRequest: function() {
									$('opts' + prod_id).set('html', 'please wait...');
								}
							})
						Cart.reqOptions[prod_id].get();
					}
        }
      });
    tr.req.options.url = (!val ? '/cart/remove/' : '/cart/update/') + prod_id + (!val ? '' : '/' + val);
    tr.req.send();
    
		if (!val) {
      var prev = tr.getPrevious('.tr-cat');
      tr.dispose();
      var next = prev.getNext();
      if (!prev.getPrevious('tr') && next.hasClass('controls')) $('cart-review').getElement('.layout').set('html', '<div align="center">the cart is empty!</div>');
      else if (next.hasClass('tr-cat') || next.hasClass('controls')) prev.dispose();
    }
    else
      span.set('text', val);
		
    return false;
  });
  if ($('global-check'))
    $('global-check').addEvent('click', function(event) {
      $$('#cart-review input[type=checkbox]').set('checked', $(event.target).checked ? true : false);
    });
};

Cart.mapReviewOpts = function() {
  if (!$('cart-review')) return;
	
	$$(arguments[0] + ' input.upd').addEvent('click', function(event) {
		if (!Cart.reqTotal)
			Cart.reqTotal = new Request.HTML({
				update: 'totals',
				link: 'cancel',
				url: '/cart/review-totals',
				onRequest: function() {
					$('totals').set('html', '<tr class="fd"><td>&nbsp;</td><td colspan="3">calculating totals...</td></tr>');
				}
			});
		Cart.reqTotal.post($('formcartreview'));
	});
};

Cart.mapPopupOp = function() {
  if (!$('cart')) return;
  
	$('cart').removeEvents();
	$('cart').addEvents({
		'click': Cart.op,
		'mouseenter': Cart.show,
		'mouseleave': function() { Cart.timer = Cart.hide.delay(500); }
	});
};

Cart.show = function() {
	if (Cart.loading) return;

	$clear(Cart.timer);
	var cart = $('cart');
	if (!cart.getElement('table')) return;
	
	if (!cart.init) {
		cart.init = 1;
		cart.sizeSmall = { x: 220, y: 52 };
		cart.sizeLarge = false;
		cart.fx = new Fx.Morph(cart, {
			duration: 'short',
			transition: 'expo:out',
			link: 'cancel',
			onComplete: function(elem) {
				if (elem.getStyle('height').toInt() == elem.sizeSmall.y) {
					elem.removeClass('opened');
					elem.setStyles({ width: cart.sizeSmall.x, height: cart.sizeSmall.y });
				}
			}
		});
	}
	
	Cart.resize(1);
};

Cart.resize = function() {
	var cart = $('cart');
	if (arguments.length == 1) {
		// show mode
		if (!cart.sizeLarge)
			cart.sizeLarge = cart.getScrollSize();
		cart.addClass('opened');
		cart.fx.start({ width: cart.sizeLarge.x, height: cart.sizeLarge.y });
	}
	else {
		// resize mode
		cart.setStyles({ width: 'auto', height: 'auto' });
		cart.sizeLarge = cart.getScrollSize();
	}
};

Cart.hide = function() {
	var cart = $('cart');
	if (Cart.loading || !cart.fx) return;
	cart.fx.start({ width: cart.sizeSmall.x, height: cart.sizeSmall.y });
};

Cart.op = function(event) {
	var a = $(event.target);
	if (a.tagName == 'SPAN' && a.getParent().tagName == 'A')
		a = a.getParent();
		
	if (a.tagName != 'A' || a.hasClass('top')) return;
	
	var tr = a.getParent('tr');
  var span = tr.getElement('span.qty');
	var prod_id = tr.id.replace(/cart-item/, '');
  var val = a.get('text') == '[x]' ? 0 : (a.get('text') == '[-]' ? span.get('text').toInt() - 1 : span.get('text').toInt() + 1);
  if (val < 0) return;
  
	if (!val) {
    var parent = tr.getPrevious('.tr-cat');
		tr.dispose();
    var next = parent.getNext();
    if (!next || next.hasClass('tr-cat')) parent.dispose();
		
		if (!$('cart').getElement('table tbody').get('html').trim()) {
			$('cart').getElement('table').dispose();
			$('cart').getElement('input').dispose();
		}
	}
  else
    span.set('text', val);
  
  if ($('cart-menu-op' + prod_id)) {
    $('cart-menu-op' + prod_id).getElement('strong').set('text', val);
    new Fx.Scroll('cart-menu-op' + prod_id, { duration: 'short' }).start(0, val ? 18 : 0);
  }
  var qty = 0;
  $('cart').getElements('span.qty').each(function(span) { qty += span.get('text').toInt(); });
  $('cart').getElement('a.top span').set('text', qty);
  
  if (!tr.req)
    tr.req = new Request({ link: 'cancel' });
  tr.req.options.url = (!val ? '/cart/remove/' : '/cart/update/') + prod_id + (!val ? '' : '/' + val);
  tr.req.send();
  
	if (qty)
		Cart.resize();
	else
		Cart.hide();
	
  return false;
};

Cart.refresh = function() {
  if (!$('cart')) return;
  
	$('cart').init = null;
	$('cart')
		.set('html', '<div class="wrapper">refreshing cart...</div>')
		.setStyles({ width: 220, height: 52 });
	Cart.loading = true;
	
  if (arguments.length == 0) return;
	if (!this.reqRefresh)
		this.reqRefresh = new Request.HTML({
			url: '/cart',
			link: 'cancel',
			update: 'cart',
      onComplete: function() {
        if (Cart.menuOpReset)
          Cart.mapMenuOp(true);
        Cart.menuOpReset = false;
				Cart.loading = false;
      }
		});
  if (arguments.length == 2)
      Cart.menuOpReset = true;
  this.reqRefresh.get();
};

var ProdOptionsSelect = new Class({
	
	initialize: function(cont, qty) {
		this.cont = $(cont);
		this.qty = qty;
		
		this.cont.getElements('select').addEvent('change', this.change.bindWithEvent(this));
	},
	
	change: function(event) {
		var sel = $(event.target);
		var sels = sel.getAllNext('select');
		
		sels.each(function(sel) { this.reset(sel); }, this);
		this.computeTotal();
		
		if (sel.value != '' && this.qtyRemaining > 0 && sel.getNext('select')) {
			var dummy = new Element('span').set('html', '&nbsp;');
			sel = sel.getNext('select');
			if (!sel.getNext('select'))
				sel.options[0] = new Option(this.qtyRemaining + dummy.get('text'), this.qtyRemaining);
			else
				for (var i = 0; i <= this.qtyRemaining; i++)
					sel.options[i + 1] = new Option(i + dummy.get('text'), i);
			sel.disabled = false;
		}
	},
	
	computeTotal: function() {
		this.qtyRemaining = this.qty;
		this.cont.getElements('select').each(function(sel) {
			this.qtyRemaining -= sel.value;
		}, this);
	},
	
	reset: function(sel) {
		var dummy = new Element('span').set('html', '&nbsp;');
		for (var i = sel.options.length - 1; i >= 1; i--)
			sel.options[i] = null;
		sel.options[0] = new Option('>' + dummy.get('text'), '');
		sel.disabled = true;
		dummy.dispose();
	}

});

var ProdSugg = new Class({
	
	initialize: function(cont) {
		this.cont = $(cont);
		this.idx = 0;
		this.items = this.cont.getElement('div').getElements('a');
		
		//this.rotate.periodical(2000, this);
		
		this.cont.getElements('a.nav').addEvent('click', this.rotate.bindWithEvent(this));
	},
	
	rotate: function() {
		var inc = 1;
		if (arguments.length == 1)
			inc = $(arguments[0].target).get('text') == '<' ? -1 : 1;
		
		this.idx = (this.idx + inc == -1 ? this.items.length - 1 : this.idx + inc) % this.items.length;
		var span = this.cont.getElement('span');
		span.getElement('a.curr')
			.removeClass('curr')
			.setStyle('position', 'absolute')
			.set('morph', { onComplete: function(elem) { elem.dispose(); } })
			.morph({ 'margin-left': inc * 50, opacity: 0 });
		var a = this.items[this.idx].clone();
		a.setStyle('opacity', 0).set('tween', { duration: 'short' }).inject(span);
		a.tween.delay(250, a, ['opacity', 1]);
		
		return false;
	}

});

function computeCheckoutTotal() {
	var total = isFinite($('total').value.toFloat()) ? $('total').value.toFloat() : 0;
	var delivery = $('delivery-info').get('text').trim().replace(/^\$/, '').toFloat();
	if ($('type-takeout').checked || !isFinite(delivery))
		delivery = 0;
	var gratuity = !$('gratuity').disabled && isFinite($('gratuity').value.toFloat()) ? $('gratuity').value.toFloat() : 0;
	
	$('grand-total').set('text', '$' + (Math.round((total + delivery + gratuity) * 100) / 100));
}

function getDeliveryInfo(address) {
	if (!this.as)
		this.req = new Request.HTML({
			link: 'cancel',
			update: 'delivery-info',
			url: '/checkout/get-delivery-info',
			onRequest: function() {
				$('delivery-info').set('text', 'please wait...');
			},
			onComplete: function() {
				computeCheckoutTotal();
			}
		});
	this.req.send('address=' + address);
}

Slideshow = {
	
	init: function() {
		this.modes = [
			{ css: { opacity: 0 }, animation: { opacity: 1 } },
			{ css: { marginLeft: -633 }, animation: { marginLeft: 0 } },
			{ css: { marginLeft: 633 }, animation: { marginLeft: 0 } }
		];
		
		this.cont = $('home').getElement('.slideshow .cont');
		this.images = [];
		var spans = this.cont.getElements('span');
		for (var i = 0; i < spans.length; i++)
			this.images.push(spans[i].get('text'));
		spans.dispose();
		
		if (this.images.length > 1)
			preload(this.images[1]);
		this.imgIdx = 0;
		
		setInterval('Slideshow.next()', 3000);
	},
	
	next: function() {
		this.imgIdx = (this.imgIdx + 1) % this.images.length;
		// var mode = Math.round(Math.random() * (this.modes.length - 1));
		var mode = 0;
		var img = new Element('img');
		img.src = this.images[this.imgIdx];
		img
			.setStyles(this.modes[mode].css)
			.set('morph', {
				onComplete: function(e) {
					e.getParent().setStyle('backgroundImage', 'url(' + e.src + ')');
					e.dispose();
				}
			})
			.morph(this.modes[mode].animation, 1000);
			
		img.inject(this.cont);
		
		preload(this.images[(this.imgIdx + 1) % this.images.length]);
	}
	
}

function setPaperLeftRight() {
	if (!$('paper-right'))
		return false;
	
	var offset = parseInt($(document.body).getWidth(), 10) / 2 - 501;
	if (offset < 0)
		offset = 0;
	$('paper-right').setStyles({
		display: 'block',
		right: -1 * offset,
		width: offset
	});
	
	offset += 10;
	$('sidebar').getElement('.paper-pattern').setStyle('marginLeft', -1 * offset);
	$('sidebar').getElement('.paper-bttm').setStyle('paddingLeft', offset);
}








