Native.implement([Element, Window, Document, Events], {
	oneEvent: function(type, fn) {
		return this.addEvent(type, function() {
			this.removeEvent(type, arguments.callee);
			return fn.apply(this, arguments);
		});
	}
});

/*
	* Konami-JS ~ 
	* :: Now with support for touch events and multiple instances for 
	* :: situations that call for multiple easter eggs!
	* Code: http://konami-js.googlecode.com/
	* Examples: http://www.snaptortoise.com/konami-js
	* Copyright (c) 2009 George Mandis (georgemandis.com, snaptortoise.com)
	* Version: 1.2 (1/30/2010)
	* Licensed under the GNU General Public License v3
	* http://www.gnu.org/copyleft/gpl.html
	* Tested in: Safari 4, Firefox 3, IE7 and Mobile Safari 2.2.1
*/

var Konami = function() {
	var konami= {
			addEvent:function ( obj, type, fn, ref_obj )
			{
				if (obj.addEventListener)
					obj.addEventListener( type, fn, false );
				else if (obj.attachEvent)
				{
					// IE
					obj["e"+type+fn] = fn;
					obj[type+fn] = function() { obj["e"+type+fn]( window.event,ref_obj ); }
	
					obj.attachEvent( "on"+type, obj[type+fn] );
				}
			},
	        input:"",
	        pattern:"3838404037393739666513",
	        load: function(link) {	
				
				this.addEvent(document,"keydown", function(e,ref_obj) {											
					if (ref_obj) konami = ref_obj; // IE
					konami.input+= e ? e.keyCode : event.keyCode;
            	if (konami.input.indexOf(konami.pattern) != -1) {
                    konami.code(link);
					konami.input="";
                   	return;
                    }
            	},this);
            this.iphone.load(link)
	                
				},
	        code: function(link) { window.location=link},
	        iphone:{
	                start_x:0,
	                start_y:0,
	                stop_x:0,
	                stop_y:0,
	                tap:false,
	                capture:false,
	                keys:["UP","UP","DOWN","DOWN","LEFT","RIGHT","LEFT","RIGHT","TAP","TAP","TAP"],
	                code: function(link) { window.location=link},
	                load: function(link){
	                        konami.addEvent(document,"touchmove",function(e){
	                          if(e.touches.length == 1 && konami.iphone.capture==true){ 
	                            var touch = e.touches[0]; 
	                                konami.iphone.stop_x = touch.pageX;
	                                konami.iphone.stop_y = touch.pageY;
	                                konami.iphone.tap = false; 
	                                konami.iphone.capture=false;
	                                konami.iphone.check_direction();
	                                }
	                                });               
	                        konami.addEvent(document,"touchend",function(evt){
	                                if (konami.iphone.tap==true) konami.iphone.check_direction();           
	                                },false);
	                        konami.addEvent(document,"touchstart", function(evt){
	                                konami.iphone.start_x = evt.changedTouches[0].pageX
	                                konami.iphone.start_y = evt.changedTouches[0].pageY
	                                konami.iphone.tap = true
	                                konami.iphone.capture = true
	                                });               
	                                },
	                check_direction: function(){
	                        x_magnitude = Math.abs(this.start_x-this.stop_x)
	                        y_magnitude = Math.abs(this.start_y-this.stop_y)
	                        x = ((this.start_x-this.stop_x) < 0) ? "RIGHT" : "LEFT";
	                        y = ((this.start_y-this.stop_y) < 0) ? "DOWN" : "UP";
	                        result = (x_magnitude > y_magnitude) ? x : y;
	                        result = (this.tap==true) ? "TAP" : result;                     
	                        if (result==this.keys[0]) this.keys = this.keys.slice(1,this.keys.length)
	                        if (this.keys.length==0) this.code(this.link)
	                        }
	                }
	}
	return konami;
}

