var requestWrappers = new Array();

var charLock = true;

var TYPE_ONLINE_USERS = 1;
var TYPE_QUICK_SEARCH = 2;
var TYPE_UPLOAD_STATE = 3;
var TYPE_VID_VOTE = 4;
var TYPE_MAIN_CHAR = 5;
var TYPE_BEEF = 6;
var TYPE_HIDE_BEEF = 7;
var TYPE_CHECK_BEEF = 8;

var BEEF_ALREADY_BEEFED = 1;
var BEEF_BEEFED_SUCCESSFULLY = 2;

function test(name){

	alert('name: '+name);

}

function setMainChar(charId){

    charLock = false;
    loadXmlDoc(TYPE_MAIN_CHAR, "../../../ajaxlet?id-main-chr="+charId);
    
}

function checkBeef(userid){
	loadXmlDoc(TYPE_CHECK_BEEF, "../../../ajaxlet?check-beef-id="+userid);
}

function doBeef(userid){
	
	beefForm = document.getElementById("beef-form");
	office = beefForm.office.checked ? "true" : "false";

	loadXmlDoc(TYPE_BEEF, "../../../ajaxlet?beef-user-id="+userid+"&office="+office);
	
	hide_popup();
}

function hideBeef(beefId){
	
	loadXmlDoc(TYPE_HIDE_BEEF, "../../../ajaxlet?hide_beef="+beefId);
	
} 

function listOnlineUsers(){
	
	loadXmlDoc(TYPE_ONLINE_USERS, "../../../ajaxlet");
	
	window.setTimeout("listOnlineUsers()",3000);
}

function voteVid(s, vidId){
    
    var val = 0;
    
    var radio = document.getElementById("vid-vote-form_"+vidId+(s? "s" : "")).vote;
    
    for (var i=0; i< radio.length; i++){ 
    	if (radio[i].checked){ 
    		val = radio[i].value
    	}
    }
    
    loadXmlDoc(TYPE_VID_VOTE, "../../../ajaxlet?vote-id-vid="+vidId+"&vote-value-vid="+val);
    
}

function doSearch(){

	var searchString = document.getElementById("quick-search-field").value.replace("%", "*");
	
	if(searchString.length >= 2){
		loadXmlDoc(TYPE_QUICK_SEARCH, "../../../ajaxlet?search-string="+searchString);
	}else{
	    document.getElementById("quick-search-results").innerHTML = "-";
	}
}

function getUploadState(){

	loadXmlDoc(TYPE_UPLOAD_STATE, "../../../ajaxlet?id-upl="+document.getElementById("unique-post-id").value);

	window.setTimeout("getUploadState()", 1000);

}

function RequestWrapper(type, request){
	this.type = type;
	this.request = request;
}

