

var softwareBilliger = Class.create({
	menuHandler: null,
	scartTools: null,
	startTools: null,
	
	initialize: function() {
//		this.menuHandler = new softwareBilligerMenuHandler() ;
		this.customerMenuHandler = new SoftwareBilligerCustomerMenuHandler() ;
		this.startTools = new softwareBilligerStartTools() ;
		this.scartTools = new softwareBilligerScartTools() ;
		this.detailTools = new SoftwareBilligerDetailTools() ;
		this.listTools = new SoftwareBilligerListTools() ;
		this.fontsize = new SoftwareBilligerFontsize() ;
		
		$$('.popupLink').each(function(item){
			item.observe('click', function(event) {
				var url = this.href ;
				if (url.match(/\/info\/(.+?)\//)) {
					url = www_shoproot+'?func=htmlserv&wkid='+wkid+'&tmpl=shop_text_pop.html&in=std_'+RegExp.$1 ;
					var width = 500 ;
					var height = 500 ;
					var l = (screen.availWidth-width)/2 ;
					var t = (screen.availHeight-height)/2 ;
				    var win = window.open(url, 'oswin', 'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=0,width='+width+',height='+height+',screenX='+l+',screenY='+t+',left='+l+',top='+t) ;
				    if (win) {
				    	win.focus() ;
				    }
					event.stop() ;
				}
			}) ;
		}) ;
		
		if ($('selectbox_hersteller_link')) {
			$('selectbox_hersteller_link').observe('click',function(event){
				$('selectbox_hersteller').show();
				event.stop() ;
			}) ;
			
			$('selectbox_hersteller_link_close').observe('click',function(event){
				$('selectbox_hersteller').hide();
				event.stop() ;
			}) ;
		}
		
		$$('.focusBlurDefault').each(function(item){
			item.observe('focus', function(event) {
				if (this.value == this.defaultValue) {
					this.value = '' ;
				}
			}) ;
			
			item.observe('blur', function(event) {
				if (this.value == '') {
					this.value = this.defaultValue ;
				}
			}) ;
		}) ;
		
		// Flyout menu
		$$('#mainmenu > ul > li').each(function(item){
			item.observe('mouseover', function(event) {
				this.down('.flyout').show() ;
			}) ;
			item.observe('mouseout', function(event) {
				this.down('.flyout').hide() ;
			}) ;
		}) ;
		
		// Search autocomplete
		if ($('searchfield') && $('searchfield_choices')) {
			new Ajax.Autocompleter("searchfield", "searchfield_choices", www_shoproot+'?func=searchdo&tmpl=shop_search_ajax.html&ajax=1&anz=10', {
				minChars: 2,
				afterUpdateElement: function(text, li){
					$(li).up('form').submit() ;
				},
				onShow: function(element, update) {
					$(update).show() ;
				},
				frequency: 0.1
			});
		}
	},
	
	addToAjaxCart: function(artid, amount, formdata, img) {
		if ($('body').hasClassName('hide_prices')) {
			return ;
		}
		
		formdata.artnr = artid ;
		formdata.menge = amount ;
		
		var tmpRub1 = formdata.rub1 ? formdata.rub1 : rub1 ;
		
		new Ajax.Request(www_shoproot+'?func=scartajax&action=addToCart&rub1='+encodeURIComponent(tmpRub1)+'&rub2='+encodeURIComponent(rub2)+'&artnr='+encodeURIComponent(artid)+'&wkid='+encodeURIComponent(wkid), {
			parameters: formdata,
			onSuccess: function(response) {
				var scartlink = $('scartlink') ;
				var effects = [] ;
				if (!scartlink.visible()) {
					effects.push(new Effect.Move('scart', {y:-25,sync: true})) ;
					effects.push(new Effect.SlideDown(scartlink, {sync: true})) ;
				}
				var ajaxscart = $('ajaxscart') ;
				if (ajaxscart.visible()) {
					effects.push(new Effect.SlideUp(ajaxscart, {sync: true})) ;
				}
				
				var afterFinishFunction = function() {
					if (response.responseJSON) {
						$('scartamount').innerHTML = response.responseJSON.scartamount ;
						$('scartprice').innerHTML = response.responseJSON.scartprice ;
						$('ajaxscartcontent').innerHTML = response.responseJSON.ajaxscart ;
						new Effect.SlideDown(ajaxscart, {
							duration: 0.5,
							queue: { position: 'end', scope: 'ajaxscart'},
							afterFinish: function() {
								var queue = Effect.Queues.get('ajaxscart_hide') ;
								queue.each(function(effect) { effect.cancel(); });
//								for (var i = 0; i < queue.length; i++) {
//									alert(queue[i].inspect()) ;
//								}
//								if (queue.length == 0) {
									new Effect.SlideUp(ajaxscart, {
										delay: 5.0,
										duration: 1.0,
//										limit: 1,
										queue: { position: 'end', scope: 'ajaxscart_hide'}
									}) ;
//								}
							} 
						}) ;
					}
				} ;
				
				if (effects.length > 0) {
					new Effect.Parallel(effects, {
						duration: 0.5,
						queue: { position: 'end', scope: 'ajaxscart'},
						afterFinish: afterFinishFunction
					}) ;
				}
				else {
					afterFinishFunction() ;
				}
			}.bind(this)
		}) ;
		
		var flyImage = img.clone() ;
		flyImage.id = 'flyImage' ;
		flyImage.absolutize() ;
		flyImage.style.zIndex = 999 ;
		$('wrapper').insert(flyImage) ;
		flyImage.clonePosition(img) ;
		
		var scartElemPos = $('scart').cumulativeOffset() ;
		
		this.scartFlyEffect = new Effect.Parallel([
				new Effect.Move(flyImage, { sync: true, x: scartElemPos.left, y: scartElemPos.top, mode: 'absolute' }), 
				new Effect.Scale(flyImage, 0, { sync: true }) 
			],
			{ 
				duration: 1.5,
				afterFinish: function() {
					$('flyImage').remove() ;
				},
				queue: { position: 'end', scope: 'ajaxscart' }
			}
		);
		
	}
}) ;

var SoftwareBilligerFontsize = Class.create({
	initialize: function() {
		Cookie.init({name: 'sbFontsize', expires: 90});
	
		this.fontsize = Cookie.getData('fontsize') ;
		if (!this.fontsize) {
			this.fontsize = 100 ;
		}
		this.max = 180 ;
		this.min = 68 ;
		this.step = 8 ;
		
		if ($('normal_font')) {
			$('smaller_font').observe('click', this.decrease.bind(this)) ;
			$('normal_font').observe('click', this.reset.bind(this)) ;
			$('bigger_font').observe('click', this.increase.bind(this)) ;
		}
		
		this.setFontsize() ;
	},
	
	reset: function(event) {
		this.fontsize = 100 ;
		this.setFontsize() ;
		event.stop() ;
	},
	
	decrease: function(event) {
		this.setFontsize(-this.step) ;
		event.stop() ;
	},
	
	increase: function(event) {
		this.setFontsize(this.step) ;
		event.stop() ;
	},
	
	setFontsize: function(change) {
		if (change) {
			this.fontsize += change ;
		}
		if (this.fontsize < this.min) {
			this.fontsize = this.min ;
		}
		else if (this.fontsize > this.max) {
			this.fontsize = this.max ;
		}
		
		Cookie.setData('fontsize', this.fontsize);
		
		$('body').style.fontSize = this.fontsize+'%' ;
	}
}) ;

var softwareBilligerStartTools = Class.create({
	initialize: function() {
		// Kracher
		var kracherContent = $('kracher_content') ;
		var kracherNav = $('kracher_nav');
				
		if (kracherContent && kracherNav) {
			var pitems = kracherContent.select('.kracher_product') ;
			
			for (var i = 1; i <= pitems.length; i++) {
				var link = new Element('a', {'href':'#kr'+(i*this.showKracher)}).update(i) ;
				link.observe('click', function(event) {
					this.showKracherItems(event.findElement().href.replace(/.*#kr/, '')) ;
					if (this.periodicalExecuter) {
						this.periodicalExecuter.stop() ;
					}
					event.stop() ;
				}.bind(this)) ;
				kracherNav.down('.kracher_nav_pages').insert(new Element('li').update(link)) ;
//				if (i > 1) {
//					pitems[i-1].hide() ;
//				}
			}
			
			kracherNav.show() ;
			
			kracherNav.down('.kracher_nav_prev').observe('click', function(event){
				this.showKracherItems(this.showKracherIndex - this.showKracher) ;
				if (this.periodicalExecuter) {
					this.periodicalExecuter.stop() ;
				}
				event.stop() ;
			}.bind(this)) ;
			
			kracherNav.down('.kracher_nav_next').observe('click', function(event){
				this.showKracherItems(this.showKracherIndex + this.showKracher) ;
				if (this.periodicalExecuter) {
					this.periodicalExecuter.stop() ;
				}
				event.stop() ;
			}.bind(this)) ;
			
			this.showKracherItems(1) ;
			
			if (this.maxKracher > 1) {
				this.periodicalExecuter = new PeriodicalExecuter(function(pe) {
					this.showKracherItems(this.showKracherIndex + this.showKracher)
				}.bind(this), 10);
			}
		}
	},
	
	periodicalExecuter: null,
	showKracher: 1,
	maxKracher: null,
	showKracherIndex: 1,
	
	showKracherItems: function(num) {
		num *= 1 ;
		var kracherContent = $('kracher_content') ;
		if (!kracherContent) {
			this.maxKracher = 0 ;
			this.showKracherIndex = 0 ;
			return ;
		}
		var pitems = kracherContent.select('.kracher_product') ;
		
		this.maxKracher = pitems.length ;

		if (num > this.maxKracher) {
			num = 1
		}
		else if (num < 1) {
			num = this.maxKracher ;
		}
		
		var end = num + this.showKracher - 1 ;
		if (end > this.maxKracher) {
			end = this.maxKracher ;
		}
		
		pitems.each(function(pitem, n){
			(n+1 >= num && n < end) ? pitem.show() : pitem.hide() ;
		}.bind(this)) ;
		
		$('kracher_nav').select('.kracher_nav_pages li').each(function(link, n) {
			(n+1 >= num && n < end) ? link.addClassName('active') : link.removeClassName('active') ;
		}) ;
		
		this.showKracherIndex = num ;
	}
}) ;

var SoftwareBilligerListTools = Class.create({
	initialize: function() {
		$$('.product input[type="image"], .productsmall input[type="image"], .topsellerproduct input[type="image"], .kracher_product input[type="image"]').each(function(item,num){
			item.observe('click', this.addToCartButtonClickHandler.bind(this)) ;
		}.bind(this)) ;
	},
	
	addToCartButtonClickHandler: function(event) {
		event.stop() ;
		var elem = event.findElement() ;
		var img = elem.up('.product, .productsmall, .topsellerproduct, .kracher_product').down('.thumb img, .kracherthumb img') ;
		if (!img || !img.src || img.src.indexOf('nopic') != -1) {
			img = elem ;
		}
		var artnr = $F(elem).replace('artnr_', '') ;
//		var form = document.os_offer_list ? document.os_offer_list : document.os_list_view ;
//		var form = document.os_offer_list || document.os_list_view || document.os_search_view || document.os_topseller_list ;
		var form = elem.up('form') ;
		var rub1 = $F(form['rub1_'+artnr]) ;
		sb.addToAjaxCart(artnr, 1, {'rub1':rub1}, img) ;
	}
}) ;

var SoftwareBilligerDetailTools = Class.create({
	initialize: function() {
		var tab_button_container = $('tab_button_container') ;
		if (!tab_button_container) {
			return ;
		}
		
		tab_button_container.show() ;
		tab_button_container.observe('click', this.tabButtonContainerClickHandler.bind(this)) ;
		
		$$('#tab_container .tab h1, #tab_container .tab h2').each(function(item,num){item.hide();}) ;
		
		$$('a[href="#tab_reviews"]').each(function(item,num){
			item.observe('click', function(event) {
				if (!$('tab_reviews')) {
					event.stop() ;
					return ;
				}
				this.activateTab('reviews') ;
				$('tab_reviews').scrollTo() ;
			}.bind(this));
		}.bind(this)) ;
		
		// Get tab from query
		var tab = 'description' ;
		if ($('tab_button_shortdescription')) {
			tab = 'shortdescription' ;
		}
		if (window.location.search.match(/[?&]tab=([^&]+)/)) {
			tab = RegExp.$1 ;
		}
		
		this.activateTab(tab) ;
		//this.activateTab('description') ;
		
		// Ajax scart
		$('addToCartButton').observe('click', this.addToCartButtonClickHandler.bind(this)) ;
	},
	
	addToCartButtonClickHandler: function(event) {
		event.stop() ;
		var img = $('detailImage') ;
		if (!img || img.src.indexOf('nopic') != -1) {
			img = event.findElement() ;
		}
		sb.addToAjaxCart($F(document.os_detail_view.artid), $F(document.os_detail_view.menge), Form.serialize(document.os_detail_view, { hash: true }), img) ;
	},
	
	tabButtonContainerClickHandler: function(event) {
		var item = event.findElement('a') ;
		if (!item) {
			return ;
		}
		
		this.activateTab(item) ;
		
		event.stop() ;
	},
	
	activateTab: function(tabname) {
		var button ;
		if (typeof tabname == 'object') {
			button = tabname ;
			tabname = tabname.id.replace('tab_button_', '') ;
		}
		else {
			button = $('tab_button_'+tabname) ;
		}
		
		$$('#tab_button_container a').each(function(item,num){item.removeClassName('active');}) ;
		button.addClassName('active') ;
		
		$$('#tab_container .tab').each(function(item,num){item.hide();}) ;
		$('tab_'+tabname).show() ;
	}
}) ;

var softwareBilligerScartTools = Class.create({
	deliveryAddressActive: false,
	keyups: {},
	
	keyup: function(id, command) {
		window.clearInterval(this.keyups[id]) ;
		this.keyups[id] = window.setTimeout(command, 150) ;
	},
	
	initialize: function() {
		if (location.search.indexOf('func=scart') == -1) {
			return ;
		}
		
		// Add up and down buttons for amount inputs
		$$('#scartform input.amount').each(this.addUpDownButtons.bind(this)) ;
		
		if (location.hash) {
			this.activateScartpart(location.hash.replace('#', '')) ;
		}
		
		$('content').observe('click', this.contentClickHandler.bind(this)) ;
		$('content').observe('keyup', this.contentClickHandler.bind(this)) ;
		
		// Show/hide delivery address
		this.deliveryAddressActive = deliveryAddressActive ;
		this.hideShowDeliveryAddress() ;
		// Observe delivery_address_toggle_link
		$('delivery_address_enable_link').observe('click', this.deliveryAddressToggleClickHandler.bind(this)) ;
		$('delivery_address_disable_link').observe('click', this.deliveryAddressToggleClickHandler.bind(this)) ;
		$('delivery_address_nojs').hide() ;
		
		// Address check
		$('address_container').observe('keyup', this.addressContainerKeyUpHandler.bind(this)) ;
		$('summary_container').observe('click', this.summaryContainerClickHandler.bind(this)) ;
		
		// Country select
		$('address_container').down('select[name="Land"]').observe('change', this.countrySelectChangeHandler.bind(this)) ;
		$('address_container').down('select[name="Liefer-Land"]').observe('change', this.countrySelectChangeHandler.bind(this)) ;
		
		// Payment delivery
		$$('#payment_delivery_container input[checked="checked"]').each(function(item,num){
			item.up('.payment_delivery_item').addClassName('payment_delivery_item_active') ;
		}) ;
//		this.paymentDeliveryOk() ;
		
//		$('payment_delivery_container').observe('click', function(event){alert('t');}) ;
		$('payment_delivery_container').observe('click', this.paymentDeliveryContainerClickHandler.bind(this)) ;
		
		var wait_img = new Image() ;
		wait_img.src = $('wait_hint').href ;
		fileLoadingImage = wait_img.src ;
		$('os_order').observe('submit', function(){
			//$('loadingLink').down('img').src = wait_img.src ;
			myLightbox.start($('wait_hint'));
			if ($('bottomNav')) {
				$('bottomNav').hide() ;
			}
		}) ;
		
		// Check data
		this.checkInput() ;
	},
	
	contentClickHandler: function(event) {
		var item = event.findElement('.scartpart_container') ;
		if (!item) {
			return ;
		}
		
		this.activateScartpart(item) ;
		
		var eventElem = event.findElement() ;
	},
	
	activateScartpart: function(scartpart) {
		if (typeof scartpart == 'object') {
			scartpart = scartpart.id ;
		}
		
		if (!scartpart) {
			return ;
		}
		
		if (scartpart == 'error_container') {
			return ;
		}

		var name = scartpart.replace('_container', '') ;
		var elem = $(name+'_checkmark') ;
		if (!elem) {
			return ;
		}
		
		if (elem.hasClassName('input_active')) {
			return ;
		}
		
		$$('.checkmark').each(function(item,num){item.removeClassName('input_active');}) ;
		elem.addClassName('input_active') ;
		
		this.sanitizeScartpartClasses() ;
	},
	
	sanitizeScartpartClasses: function(item) {
		var items = new Array() ;
		if (item) {
			items.push($(item)) ;
		}
		else {
			items = $$('.checkmark') ;
		}
		
		items.each(function(item,num) {
			if (item.hasClassName('input_active') && item.hasClassName('input_ok')) {
				item.addClassName('input_active_ok') ;
			}
			else {
				item.removeClassName('input_active_ok') ;
			}
		}) ;
	},
	
	paymentDeliveryContainerClickHandler: function(event) {
		var nachnahmePayment = 'nachnahme' ;
		var nachnahmeDelivery = 'nachnahme' ;
		var abholungPayment = 'bar' ;
		var abholungDelivery = 'abholung' ;
		var vorkassePayment = 'vorkasse' ;
		var standardDelivery = ['standard'] ;
		
		var item = event.findElement('.payment_delivery_item') ;
		if (!item) {
			return ;
		}
		
		var cont = event.findElement('#payment_delivery_container') ;
		item.addClassName('payment_delivery_item_active') ;
		item.down('input[name=porto_bestell], input[name=delivery]').checked = true ;
		if (item.id == 'delivery-'+nachnahmeDelivery && $('input_delivery-'+nachnahmeDelivery) && $('input_payment-'+nachnahmePayment)) {
			$('input_delivery-'+nachnahmeDelivery).writeAttribute('checked') ;
			$('input_payment-'+nachnahmePayment).writeAttribute('checked') ;
		}
		else if (item.id == 'payment-'+abholungPayment && $('input_delivery-'+abholungDelivery)) {
			$('input_delivery-'+abholungDelivery).writeAttribute('checked') ;
		}
		else if (($('input_delivery-'+nachnahmeDelivery) && $('input_delivery-'+nachnahmeDelivery).checked) || ($('input_delivery-'+abholungDelivery) && $('input_delivery-'+abholungDelivery).checked)) {
			for (var i = 0; i < standardDelivery.length; i++) {
				if ($('input_delivery-'+standardDelivery[i])) {
					$('input_delivery-'+standardDelivery[i]).writeAttribute('checked') ;
					break ;
				}
			}
		}
		else if (item.id.indexOf('delivery') != -1 && (($('input_payment-'+nachnahmePayment) && $('input_payment-'+nachnahmePayment).checked) || ($('input_payment-'+abholungPayment) && $('input_payment-'+abholungPayment).checked))) {
			$('input_payment-'+vorkassePayment).writeAttribute('checked') ;
		}

		$$('#payment_delivery_container input[type="radio"]').each(function(item,num){
			if (item.checked) {
				item.up('.payment_delivery_item').addClassName('payment_delivery_item_active') ;
			}
			else {
				item.up('.payment_delivery_item').removeClassName('payment_delivery_item_active') ;
			}
		}) ;
		
		var os_order_elem = $('os_order') ;
		os_order_elem.action = os_order_elem.action.replace(/#.*/, '') ;
		os_order_elem.action = os_order_elem.action+'&set_payment_delivery=1#payment_delivery_container' ;
		os_order_elem.submit() ;
		
		this.checkInput() ;
		this.activateScartpart('payment_delivery') ;
		
		event.stop() ;
	},
	
	paymentDeliveryOk: function() {
		var os_order_elem = $('os_order') ;
		
		var delivery = false ;
		if (os_order_elem.delivery && os_order_elem.delivery.length > 0) {
			for (i = 0; i < os_order_elem.delivery.length; i++) {
				if (os_order_elem.delivery[i].checked) {
					delivery = true ;
					break ;
				}
			}
		}

		var payment = false ;
		if (os_order_elem.porto_bestell && os_order_elem.porto_bestell.length > 0) {
			for (i = 0; i < os_order_elem.porto_bestell.length; i++) {
				if (os_order_elem.porto_bestell[i].checked) {
					payment = true ;
					break ;
				}
			}
		}
		
		if (delivery && payment) {
			$('payment_delivery_checkmark').addClassName('input_ok') ;
		}
		else {
			$('payment_delivery_checkmark').removeClassName('input_ok') ;
		}
	},
	
	addressContainerKeyUpHandler: function(event) {
		var elem = event.findElement() ;
		if (elem.tagName.toLowerCase() != 'select' && elem.tagName.toLowerCase() != 'input') {
			return ;
		}
		
		this.keyup('AjaxCheckInput', this.checkInput.bind(this)) ;
	},
	
	summaryContainerClickHandler: function(event) {
		var elem = event.findElement() ;
		if (elem.tagName.toLowerCase() != 'input' && elem.tagName.toLowerCase() != 'label') {
			return ;
		}
		
		this.checkInput() ;
	},
	
	checkScartAmount: function() {
		var amount_inputs = $$('input.amount') ;
		var amount = 0 ;
		for (var i = 0; i < amount_inputs.length; i++) {
			amount += parseInt(amount_inputs[i].value) ;
		}
		if (amount > 0) {
			$('scart_checkmark').addClassName('input_ok') ;
		}
		else {
			$('scart_checkmark').removeClassName('input_ok') ;
		}
		this.sanitizeScartpartClasses() ;
	},
	
	checkInput: function() {
		this.checkScartAmount() ;
		
		new Ajax.Request(www_shoproot+'?func=scartajax&action=check_input', {
			parameters: $('os_order').serialize(),
			onSuccess: function(response) {
				if (response.responseJSON) {
					if (response.responseJSON.errcode == 1) {
						var summary_error = false ;
						var address_error = false ;
						var payment_delivery_error = false ;
						for (var k in response.responseJSON.backerror) {
							if (k == 'AGB' || k == 'Datenschutz') {
								summary_error = true ;
							}
							else if (k == 'porto_bestell' || k == 'delivery') {
								payment_delivery_error = true ;
							}
							else {
								address_error = true ;
							}
						}
						
						if (address_error) {
							$('address_checkmark').removeClassName('input_ok') ;
						}
						else {
							$('address_checkmark').addClassName('input_ok') ;
						}
						
						if (payment_delivery_error) {
							$('payment_delivery_checkmark').removeClassName('input_ok') ;
						}
						else {
							$('payment_delivery_checkmark').addClassName('input_ok') ;
						}
						
						if (summary_error) {
							$('summary_checkmark').removeClassName('input_ok') ;
						}
						else {
							$('summary_checkmark').addClassName('input_ok') ;
						}
					}
					else {
						$('address_checkmark').addClassName('input_ok') ;
						$('payment_delivery_checkmark').addClassName('input_ok') ;
						$('summary_checkmark').addClassName('input_ok') ;
					}
				}
				this.sanitizeScartpartClasses() ;
			}.bind(this)
		});
	},
	
	addUpDownButtons: function(item, num) {
		var div = new Element('div', {'class':'amount_buttons'}) ;
		var buttonUp = new Element('img', {'src':picdir+'/amount_button_up.gif', 'class':'amount_button_up', 'id':'amount_button_up-'+item.id}) ;
		var buttonDown = new Element('img', {'src':picdir+'/amount_button_down.gif', 'class':'amount_button_down', 'id':'amount_button_down-'+item.id}) ;
		div.insert({top:buttonDown}) ;
		div.insert({top:buttonUp}) ;
		item.up('td > div').insert({top:div}) ;
//		item.insert({before:div}) ;
//		item.wrap(new Element('div', {'class':'amount_input'})) ;
		div.observe('click', this.amountButtonClickHandler.bind(this)) ;
	},
	
	amountButtonClickHandler: function(event) {
		var img = event.findElement('img') ;
		if (!img || !img.id || img.id.indexOf('amount_button_') == -1) {
			return ;
		}
		var inputId = img.id.replace(/amount_button_(up|down)-/, '') ;
		var amount = parseInt($F(inputId)) ;
		amount += 1*(img.id.indexOf('up') != -1 ? 1 : -1) ;
		if (amount < 0) {
			amount = 0 ;
		}
		Form.Element.setValue(inputId, amount) ;
		this.checkScartAmount() ;
		$(inputId).up('form').submit() ;
	},
	
	countrySelectChangeHandler: function(event) {
		form = event.findElement('form') ;
		if (!form) {
			return ;
		}
		form.action = form.action.replace(/#.*/, '') ;
		form.action = form.action+'#address_container' ;
		form.submit() ;
	},
	
	deliveryAddressToggleClickHandler: function(event) {
		this.toggleDeliveryAddress();
		event.stop() ;
		this.activateScartpart('address') ;
	},
	
	toggleDeliveryAddress: function() {
		this.deliveryAddressActive = !this.deliveryAddressActive ;
		$('input_delivery_address').setValue(this.deliveryAddressActive ? 'ABWEICHEND' : '') ;
		this.hideShowDeliveryAddress() ;
		this.checkInput() ;
	},
	
	hideShowDeliveryAddress: function() {
		if (this.deliveryAddressActive) {
			$('delivery_address_container').show() ;
			$('delivery_address_enable_link').hide() ;
			$('delivery_address_disable_link').show() ;
		}
		else {
			$('delivery_address_container').hide() ;
			$('delivery_address_enable_link').show() ;
			$('delivery_address_disable_link').hide() ;
		}
	}
}) ;

var SoftwareBilligerCustomerMenuHandler= Class.create({
	initialize: function() {
		if (!$('menu')) {
			return ;
		}
		
		$('menu').observe('click', this.customerMenuClickHandler.bind(this)) ;
	},
	
	customerMenuClickHandler: function(event) {
		var item = event.findElement('a') ;
		if (!item) {
			return ;
		}
		
		var ul = item.up('ul') ;
		ul.select('li a').each(function(a_item){
			var classname = $(a_item).readAttribute('href').replace('#', '') ;
			if (item == a_item) {
				$('body').addClassName(classname) ;
				if ($('body').hasClassName('active_'+classname)) {
					$('body').removeClassName('hide_prices') ;					
				}
				else {
					$('body').addClassName('hide_prices') ;					
				}
			}
			else {
				$('body').removeClassName(classname) ;
			}
		}) ;
		
		
		event.stop() ;
	}
}) ;

var softwareBilligerMenuHandler = Class.create({
	menuOutTimer: null,
	menuOutDelay: 500,
	
	initialize: function() {
		if (!$('menu') || !$('submenu')) {
			return ;
		}
	
		with($('menu')) {
			observe('mouseover', this.menuMouseOverHandler.bind(this)) ;
			observe('mouseout', this.menuMouseOutHandler.bind(this)) ;
		}
		with($('submenu')) {
			hide() ;
			observe('mouseout', this.submenuMouseOutHandler.bind(this)) ;
			observe('mousemove', this.submenuMouseMoveHandler.bind(this)) ;
		}
	},

	showSubmenu: function(link) {
		var kategorie = link.id.replace('menulink_', '') ;
		if (!kategorie) {
			return ;
		}
	
		window.clearTimeout(this.menuOutTimer) ;
	
		$$("#submenu_bottom > ul").each(function(item, num){
			item.addClassName('inaktiv').removeClassName('aktiv') ; ;
		});
		$$("#menu a").each(function(item, num){
		    item.removeClassName('hover_aktiv') ;
		    item.addClassName('hover_inaktiv') ;
		});
		
		$('submenu_'+kategorie).addClassName('aktiv').removeClassName('inaktiv') ;
		$('submenu').show();
		link.addClassName('hover_aktiv') ;
	},
	
	requestHideSubmenu: function() {
		this.menuOutTimer = window.setTimeout(this.hideSubmenu.bind(this), this.menuOutDelay) ;
	},
	
	hideSubmenu: function() {
		$$("#menu a").each(function(item, num){
		    item.removeClassName('hover_inaktiv') ;
		    item.removeClassName('hover_aktiv') ;
		});
	
		$('submenu').hide();
	},
	
	menuMouseOverHandler: function(event) {
		var link = event.findElement('a') ;
		if (!link || !link.id) {
			return ;
		}
	
		this.showSubmenu(link) ;
	},
	
	menuMouseOutHandler: function(event) {
		var link = event.findElement('a') ;
		if (!link || !link.id) {
			return ;
		}
	
		this.requestHideSubmenu() ;
	},
	
	submenuMouseOutHandler: function(event) {
		this.requestHideSubmenu() ;
	},
	
	submenuMouseMoveHandler: function(event) {
		window.clearTimeout(this.menuOutTimer) ;
	}
}) ;


var sb ;
onLoads.push(function() { sb = new softwareBilliger()}) ;



var Cookie = {
		  data: {},
		  options: {expires: 1, domain: "", path: "", secure: false},

		init: function(options, data) {
		  Cookie.options = Object.extend(Cookie.options, options || {});

		  var payload = Cookie.retrieve();
		        if(payload) {
		            Cookie.data = payload.evalJSON();
		        }
		        else {
		            Cookie.data = data || {};
		        }
		        Cookie.store();
		    },
		    getData: function(key) {
		        return Cookie.data[key];
		    },
		    setData: function(key, value) {
		        Cookie.data[key] = value;
		        Cookie.store();
		    },
		    removeData: function(key) {
		        delete Cookie.data[key];
		        Cookie.store();
		    },
		    retrieve: function() {
		        var start = document.cookie.indexOf(Cookie.options.name + "=");

		        if(start == -1) {
		            return null;
		        }
		        if(Cookie.options.name != document.cookie.substr(start, Cookie.options.name.length)) {
		            return null;
		        }

		        var len = start + Cookie.options.name.length + 1;   
		        var end = document.cookie.indexOf(';', len);

		        if(end == -1) {
		            end = document.cookie.length;
		        } 
		        return unescape(document.cookie.substring(len, end));
		    },
		    store: function() {
		        var expires = '';

		        if (Cookie.options.expires) {
		            var today = new Date();
		            expires = Cookie.options.expires * 86400000;
		            expires = ';expires=' + new Date(today.getTime() + expires);
		        }

		        document.cookie = Cookie.options.name + '=' + escape(Object.toJSON(Cookie.data)) + Cookie.getOptions() + expires;
		    },
		    erase: function() {
		        document.cookie = Cookie.options.name + '=' + Cookie.getOptions() + ';expires=Thu, 01-Jan-1970 00:00:01 GMT';
		    },
		    getOptions: function() {
		        return (Cookie.options.path ? ';path=' + Cookie.options.path : '') + (Cookie.options.domain ? ';domain=' + Cookie.options.domain : '') + (Cookie.options.secure ? ';secure' : '');      
		    }
		};
