var oetker;
	if (!oetker) { oetker = {} }
	$.extend(oetker, {
		nyro_options : {},
		VERSION: 'Release 1.2 (2010-04-14)',
		getBrowser: function() {
			b = ''
			if (/chrome/.test( navigator.userAgent.toLowerCase() )) b = 'ch'
			if (/a/[-1]=='a') b = 'ff'
			if (/firefox\/3.6/.test( navigator.userAgent.toLowerCase() )) b = 'ff' // to recognize ff 3.6
			if ('\v'=='v') b = 'ie'
			if (/^function \(/.test([].sort)) b = 'op'
			if (/a/.__proto__=='//') b = 'sf'
			if (b == '') b = 'undefinded'
			return b
		},
		moveLightbox: function(what) {
			var contentHeight = oetker.getDimension('h')
			,	contentWidth = oetker.getDimension('w')
			,	clientHeight = oetker.getWindowDimension('h')
			,	clientWidth = oetker.getWindowDimension('w')
			,	topPosition = ((clientHeight - contentHeight) / 2) + $(document).scrollTop()
			,	leftPosition = (clientWidth - contentWidth) / 2
			,	modalwrapper = $('#nyroModalWrapper')
			,	modalbg = $('#nyroModalBg')
			switch (what) {
				case 'resize' :
					modalwrapper.css({
						'top': topPosition+'px',
						'left': leftPosition+'px'
					})
					modalbg.css('width',clientWidth+'px')
					break
				case 'scroll' :
					modalwrapper.css('top',topPosition+'px')
					break
				default :
					//recalculate bg-height for chrome
					if (oetker.getBrowser() == 'ch') {
						modalbg.css('height', $(document).height() + 'px')
					}
					$('#nyroModalWrapper, .wrapperIframe, #nyroModalContent, #nyroModalIframe').css({
						height: contentHeight,
						width: contentWidth
					})
					modalwrapper.css({
						top: topPosition+'px',
						left: leftPosition+'px'
					})
					break
			}
		},
		getWindowDimension: function(what) {
			var windowWidth = 0
			,	windowHeight = 0;

			if( typeof( window.innerWidth ) == 'number' ) {
				windowWidth = document.innerWidth;
				windowHeight = document.innerHeight;
			}
			if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
				windowWidth = document.documentElement.clientWidth;
				windowHeight = document.documentElement.clientHeight;
			}
			if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
				windowWidth = document.body.clientWidth;
				windowHeight = document.body.clientHeight;
			}
			var returnVal = (what == "w") ? windowWidth : windowHeight;
			return returnVal
		},
		getDimension: function(what) {
			var elHeight,
				elWidth;

			if ( (typeof nyroModalIframe) != "undefined") {
				elHeight = ($.browser.msie) ? nyroModalIframe.document.getElementById('zoomwindowImage').height : document.getElementById('nyroModalIframe').contentDocument.getElementById('zoomwindowImage').height
				elWidth = ($.browser.msie) ? nyroModalIframe.document.getElementById('zoomwindowImage').width : document.getElementById('nyroModalIframe').contentDocument.getElementById('zoomwindowImage').width
			} else {
				elHeight = $("#nyroModalImg").height()
				elWidth = $("#nyroModalImg").width()
			}

			return (what == "w") ? elWidth : elHeight;
		},
		nyroSetOptions: function(type) {
			nyro_options = {
				forceType: type,
				zIndexStart: 600,
				minWidth: 1,
	  			minHeight: 1,
				windowResize: false,
				resizable: false,
				autoSizable: false,
		    	showBackground: function(elts, settings, callback){elts.bg.css({opacity:0}).fadeTo(200, 0.4, callback)},
				showContent: function(elts, settings, callback){
					elts.contentWrapper
					.css({
						width: settings.width + 'px',
						height: settings.height + 'px',
						opacity: 1
					})
					.fadeIn()
					callback()
					if (type != 'iframe') oetker.moveLightbox('resize')
				},
				hideContent: function(elts, settings, callback) {
					elts.contentWrapper.hide()
					callback()
				},
				css: {
					bg: {height: $(document).height()+'px'},
					loading: {display: 'none'}
				},
				endRemove: function() {if (oetker.getBrowser() != 'ie') $('.frameMain .container').css('zIndex',300)}
			}
			return nyro_options
		},

		
		
		initSBT: function(sbtsrc) {
			// get elements from json
			$.getJSON(oe_SBTDataPath+'sbt-data.js', function(data) {
				$.each($(sbtsrc), function(sbtindex,sbt) {
					var sbt = $(sbt)
					,	sbtarea = '.sbt-box'
					,	sbtclasses = sbt.parent()[0].className
					,	isPlacedRight = sbtclasses.indexOf('sbt-align-br') > -1 || sbtclasses.indexOf('sbt-align-tr') > -1
					
					// language fallback (=> en => de )
					if (!(oe_SBTLanguage in data)) {
						oe_SBTLanguage = ('en' in data) ? 'en' : 'de'
					}
					$.each(data[oe_SBTLanguage].items, function(k,v){
						// bookmarks or likes, generating layers
						var layerstring = '<div class="sbt-layer sbt-layer-'+k+'">'+
											'<div class="sbt-layer-top"></div>'+
											'<div class="sbt-text">'+
												'<h4>'+v.headline+'</h4>'+
												'<p>'+v.disclaimer+'</p>'+
											'</div>'+
											'</div>'
						,	layerclose = $('<a class="sbt-close" href="#">'+v.close+'</a>')
						,	txtcontent =  $(layerstring).find('.sbt-text')
						,	sbtlayer = txtcontent.prepend(layerclose).end()
						,	isBM = (k=='bookmarks')
						,	layerbak = {'Facebook':sbtlayer.clone(true),'Google':sbtlayer.clone(true)}

						// close layer through close icon or cancel button
						$(sbtarea+' .sbt-layer-'+k+' a.sbt-close, '+sbtarea+' .sbt-layer-'+k+' .sbt-cancel').live('click',function(e) {
							e.preventDefault()

							var name = $(this).attr('class').substr(4)
							,	prop = 19
							,	type = 'service'
							,	called = $(this).closest('.sbt-layer').data('called') || ''
							,	count

							if (called=='fb-like') {
								// fb like
								prop = 20
								type = 'button-like'
							} else if (called=='google-plus1') {
								// google +1
								prop = 21
								type = 'button-plus'
							}
							
							// set close button values
							if (name=='close' && k=='likes' && (called=='fb-like' || called=='google-plus1')) {
								count = (!$(this).parent('.sbt-text').next('.sbt-actions').find('iframe').length) ? '01' : '02'
							}

							// call tracking
							oetker.sbtTrack(prop, type, name, count)
							
							$('.sbt-layer').hide()
							//decolorize toolbar
							$('.sbt .sbt-active').removeClass('sbt-active')
						})
						
						/* menu hover closes sbt */
						$('#menuMain').mouseenter(function(){
							$('.sbt-layer').hide()
							$('.sbt .sbt-active').removeClass('sbt-active')
						})
						
						if (isBM) {
							// bookmarks
							var bmlist = $('<ul class="clearfix" />')
							bmlist.insertAfter(txtcontent)
						} else {
							// likes
							var actionbox = $('<div class="sbt-actions clearfix"><a href="#" class="sbt-cancel">'+v.canceltext+'</a><a href="#" class="sbt-next">'+v.continuetext+'</a></div>')
							,	actionboxbak = actionbox.clone()
							
							// close layer through cancelling
							sbtlayer.append(actionbox)
						}
						
						// attach layer to DOM
						sbtlayer.insertAfter(sbt)

						// generate lis for toolbar & layer
						$.each(v.services, function(key,val){
						
							var listitem = $('<li />')
							,	titlekey = (val.title) ? val.title : key
							,	svc = $('<a>'+titlekey+'</a>')
							,	currenttxt = txtcontent.children()
							,	map = {
									'fb':'facebook',
									'twitter':'twitter',
									'delicious':'delicious',
									'wong':'misterwong',
									'digg':'digg',
									'yigg':'yigg',
									'google':'google',
									'fb-like':'like',
									'google-plus1':'plus'
								}
							
							svc.attr({
								'href': '#',
								'class': 'sbt-icon sbt-svc-'+val.css,
								'title': titlekey
							})
							.click(function(e){
								e.preventDefault()
								
								// call tracking
								oetker.sbtTrack(18,'icon',map[val.css])

								// activate bm item
								if (isBM) {
									sbtlayer.find('.sbt-selected').removeClass('sbt-selected')
									sbtlayer.find('.sbt-svc-'+val.css).addClass('sbt-selected')
								} else {
									// like
									sbtlayer.data('called', val.css);
									// just styling
									currenttxt.filter('h4')[(key=='Google') ? 'addClass' : 'removeClass']('sbt-google')
									currenttxt.find('.oe-current-service').text(key)
									txtcontent.empty().append(currenttxt)
									
									actionbox.removeClass('sbt-loaded')
									// fill in service name
									if (actionbox.find('iframe').length) {
										actionbox.html(actionboxbak.children())
										actionboxbak = actionbox.clone()
									} else {
										actionbox.html(actionboxbak.clone().children())
									}
									layerbak[key] = sbtlayer
									
									sbtlayer.filter('.sbt-layer-'+k).html(sbtlayer.children())
								}
								
								// hide open layer, position and show new layer
								$('.sbt-layer').hide()
								
								// check for layer alignment
								var sbtwidth = sbtlayer.width()
								,	layerpos = (isPlacedRight) 
									? svc.position().left - sbtwidth + 20 + svc.outerWidth()/2
									: svc.position().left - 14 + svc.outerWidth()/2;

								sbtlayer.css('left',layerpos+'px').show()
								
								// colorizing toolbar
								$('.sbt .sbt-active').removeClass('sbt-active')
								listitem.addClass('sbt-active')
								sbt.addClass('sbt-active')

								// loading 'real' like buttons into layer on clicking next button
								$('.sbt-next').one('click',function(e) {
									e.preventDefault()
									
									var campaign = '?cmpid=sb-'+oe_SBTCampaignSiteName+'-'+map[val.css]
									,	fbcode = '<div id="fb-root"></div><fb:like href="'+oe_SBTPageurl+campaign+'" send="false" width="150" show_faces="false"></fb:like>'
									,	googlecode = '<div id="plusone-div"></div>'
									,	prompt = $('<p>'+v.prompt+'</p>').find('.oe-current-service').text(titlekey).end()
									,	sbtlayer = $(sbtarea+' .sbt-layer-'+k)
									,	called = sbtlayer.data('called')
									,	prop = (called=='fb-like') ? 20 : 21

									
									// call tracking
									oetker.sbtTrack(prop, sbtlayer.data('called'), 'next')
									
									sbtlayer.find('p').replaceWith(prompt)
									sbtlayer.find('.sbt-actions')
										.html((key=='Google') ? googlecode : fbcode)
										.addClass('sbt-loaded')									
									
									// parse facebook like button when fb is initialized, add callback function for tracking
									if (key!='Google' && typeof window.fbAsyncInit != 'function') {
										var fbscript = document.createElement( 'script' );
										fbscript.type = 'text/javascript';
										fbscript.text  = 'window.fbAsyncInit = function() {FB.Event.subscribe("edge.create", function(response) { oetker.sbtTrack(20,"button-like","submit") });};(function(d, s, id) {var js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) {return;}js = d.createElement(s); js.id = id;js.async="true";js.src = "//connect.facebook.net/'+data[oe_SBTLanguage].locale+'/all.js#xfbml=1";fjs.parentNode.insertBefore(js, fjs);}(document, "script", "facebook-jssdk"));';
										
										document.body.appendChild(fbscript);
									} else if (key!='Google') {
										// re-render when layer opens again
										FB.XFBML.parse();
									} else if (key=='Google') {
										window.___gcfg = {lang: data[oe_SBTLanguage].lang}
										
										// append callback function for tracking
										var gscript = document.createElement("script");
										gscript.type = "text/javascript";
										gscript.text = "function plusone_vote(obj) {if (obj.state=='on') {oetker.sbtTrack(21, 'button-plus', 'submit')}}";
										document.body.appendChild(gscript);
										
										// parse google +1 button
										function plusoneready(){
											gapi.plusone.render('plusone-div',{
												"callback": "plusone_vote",
												"href": oe_SBTPageurl+campaign
											});
										}
										
										// append google +1 script
										(function() {
											var po = document.createElement("script");
											po.type = "text/javascript";
											po.async = true;
											po.src = "//apis.google.com/js/plusone.js";

											po.onload = plusoneready;
											// Only for IE 6 and 7
											po.onreadystatechange = function() {
												if( this.readyState == 'complete' ) { plusoneready(); }
											}

											document.body.appendChild(po);
										})();
									}

									layerbak[key] = sbtlayer
								})
							})
							
							// add span for Facebook text -> sliding doors
							if (k=='likes' && key=='Facebook'){
								svc.wrapInner('<span></span>')
							}

							// fill layers
							if (isBM) {
								// bookmarks
								var textvalue;
								if (key=='Twitter') {
									// crop
									var cuttitle = 140 - oe_SBTPageurl.length
									,	cutdesc = cuttitle - oe_SBTTitle.length
									
									if (cutdesc > 1) {
										var shortdesc = (oe_SBTPageDescription.length < cutdesc) ? oe_SBTPageDescription : oe_SBTPageDescription.substr(0,cutdesc-6)+'...'
										// -6 is: '...' and spaces in next line
										textvalue = oe_SBTTitle+'. '+shortdesc+' '+oe_SBTPageurl
									} else {
										textvalue = oe_SBTTitle.substr(0,cuttitle-1)+' '+oe_SBTPageurl
									}
								} else {
									textvalue = oe_SBTTitle;
								}

								var urlparam = (val.urlparam!='') ? val.urlparam+'='+oe_SBTPageurl : ''
								,	init = (urlparam=='') ? '' : '&'
								,	textparam = (val.textparam!='') ? init+val.textparam+'='+textvalue : ''
								,	extraparams = (val.extraparams!='') ? '&'+val.extraparams : ''
								,	campaignparam = '&cmpid=sb-oetkerDE-'+val.css
								,	svclink = encodeURI(val.url+'?'+urlparam+textparam+extraparams+campaignparam)
								,	layersvc = svc.clone() // prevent links to be attached to toolbar, too
								,	layerlistitem = listitem.clone()

								layersvc.attr({
									'href': svclink,
									'target': '_blank'
								})
								.removeAttr('title')
								.prepend('<span>&nbsp;</span>')

								layerlistitem.append(layersvc).clone().appendTo(bmlist).click(function(e){
									// call tracking
									oetker.sbtTrack(19,'service',map[val.css])

									// close layer
									sbtlayer.hide()
									//decolorize toolbar
									$('.sbt .sbt-active').removeClass('sbt-active')
								})
							}
							// attach service to DOM
							listitem.append(svc).appendTo(sbt)
							
						})
						// end of each group (bookmarks/likes) adds an element for styling
						if (sbt.parent().hasClass('sbt-endpipe') && !isPlacedRight || !sbt.find('.sbt-group-end').length) {
							$('<li class="sbt-group-end"><span></span></li>').appendTo(sbt)
						}
					})
				})
				
				// fix abstand for ie
				if ($.browser.msie) {
					$('li.sbt-group-end:last-child span').addClass('lastchild')
					$('#rezepteContent .sbt li:first-child a, #rezepteContent .sbt li.sbt-group-end + li a').addClass('firstinline')
				}
			})
			// show sbt (with js)
			$('.sbt-jsvisible').removeClass('sbt-jsvisible')
		},
		sbtTrack: function(){
			// dummy to prevent bugs when tracking and/or definition of sbtTrack function after logging is missing
		}
	})
	$(document).ready(function(e) {
		var wrappervisible = ($('#nyroModalWrapper').css('display') == 'block')
		,	container = $('.frameMain .container');

		$(window).scroll(function() { if (wrappervisible) oetker.moveLightbox('scroll') })
		$(window).resize(function() { if (wrappervisible) oetker.moveLightbox('resize') })
		if (typeof $('.oe-lightbox').nyroModal == 'function') {
			$('.oe-lightbox').click(function(e) {container.css('zIndex','-1')}).nyroModal(oetker.nyroSetOptions(''))
			$('.oe-lightbox-iframe').click(function(e) {container.css('zIndex','-1')}).nyroModal(oetker.nyroSetOptions('iframe'))
		}
		oetker.initSBT('.sbt')
	})
