function fade(obj, duration, out) {
	
	var counter = duration / 50;
	var steps = (out ? -1 : 1) / counter;
	var timer;
		
	var opacity = out ? 1.0 : 0.0;
	var origHeight = obj.offsetHeight;
	
	obj.style.overflow = 'hidden';
	
	function tick() {		
		counter --;
		opacity += steps;
		
		obj.style.opacity = opacity;
		obj.style.height = (origHeight * opacity) + 'px';
		
		if(counter == 0) {
			window.clearInterval(timer);
			if(out)
				obj.style.display = 'none';	
		}
	}		
	
	if(!out)
		obj.style.display = 'block';
	timer = window.setInterval(tick, 50);
}

function pad(number, length) {   
    var str = '' + number;
    while (str.length < length) {
        str = '0' + str;
    }
   
    return str;

}

function twitterDate(twStr) {	
	return new Date(twStr.substr(4, 6) + ', ' + twStr.substr(26, 4) + ' ' + twStr.substr(11, 8));		
}

function formatDate(time) {
	return pad(time.getDate(), 2) + '.' + pad(time.getMonth() + 1, 2) + '.' + time.getFullYear() + ', ' + pad(time.getHours(), 2) + ':' + pad(time.getMinutes(), 2);
}


function ajaxCB(xmlHttpRequest) {
	if (xmlHttpRequest == null) // keine oder rungültige Antwort
		return;
	
	if (xmlHttpRequest.status == 0) // Statuscode fehlt
		return;
		
	if (xmlHttpRequest.status != 200 && xmlHttpRequest.status != 304) // 200 = Antwort ok, 304 = Not Modified (kommt nicht vor, außer extra programmiert)
		alert("AJAX error " + xmlHttpRequest.status);
		
	if(xmlHttpRequest.responseText.length != 0)
		alert(xmlHttpRequest.responseText);
}


function submitMessage(form) {
	// wenn formular unvollständig, abbrechen
	if(form.message.value.length == 0 || form.name.value.length == 0)
		return false;

	// ajax absenden
	params = 'message=' + escape(form.message.value) + '&name=' + escape(form.name.value);
	xhr.sendRequest(document, ajaxCB, "ajax.php?action=postTwitter", params, xhr.requestTypes.POST);	
	
	// in Tabelle einfügen
	var table = document.getElementById("messagesProfile");
	var row = table.rows[0].cloneNode(true);
	
	row.setAttribute("class", "highlight");
	row.cells[0].firstChild.nodeValue = formatDate(new Date());
	row.cells[1].firstChild.nodeValue = form.name.value + " said: " + form.message.value;
		
	table.insertBefore(row, table.firstChild);	

	// fading
	fade(form, 1000, true);
	
	return false;
}


function submitScore(form) {
	// wenn formular unvollständig, abbrechen
	if(form.name.value.length == 0)
		return false;

	// ajax absenden
	params = 'score=' + escape(form.score.value) + '&check=' + escape(form.check.value) + '&name=' + escape(form.name.value);
	xhr.sendRequest(document, ajaxCB, "ajax.php?action=postScore", params, xhr.requestTypes.POST);	
	
	// in Tabelle einfügen
	var tableBody = document.getElementById("highscoreBody");
	var currentPos = 0;
	var timer;
	
	function mkRank() {
		// Positionen durchzählen
		for(var i = 0; i < tableBody.rows.length; i ++)
			tableBody.rows[i].cells[0].innerHTML = (i + 1) + '.';
	}
	
	function tick() {	
		if(currentPos + 1 < tableBody.rows.length && Number(tableBody.rows[currentPos].cells[2].innerHTML) >= Number(tableBody.rows[currentPos + 1].cells[2].innerHTML)) {
			tableBody.insertBefore(tableBody.removeChild(tableBody.rows[currentPos]), tableBody.rows[currentPos + 1]);
			currentPos ++;	
			mkRank();
			
			if(currentPos == tableBody.rows.length - 1)
				tableBody.rows[currentPos].cells[0].innerHTML = '';
		} else {
			window.clearInterval(timer);
			
			// fading nach fertiger Animation
			fade(form, 1000, true);	
		}					
	}			
	
	var row = tableBody.rows[0].cloneNode(true);
	
	row.setAttribute("class", "highlight");
	row.cells[1].firstChild.nodeValue = form.name.value;
	row.cells[2].firstChild.nodeValue = form.score.value;	
	row.cells[3].firstChild.nodeValue = formatDate(new Date());
	
	tableBody.insertBefore(row, tableBody.firstChild);	
	
	mkRank();	
	timer = window.setInterval(tick, 400);
	
	return false;
}

function submitTwitter(form) {
	location.href = 'http://twitter.com/home?status=' + escape('about @silverplanets: ' + form.message.value);
}

function setTwitterProfile(json) {
	var table = document.getElementById("messagesProfile");
	
	for(key in json) {
		var row = table.rows[0].cloneNode(true);
		var time = twitterDate(json[key].created_at);
		
		row.cells[0].firstChild.nodeValue = formatDate(time);
		row.cells[1].firstChild.nodeValue = json[key].text;
	
		table.appendChild(row);
	}
}

function setTwitterSearch(json) {
	var table = document.getElementById("messagesSearch");
	
	for(key in json.results) {
		var row = table.rows[0].cloneNode(true); 
		var time = twitterDate(json.results[key].created_at);

		// gibt hier gerade Probleme (NaN in Chrome), lassen wir mal raus
		// row.cells[0].firstChild.nodeValue = formatDate(time);
		row.cells[1].firstChild.nodeValue = json.results[key].from_user;
		row.cells[2].firstChild.nodeValue = json.results[key].text;
	
		table.appendChild(row);
	}
}

function lengthCheck(obj, displayId, len) {
	obj.value = obj.value.substr(0, len);
	document.getElementById(displayId).innerHTML = len - obj.value.length;
}