var mooTweets = new Class({
	Implements: [Options,Events],
	options: {
		count: 6,
		sinceID: 1,
		link: true,
		onRequest: $empty,
		onComplete: $empty
	},
	initialize: function(username,options) {
		this.setOptions(options);
		this.info = {};
		this.username = username;
	},
	send: function(){
		new Request.JSONP({
			url: 'http://twitter.com/statuses/user_timeline/' + this.username + '.json',
			useSpinner: true,
			spinnerTarget: $('tweets'),
			update: $('tweets'),
			data: {
				count: this.options.count,
				since_id: this.options.sinceID
			},
			onRequest: this.fireEvent('request'),
			onComplete: function(data){
				if(this.options.link) {
					data.each(function(tweet){	
						tweet.text = this.linkify(tweet.text); 	
						tweet.created_at = this.timify(tweet.created_at); 	
					},this);
				}
				this.fireEvent('complete',[data,data[0].user])
			}.bind(this)
		}).send();
		return this;
	},
	linkify: function(text){
		return text.replace(/(https?:\/\/\S+)/gi,'<a href="$1">$1</a>').replace(/(^|\s)@(\w+)/g,'$1<a href="http://twitter.com/$2">@$2</a>').replace(/(^|\s)#([a-zA-Z0-9äüöÄÜÖß]+)/g,'$1<a href="http://search.twitter.com/search?q=%23$2">#$2</a>');
	},
	timify: function (time_value) {
		var monthDict = ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'];
        var values = time_value.split(" "),
            parsed_date = Date.parse(values[1] + " " + values[2] + ", " + values[5] + " " + values[3]),
            date = new Date(parsed_date),
            relative_to = (arguments.length > 1) ? arguments[1] : new Date(),
            delta = parseInt((relative_to.getTime() - parsed_date) / 1000),
            r = '';
        
        function formatTime(date) {
            var hour = date.getHours(),
                min = date.getMinutes() + "";
            if (min.length == 1) {
                min = '0' + min;
            }
            return hour-(relative_to.getTimezoneOffset()/60) + ':' + min;
        }
        
        function formatDate(date) {
            var ds = date.toDateString().split(/ /),
                mon = monthDict[date.getMonth()],
                day = date.getDate()+'',
                dayi = parseInt(day),
                year = date.getFullYear(),
                thisyear = (new Date()).getFullYear(),
                th = 'th';
            if (day.substr(0, 1) == '0') {
                day = day.substr(1);
            }
            
            return day + '. ' + mon + (thisyear != year ? ' ' + year : '');
        }
        
        delta = delta + (relative_to.getTimezoneOffset() * 60);

        if (delta < 5) {
            r = 'vor weniger als fünf Sekunden';
        } else if (delta < 30) {
            r = 'vor einer halben Minute';
        } else if (delta < 60) {
            r = 'vor weniger als einer Minute';
        } else if (delta < 120) {
            r = 'vor einer Minute';
        } else if (delta < (45*60)) {
            r = 'vor ' + (parseInt(delta / 60)).toString() + ' Minuten';
        } else if (delta < (2*90*60)) { 
            r = 'vor ungefär einer Stunde';
        } else if (delta < (24*60*60)) {
            r = 'vor ungefär ' + (parseInt(delta / 3600)).toString() + ' Stunden';
        } else {
            if (delta < (48*60*60)) {
                r = 'gestern ' + formatTime(date);
            } else {
                r = formatDate(date) + ' ' + formatTime(date);
                //r ='vor ' + (parseInt(delta / 86400)).toString() + ' Tagen';
            }
        }

        return r;
    }
});

function dataMining(){
	var meinKeks = Cookie.read('dont_show_data_whores');
	
	var inform = $('no_data_mining');
	if($defined(inform)){
		var form = new Element('form',{
			'id':'ch_evilpages',
			'class':'yform'
		});
		var fieldset = new Element('fieldset',{
			'html':'<legend> zu deaktivierende Dienste: </legend>'
		});
		var label1 = new Element('label',{
			'for':'ch_google',
			'text':'Google'
		});
		var ch_google = new Element('input',{
			'id':'ch_google',
			'type':'checkbox',
			'value':'Google',
			'styles':{
				'margin':'0 1em'
			}
		});
		if($defined(meinKeks) && meinKeks.test('Google')){
			ch_google.set({'checked':'checked'});
		}
		var label2 = new Element('label',{
			'for':'ch_facebook',
			'text':'Facebook'
		});
		var ch_facebook = new Element('input',{
			'id':'ch_facebook',
			'type':'checkbox',
			'value':'Facebook',
			'styles':{
				'margin':'0 1em'
			}
		});
		if($defined(meinKeks) && meinKeks.test('Facebook')){
			ch_facebook.set({'checked':'checked'});
		}
		var label3 = new Element('label',{
			'for':'ch_twitter',
			'text':'Twitter'
		});
		var ch_twitter = new Element('input',{
			'id':'ch_twitter',
			'type':'checkbox',
			'value':'Twitter',
			'styles':{
				'margin':'0 1em'
			}
		});
		if($defined(meinKeks) && meinKeks.test('Twitter')){
			ch_twitter.set({'checked':'checked'});
		}
		ch_google.inject(label1,'top');
		ch_facebook.inject(label2,'top');
		ch_twitter.inject(label3,'top');
		label1.inject(fieldset);
		label2.inject(fieldset);
		label3.inject(fieldset);
		fieldset.inject(form);
		
		var sender = new Element('input',{
			'type':'button',
			'value':'Abschicken!'
		});
		sender.addEvent('click',function(){
			var bla = form.getElements('input:checked'); 
			var text = '';
			if(bla != 0){
				text = JSON.encode(bla.get('value'));
				var meinKeks = Cookie.write('dont_show_data_whores', text, { duration:7 , domain:'lemmingz.de', path: '/' });
				alert('Cookie wurde gesetzt.');
			}else{
				alert('Nichts ausgewählt!');
			}
		});
		if ($defined(meinKeks)){
			var entf = new Element('input',{
				'type':'button',
				'value':'Cookie löschen'
			});
			entf.addEvent('click',function(){
				Cookie.write('dont_show_data_whores', '', { domain:'lemmingz.de', path: '/' });
				Cookie.dispose('dont_show_data_whores');
				alert('Cookie gelöscht!');
			});
			entf.inject(form);
		}
		sender.inject(form);
		form.inject(inform);	
	}
	
	var footer = $$('body')[0];
	if($defined(footer)){
		var google1 = new Element('script',{
			'type':'text/javascript',
			'src':'/inc/js/ga.js',
			'async':'true'
		});
		var twitter1 = new Element('script',{
		    'type':'text/javascript',
			'src':'http://platform.twitter.com/widgets.js',
			'async':'true'
		});
		if(!$defined(meinKeks) || ($defined(meinKeks) && !meinKeks.test('Google'))){
			google1.inject(footer);
		}
		if(!$defined(meinKeks) || ($defined(meinKeks) && !meinKeks.test('Twitter'))){
			twitter1.inject(footer);
		}
	}
	
	var sidebar = $('sidebar_badges'); 
	if($defined(sidebar)){
		var fb_like_frame = new IFrame({
			'src':'http://www.facebook.com/plugins/likebox.php?id=214780094740&amp;width=280&amp;stream=false&amp;header=false',
			'async':'true',
			'scrolling':'no',
			'frameborder':'0',
			'allowTransparency':'true'
		});
		var tweet = new Element ('a',{
		    'href':'http://twitter.com/share',
			'class':'twitter-share-button',
			'data-count':'horizontal',
			'data-via':'lemmingz_',
			'text':'Tweet'
		});
		if(!$defined(meinKeks) || ($defined(meinKeks) && !meinKeks.test('Facebook'))){
			fb_like_frame.inject(sidebar);
			$('footer').set('html','<iframe scrolling="no" frameborder="0" style="border: medium none; overflow: hidden; width: 100px; height: 20px;" allowtransparency="true" src="http://www.facebook.com/plugins/like.php?href='+encodeURIComponent(location.href)+'&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light"></iframe>');
			var slow_in = new Fx.Tween(sidebar, {
				'duration': 1000
			});
			slow_in.start('opacity', 0, 1);
		}
		if(!$defined(meinKeks) || ($defined(meinKeks) && !meinKeks.test('Twitter'))){
			tweet.inject($('footer'));
		}
	}
}

//Execute!
window.addEvent('domready', function(){ 
	$(document.body).oneEvent('mousemove',function(){
		dataMining();
		
	var high = $('col3').offsetHeight;
	$('col1_content').set('styles',{'min-height':high});
	}); 
	var myTweets = new mooTweets('lemmingz_',{
		count: 7,
		onComplete: function(tweets,user) {
			var tlist = new Element('ul');
			tweets.each(function(tweet,i) {
				if (tweet.text.substr(0, 1) !== '<') {
					new Element('li',{
						html: tweet.text + '<small>' + tweet.created_at + ' via ' + tweet.source.replace("\\",'') + '</small>',
						'class': 'tweet'
					}).inject(tlist);
				}
			});
			tlist.inject('tweets');
			var high = $('col3').offsetHeight;
			$('col1_content').set('styles',{'min-height':high});
		}
	});
	myTweets.send();
	var konami = new Konami();
	konami.load("http://lemmingz.de/LEMMINGZ/index2.html");
});
