var nullobj = {'div':'','string':'','hin':0,'her':0,'ctrl':0,'l':0,'str1':'','str2':'','str3':'','zahl':0};
var naviobj = {'div':'','string':'','hin':0,'her':0,'ctrl':0,'l':0,'str1':'','str2':'','str3':'','zahl':0};
var adrobj = []

var w;
var h;

var farbbalkenanzahl;
var farbbalkenindex;
var farbbalkenhintergrund;
var farbe;

var cursor = false;

var inputopen = false;
var textinputheight;
var inputstring = "";
var outputstring = "";

var outputopen = false;

var message = "";
var adresse = ["Erik Thuro","Kilianerweg 3","D 67360 Lingenfeld","mail @ nullhochnull","+49 (0)6344 5039969"]
var fragen = ["who are you?","how are you?","where are you?","what are you searching for?","how can i help you?"];
var fragenindex = 0;
var logo = "nullhochnull";
var links = '<a href="javascript:open_input();">input</a> / <a href="javascript:open_output();">output</a>';

var schleifeindex = 1;

function keyboard_listener()
{
	$('#keyarea').bind('keydown', keydown_event);
	$('#keyarea').bind('keypress', keypress_event);
}

function keydown_event(event)
{
	farbe_anpassen();
	
	if(event.which == 8)
	{
		var empty = false;
		if(inputstring.length == 0)
		{
			empty = true;
		}
		inputstring = inputstring.substr(0,inputstring.length-1);
		if(!empty && inputstring.length == 0)
		{
			$('#textcontrol').delay(50).animate({width:'toggle'},{queue:true, duration:100});
		}
		text_output();
	}
}

function keypress_event(event)
{
	if(event.which == 60 || event.which == 62 || event.which == 8) return;
	
	farbe_anpassen();
	
	var empty = false;
	if(inputstring.length == 0)
	{
		empty = true;
	}
	
	if(event.which == 13)
	{
		inputstring += '©';
	}
	else
	{
		var c = String.fromCharCode(event.which);
		inputstring += c;
	}
	
	if(empty && inputstring.length > 0)
	{
		$('#textcontrol').delay(50).animate({width:'toggle', top:h-50,left:20},{queue:true, duration:100});
	}

	text_output();
}

function farbe_anpassen()
{
	farbe = zufall_farbe();
	$('.colordiv').css("background-color",farbe);
}

function text_output()
{
	inputstring = inputstring.split('  ').join(' ').split('©©').join('©').split(' ©').join('©').split('© ').join('©');
	outputstring = '<span class="textblock">'+inputstring.split(' ').join('</span> <span class="textblank"> </span><span class="textblock">').split('©').join('</span><br /><span class="textblock">')+'</span>';
	$('#textinput').html(outputstring);
	
	var pos = $('#textinput .textblock:last-child').position();
	var hgt = $('#textinput').height();
	if(pos.top > hgt)
	{
		inputstring = inputstring.substr(0,inputstring.length-1);
		text_output();
	}
	else
	{
		set_cursor_position();
	}
}

function check_text_length()
{
	$('#textinput span').each(function(){
		var pos = $(this).position();
		var hgt = $('#textinput').height();
		if(pos.top > hgt)
		{
			var len = $(this).text().length+1;
			inputstring = inputstring.substr(0,inputstring.length-len);
		}
	});
	
	if(inputstring.charAt(inputstring.length-1) == " " || inputstring.charAt(inputstring.length-1) == "©")
	{
		inputstring = inputstring.substr(0,inputstring.length-1);
	}
	
	text_output();
}

function set_cursor_position()
{
	var of = $('#textinput .textblock:last-child').offset();
	var wi = $('#textinput .textblock:last-child').width();
	var sp = 10;
	
	if($('#textinput .textblock:last-child').text().length == 0)
	{
		sp = 0;
		$('#textinput .textblock:last-child').toggle();
	}
	
	$('#textcursor').offset({left:Math.floor(of.left)+wi+sp, top:of.top});
	$('#keycatcher').offset({left:Math.floor(of.left)+wi+sp, top:of.top});
}

