var toBasket = new Class({
	basketUpdater: null,
	
	dispatch: function(method, parameters) {
		if (typeof(toBasketUrl) == 'undefined') return false;
		
		var params = new Object;
		params['params'] = parameters;
		params['method'] = method;

		var jsonRequest = new Request.JSON({
			url: toBasketUrl,
			onSuccess: function(responseJSON, responseText) {
				
				switch (responseJSON[0]) {
					case 'null':
						toBasketObject.updateSmallBasket();
						break;

					case 'reloadPage':
						window.location.reload();
						break;

					case 'updateSmallBasket':
						// console.debug(responseJSON[1]);
						var smallBasketElement = $('to_basket_small');
						if (smallBasketElement) {
							smallBasketElement.set('html', responseJSON[1]);
							
							window.remainingBasketRuntime = Cookie.read('toBasketRuntime');
							Cookie.dispose('toBasketRuntime');

							if (remainingBasketRuntime == 0) {
								document.clear(toBasketObject.basketUpdater);
								Cookie.dispose('toExpires');
							} else {
								if (toBasketObject.basketUpdater == null) {
									toBasketObject.basketUpdater = updateTimer.periodical(1000);
									if (remainingBasketRuntime > 180 && Cookie.read('toExpires') != null) {
										Cookie.dispose('toExpires');
									}
								}
							}
						}
						break;

					case 'updateOutput':
					default:
						var data = responseJSON[1];
						data.each(function(item, index) {
							$('to_basket_temp_price_'+item.posId).set('html', item.ticketprice);
						});
						break;
				}
			}
		}).get(params);
	},

	updateSmallBasket: function() {
		toBasketObject.dispatch('requestSmallBasket', []);
	},

	updateTimer: function() {
		var result = '';
		if (remainingBasketRuntime == 0) {
			document.clear(this.basketUpdater);
			result = '00:00';
			if (Cookie.read('toExpires') != null) {
				this.showPopUp('ACHTUNG!', 'Ihr Warenkorb ist abgelaufen! Bitte schlie&szlig;en Sie diese Seite und beginnen Sie von vorne.');
				toBasketObject.dispatch('clearAllBaskets', {});
			}
			Cookie.dispose('toExpires');
		} else if (remainingBasketRuntime < 180 && Cookie.read('toExpires') == null) {
			Cookie.write('toExpires', remainingBasketRuntime);
			this.showPopUp('ACHTUNG!', 'Ihr Warenkorb l&auml;ft bald ab! Bitte beenden Sie Ihre Buchung innerhalb der n&auml;chsten 3 Minuten.', 'startPayment');
		} else {
			// if it is seconds
			var minutes = Math.floor(remainingBasketRuntime/60);
			var seconds = Math.floor((remainingBasketRuntime%60));

			if (seconds < 10) {
				seconds = '0'+seconds;
			}
			result = minutes+':'+seconds;
			remainingBasketRuntime -= 1;
		}

		$$('.to_basket_countdown').each(function(item, index) {
			item.innerHTML = result;
		});
	},

	applyBargain: function(params) {
		toBasketObject.dispatch('applyBargain', params);
	},

	putTicketsIntoBasket: function() {
		document.to_bargain_form.submit();
	},

	startPayment: function() {
		// check if we are in an iframe
		if (typeof(paymentUrl) == 'undefined') {
			$('to_error_overlay').dispose();
			$('to_error_message').dispose();
		} else {
			if (typeof(parent.toCloseBooking) == 'function') {
				parent.location.href = paymentUrl;
			} else {
				location.href = paymentUrl;
			}
		}
	},

	cancel: function() {
		toBasketObject.dispatch('clearAllBaskets', []);
		if (typeof(parent.toCloseBooking) == 'function') {
			parent.location.href = startUrl;
		} else {
			location.href = startUrl;
		}
	},

	showPopUp: function(header, message, method) {
		if (typeof(method) == 'undefined') method = 'cancel';

		if ($('to_error_overlay') == null) {

			// create overlay div
			var curtain = new Element('div', {
				'id':'to_error_overlay',
				styles:{
					'background-color':'black',
					'width':'100%',
					'height':'100%',
					'opacity':0,
					'position':'fixed',
					'top':0,
					'left':0,
					'z-index':1000
				}
			});
			curtain.injectTop(document.body);

			// create message layer
			var messageBox = new Element('div', {
				'id':'to_error_message',
				styles:{
					'background-color':'red',
					'border':'2px white solid',
					'width':'400px',
					'padding':'5px',
					'opacity':0,
					'position':'fixed',
					'left':'50%',
					'top':50,
					'margin-left':'-200px',
					'z-index':1001
				}
			});
			messageBox.innerHTML = '<h2 style="color:white">'+header+'</h2><p>'+message+'</p><br />'+
				'<div class="booking_button booking_button_on">'+
				'<input class="submit" type="button" value="Schliessen" onclick="toBasketObject.'+method+'();"/>'+
				'</div>';
			messageBox.injectAfter(curtain);

			var messageFx = new Fx.Morph(messageBox, {duration:500});
			messageFx.start({opacity:1});

			var curtainFx = new Fx.Morph(curtain, {duration:500});
			curtainFx.start({opacity:0.7});
		}
	}
});

function updateTimer() {
	toBasketObject.updateTimer();
}

function updateSmallBasket() {
	toBasketObject.updateSmallBasket();
}

window.addEvent('domready', function() {

	toBasketObject = new toBasket();

	if (typeof(remainingBasketRuntime) != 'undefined' && remainingBasketRuntime > 0) {
		$$('span.resttime').each(function(item, index) { item.setStyle('display', 'inline'); });
		toBasketObject.basketUpdater = updateTimer.periodical(1000);
		if (remainingBasketRuntime > 180 && Cookie.read('toExpires') != null) {
			Cookie.dispose('toExpires');
		}
	} else {
		$$('span.resttime').each(function(item, index) { item.setStyle('display', 'none'); });
	}

		// update the entire small basket evry minute
	//updateSmallBasket.periodical(60000);

	if ($('to_basket_btn_close')) {
		if (typeof(basketList) != 'undefined' && basketList === true && typeof(parent.toCloseBooking) == 'function') {
			$('to_basket_btn_close').setStyle('display', 'block');
		} else {
			$('to_basket_btn_close').setStyle('display', 'none');
				// update after all is loaded just to make sure it's up 2 date'
			toBasketObject.updateSmallBasket();

		}
	}
});