var request = false;
var action = null;
var serverurl = "http://www.polyskope.de";

function initAjax() {
	try {
		getContRating();
	}
	catch(e) {
		
	}
}

function initAjaxHome() {
	if(document.getElementById("updateDiv").innerHTML.length == "4") {
		document.getElementById("updatesLoading").innerHTML =
		"<img src='./themes/default/mimes/icons/loading.gif>";	
	}	
	getUpdates();	

}

function initBlogArchive() {
	if(document.getElementById("blogArchiveDiv").innerHTML.length == "4") {
		document.getElementById("archiveLoading").innerHTML =
		"<img src='./themes/default/mimes/icons/loading.gif>";	
	}	
	getBlogArchive();
}

function rateUp(value) {
	action = "setRating";
	setRequest(value, "rate");	
}

function getContRating() {
	action = "getRating";
	setRequest(0, "rate");
}

function getUpdates() {
	action = "getUpdates";
	setRequest(0, "updates");
}

function getBlogArchive() {
	action = "getBlogArchive";
	setRequest(0, "blogArchive");
}

function startTest() {
	action = "testAjax";
	setRequest(0, "test");
}

/* Request-Implementierung BEGINN */
// Request senden
function setRequest(value, type) {
	var url;
	var params;
	
	// Request erzeugen
	if (window.XMLHttpRequest) {
		request = new XMLHttpRequest(); // Mozilla, Safari, Opera
	} else if (window.ActiveXObject) {
		try {
			request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
		} catch (e) {
			try {
				request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
			} catch (e) {}
		}
	}
	// überprüfen, ob Request erzeugt wurde
	if (!request) {
		alert("Kann keine XMLHTTP-Instanz erzeugen");
		return false;
	} else {
		switch(type) {
			// Rating
			case 'rate':
				url = getRatingUrl();
				params = getRatingParams(value);
			break;
			
			// Comments
			case 'comment':
			break;
			
			case 'updates':
				url = getUpdateUrl();
				params = getUpdateParams();
			break;
			
			case 'blogArchive':
				url = getBlogArchiveUrl();
				params = getBlogArchiveParams();
			break;
			
			// Test
			case 'test':
				url = getTestUrl();
				params = getTestParams();
			break;
			
			default:
			break;
		}
		
		request.open('post', url, true);
		request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // Requestheader senden
		request.send(params); // Request senden
		request.onreadystatechange = interpretRequest;		
	}
}

//Request auswerten
function interpretRequest() {
	switch (request.readyState) {
		// wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
		case 4:
			if (request.status != 200) {
				alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status+"\n"+request.responseText);				
			} else {
				// Antwort des Servers -> als XML-Dokument
				var xmlDoc	= request.responseXML;		
				
				if(action == "setRating") {
					setRating(xmlDoc);
				}
				else if(action == "getRating") {
					getRating(xmlDoc);
				}
				else if(action == "getComments") {
					
				}
				else if(action == "setComment") {
					
				}
				else if(action == "getUpdates") {
					getUpdateResult(xmlDoc);
				}
				else if(action == "getBlogArchive") {
					getBlogArchiveResult(xmlDoc);
				}
				else if(action == "testAjax") {
					getTestResult(xmlDoc);
				}											
			}
			
		break;
		
		default:			
			break;
	}
}

/* Request-Implementierung ENDE */

/* BEGINN Rating */

function getRatingUrl() {
	return serverurl+"/cms/request/rate.php";
}

function getTestUrl() {
	return serverurl+"/cms/request/ajaxTest.php";
}

function getUpdateUrl() {
	return serverurl+"/cms/request/update.php";
}

function getBlogArchiveUrl() {
	return serverurl+"/cms/request/blogArchiv.php";
}

function getRatingParams(value) {
	var uid = document.getElementById("target").value;
	return 'rating='+value+'&uid='+uid+'&action='+action;
}

function getTestParams() {	
	return 'action=testajax';
}

function getUpdateParams() {
	return 'action=getUpdates';
}

function getBlogArchiveParams() {
	return 'action=blogArchive';
}

function getChildrenCount(object) {
	var count = 0;
	
	// Finally it works in IE and FF - as long as i stick to selfhtml.org ;)
	while(object) {
		if(object.nodeType == 1) { //nodeType == ELEMENT_NODE
			count++;
		}
		object = object.nextSibling;
	}
	return count;
} 

function setRating(xmlDoc) {
	var contRating = xmlDoc.getElementsByTagName('rating')[0].firstChild.nodeValue;
	// Rating-Balken ausblenden
	document.getElementById("contRating").innerHTML = "Vielen Dank f&uuml;r Ihre Teilnahme.";
	
	// Anzahl der Votes aus Anzeige ermitteln und um 1 erhöhen (keine Abfrage von Datenbank)
	var contRates = document.getElementById("contRates").innerHTML;
	var length = contRates.length;
	contRates = contRates.slice(1,length-1);
	contRates++;
	document.getElementById("contRates").innerHTML = "("+contRates+")";
}

