window.addEvent('domready', function()
{
	//Frame Check
	if(document.useFrameset == 1 && parent.frames.length<5)
	{
		var uri = document.location.toString();
		if(window.location.search != '?v=1')
			document.location.href = "/homes/index/true/redirect:"+Base64.encode('/'+document.url+window.location.search);
		else
			document.location.href = "/homes/index/true/redirect:"+Base64.encode('/'+document.url);
	}
	else
	{
//		positionBody();
		document.ShoppingCart = new ShoppingCart();
		createMainMenuEvents();
		dateCalendar();
		ColorSelector();
		initHomeImage();
		middleMenu();
		hoverMenu();
		topTitle();
		boxBigImages();
		initReleaseSelect();
		initSearch();
		initChartSelect();
	
		initQuickBuy();
		
		preorderTooltip();
	
		if(document.location.href.contains('/dates'))
		{
			$('contentRight').setStyle('overflow', 'visible');
		}
	}
});

function positionBody()
{
	if ($('body')) {
		var coords = window.getCoordinates();
		var top = (coords.height / 2) - 290;
		var left = (coords.width / 2) - 500;

		if (top > 0)
			$('body').setStyle('top', top);
		if (left > 0)
			$('body').setStyle('left', left);
	}
}

/*
 * Main Menu
 */

function createMainMenuEvents()
{
	if ($('contentLeft'))
	{
		$('mainmenu').getElements('div').each(function(item, index){

			item.addEvent('mouseenter', function(e){
				if (this.getElement('a')) {
					toggleMainMenu(this, '');

					if (item != $(document.actMenuId))
						removeActiveMenu($(document.actMenuId), document.actMenuId);
				}
				else
					item.setStyle('cursor', 'default');
			});

			item.addEvent('mouseleave', function(e){
				if (this.getElement('a')) {
					toggleMainMenu(this, 'Hover');

					if ($(document.actMenuId))
						setActiveMenu($(document.actMenuId), document.actMenuId);
				}
			});
		});

		if ($(document.actMenuId))
			setActiveMenu($(document.actMenuId), document.actMenuId);
	}
}

function setActiveMenu(item, id)
{
	if(id != 'menuHome')
	{
		//item.removeClass(id);
		item.removeClass(id+'Hover');
		item.addClass(id+'Active');
	}
}

function removeActiveMenu(item, id)
{
	item.removeClass(id+'Active');
}

function toggleMainMenu(item, classPrefix)
{
	if (item.hasClass('menuHome'+classPrefix)) {
		item.toggleClass('menuHome');
		item.toggleClass('menuHomeHover');
	}
	else if (item.hasClass('menuNews'+classPrefix)) {
		item.toggleClass('menuNews');
		item.toggleClass('menuNewsHover');
	}
	else if (item.hasClass('menuShop'+classPrefix)) {
		item.toggleClass('menuShop');
		item.toggleClass('menuShopHover');
	}
	else if (item.hasClass('menuArtists'+classPrefix)) {
		item.toggleClass('menuArtists');
		item.toggleClass('menuArtistsHover');
	}
	else if (item.hasClass('menuDates'+classPrefix)) {
		item.toggleClass('menuDates');
		item.toggleClass('menuDatesHover');
	}
	else if (item.hasClass('menuMoves'+classPrefix)) {
		item.toggleClass('menuMoves');
		item.toggleClass('menuMovesHover');
	}
	else if (item.hasClass('menuFriends'+classPrefix)) {
		item.toggleClass('menuFriends');
		item.toggleClass('menuFriendsHover');
	}
	else if (item.hasClass('menuInnerCircle'+classPrefix)) {
		item.toggleClass('menuInnerCircle');
		item.toggleClass('menuInnerCircleHover');
	}
	else if (item.hasClass('menuRadio'+classPrefix)) {
		item.toggleClass('menuRadio');
		item.toggleClass('menuRadioHover');
	}
	else if (item.hasClass('menuLinks'+classPrefix)) {
		item.toggleClass('menuLinks');
		item.toggleClass('menuLinksHover');
	}
	else if (item.hasClass('menuNewsletter'+classPrefix)) {
		item.toggleClass('menuNewsletter');
		item.toggleClass('menuNewsletterHover');
	}
	else if (item.hasClass('menuStills'+classPrefix)) {
		item.toggleClass('menuStills');
		item.toggleClass('menuStillsHover');
	}
	else if (item.hasClass('menu2'+classPrefix)) {
		item.toggleClass('menu2');
		item.toggleClass('menu2Hover');
	}
	else if (item.hasClass('menu0a'+classPrefix)) {
		item.toggleClass('menu0a');
		item.toggleClass('menu0aHover');
	}
	else if (item.hasClass('menu0b'+classPrefix)) {
		item.toggleClass('menu0b');
		item.toggleClass('menu0bHover');
	}
	else if (item.hasClass('menu9'+classPrefix)) {
		item.toggleClass('menu9');
		item.toggleClass('menu9Hover');
	}
}

