var xmlRequest;
var xmlRq2;
var jobFinished = 0;
var formId = "";
var jobId = 0;
var action = "unset";
var pxProPercent = 0;
var progressBarWidth = 0;

	//alert("hallo");
	function erstelleHttpRequest() {
		if ( (window.XMLHttpRequest) ) { //&& !(window.ActiveXObject) )
		
			try {
				xmlRequest = new XMLHttpRequest();
				xmlRq2 = new XMLHttpRequest();
			}catch(e) {
				xmlRequest = false;
				xmlRq2 = false;
			}
		}
		 else if (window.ActiveXObject) {
			
				try {
					xmlRequest = new ActiveXObject("Msxml2.XMLHTTP");
					xmlRq2 = new ActiveXObject("Msxml2.XMLHTTP");
				} catch(e) {
					xmlRequest = false;
					xmlRq2 = false;
				}
				
			}
	}//

	function disableForm(formId, jobId, action) {
	
		erstelleHttpRequest();
		
		
		
		this.jobId = jobId;
		this.formId = formId;
		this.action = action;
	
		//Formular-Element
		var form = document.getElementById(formId);
		
		//CSS Class setzen
		form.className = "disabled";
		
		//Formular-Elemente disablen
		for (var i = 0; i < form.length;i++) {
			form.elements[i].disabled = true;
		}
		
		waitWhileJobBusy();
		
	}//disableForm

	function waitWhileJobBusy() {
	
		if (jobFinished == 1)
			return 1;
		
		//alert ("JobId: " + jobId + "finished: " + jobFinished);
		
		var uri = "/job_finished.php?infos=jobstatus&jobId=" + jobId + "&test=" + (Math.random() * 100);
		
		//xmlRequest.setRequestHeader("Pragma", "no-cache");
 		//xmlRequest.setRequestHeader("Cache-Control", "must-revalidate");
 		//xmlRequest.setRequestHeader("If-Modified-Since", document.lastModified);
		
		xmlRequest.open("GET", uri, true);
		xmlRequest.onreadystatechange = jobDone;
		xmlRequest.send(null);
		
	}//waitWhileJobBusy

	function jobDone() {
			//alert("jobDone");
			if (xmlRequest.readyState == 4) {
				//alert("readyState == 4");
				
				//alert("requestStatus: " + xmlRequest.status);
				if(xmlRequest.status == 200) {
				
					var responseDoc;
					
					//responseDoc = xmlRequest.responseText;
					responseDoc = xmlRequest.responseXML;
					jobFinished = responseDoc.getElementsByTagName("jobstatus")[0].childNodes[0].nodeValue;
					//jobFinished = xmlRequest.responseText;
					//alert("jobFinished: " + xmlRequest.responseText);
					
					if (jobFinished < 2) {
						enableForm(formId);
						
					}else{
						window.status = "Job wird ausgeführt...";
						window.setTimeout("waitWhileJobBusy()",2000);
					}
				
				}
			
			}
	}//jobDone

	function enableForm(formId) {
	
		//Formular-Element
		var form = document.getElementById(formId);
		
		//CSS Class setzen
		form.className = "";
		
		//Formular-Elemente disablen
		for (var i = 0; i < form.length;i++) {
			form.elements[i].disabled = false;
		}
		
		//xmlRq2.setRequestHeader("Pragma", "no-cache");
 		//xmlRq2.setRequestHeader("Cache-Control", "must-revalidate");
 		//xmlRq2.setRequestHeader("If-Modified-Since", document.lastModified);
		
		//alert("Job ist fertig");
		var uri = "/job_finished.php?infos=okmsg&msg=" + jobFinished + "&jobId=" + jobId + "&action=" + action;
		
		xmlRq2.open("GET", uri, true);
		xmlRq2.onreadystatechange = showMsgBox;
		xmlRq2.send(null);
		//alert (form.length);
		
	}//enableForm

	function showMsgBox() {
	//alert("1");
		if (xmlRq2.readyState == 4) {
			//alert("2");
			if(xmlRq2.status == 200) {
				//alert("3");
				
				var responseDoc2 = xmlRq2.responseXML;
				//alert(responseDoc2);
				
				//Text der anzuzeigenden Message
				var msg = responseDoc2.getElementsByTagName("msg")[0].childNodes[0].nodeValue;
				msg = msg.replace(/ü/g,"&uuml;");
				
				//CSS-Class der anzuzeigenden Message
				var msg_class = responseDoc2.getElementsByTagName("msg_class")[0].childNodes[0].nodeValue;
			
				//Text der aktuellen Msg-Box ändern
				var objMsgDiv = document.getElementById("msg_div");
				objMsgDiv.innerHTML = msg;
				
				var strHexFadeToColor = "000000";
				
				if (msg_class == "ok") strHexFadeToColor = "c2d2a5";
				if (msg_class == "warn") strHexFadeToColor = "dadde8";
				if (msg_class == "error") strHexFadeToColor = "FF0066";
				
				fade("msg_div",'dadde8',strHexFadeToColor);
				
				
				
				
			}
		}
	}//showMsgBox

	function showJobProgress(jobId) {
		//alert("jobstatus: " + jobId);
		erstelleHttpRequest();
		
		if (pxProPercent == 0) {
			var divProgressBorder = document.getElementById('div_progress_border');
			pxProPercent = parseFloat(parseInt(divProgressBorder.style.width) / 100);
			progressBarWidth = parseInt(divProgressBorder.style.width);
		}
		
		//alert(pxProPercent);
		this.jobId = jobId;
		
		var uri = "/jobinfo.php?info=percent&job_id=" + jobId + "&test=" + (Math.random() * 100);
		
		xmlRequest.open("GET", uri, true);
		xmlRequest.onreadystatechange = progressBarRefresh;
		xmlRequest.send(null);
	}

	function progressBarRefresh() {
		//alert("readyState = " + xmlRequest.readyState);
		
		if (xmlRequest.readyState == 4) {
			//alert("xmlrequest Status: " + xmlRequest.status);
			if(xmlRequest.status == 200) {
			//alert("progressBarRefresh");
				var responseDoc = xmlRequest.responseXML;
				var percent = responseDoc.getElementsByTagName("percent")[0].childNodes[0].nodeValue;
				var status_id = responseDoc.getElementsByTagName("status_id")[0].childNodes[0].nodeValue;
				var test = responseDoc.getElementsByTagName("nr")[0].childNodes[0].nodeValue;
				//alert (status_id + " + " + percent + " + " + test);
				
				//Text der Msg-Box ändern
				//var objMsgDiv = document.getElementById("msg_div");
				//objMsgDiv.innerHTML = "Fortschritt: " + percent + "%";
				
				var divProgressSection = document.getElementById("div_progress_section");
				var divProgress = document.getElementById("div_progress");
				var divPercent = document.getElementById("div_progress_percent");
				
				divProgress.style.width = Math.floor(percent * pxProPercent) + "px";
				divPercent.innerHTML = "Fortschritt: " + percent + "%";
				
				if (status_id > 1) {
					//alert("status > 1");
					window.setTimeout("showJobProgress(" + jobId + ")", 1000);
				}else{
					//alert("status <= 1");
					divPercent.innerHTML = "Fortschritt: 100%";
					divProgress.style.width = progressBarWidth;
					divProgressSection.style.display = 'none';
					document.getElementById('div_progress_section').style.display='none';
					refreshMsgBoxHandler();
					//divProgress.innerHTML = "Vorgang abgeschlossen";
				}
			}
		
		}
	}
	
	function refreshMsgBoxHandler() {
		//alert("refreshMsgBoxHandler()");
		erstelleHttpRequest();
		var uri = "/jobinfo.php?info=status_msg&job_id=" + jobId + "&test=" + (Math.random() * 100);
		
		xmlRq2.open("GET", uri, true);
		xmlRq2.onreadystatechange = refreshMsgBox;
		xmlRq2.send(null);
	}
	
	function refreshMsgBox() {
	
		if (xmlRq2.readyState == 4) {
		
			if(xmlRq2.status == 200) {
				var responseDoc2 = xmlRq2.responseXML;
				//alert(responseDoc2);
				
				//Text der anzuzeigenden Message
				var msg2 = responseDoc2.getElementsByTagName("msg")[0].childNodes[0].nodeValue;
				msg2 = msg2.replace(/ü/g,"&uuml;");
				msg2 = msg2.replace(/ä/g,"&auml;");
				msg2 = msg2.replace(/ö/g,"&ouml;");
				//alert(msg2);
				//CSS-Class der anzuzeigenden Message
				var msg_class = responseDoc2.getElementsByTagName("msg_type")[0].childNodes[0].nodeValue;
			
				//Text der aktuellen Msg-Box ändern
				var objMsgDiv = document.getElementById("msg_div");
				objMsgDiv.innerHTML = msg2;
				
				var strHexFadeToColor = "000000";
				
				if (msg_class == "ok") strHexFadeToColor = "c2d2a5";
				if (msg_class == "warn") strHexFadeToColor = "dadde8";
				if (msg_class == "error") strHexFadeToColor = "FF0066";
				
				fade("msg_div",'dadde8',strHexFadeToColor);
			}
			
		}
	}
	
	/**
	* Umrechnung von dezimalen RGB-Farbwerten nach hexadezimal
	*
	* @param int r 
	* @param int g
	* @param int b
	*/
	function getHex(r,g,b){
		//neue werte zurück in hexadezimal umwandeln
		rHex = Math.round(r).toString(16);
		gHex = Math.round(g).toString(16);
		bHex = Math.round(b).toString(16);
		if(rHex.length < 2){ rHex = "0" + rHex; }
		if(gHex.length < 2){ gHex = "0" + gHex; }
		if(bHex.length < 2){ bHex = "0" + bHex; }
		
		//Farbe in hexadezimal
		myColor = rHex + gHex + bHex;
		
		return myColor;
	}
	
	/**
	* Faden von Startfarbe zu Zielfarbe
	*
	* @param string hexFadeFromColor
	* @param string hexFadeToColor
	*/
	function fade(strEltId, hexFadeFromColor, hexFadeToColor ) {
		
		var fps = 15;
		var duration = 1500;
		
		var frames = Math.round(fps * (duration / 1000));
		var interval = duration / frames;
		var delay = interval;
		var frame = 0;
		var hexColor = "000000";
		
		//Farbkanäle der Startfarbe ins Dezimalsystem extrahieren
		rDec = parseInt(hexFadeFromColor.slice(0,2),16);
		gDec = parseInt(hexFadeFromColor.slice(2,4),16);
		bDec = parseInt(hexFadeFromColor.slice(4,6),16);
		
		//Farbkanäle der Zielfarbe ins Dezimalsystem extrahieren
		rMax = parseInt(hexFadeToColor.slice(0,2),16);
		gMax = parseInt(hexFadeToColor.slice(2,4),16);
		bMax = parseInt(hexFadeToColor.slice(4,6),16);
		
		//
		
		while (frame < frames) {

			rDec = Math.floor(rDec * ((frames-frame)/frames) + rMax * (frame/frames));
			gDec = Math.floor(gDec * ((frames-frame)/frames) + gMax * (frame/frames));
			bDec = Math.floor(bDec * ((frames-frame)/frames) + bMax * (frame/frames));
			
			hexColor = getHex(rDec, gDec, bDec);
		
			setTimeout("setBgColor('" + strEltId + "','" + hexColor + "')", delay);
			
			frame++;
			delay = interval * frame;
			
		}
		setTimeout("setBgColor('" + strEltId + "','" + hexFadeToColor + "')", delay);
		
	}
	
	
	/**
	* Setzt die Hintergrundfarbe eines HTML-Elements
	*
	*/
	function setBgColor(strDivId, color){
		
		var objDiv = document.getElementById(strDivId);
		objDiv.style.backgroundColor = "#" + color;
		
	}
	
	
	
	function opacity(id, opacStart, opacEnd, millisec) {
	    //speed for each frame
	    var speed = Math.round(millisec / 100);
	    var timer = 0;
	
	    //determine the direction for the blending, if start and end are the same nothing happens
	    if(opacStart > opacEnd) {
	        for(i = opacStart; i >= opacEnd; i--) {
	            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
	            timer++;
	        }
	    } else if(opacStart < opacEnd) {
	        for(i = opacStart; i <= opacEnd; i++)
	            {
	            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
	            timer++;
	        }
	    }
	}//opacity
	
	//change the opacity for different browsers
	function changeOpac(opacity, id) {
	    var object = document.getElementById(id).style;
	    object.opacity = (opacity / 100);
	    object.MozOpacity = (opacity / 100);
	    object.KhtmlOpacity = (opacity / 100);
	    object.filter = "alpha(opacity=" + opacity + ")";
	    
	} //changeOpac
	
	function blendDiv( div0, div1, millisec) {
	    var speed = Math.round(millisec / 100);
	    var timer = 0;
	    
	    //document.getElementById(div0)
	    
	    //make  transparent
	    //changeOpac(0, "div11");
	
	    //fade in div
	    for(i = 0; i <= 100; i++) {
	        setTimeout("changeOpac(" + i + ",'" + div1 +"')",(timer * speed));
	        timer++;
	    }
	    
	    //changeOpac(0, div0);
	   
	}//blendDiv
	
	function chooseDivToBlend(div0, div1, millisec) {
	
		//alert("divSichtbar opacity: " + document.getElementById(div0).style.opacity);
		
		if ( (!document.getElementById(div0).style.opacity) ||  (document.getElementById(div0).style.opacity == 0) ){
			//alert ("divSichtbar opacity = 0");
			blendDiv(div0, div1, millisec);
		}else{
			blendDiv(div1, div0, millisec);
		}
		
	}//chooseDivToBlend