function farbbalken()
{
	if(farbbalkenindex<farbbalkenanzahl)
	{
		if(farbbalkenindex%2)
		{
			farbbalkenhintergrund = farbe;
			var div = '<div class="colordiv" style="background-color:'+farbbalkenhintergrund+';"></div>';
		}
		else
		{
			var div = '<div class="whitediv"></div>';
		}
		$('#farben').append(div);
		farbbalkenindex++;
		setTimeout("farbbalken()", 0);
	}
	else
	{
		$('#keycatcher').css('visibility', 'visible');
		$('#keycatcher').css('opacity', '1');
		$('#keyarea').bind('click',area_focus);
		$('#keyarea').bind('focus',area_focus);
		$('#keyarea').bind('blur', area_blur);

		$(window).bind('focus',select_input);
		
		$('#textcontrol').bind('mouseenter', textcontrol_enter);
		$('#textcontrol').bind('mouseleave', textcontrol_leave);
		$('#textcontrol').bind('click', textcontrol_click);
		
		if(!isiPad()) select_input();
		
		cursor_blinken();
		keyboard_listener();
	}
}

function set_zIndex(id)
{
	$('#keycatcher').css('zIndex', id);
}

function area_focus()
{
	set_zIndex(1);
}

function area_blur()
{
	set_zIndex(9);
	if(!isiPad()) setTimeout('select_input()',10);
}

function select_input()
{
	$('#keyarea').focus();
}

function textcontrol_enter()
{
	$(this).css('background-color', farbe);
}

function textcontrol_leave()
{
	$(this).css('background-color', '#000000');
}

function textcontrol_click()
{
	if(!inputopen) return;
	
	$('#textcontrol').unbind('mouseenter', textcontrol_enter);
	$('#textcontrol').unbind('mouseleave', textcontrol_leave);
	$('#textcontrol').unbind('click', textcontrol_click);
	
	$('#keyarea').unbind('keydown', keydown_event);
	$('#keyarea').unbind('keypress', keypress_event);
	
	$('#keyarea').unbind('click',area_focus);
	$('#keyarea').unbind('focus',area_focus);
	$('#keyarea').unbind('blur', area_blur);
	
	$(window).unbind('focus',select_input);
	
	$('#keycatcher').css('visibility', 'hidden');
	
	$.ajax({
		type: "POST",
		url: "php/communication.php",
		data: 'farbe='+farbe+'&text='+inputstring,
		success: function (b) {
			inputopen = false;
			inputstring = "";
			outputstring = "";
			close_input();
		}
	});
}

function cursor_blinken()
{
	if(!cursor)
	{
		$('#textcursor').css("background-color","#000000");
		$('#keycatcher').css('opacity', '1');
	}
	else
	{
		$('#textcursor').css("background","none");
		$('#keycatcher').css('opacity', '0');
	}
	cursor = !cursor;
	if(inputopen)
	{
		setTimeout("cursor_blinken()", 600);
	}
	else
	{
		if(cursor)
		{
			$('#textcursor').css("background","none");
			$('#keycatcher').css('opacity', '0');
			cursor = !cursor;
		}
	}
}

function resize_farbbalken()
{
	$('#farben').empty();
	farbbalkenanzahl = (h/2)+2;
	farbbalkenindex = 0;
	while(farbbalkenindex<farbbalkenanzahl)
	{
		if(farbbalkenindex%2)
		{
			farbbalkenhintergrund = farbe;
			var div = '<div class="colordiv" style="background-color:'+farbbalkenhintergrund+';"></div>';
		}
		else
		{
			var div = '<div class="whitediv"></div>';
		}
		$('#farben').append(div);
		farbbalkenindex++;
	}
}

function open_output()
{
	$('#me').empty();
	for(var i=0; i<adresse.length; i++)
	{
		var $div = $('<div class="adress"></div>')
		$('#me').append($div);
		adrobj[i] = {'div':$div,'string':adresse[i],'hin':0,'her':0,'ctrl':0,'l':0,'str1':'','str2':'','str3':'','zahl':0, 'id':i};
		adrobj[i]['l'] = adrobj[i]['string'].length;
		adrobj[i]['her'] = adrobj[i]['l'];
		zaehlen(adrobj[i]);
	}
}