function initSearch()
{
	if ($('contentRight') && $('SearchTerm'))
	{

	}
}

function dateCalendar()
{
	if($('calendar'))
	{
		$('calendar').getElements('.icon').each(function(item, index){
			item.addEvent('mouseenter', function(){
				this.addClass('hover');
			});
			item.addEvent('mouseleave', function(){
				this.removeClass('hover');
			});
		});
	}
}

function ColorSelector()
{
	if ($('contentRight'))
	{
		$('contentRight').getElements('.input.color').each(function(item, index)
		{
			item.getElement('select').addEvent('change', function()
			{
				var code = $('color'+this.value).value;

				if(this.getPrevious('label'))
					this.getPrevious('label').setStyle('background-color', code);
				else if(this.getParent().getPrevious('div'))
					this.getParent().getPrevious('div').setStyle('background-color', code);
			});

			var code = $('color'+item.getElement('select').value).value;

			if(item.getElement('label'))
				item.getElement('label').setStyle('background-color', code);
			else if(item.getPrevious('div'))
				item.getPrevious('div').setStyle('background-color', code);
		});
	}
}

function initHomeImage()
{
	if ($('contentRight') && $('contentRight').getElement('.home')) {
		document.homeImages = $('contentRight').getElement('.home').getElements('dd');
		document.homeImages.each(function(item, index)
		{
			if (index > 0) {
				item.setOpacity('0');
				item.setStyle('display', 'none');
			}
		});
		if (document.homeImages.length > 1) {
			document.homeImagePosition = 0;
			document.homeImageIntervalID = fadeHomeImages.periodical(8000);
		}
	}
}

function initQuickBuy()
{
	if ($('contentRight') && $('contentRight').getElement('.results')) {
		$('contentRight').getElements('div[class=buy]').each(function(item, index)
		{
			item.getElement('span').addEvent('mouseover', function(){
				item.getElement('div.buy_options').setStyle('display', 'block');
			});
			
			item.getElement('div.buy_options').addEvent('mouseleave', function(){
				item.getElement('div.buy_options').setStyle('display', 'none');
			});
		});
	}
}

function fadeHomeImages()
{
	document.homeImages[document.homeImagePosition].set('tween', {duration: 1000});
	document.homeImages[document.homeImagePosition].fade('out');

	if(document.homeImagePosition+1 == document.homeImages.length)
		document.homeImagePosition = 0;
	else
		document.homeImagePosition++;

	document.homeImages[document.homeImagePosition].setStyle('display', 'block');
	document.homeImages[document.homeImagePosition].set('tween', {duration: 1000});
	document.homeImages[document.homeImagePosition].fade('in');
}

function middleMenu()
{
	if ($('contentRight'))
	{
		$('contentRight').getElements('.catmenu').each(function(item, index)
		{
			item.addEvent('click', function()
			{
				document.location.href = item.getElement('a').href;
			});
		});

		$('contentRight').getElements('.box').each(function(item, index)
		{
			if (item.getElement('.corners')) {
				item.addEvent('click', function(){
					document.location.href = item.getElement('a').href;
				});
			}
		});
	}
}

function hoverMenu()
{
	if ($('contentRight'))
	{
		$('contentRight').getElements('.hoverImage').each(function(item, index)
		{
			item.getElement('span').setOpacity('.8');

			item.addEvent('click', function()
			{
				document.location.href = item.getElement('a').href;
			});

			item.addEvent('mouseenter', function()
			{
				this.getElement('span.title').setStyle('display', 'block');
			});

			item.addEvent('mouseleave', function()
			{
				this.getElement('span.title').setStyle('display', 'none');
			});
		});
	}
}

function topTitle()
{
	if ($('contentRight'))
	{
		var myTips = new Tips('.hastooltip',
		{
			'className': 'tooltip'
		});
	}
}

function preorderTooltip()
{
	if ($('contentRight'))
	{
		var myTips = new Tips('.formatNotInStock',
		{
			'className': 'tooltip',
			'offsets': { 'x': 0, 'y': -40 }
		});
	}
}

