var request;

function startXMLHTTPRequest(url,functionname)
{
	if (window.XMLHttpRequest) 
	{ // Non-IE browsers
		request = new XMLHttpRequest();
		request.onreadystatechange = functionname;
		try 
		{
			request.open("GET", url, true);
		} 
		catch (e) 
		{
			alert(e);
		}
		request.send(null);
	} 
	else if (window.ActiveXObject) 
	{ // IE
		request = new ActiveXObject("Microsoft.XMLHTTP");
		if (request) 
		{
			request.onreadystatechange = functionname;
			request.open("GET", url, true);
			request.send();
		}
	}
}

/********************************* EventRouter: Funktionen zu Eventbehandlung *********************************/

var jsEvent = new Array();

jsEvent.EventRouter = function (el, eventType)
	{
		this.lsnrs = new Array();
		this.el = el;
		el.eventRouter = this;
		el[eventType] = jsEvent.EventRouter.callback;
	}

jsEvent.EventRouter.prototype.addListener = function (lsnr)
	{
		this.lsnrs[this.lsnrs.length]=lsnr;
	}

jsEvent.EventRouter.prototype.notify = function(e)
	{
		var lsnrs = this.lsnrs;
		for(var i=0; i<lsnrs.length;i++)
		{
			var lsnr = lsnrs[i];
			lsnr.call(this,e);
		}
	}	

jsEvent.EventRouter.callback = function(event)
	{
		var e = event || window.event;
		var router = this.eventRouter;
		router.notify(e);
	}


/********************************* Aktualisierung von Listen - Methoden*********************************/
	
/**
* Methode um Dropdown-Listen zu aktualisieren - Übergabe von Element-Id
*
* param elemId			Element-Id der zu aktualisierenden Dropdown-Liste
* param typElem		 	Liste mit den aktuellen Eintr?gen
* param nodeName		Tagname in der xml-Datei, welches die neuen Einstr?ge enth?lt
* param attrName		Name des Attributes, welches den value-Wert der Eintr?ge enth?lt
* param flag			Wenn true, dann werden alle alten Eintr?ge zuerst gel?scht. Wenn false, bleibt der erste alte Eintrag stehen.
*/
function updateDDList(elemId, 
					typElem, 
					nodeName, 
					attrName, 
					flag)
{
	var t = document.getElementById(elemId);
	var counter;
	if(flag)
		counter = 0;
	else
		counter = 1;
	
	var toNull = false;
	if(!toNull)
	{
		var tmp = tmp = t.length;
		var selected = 0;
		
		for (var a = 0; a < tmp; a++)
		{
			var tmp_1 = (tmp-1)-a;
			if(t.options[tmp_1].selected == true)
				selected = t.options[tmp_1].value;
		}
		
		for (var a = 0; a < tmp; a++)
		{
			var tmp_1 = (tmp-1)-a;
			if(tmp_1 != 0)
				t.options[tmp_1] = null;
		}
		toNull = true;
		t.options[0].selected = true;
		
		for(var i=0;i<typElem.childNodes.length;i++)
		{
			elChild = typElem.childNodes[i];
			if(elChild.nodeName == nodeName)
			{
				attrs = elChild.attributes;
				var id=attrs.getNamedItem(attrName).value;
					
				t.options[counter] = new Option(elChild.firstChild.data);
  				t.options[counter].value= id;
  				if(id == selected)
  					t.options[counter].selected = true;
				counter++;
			}
		}
	}
}

/**
* Methode um Dropdown-Listen zu aktualisieren - Übergabe von Elementen
*
* param elemId			Element-Id der zu aktualisierenden Dropdown-Liste
* param typElem		 	Liste mit den aktuellen Eintr?gen
* param nodeName		Tagname in der xml-Datei, welches die neuen Einstr?ge enth?lt
* param attrName		Name des Attributes, welches den value-Wert der Eintr?ge enth?lt
* param flag			Wenn true, dann werden alle alten Eintr?ge zuerst gel?scht. Wenn false, bleibt der erste alte Eintrag stehen.
*/
function updateDDListElem(elem, 
					typElem, 
					nodeName, 
					attrName, 
					flag)
{
	var t = elem;
	var counter;
	if(flag)
		counter = 0;
	else
		counter = 1;
	
	var toNull = false;
	if(!toNull)
	{
		var tmp = tmp = t.length;
		var selected = 0;
		
		for (var a = 0; a < tmp; a++)
		{
			var tmp_1 = (tmp-1)-a;
			if(t.options[tmp_1].selected == true)
				selected = t.options[tmp_1].value;
		}
		
		for (var a = 0; a < tmp; a++)
		{
			var tmp_1 = (tmp-1)-a;
			if(tmp_1 != 0)
				t.options[tmp_1] = null;
		}
		toNull = true;
		t.options[0].selected = true;
		
		for(var i=0;i<typElem.childNodes.length;i++)
		{
			elChild = typElem.childNodes[i];
			if(elChild.nodeName == nodeName)
			{
				attrs = elChild.attributes;
				var id=attrs.getNamedItem(attrName).value;
					
				t.options[counter] = new Option(elChild.firstChild.data);
  				t.options[counter].value= id;
  				if(id == selected)
  					t.options[counter].selected = true;
				counter++;
			}
		}
	}
}

/********************************* Progressbar - Methoden*********************************/

/**
* Methode zur Aktualisierung des Fortschrittsbalkens
*
* param typElem		 		Liste mit den aktuellen Eintraegen
* param pbarId				Id des DOM-Element zur Darstellung des Balkens
* param progressId			Id des DOM-Elements zur Darstellung der Prozentangabe
* param nodeName			Tagname in der xml-Datei, welches die neuen Einstr?ge enth?lt
* param callBackParameter	URL zum Aufruf der Ermittlung des Fortschritts auf dem Server
* param successParameter	URL zum Aufruf einer Methode, wenn Fortschrittswert 100% ist
*/
function updateProgressBar(typElem,
						pbarId,
						progressId,
						nodeName,
						callBackParameter,
						successParameter)
{
	var pBar = document.getElementById(pbarId);
	var progress = document.getElementById(progressId);
	
	for(var i=0;i<typElem.childNodes.length;i++)
	{
		elChild = typElem.childNodes[i];
		if(elChild.nodeName == nodeName)
		{
			var percent = elChild.firstChild.data;
			if(percent < 100)
			{
				pbar.style.width = percent +"%";
				progress.innerHTML = "&nbsp;" + percent + "%";
				checkProgess(callBackParameter,percent);
			}
			else if (percent == 100)
			{
				pbar.style.width = percent +"%";
				progress.innerHTML = "&nbsp;" + percent + "%";
				checkProgess(callBackParameter,percent);
				parent.top.location = successParameter;
			}
		}
	}
}
