    /**
     * DOMREADY
     */
    
    $E = function(selector)
    {
        return $$(selector)[0];
    }

    window.addEvent('domready', function(){
        
        $$('a[rel=external]').each(function(a){
            a.addEvent('click', function(e){
                e.stop();
                window.open(this.href);
            });
        });

        $$('a.rank').each(function(a){
			a.addEvent('click', function(e){
				e.stop();
				rank(this);	
			});
		});

		if($('rezept_optionen'))
		{
            $('options_text').set('opacity',0);
			$('rezept_optionen').getElements('a').each(function(a){
				a.addEvents({
                    'mouseover': function()
                    {
                        $('options_text').set('html', this.getFirst('span').get('text')).fade(1);
                    },
					'mouseleave': function()
					{
						$('options_text').fade(0);	
					}					
				});
			});
		}

        if($('zutaten'))
        {
            new btn($H({'submitbutton': 'OK'}));
        }
        if($('guestbook_form'))
        {
            new btn($H({
                submitbutton:'submit_guestbook',
                submitEvent: false,
                onComplete: function(){
                    new Formcheck($('guestbook_form'),{
                        submitTrigger: $('submit_guestbook'),
                        onSuccess: function(){
                            saveGuestbook($('guestbook_form'));
                        }
                    });
                }
            }));
        }
        
        // Submit Comment
        if($('komForm'))
        {
            new btn($H({
                submitbutton:'submitComment',
                submitEvent: function(){
                    new Formcheck($('komForm'),{
                        submitTrigger: $('submitComment'),
                        onSuccess: function(){
                            saveComment();
                        }
                    });
		}                
            }));
        }
        if($('kontakt'))
        {
            new btn($H({'submitbutton': 'send'}));   
        }
	$$('a.blank').addEvent('click', function(e){
		e.stop();
		window.open(this.href);
	});
        if($$('input[name=website]')[0])
        {
            $$('input[name=website]')[0].addEvents({
                'focus': function(){
                    if(this.get('value').trim() == '')
                    {
                        this.set('value','http://');
                    }
                },
                'blur': function(){
                    if(this.get('value').trim() == 'http://')
                    {
                        this.set('value','');
                    }
                }
            });
        }

	$$('div.link').each(function(div){
	    var fx = new Fx.Tween(div, { duration: 650, wait: true });

	    div.addEvents({
		'mouseover'	: function(){
		    fx.start('background-color', '#efefef');
		},
		'mouseout': function(){
		    fx.start('background-color', '#fff');
		}
	    });
	});

        if($('lexikon'))
        {
            var slide = [];
            $('lexikon').getElements('p').each(function(p,i){
                var title = p.getPrevious('h3');
                slide.push(new Fx.Slide(p, { transition: 'quint:out', duration: 500 }));
                
                slide[i].hide();
                title.addEvent('click',function(e){
                    e.stop();
                    slide[i].toggle();
                }).setStyle('cursor','pointer');
            });
        }


		/**
		 * SmoothScroll & Slideshow
		 */

		// Lexikon || Rezeptdetails
		if($('alphabet') || $('zutaten'))
		{
			var mySmoothScroll = new SmoothScroll();
		}
		if($('slideShow'))
		{
			var count = 10;
			var jsonRequest = new Request.JSON({
				url: config.base_url+'ajax/getSlideShowImages',
				onComplete: function(json){
					new slideShow({
						jsonObject: json,
						targetID: 'slideShow',
						folder: config.base_url+'resources/img/rezepte/s/',
						linkPrefix: 'rezepte/'
					});
				}
			}).post({'count': count});
		}
        if($('komForm'))
        {
            var inputs = $('komForm').getElements('input[type=text]');
            inputs.each(function(el){
                el.addEvents({
                    'focus': function(){
                        toggleTipps(el);  
                    },
                    'blur': function(){
                        toggleTipps(el);  
                    }                 
                });
            });
            var textarea = $('komForm').getElement('textarea');
            textarea.addEvents({
                'keydown': function(e) {
                    remainingChars(e,textarea,200);
                },
                'keyup': function(e) {
                    remainingChars(e,textarea,200);
                }
            });
        }
        
        if($E('.galerie'))
        {
            new RezeptGallery($E('.galerie .thumbnails'), {
                fadeOutDisabledButtons: .5,
                setTitle: true    
            });
        }

        RGBa();
    });

    /**
     * Rank
     */
    var rank = function(link)
    {		
	var rezeptname = link.href.split('/').getLast();
	
	var request = new Request({
	    method: 'post',
	    url: config.base_url+'ajax/rank',
	    onSuccess: function(response){
	        location.href = link.href;
	    },
	    onFailure: function(response){
		location.href = link.href;
	    }
	}).send('rezept='+rezeptname);
    }

    var isVisible = function(el)
    {
        var css = el.style;
        if(css.display == 'none' || css.visibility == 'hidden' || css.opacity == 0)
        {
            return false;
        }
        return true;
    }
    
    /**
     * Form Stuff
     */
    var toggleTipps = function(formEl)
    {
        var tip = formEl.getNext();
        if(tip)
        {
            var opaque = isVisible(tip) ? 0 : 1;
            tip.fade(opaque);
        }
    }
    
    var remainingChars = function(e,text,max)
    {
        var length = text.get('value').length+1;
        var left = max-length+1;
        var html = 'noch <span';
        html+= left < 0 ? ' class="darkred"' : '';
        html+= '>'+left+'</span> Zeichen m&ouml;glich'
        if(left < -100)
        {
            html = '<br />Wie gesagt, Du hast <span class="darkred">200</span> Zeichen!';
        }        
        text.getNext().set('html',html);
    }
    
    /**
     * Gaestebuch
     */
    
    var saveGuestbook = function(f)
    {
        var formElements = f.getElements('input[type=text],textarea');
        var data = $H();
        formElements.each(function(item){
            data.include(item.name, item.get('value'));
        });
        new Request({
            url: config.base_url+'ajax/saveGuestbook',
            onSuccess: function(responseText)
            {
                //console.log(responseText);
            }
        }).send(data.toQueryString());
    }
    
    /**
     * BTN
     */
    var btn = new Class({
        
        options: $H({
            submitbutton: 'submit_btn',
            submitEvent: false,
            resetbutton: 'reset_btn',
            onComplete: function(){ $empty }
        }),
        
        initialize : function(opt)
        {            
            this.options.extend(opt || {});

            $$('.btn').each(function(el, i)
            {
                var text = el.get('value') || el.get('text');
                new Element('a').set({
                    html: '<i><\/i><span><span><\/span><i><\/i>'+text+'<\/span>',
                    href: el.get('href') || '#',
                    id: el.id,
                    class: el.get('class')
                }).replaces(el);
            }, this);

            this.pForm = this.findForm();

            this.attachEvents();
        },
        attachEvents: function()
        {
            if($(this.options.submitbutton))
            {
		if(this.options.submitEvent != false)
                {
		    $(this.options.submitbutton).addEvent('click', (function(e){
			e.stop();
			this.options.submitEvent();
		    }).bind(this));
		}
                else
                {
                    $(this.options.submitbutton).addEvent('click', (function(e){
			e.stop();
			this.pForm.submit();
		    }).bind(this));
                }
            }
            if($(this.options.resetbutton))
            {
                $(this.options.resetbutton).addEvent('click', (function(e){
                    this.pForm.reset();
                    e.stop();
                }).bind(this));
            }
            this.options.onComplete();
        },
        disableSelection: function(element)
        {
            element.onselectstart = function() {
                return false;
            };
            element.unselectable = 'on';
            element.style.MozUserSelect = 'none';
        },
        findForm: function()
        {
            return $(this.options.submitbutton) ? $(this.options.submitbutton).getParent('form') : false;
        }
    });
	
	var saveComment = function(){
		var data = $H();
		var f = $('komForm');
		var elements = f.getElements('input[type=hidden],input[type=text],textarea');
		elements.each(function(el){
			data.include(el.name,el.get('value'));
		});
		new Request({
		    url: config.base_url+'ajax/saveComment/',
		    method: 'post',
		    onSuccess: function(response){
			if(response != 'error')
			{
			    // TODO reponse = lastinsertedId
			    f.setStyle('overflow', 'hidden');
			    var fxout = new Fx.Tween(f, { duration: 750 });
			    fxout.start(
				'opacity', 0.5
			    ).chain(function(){
				f.reset();
				var pos = f.getCoordinates();
				
				var p = new Element('p',{
				    html: 'Vielen Dank f&uuml;r Deinen Kommentar!' 
				}).addClass('success dl30').setStyles({
				    opacity: 0,
				    position: 'absolute'
				}).inject(f,'after');
				
				p.setStyle('left', ((pos.width/2) - (p.getWidth()/2)).round());
				
				var fxin = new Fx.Morph(p, { duration: 750 });
				
				var t = $H({
				    start: pos.top,
				    end: (pos.top + (pos.height/2) - p.getHeight()).round()
				});
				fxin.start({
				    opacity: 1,
				    top: [t.start, t.end]
				});
			    });
			    updateComments(response);

			(function(){
			    var f = $('komForm');
			    var fxout = new Fx.Tween(f, { duration: 750 });
			    fxout.start('opacity', 1).chain(function(){
				var pos = f.getCoordinates();
				var p = f.getNext('p');
				var fxin = new Fx.Morph(p, { duration: 750 });
				fxin.start({
				    opacity:  0,
				    top: pos.top
				}).chain(function(){
				    p.dispose();    
				});
			    });
			}).delay(3000);
		    }
		}
		}).post(data);
	}
    
    var updateComments = function(id)
    {
        new Request.JSON({
            url: config.base_url+'ajax/getComment/',
            onSuccess: function(response)
            {
                var target = $('kommentare').getElement('div');
                var count = target.getElements('div.kommentar').length+1;
                if(count == 1)
                {
                    target.empty();
                }
                
                var kommentar = new Element('div').addClass('kommentar').adopt(
                    new Element('p', {
                        'class': 'count',
                        text: count
                    }),                  
                    new Element('p', {
                        'class'    : 'author'
                    }).adopt(
                        new Element('strong', {
                            text: response.name    
                        }),
                        new Element('br'),
                        new Element('span', {
                            html: 'schrieb am<br/>'+response.datum.date+', '+response.datum.time
                        })                      
                    ),
                    new Element('div').addClass('eintrag').adopt(
                        new Element('p', {
                            html: response.kommentar    
                        })
                    )
                ).inject(target, 'bottom');
                
                new Element('br').addClass('clear').inject(target, 'bottom');
            }
        }).send('id='+id);
    }
    
    var RGBa = function()
    {
        var opacity = .4;

        $$('.rgba').each(function(el){
            var color = el.getStyle('background-color');
            var d = el.getCoordinates();
            var children = el.getChildren();
            
            var childHolder = new Element('div').adopt(children).setStyles({
                height: d.height,
                left: 0,
                position: 'absolute',
                top: 0,
                width: d.width,
                zIndex: 1
            });

            var bg = new Element('div', {
                styles: {
                    backgroundColor: color,
                    height: d.height,
                    left: 0,
                    opacity: 1,
                    position: 'absolute',
                    top: 0,
                    width: d.width,
                    zIndex: 0
                }    
            });
            
            var holder = new Element('div', {
                styles: {
                    height: d.height,
                    position: 'relative',
                    width: d.width
                }    
            }).adopt(bg).adopt(childHolder);
            
            el.adopt(holder).setStyles({
                backgroundColor: 'transparent'
            });
            
            //bg.fade(opaque);
            bg.setStyle('opacity', opacity);
            
        });
    }