function boxBigImages()
{
	if ($('contentRight') && $('contentRight').getElement('.diashow'))
	{
		document.boxBigImages = $('contentRight').getElements('.diashow');
		document.boxBigImages.each(function(item, index)
		{
			if(index > 0)
				item.setOpacity('0');
		});

		if (document.boxBigImages.length > 1) {
			document.boxBigImagesPosition = 0;
			document.boxBigImagesIntervalID = fadeBoxBigImages.periodical(8000);
		}
	}
}

function fadeBoxBigImages()
{
	document.boxBigImages[document.boxBigImagesPosition].set('tween', {duration: 1000});
	document.boxBigImages[document.boxBigImagesPosition].fade('out');

	if(document.boxBigImagesPosition+1 == document.boxBigImages.length)
		document.boxBigImagesPosition = 0;
	else
		document.boxBigImagesPosition++;

	document.boxBigImages[document.boxBigImagesPosition].set('tween', {duration: 1000});
	document.boxBigImages[document.boxBigImagesPosition].fade('in');
}

function initReleaseSelect()
{
	var select = $('ReleaseFormat');
	if (select)
	{
		select.addEvent('change', function()
		{
			renderReleaseSelect(this);
		});
		renderReleaseSelect(select);
	}
}

function renderReleaseSelect(item)
{
	var singleTrack = 0;
	var fullRelease = 0;

	if(item.value == 'vinyl')
	{
		fullRelease = $('FullReleaseVinylPrice').value/100;
		singleTrack = 0;
	}
	else if(item.value == 'cd')
	{
		fullRelease = $('FullReleaseCdPrice').value/100;
		singleTrack = 0;
	}
	else if(item.value == 'wav')
	{
		fullRelease = $('FullReleaseWavPrice').value/100;
		singleTrack = $('SingleTrackWavPrice').value/100;
	}
	else if(item.value == 'mp3')
	{
		fullRelease = $('FullReleaseMp3Price').value/100;
		singleTrack = $('SingleTrackMp3Price').value/100;
	}

	if(fullRelease != '0')
		fullRelease = number_format(fullRelease, 2, ',', '.')+' &#8364;';
	else
		fullRelease = '-';

	if(singleTrack != '0')
		singleTrack = number_format(singleTrack, 2, ',', '.')+' &#8364;';
	else
		singleTrack = '-';

	$('singleTrack').set('html', singleTrack);
	$('fullRelease').set('html', fullRelease);
}

function initChartSelect()
{
	var select = $('ChartFormat');

	if (select)
	{
		select.addEvent('change', function()
		{
			renderChartSelect(this);
		});
		renderChartSelect(select);
	}
}

function renderChartSelect(item)
{
	var singleTrack = 0;
	var fullCharts = 0;

	if (item.value == 'wav')
	{
		if ($('contentRight') && $('contentRight').getElement('.tracklist'))
		{
			var count = $('contentRight').getElement('.tracklist').getElements('.hasWav').length;
			fullCharts = count*149/100;
			singleTrack = 149/100;
		}
	}
	else if (item.value == 'mp3')
	{
		if ($('contentRight') && $('contentRight').getElement('.tracklist'))
		{
			var count = $('contentRight').getElement('.tracklist').getElements('.hasMp3').length;
			fullCharts = count*99/100;
			singleTrack = 99/100;
		}
	}

	if(fullCharts != '0')
		fullCharts = number_format(fullCharts, 2, ',', '.')+' &#8364;';
	else
		fullCharts = '-';

	if(singleTrack != '0')
		singleTrack = number_format(singleTrack, 2, ',', '.')+' &#8364;';
	else
		singleTrack = '-';

	$('singleTrack').set('html', singleTrack);
	$('fullCharts').set('html', fullCharts);
}

/*
function openPlayer(target_id, target_type)
{
	document.playerWindow = window.open('http://' + location.host + '/releases/player/' + target_id + '/' + target_type, "Player", "width=237,height=209,left=100,top=200,scrollbars=no");
	document.playerWindow.focus();
}
*/

function loadGiftPic(id, gender, color)
{
	var filename = 'content;gifts;'+id+';colors;'+$('giftGender').value+'_'+$('giftColor').value+'_s';
	var filename2 = 'content/gifts/'+id+'/colors/'+$('giftGender').value+'_'+$('giftColor').value+'_s';

	URL = 'http://'+document.domain+'/gifts/checkPic/'+filename;
	var myRequest = new Request({
		method: 'get', url: 'http://'+document.domain+'/gifts/checkPic/'+filename,
		onSuccess: function(responseText, responseXML)
		{
			if ($('contentRight') && $('contentRight').getElement('.cover'))
			{
				$('contentRight').getElement('.cover').getElement('.image').getElement('img').src = 'http://' + document.domain + "/" + responseText.trim();
			}
		}
	}).send();
}