function loadXmlDoc(type, url){

	var request;
	
	if (window.XMLHttpRequest){
	
		// code for Mozilla, etc.
		request = new XMLHttpRequest();
		
	}else if (window.ActiveXObject){
	
		// code for IE
    	request = new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	if (request!=null){
		
		request.onreadystatechange=stateChange;
  		request.open("POST",url,true);
  		request.send(null);
  		
  		var requestWrapper = new RequestWrapper(type, request);
  		
  		requestWrappers.push(requestWrapper);
  		
    }else{
    
		alert("Ihr Browser kann leider kein Ajax :( ");
    }
    
    // hack for the damn IE 
    stateChange();
}

function stateChange(){
	
	//alert("statechange");
	
	for(var i = 0; i < requestWrappers.length; i++){
	
		requestWrapper = requestWrappers[i];
		request = requestWrapper.request;
		type = requestWrapper.type;
		
		if(request.readyState == 4){
			
			if (request.status==200){
	
				if(type == TYPE_ONLINE_USERS){
					
					xmlDoc = request.responseXML;
					
					// :( that damn IE does not want us to user XPath in here :'(
					// var findPattern = "/ttv3-ajax-data/online-users/user/@nick";
					// var xpathResult = xmlDoc.evaluate(findPattern, xmlDoc, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
					
					var users = xmlDoc.getElementsByTagName("user");
					
					var onlineListe = document.getElementById("online-users");
					
					// alle kicken
					while(onlineListe.firstChild != null){
						onlineListe.removeChild(onlineListe.firstChild);
					}					
					
					var node;					

					for(var x = 0; x < users.length; x++){

					// while((node = xpathResult.iterateNext()) != null){

						node = users[x];
						
						var listItem = document.createElement("li");
						// listItem.innerHTML = node.nodeValue;
						listItem.innerHTML = node.getAttribute("nick");
						listItem.className = "online-users-item";
						
						onlineListe.appendChild(listItem);
					}
					
					var guestCount = xmlDoc.getElementsByTagName("guests")[0].firstChild;
					
					document.getElementById("guest-count").innerHTML = guestCount.nodeValue;

				}else if(type == TYPE_QUICK_SEARCH){
				
					xmlDoc = request.responseXML;
					var resultCount = xmlDoc.getElementsByTagName("search-result-count")[0].firstChild;

//					alert(printProps(resultCount,"rc"));

					document.getElementById("quick-search-results").innerHTML = resultCount.nodeValue;
				
				}else if(type == TYPE_UPLOAD_STATE){

					//var percent = Math.round(Math.random()*100+1);
					
					xmlDoc = request.responseXML;
				
					var percent = xmlDoc.getElementsByTagName("percent")[0].firstChild.nodeValue;
					
					
					document.getElementById("state-span").innerHTML = ""+percent+"%";
					img = document.getElementById("state-img");
					img.src = "../../../polllet?percent="+percent;
					img.style.visibility = "visible";

				}else if(type == TYPE_MAIN_CHAR){
				
					if(!charLock){
						charLock = true;
						alert('Mainchar gespeichert');
					}
				
				}else if(type == TYPE_VID_VOTE){
				
					xmlDoc = request.responseXML;
					
					var avg = xmlDoc.getElementsByTagName("average")[0].firstChild.nodeValue;
					var id = xmlDoc.getElementsByTagName("id")[0].firstChild.nodeValue;
					
					document.getElementById("td-vid-avg_"+id).innerHTML = avg;
					document.getElementById("vid-vote-form_"+id).style.visibility = "hidden";
					document.getElementById("vid-vote-p_"+id).innerHTML = "Video bereits bewertet";
					
					var search = document.getElementById("td-vid-avg_"+id+"s");
					if(search){
					  search.innerHTML = avg;
  					  document.getElementById("vid-vote-form_"+id+"s").style.visibility = "hidden";
					  document.getElementById("vid-vote-p_"+id+"s").innerHTML = "Video bereits bewertet";
					}
				
				}else if(type == TYPE_CHECK_BEEF){
					
					xmlDoc = request.responseXML;
					
					beef_id = xmlDoc.getElementsByTagName("id")[0].firstChild.nodeValue;
					beef_nick = xmlDoc.getElementsByTagName("nick")[0].firstChild.nodeValue;
					beef_code = xmlDoc.getElementsByTagName("code")[0].firstChild.nodeValue;
					
					if(beef_code != "1"){
						show_beef_form(beef_id, beef_nick);
					}else{
						title = "Bereits zuvor gebeeft";
						msg = "Du hast "+beef_nick+" bereits zuvor gebeeft. Er muss Deinen Beef erst ausblenden, damit du ihn erneut Beefen kannst";
						show_message(msg, title, MSG_TYPE_ERROR);
					}
					
				}else if(type == TYPE_BEEF){
					
					xmlDoc = request.responseXML;
					var msg = "FEHLER BEIM BEEFEN AUFGETRETEN";											
					var returncode = parseInt(xmlDoc.getElementsByTagName("returncode")[0].firstChild.nodeValue);
					var buser = xmlDoc.getElementsByTagName("nick")[0].firstChild.nodeValue;
					var office = xmlDoc.getElementsByTagName("office")[0].firstChild.nodeValue;
					var beef_id = xmlDoc.getElementsByTagName("beef_id")[0].firstChild.nodeValue;
					if (office == "true"){
						office = " so richtig mit Office";
					}else{
						office = "";
					}

					type = MSG_TYPE_INFO;
					
					switch (returncode) {
						case BEEF_BEEFED_SUCCESSFULLY:
							title = buser+" gebeeft!";
							msg = "Du hast "+buser+office+" gebeeft!\nDu kannst Ihn erneut beefen, wenn er deinen Beef ausgeblendet hat.";
							type = MSG_TYPE_OK;
							
							beefbuttons = document.getElementsByName("beef_but_"+beef_id);
							log(beefbuttons.length);
							
							if(beefbuttons.length){
								for(bi = 0; bi < beefbuttons.length; bi++){
									beefbuttons[bi].setAttribute("disabled", "disabled");
								}
							}
							
							break;
						case BEEF_ALREADY_BEEFED:
							title = "Bereits zuvor gebeeft";
							msg = "Du hast "+buser+" bereits zuvor gebeeft. Er muss Deinen Beef erst ausblenden, damit du ihn erneut Beefen kannst";
							type = MSG_TYPE_ERROR;
							break;
						default:
							// nothing to do. should not happen
							break;
					}
					show_message(msg, title, type);
					
				}else if(type == TYPE_HIDE_BEEF){
					
					xmlDoc = request.responseXML;
					
//					var returncode = parseInt(xmlDoc.getElementsByTagName("return_code")[0].firstChild.nodeValue);
					var beefBoxId = xmlDoc.getElementsByTagName("beef_box_id")[0].firstChild.nodeValue;
					
					beefCont = document.getElementById("beef_container");
					
					beefBox = document.getElementById("beef_box_"+beefBoxId);
//					beefBox.style.display = 'none';
					beefCont.removeChild(beefBox);
					
					beefCount = beefCont.getElementsByTagName("div").length;
					
					if(beefCount < 1){
						beefCont.style.display = 'none';
					}
					
				}

				log("test");
				requestWrappers.splice(i,1);i--; 
				
	    	}else{

			    //alert("Fehler beim laden der XML-Daten vom Server! http: "+request.status);
			    log("status: "+request.status);
			}
		}

	}

}

function removeUploadForm(){

  document.getElementById("inp-vid-submit").disabled = "disabled";

  form = document.getElementById("upload-form");
  body = document.getElementsByTagName("body")[0];

  // Form verstecken
  form.style.visibility = "hidden";

  // Infotext
  p = document.createElement("p");
  p.innerHTML = "Datei wird hochgeladen. Abhängig von der Größe der Datei und von der Geschwindigkeit deiner Internetverbindung " +
                "kann dieser Vorgang sehr lange dauern (unter Umständen sogar Stunden). Schliesse daher bitte nicht dieses Fenster, " +
                "ansonsten wird der Upload abgebrochen und dein Video kann nicht veröffentlicht werden. Selbstverständlich kannst du " + 
                "auch solange der Uploadvorgang läuft weiterhin problemlos auf im Hauptfenster auf TekkenTreff weitersurfen. Die Datei " +
                "wird dann in diesem Fenster im Hintergrund weiterhin hochgeladen.";
  //p.className = "box";
  body.insertBefore(p, form);

  // Überschrift
  h2 = document.createElement("h2");
  h2.innerHTML = "Fortschritt";
  body.insertBefore(h2, form);

  // Statusbalken
  img = document.createElement("img");
  img.className = "status-bar";
  img.id = "state-img";
  img.style.visibility = "false";
  body.insertBefore(img, form);

  span = document.createElement("span");
  span.innerHTML = "50%";
  span.id = "state-span";
  body.insertBefore(span, form);

  getUploadState();

}