function remove_adress()
{
	$('#me').animate({opacity:'0'},{queue:true, duration:300, complete:clear_adress});
}

function clear_adress()
{
	$('#me').empty();
	$('#me').css('opacity','1');
}

function open_input()
{
	if(inputopen) return;
	inputopen = true;
	
	if($('#me').children().length>0)
	{
		remove_adress();
	}
	$('#textcontrol').css('visibility', 'visible');
	$('#textcontrol').hide();
	$('#textcontrol').css('background-color', '#000000');
	$('#textcursor').offset({left:20, top:h/2+20});
	$('#textcursor').css('visibility', 'visible');
	$('#keycatcher').offset({left:20, top:h/2+20});
	fragenindex = 0;
	farbbalkenanzahl = (h/2)+2;
	farbbalkenindex = 0;
	farbe = "#cccccc";
	farbbalken();
	naviobj['div'].html('');
}

function close_input()
{
	$('#textcontrol').css('visibility', 'hidden');
	$('#textcursor').css('visibility', 'hidden');
	
	message = "thank you!";
	
	var del = 0;
	
	for(var i=$('#textinput span').length; i>=0; i--)
	{
		setTimeout("remove_spans("+i+")", del);
		del += 20;
		if(i == 0)
		{
			setTimeout("remove_farbbalken()", del);
		}
	}
}

function remove_farbbalken()
{
	farbbalkenanzahl = 0;
	farbbalkenindex = 0;
	var del = 0;
	for(var i=$('#farben div').length; i>=0; i--)
	{
		setTimeout("remove_divs("+i+")", del);
		del += 4;
		if(i == 0)
		{
			setTimeout("show_navigation()", del);
		}
	}
}

function remove_spans(id)
{
	$('#textinput span:eq('+id+')').remove();
}

function remove_divs(id)
{
	$('#farben div:eq('+id+')').remove();
}

function show_navigation()
{
	naviobj['string'] = "input / output";
	naviobj['l'] = naviobj['string'].length;
	naviobj['her'] = naviobj['l'];
	zaehlen(naviobj);
}

function blinken(obj)
{
	if(obj['zahl'] < 12)
	{
		obj['div'].toggle();
		obj['zahl']++;
		if(obj == nullobj)
		{
			setTimeout("blinken(nullobj)", 40);
		}
	}
	else
	{
		if(obj == nullobj)
		{
			obj['div'].html('');
			schleifeindex++;
			nullobj = {'div':$('#nullhochnull'),'string':'','hin':0,'her':0,'ctrl':0,'l':0,'str1':'','str2':'','str3':'','zahl':0};
			schleife();
		}
	}
}

function mischen(obj)
{
	if (obj['hin'] <= obj['l'])
	{
		obj['str1'] = "";
		obj['str2'] = obj['string'].substr(0,obj['hin']);
		for (var i = 0; i<obj['l']; i++)
		{
			obj['str1'] = obj['str1']+String.fromCharCode(33+Math.round(Math.random()*90));
		}
		var intString = obj['str2'] + obj['str1'].substr(0,obj['hin'])+obj['str3'].substr(0,obj['her']);
		textausgeben(obj['div'],intString.substring(0,obj['l']),false);
		if (obj['ctrl'] >= 3)
		{
			obj['hin']++;
			obj['her']--;
			obj['ctrl'] = 0;
		}
		else
		{
			obj['ctrl']++;
		}
		if(obj == nullobj)
		{
			setTimeout("mischen(nullobj)", 10);
		}
		else if(obj == naviobj)
		{
			setTimeout("mischen(naviobj)", 10);
		}
		else
		{
			setTimeout("mischen(adrobj["+obj['id']+"])", 10);
		}
	}
	else
	{
		if(obj == nullobj)
		{
			obj['zahl'] = 0;
			setTimeout("blinken(nullobj)", 1500);
		}
		else if(obj == naviobj)
		{
			obj['div'].html(links);
		}
		else
		{
			
		}
	}
}