/**
 * HELPER FUNCTION - Number Format (PHP LIKE)
 * @param {int} 	number
 * @param {int} 	decimals
 * @param {string} 	dec_point
 * @param {string} 	thousands_sep
 */
function number_format (number, decimals, dec_point, thousands_sep)
{
	var exponent = "";
	var numberstr = number.toString ();
	var eindex = numberstr.indexOf ("e");

	if (eindex > -1)
	{
		exponent = numberstr.substring (eindex);
		number = parseFloat (numberstr.substring (0, eindex));
	}

	if (decimals != null)
	{
		var temp = Math.pow (10, decimals);
		number = Math.round (number * temp) / temp;
	}

	var sign = number < 0 ? "-" : "";
	var integer = (number > 0 ? Math.floor (number) : Math.abs (Math.ceil (number))).toString ();

	var fractional = number.toString ().substring (integer.length + sign.length);
	dec_point = dec_point != null ? dec_point : ".";
	fractional = decimals != null && decimals > 0 || fractional.length > 1 ? (dec_point + fractional.substring (1)) : "";

	if (decimals != null && decimals > 0)
	{
		for (i = fractional.length - 1, z = decimals; i < z; ++i)
			fractional += "0";
	}

	thousands_sep = (thousands_sep != dec_point || fractional.length == 0) ? thousands_sep : null;

	if (thousands_sep != null && thousands_sep != "")
	{
		for (i = integer.length - 3; i > 0; i -= 3)
			integer = integer.substring (0 , i) + thousands_sep + integer.substring (i);
	}

	return sign + integer + fractional + exponent;
}