function getRating(xmlDoc) {
	var contRating = xmlDoc.getElementsByTagName('rating')[0].firstChild.nodeValue;
	var contRates = xmlDoc.getElementsByTagName('rates')[0].firstChild.nodeValue;
	var rating = 0;
					
	// Kein Teilen durch 0
	if(contRates != 0) rating = contRating / contRates;					
	
	// Ganzzahlig abrunden
	rating = Math.ceil(rating);
	document.getElementById("contRates").innerHTML = "("+contRates+")";
	document.getElementById("contRatingScore").src += rating+".gif";
}

/* ENDE Rating */

function getUpdateResult(xmlDoc) {
	document.getElementById("updatesLoading").innerHTML = "";
	var updateDiv = document.getElementById("updateList");
	var contUpdates = xmlDoc.getElementsByTagName('contUpdates')[0];
			
	var i=0;
	var nodeCount = getChildrenCount(contUpdates.firstChild);
	
	for(i=0; i<nodeCount; i++) {
		var contTitleLink = xmlDoc.getElementsByTagName('contTitleLink')[i].firstChild.nodeValue;
		var contArea = xmlDoc.getElementsByTagName('contArea')[i].firstChild.nodeValue;
		var contSource = xmlDoc.getElementsByTagName('contSource')[i].firstChild.nodeValue;
		updateDiv.innerHTML += "<li><a class='intLink' href='./"+contArea+"/"+contSource+"'>"+contTitleLink+"</a></li>";
	}	
	
	/*
	while(xmlDoc.getElementsByTagName('contUpdate')[0].hasChildNodes()) {
		var objectID = xmlDoc.getElementsByTagName('contTitleLink')[0].firstChild.nodeValue;
		updateDiv += "<span>"+objectID+"</span>";
		i++;
	}
	* */
		/*	
		var objectID = xmlDoc.getElementsByTagName('contTitleLink')[0].firstChild.nodeValue;
		var respAction = xmlDoc.getElementsByTagName('contSource')[0].firstChild.nodeValue;
		var respLocation = xmlDoc.getElementsByTagName('editedAt')[0].firstChild.nodeValue;
		*/
} 

function getBlogArchiveResult(xmlDoc) {
	document.getElementById("archiveLoading").innerHTML = "";
	var updateDiv = document.getElementById("archiveList");
	var contUpdates = xmlDoc.getElementsByTagName('blogArchives')[0];
			
	var i=0;
	var nodeCount = getChildrenCount(contUpdates.firstChild);
			
	for(i=0; i<nodeCount; i++) {
		var contTitleLink = xmlDoc.getElementsByTagName('contTitleLink')[i].firstChild.nodeValue;		
		var contSource = xmlDoc.getElementsByTagName('contSource')[i].firstChild.nodeValue;
		var contDescr = xmlDoc.getElementsByTagName('contDescr')[i].firstChild.nodeValue;
		var contTitle = xmlDoc.getElementsByTagName('contTitle')[i].firstChild.nodeValue;
		var createdAt = xmlDoc.getElementsByTagName('createdAt')[i].firstChild.nodeValue;
		try {
			var contImg = xmlDoc.getElementsByTagName('contImg')[i].firstChild.nodeValue;
		}
		catch (e) {}
		
		if(!contImg) contImg = "";	

		updateDiv.innerHTML += 
			"<li class='archiveItem' style='min-height: 100px; border-bottom: 1px solid #cacaca;'><h4>"
			+contTitle+"</h4><h5>"+createdAt+"</h5><img width='70px' src='"+contImg+"' align='left' hspace='10' vspace='5'>"
			+contDescr+"<br><a class='intLink' href='./"+contSource+"'>"+contTitleLink+"</a></li>"; 
	}	
	
	/*
	while(xmlDoc.getElementsByTagName('contUpdate')[0].hasChildNodes()) {
		var objectID = xmlDoc.getElementsByTagName('contTitleLink')[0].firstChild.nodeValue;
		updateDiv += "<span>"+objectID+"</span>";
		i++;
	}
	* */
		/*	
		var objectID = xmlDoc.getElementsByTagName('contTitleLink')[0].firstChild.nodeValue;
		var respAction = xmlDoc.getElementsByTagName('contSource')[0].firstChild.nodeValue;
		var respLocation = xmlDoc.getElementsByTagName('editedAt')[0].firstChild.nodeValue;
		*/
} 

function getTestResult(xmlDoc) {	
	var objectID = xmlDoc.getElementsByTagName('objectID')[0].firstChild.nodeValue;
	var respAction = xmlDoc.getElementsByTagName('action')[0].firstChild.nodeValue;
	var respLocation = xmlDoc.getElementsByTagName('location')[0].firstChild.nodeValue;
	
	/*
	while(xmlDoc.getElementsByTagName('result')[0].hasChildNodes()) {
		setTimeout("writeTestResponse(objectID, respAction, respLocation)", 1000);
	}
	*/
	var count = 0;
	while(count < 5) {
	//	setTimeout("writeTestResponse(objectID, respAction, respLocation)", 1000);
		setTimeout("var blubb; blubb++; testTimeout(blubb)", 2000);
		count++;				
	}	
}

function testTimeout(number) {
	document.getElementById("ajaxOutput").innerHTML += "Durchgang "+number+"<br>";
}

function writeTestResponse(objectID, respAction, respLocation) {
	document.getElementById("ajaxOutput").innerHTML += "ObjectID: "+objectID+" Action: "+respAction+" Location: "+respLocation;
}