function zaehlen(obj)
{
	if(obj['zahl'] < obj['l']){
		obj['str3'] += " ";
		textausgeben(obj['div'],obj['str3']);
		obj['zahl']++;
		if(obj == nullobj)
		{
			setTimeout("zaehlen(nullobj)", 20);
		}
		else if(obj == naviobj)
		{
			setTimeout("zaehlen(naviobj)", 20);
		}
		else
		{
			setTimeout("zaehlen(adrobj["+obj['id']+"])", 20);
		}
	}
	else
	{
		if(obj == nullobj)
		{
			mischen(nullobj);
		}
		else if(obj == naviobj)
		{
			mischen(naviobj);
		}
		else
		{
			mischen(adrobj[obj['id']]);
		}
	}
}

function schleife()
{
	$('#nullhochnull').offset({left: 20,top: (h/2)-40});
	
	if(schleifeindex == 3)
	{
		show_navigation();
	}
	
	if(schleifeindex == 2)
	{
		nullobj['string'] = logo;
	}
	else
	{
		if(message != "")
		{
			nullobj['string'] = message;
			message = "";
		}
		else
		{
			if(farbbalkenindex > 0)
			{
				nullobj['string'] = fragen[fragenindex];
				fragenindex++;
				if(fragenindex == fragen.length)
				{
					fragenindex = 0;
				}
			}
			else
			{
				if(schleifeindex%9)
				{
					nullobj['string'] = zufalls_string(12);
				}
				else{
					nullobj['string'] = logo;
				}
			}
		}
	}
	nullobj['l'] = nullobj['string'].length;
	nullobj['her'] = nullobj['l'];
	zaehlen(nullobj);
}

/* +++++++++++ DOCUMENT READY +++++++++++ */

$(document).ready(function()
{
	$('a').attr('onfocus','if(this.blur)this.blur()');
	
	get_window_size();
	resize_window();
	
	nullobj['div'] = $('#nullhochnull');
	naviobj['div'] = $('#navigation');
	
	setTimeout("schleife()",1500);
});

/* +++++++++++ WINDOW RESIZE +++++++++++ */

$(window).resize(function()
{
	get_window_size();
  	resize_window();
});

function resize_window()
{
	$('#nullhochnull').offset({left: 20,top: (h/2)-40});
	
	$('#farben').width(w+5);
	$('#farben').height(h+5);
	
	$('#navigation').offset({left:20, top:h-40});
	$('#me').offset({left:20, top:h/2+5});
	
	$('#textinput').offset({left:20, top:h/2+20});
	$('#textinput').width(w-40);
	
	var spc = Math.floor(((h/2)-80)/32);
	textinputheight = spc*32; 
	$('#textinput').height(textinputheight);
	
	if(inputstring.length > 0)
	{
		check_text_length();
		set_cursor_position();
	}
	else
	{
		$('#textcursor').offset({left:20, top:h/2+20});
		$('#keycatcher').offset({left:20, top:h/2+20});
	}
	
	$('#textcontrol').offset({left:20, top:h-50});
	
	if(farbbalkenindex > 0)
	{
		resize_farbbalken();
	}
}

function get_window_size()
{
	w = Math.ceil($(window).width());
	h = Math.ceil($(window).height());
}

/* +++++++++++ HELPER +++++++++++ */

function zufall(min, max)
{
	return Math.round(min+Math.random()*(max-min));
}

function zufall_farbe()
{
	return '#'+Math.floor(Math.random()*16777216).toString(16);
}

function zufalls_string(num)
{
	randomstring = "";
	for(var i=0; i<num; i++)
	{
		var ch = String.fromCharCode(33+Math.round(Math.random()*90))
		if(ch == "<")
		{
			i--;
		}
		else
		{
			randomstring += ch;
		}
	}
	return randomstring;
}

function textausgeben(obj,txt)
{
	obj.html(txt);
}

function isiPad()
{
	var bool;
	if((navigator.platform.indexOf("iPhone") != -1) || (navigator.platform.indexOf("iPod") != -1) || (navigator.platform.indexOf("iPad") != -1))
	{
		bool = true;
	}
	else
	{
		bool = false;
	}
    return bool;
}

$('a[rel*=external]').live('click', function()
{
	window.open($(this).attr('href'));
	return false;
});