var Base64 = {
	// private property
	_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
 
	// public method for encoding
	encode : function (input)
	{
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;
 
		input = Base64._utf8_encode(input);
 
		while (i < input.length)
		{
			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);
 
			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;
 
			if (isNaN(chr2))
				enc3 = enc4 = 64;
			else if (isNaN(chr3))
				enc4 = 64;
 
			output = output + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
		}
		return output;
	},
 
	// public method for decoding
	decode : function (input)
	{
		var output = "";
		var chr1, chr2, chr3;
		var enc1, enc2, enc3, enc4;
		var i = 0;
 
		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
 
		while (i < input.length)
		{
			enc1 = this._keyStr.indexOf(input.charAt(i++));
			enc2 = this._keyStr.indexOf(input.charAt(i++));
			enc3 = this._keyStr.indexOf(input.charAt(i++));
			enc4 = this._keyStr.indexOf(input.charAt(i++));
 
			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;
 
			output = output + String.fromCharCode(chr1);
 
			if (enc3 != 64)
				output = output + String.fromCharCode(chr2);
			if (enc4 != 64)
				output = output + String.fromCharCode(chr3);
		}
 
		output = Base64._utf8_decode(output);
 
		return output;
	},
 
	// private method for UTF-8 encoding
	_utf8_encode : function (string)
	{
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++)
		{
			var c = string.charCodeAt(n);
 
			if (c < 128)
				utftext += String.fromCharCode(c);
			else if((c > 127) && (c < 2048))
			{
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else
			{
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
		}
		return utftext;
	},
 
	// private method for UTF-8 decoding
	_utf8_decode : function (utftext)
	{
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 
		while ( i < utftext.length )
		{
			c = utftext.charCodeAt(i);
 
			if (c < 128)
			{
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224))
			{
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else
			{
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
		}
		return string;
	}
}

/*
 * --- SHOPPING CART ---
 */

function addTrackToShoppingCartOpener(trackId, format)
{
	opener.addTrackToShoppingCart(trackId, format);
}

function changeTrackFormat(index)
{
	var format = $('TrackFormat_'+index).value;

	var scOverlay = new MessageBox({
		'name': 'ChangeTrackFormat',
		'onOk': function(MBObject)
		{
			MBObject.toggle();
			location.href = '/shopping_carts';
		}
	});

	var myRequest = new Request(
	{
		method: 'post',
		url: '/shopping_carts/changeTrackFormat',
		data: {
			'data[Item][index]':index,
			'data[Item][format]':format
		},
		onSuccess: function(responseText, responseXML)
		{
			//scOverlay.toggle();
			location.href = '/shopping_carts';
		}
	}).send();
}

function preorder(releaseId)
{
	addReleaseToShoppingCart(releaseId, 'vinyl', true);
}

function addTrackToShoppingCart(trackId, format, preorder)
{
	var targetId = trackId;
	var targetType = 'track';
	var options = {};

	if(!$defined(format))
		var format = false;

	if(!$defined(preorder))
		var preorder = false;

	if($('ReleaseFormat'))
	{
		var value = $('ReleaseFormat').value;

		if(value != 'vinyl' && value != 'cd')
		{
			format = value;
		}
	}

	if(format == false)
	{
		if($('preferred_dl_format'))
		{
			if ($('Track_' + trackId + '_' + $('preferred_dl_format').value).value != 0)
				var preferred_dl_format = true;
			else
				var preferred_dl_format = false;

			if(preferred_dl_format == true)
				format = $('preferred_dl_format').value;
			else
			{
				if($('preferred_dl_format').value == 'wav')
					format = 'mp3';
				else
					format = 'wav';
			}
		}
	}

	if(format != false)
	{
		options.format = format;
		options.preorder = preorder;
		addItemToShoppingCart(targetId, targetType, options);
	}
}

function addReleaseToShoppingCart(releaseId, format, preorder)
{
	if(!$defined(format))
		var format = false;

	if(!$defined(preorder))
		var preorder = false;

	var targetId = releaseId;
	var targetType = 'release';
	var options = {};

	if(!format && $('ReleaseFormat'))
	{
		format = $('ReleaseFormat').value;
	}

	if(format != false)
	{
		options.format = format;
		options.preorder = preorder;
		addItemToShoppingCart(targetId, targetType, options);
	}
}

function addGiftToShoppingCart(giftId)
{
	var targetId = giftId;
	var targetType = 'gift';
	var options = {};

	if($('giftGender'))
	{
		options.gender = $('giftGender').value;
	}

	if($('giftSize'))
	{
		options.size = $('giftSize').value;
	}

	if($('giftColor'))
	{
		options.color = $('giftColor').value;
	}

	addItemToShoppingCart(targetId, targetType, options);
}

function addItemToShoppingCart(targetId, targetType, options)
{
	var scOverlay = new MessageBox({
		'name': 'ShoppingCart',
		'onOk': function(MBObject)
		{
			MBObject.toggle();
			if(location.href.contains('shopping_carts') == true)
				location.href = '/shopping_carts';
		}
	});

	var myRequest = new Request(
	{
		method: 'post',
		url: '/shopping_carts/addItem',
		data: {
			'data[Item][targetId]':targetId,
			'data[Item][targetType]':targetType,
			'data[Item][options]': JSON.encode(options)
		},
		onSuccess: function(responseText, responseXML)
		{
			var data = JSON.decode(responseText);
			scOverlay.setText(data.result.msg);
			scOverlay.setType('MessageBox');
		}
	}).send();
}

function addPlaylistItem(trackId, type)
{
	var scOverlay = new MessageBox({
		'name': 'Playlist',
		'onOk': function(MBObject)
		{
			MBObject.toggle();
			openPlayer(trackId, type);
		}
	});

	var myRequest = new Request(
	{
		method: 'post',
		url: '/releases/addPlaylistItem',
		data: {
			'data[Track][id]':trackId,
			'data[Track][type]':type
		},
		onSuccess: function(responseText, responseXML)
		{
			var data = JSON.decode(responseText);
			scOverlay.toggle();
			openPlayer(trackId, type);
		}
	}).send();
}

/*
function reloadPlaylist()
{
	document.MP3PlayerSwiff.reloadPlaylist();
	//document.playerWindow.startTrack();
	window.focus();
}

function startTrack()
{
	if($('MP3Player'))
	{
		document.MP3PlayerSwiff.playTrack($('act_target_id').value);
	}
}

function swiffOnLoad()
{
	startTrack();
}
*/
function removeItem(index)
{
	var scOverlay = new MessageBox({
		'name': 'ShoppingCart',
		'onOk': function()
		{
			window.location.reload();
		}
	});

	var myRequest = new Request(
	{
		method: 'post',
		url: '/shopping_carts/removeItem',
		data: {
			'data[Item][index]':index
		},
		onSuccess: function(responseText, responseXML)
		{
			var data = JSON.decode(responseText);

			if(data.result.status == 'success')
			{
				//$('item'+index).destroy();
				//window.location.reload();
			}

			scOverlay.setText(data.result.msg);
			scOverlay.setType('MessageBox');
		}
	}).send();
}

var MessageBox = new Class({

	Implements: Options,

	options: {
		'name': 'Overlay',
		'text': 'Hallo Welt, dies ist ein Test. Hallo Welt, dies ist ein Test. Hallo Welt, dies ist ein Test. Hallo Welt, dies ist ein Test.',
		//'type': 'MessageBox',
		'type': 'Loading',
		'links': { 'ok': true, 'yes': false, 'no': false, 'cancel': false },
		'onOk': function(MBObject)
		{
			MBObject.toggle();
		},
		'onYes': function(MBObject)
		{
			MBObject.toggle();
		},
		'onNo': function(MBObject)
		{
			MBObject.toggle();
		},
		'onCancel': function(MBObject)
		{
			MBObject.toggle();
		}
	},

	elementOverlay: null,
	elementBox: null,
	elementBoxCoords: null,

	link: null,
	isVisible: true,

	initialize: function(options)
	{
		this.setOptions(options);

		this.initOverlay();
		this.initBox();
		this.initEvents();
	},

	initOverlay: function()
	{
		this.createOverlay();
	},

	initBox: function()
	{
		this.createLinks();
		this.createBox();
		this.repositionBox();
		this.setType(this.options.type);
	},

	initEvents: function()
	{
		window.addEvent('resize', function() {
			this.resizeOverlay();
			this.repositionBox();
		}.bind(this));
	},

	createBox: function()
	{
		var coordinates = window.getCoordinates();

		this.elementBox = new Element('div', {
			'id': 'box'+this.options.name,
			'class': 'overlayBox'
		});

		this.elementBox.inject(this.elementOverlay);
		this.elementBoxCoords = this.elementBox.getCoordinates();

		this.elementBoxTop = new Element('div', {
			'id': 'boxTop'+this.options.name,
			'class': 'overlayBoxTop',
			'html': this.options.text
		});

		this.elementBoxTop.inject(this.elementBox);

		this.elementBoxBottom = new Element('div', {
			'id': 'boxBottom'+this.options.name,
			'class': 'overlayBoxBottom'
		});

		this.setLinks(this.options.links);

		this.elementBoxBottom.inject(this.elementBox);

		this.elementLoading = new Element('div', {
			'id': 'boxLoading'+this.options.name,
			'class': 'overlayBoxLoading',
			'html': '<img src="/images/loading.gif" />'
		});

		this.elementLoading.inject(this.elementBox);
	},

	createLinks: function()
	{
		this.links = {
			'ok': 	new Element('span',
					{
						'id': 'overlayOk'+this.options.name,
						'class': 'overlayOkButton',
						'html': '<a href="#" onclick="return false;">OK</a>'
					}).addEvent('click', function()
					{
						this.options.onOk(this);
					}.bind(this)),
					
			'yes': 	new Element('span',
					{
						'id': 'overlayYes'+this.options.name,
						'class': 'overlayYesButton',
						'html': '<a href="#">YES</a>'
					}).addEvent('click', function()
					{
						this.options.onYes(this);
					}.bind(this)),
					
			'no': 	new Element('span',
					{
						'id': 'overlayNo'+this.options.name,
						'class': 'overlayNoButton',
						'html': '<a href="#">NO</a>'
					}).addEvent('click', function()
					{
						this.options.onNo(this);
					}.bind(this)),
			
			'cancel': new Element('span',
					{
						'id': 'overlayCancel'+this.options.name,
						'class': 'overlayCancelButton',
						'html': '<a href="#">CANCEL</a>'
					}).addEvent('click', function()
					{
						this.options.onCancel(this);
					}.bind(this))
		};
	},

	setLinks: function(links)
	{
		this.elementBoxBottom.empty();

		if(links.ok == true)
		{
			this.links.ok.inject(this.elementBoxBottom);
		}

		if(links.yes == true)
		{
			this.links.yes.inject(this.elementBoxBottom);
		}

		if(links.no == true)
		{
			this.links.no.inject(this.elementBoxBottom);
		}
		
		if(links.cancel == true)
		{
			this.links.cancel.inject(this.elementBoxBottom);
		}
	},

	createOverlay: function()
	{
		var coordinates = window.getCoordinates();

		this.elementOverlay = new Element('div', {
			'id': 'overlay'+this.options.name,
			'class': 'overlayBackground',
			'styles': {
				'width': coordinates.width,
				'height': coordinates.height
			}
		});

		this.elementOverlay.setOpacity('.9');

		this.elementOverlay.inject($('body'), 'after');
	},

	resizeOverlay: function()
	{
		var coordinates = window.getCoordinates();

		this.elementOverlay.setStyles({
			'width': coordinates.width,
			'height': coordinates.height
		});
	},

	repositionBox: function()
	{
		var coordinates = window.getCoordinates();
		this.elementBoxCoords = $('box'+this.options.name).getCoordinates();

		this.elementBox.setStyles({
			'left': ((coordinates.width/2)-(this.elementBoxCoords.width/2))+'px',
			'top': ((coordinates.height/2)-(this.elementBoxCoords.height/2))+'px'
		});
	},

	toggle: function()
	{
		if (this.isVisible == true)
		{
			this.elementOverlay.setStyle('display', 'none');
			this.isVisible = false;
		}
		else if (this.isVisible == false)
		{
			this.elementOverlay.setStyle('display', 'block');
			this.isVisible = true;
		}
	},

	hide: function()
	{
		this.elementOverlay.setStyle('display', 'none');
		this.isVisible = false;
	},

	setType: function(type)
	{
		switch(type)
		{
			case 'MessageBox':
				$('boxTop'+this.options.name).setStyle('display', 'block');
				$('boxBottom'+this.options.name).setStyle('display', 'block');
				$('boxLoading'+this.options.name).setStyle('display', 'none');
				break;
			case 'Loading':
				$('boxTop'+this.options.name).setStyle('display', 'none');
				$('boxBottom'+this.options.name).setStyle('display', 'none');
				$('boxLoading'+this.options.name).setStyle('display', 'block');
				break;
			default: break;
		}
	},

	setText: function(text)
	{
		this.elementBoxTop.set('html', text);
	}
});

function openImprint()
{
	var imprintWindow = window.open('/imprints/popup', "Imprint", "width=550,height=500,left=100,top=200,scrollbars=yes");
}

function shopping_cart_submit() {
	var conditions_accepted = check_terms_and_condition();
	var combine_preorder_chosen = check_preorder_combine_chosen();
	
	return (conditions_accepted && combine_preorder_chosen);
}

//returns true if one of the preorder options was chosen
//or there are no preorders in shopping cart at all, else returns false
function check_preorder_combine_chosen() {
	var preorderCombine = $('PreorderWait0'); 
	var preorderWait = $('PreorderWait1');
	
	if (preorderCombine && preorderWait) {
		if (preorderCombine.checked || preorderWait.checked) {
			return true;
		}
		else {
			var mbox = new MessageBox({
				'name': 'ShoppingCartPreorderValidation',
				'text': 'THERE ARE PREORDERS IN YOUR SHOPPING CART. PLEASE MAKE A CHOICE WHEN YOU WOULD LIKE TO HAVE YOUR ORDER SHIPPED.'
			});
			mbox.setType('MessageBox');
			return false;
		}
	}
	else {
		//no preorders in shopping cart
		return true;
	}
}

function check_terms_and_condition()
{
	if($('termsAccept').checked == false)
	{
		$('sc_error_terms').setStyle('display', 'block');
		return false;
	}
	else
		return true;
}

function setPayment(type)
{
	if(type == "pp_creditcard")
	{
		$('sel_payment').action = "https://www.paypal.com/cgi-bin/webscr";
	}
	else if(type == "ec_creditcard")
	{
		$('sel_payment').action = "https://txms.gzs.de/payssl.aspx";
	}
}

function toggleGallery()
{
	if($('galleryPictures'))
	{
		if($('galleryPictures').getStyle('display') == 'none')
			$('galleryPictures').setStyle('display', 'block');
		else
			$('galleryPictures').setStyle('display', 'none');
	}
}

function galleryPagination(direction)
{
	if($('galleryPictures') && $defined(direction) && (direction == 'left' || direction == 'right'))
	{
		if(direction == 'left' && parseInt($('ActGalleryPicture').get('html')) > 1)
			var newIndex = parseInt($('ActGalleryPicture').get('html'))-1;
		else if(direction == 'left' && parseInt($('ActGalleryPicture').get('html')) <= 1)
			var newIndex = parseInt($('MaxGalleryPicture').get('html'));
		else if(direction == 'right' && parseInt($('ActGalleryPicture').get('html')) < parseInt($('MaxGalleryPicture').get('html')))
			var newIndex = parseInt($('ActGalleryPicture').get('html'))+1;
		else if(direction == 'right' && parseInt($('ActGalleryPicture').get('html')) >= parseInt($('MaxGalleryPicture').get('html')))
			var newIndex = 1;

		var actIndex = parseInt($('ActGalleryPicture').get('html'));

		$('ActGalleryPicture').set('html', newIndex);

		$('galleryPicture_'+(actIndex-1)).setStyle('display', 'none');
		$('galleryPicture_'+(newIndex-1)).setStyle('display', 'block');

	}
}

function galleryShow(index)
{
	if($('galleryPictures'))
	{
		var numPictures = $('MaxGalleryPicture').get('html');
		for(var i=0;i<numPictures;i++)
		{
			if (i==index)
				$('galleryPicture_'+i).setStyle('display', 'block');
			else
				$('galleryPicture_'+i).setStyle('display', 'none');
		}
		$('ActGalleryPicture').set('html', index+1);
	}
}

function changeAboPrice()
{
	if($('GiftAboTerritoryId'))
	{
		var id = $('GiftAboTerritoryId').value;

		if($('Price'+id) && $('ActPrice') && $('BuyButton'))
		{
			$('ActPrice').set('html', $('Price'+id).value);
			$('BuyButton').setProperty('href', 'javascript:addGiftToShoppingCart('+id+');');

		}
	}
}

function giftOptionsChanged(giftId) {

	updateGiftPrice(giftId);
	updateSoldStatus(giftId);
	
	var genderElement = $('giftGender');
	var colorElement = $('giftColor');

	if (colorElement && genderElement) {
	
		var gender = genderElement.value;
		var color  = colorElement.value;
	
		loadGiftPic(giftId, gender, color)
		
		switch (gender) {
			case 'men':
			case 'man':
				gender = '1';
				break;
			case 'women':
			case 'woman':
				gender = '2';
				break;
			case 'unisex':
				gender = '3';
				break;
			default:
				gender = '0';
				break;
		}
		
		if (giftImages) {
			for(var i=0;i<giftImages.length;i++) {
				if (giftImages[i].gender == gender && giftImages[i].color == color) {
					galleryShow(i);
					break;
				}			
			}
		}
	}
}

function updateGiftPrice(giftId) {

	var genderElement = $('giftGender');
	var colorElement  = $('giftColor');
	var sizeElement   = $('giftSize');
	
	if (genderElement && colorElement && sizeElement) {

		if (this.priceRequest)
			this.priceRequest.cancel();
			
		var gender = genderElement.value;
		var color  = colorElement.value;
		var size   = sizeElement.value;
		
		if (gender == '')
			gender = 0;
		if (color == '')
			color = 0;
		if (size == '')
			size = 0;
	
		this.priceRequest = new Request({
			'method':'get',
			'url':'/gifts/getPrice/'+giftId+'/'+gender+'/'+color+'/'+size,
			'onSuccess':function(text) {
				$('giftPrice').set('text', text);
			}
		}).send();
	}
}

function updateSoldStatus(giftId) {

	var genderElement = $('giftGender');
	var colorElement  = $('giftColor');
	var sizeElement   = $('giftSize');
	
	if (genderElement && colorElement && sizeElement) {

		if (this.soldRequest)
			this.soldRequest.cancel();
			
		var gender = genderElement.value;
		var color  = colorElement.value;
		var size   = sizeElement.value;
		
		if (gender == '')
			gender = 0;
		if (color == '')
			color = 0;
		if (size == '')
			size = 0;
	
		this.soldRequest = new Request({
			'method':'get',
			'url':'/gifts/getStock/'+giftId+'/'+gender+'/'+color+'/'+size,
			'onSuccess':function(text) {
				if (text > 0) {
					$('buyButton').setStyle('display', 'inline');
					$('soldOut').setStyle('display', 'none');
				}
				else {
					$('buyButton').setStyle('display', 'none');
					$('soldOut').setStyle('display', 'inline');
				}
			}
		}).send();
	}
}

function makeEuro(centValue) {
	var string = "&euro; "+(centValue/100).toFixed(2);
	return string.replace(/\./,',');
}

function recalculateShippingCosts() {

	var pickupRadio = $('PacketShipping0'); 
	var combineRadio = $('PacketSeparation1'); 
	var preorderRadio = $('PreorderWait1'); 

	var pickup = pickupRadio ? pickupRadio.checked : false;
	var combine = combineRadio ? combineRadio.checked : false;
	var separatePreorders = preorderRadio ? preorderRadio.checked : false;

	if (pickup) {
		var shipping = 0;
	}
	else {
		if (combine) {
			if (separatePreorders) {
				var shipping = orderCosts.preorderShipping+orderCosts.separateDifference;
			}
			else {
				var shipping = orderCosts.combinedDifference;
			}
		}
		else {
			if (separatePreorders) {
				var shipping = orderCosts.preorderShipping+orderCosts.nopreorderShipping;
			}
			else {
				var shipping = orderCosts.normalShipping;
			}
		}
	}

	$('shippingCosts').set('html', makeEuro(shipping));
	$('totalCost').set('html', makeEuro(orderCosts.items+shipping));
}

function showControls(obj)
{
	var controls = $(obj).getElement('span.controls');
	controls.setStyle('display', 'block');
}

function hideControls(obj)
{
	var controls = $(obj).getElement('span.controls');
	controls.setStyle('display', 'none');
}