// Laden der XML Dateien
// Verbindung zu XML

function init() {

	// gibts ein preload? die form ist ?AbstractID=99999999 oder ?AbstractID=9999
	if (location.search.search(/[?,&]AbstractID=[0-9]{8}/) != -1)
		preload = location.search.substr(location.search.search(/[?,&]AbstractID=[0-9]{8}/)+12,8);
	else if (location.search.search(/[?,&]AbstractID=[0-9]{4}/) != -1)
		preload = location.search.substr(location.search.search(/[?,&]AbstractID=[0-9]{4}/)+12,4);
		else preload="";

		try {														// W3C-Standard
			AUTHORS = new XMLHttpRequest();
			WORDS = new XMLHttpRequest();
			MD5 = new XMLHttpRequest();
		} catch(w3c) {
			try {													// Internet Explorer
				AUTHORS = new ActiveXObject("Msxml2.XMLHTTP");
				WORDS = new ActiveXObject("Msxml2.XMLHTTP");
				MD5 = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(msie) {
				try {												// Internet Explorer alt
					AUTHORS = new ActiveXObject("Microsoft.XMLHTTP");
					WORDS = new ActiveXObject("Microsoft.XMLHTTP");
					MD5 = new ActiveXObject("Microsoft.XMLHTTP");
				} catch(msie_alt) {
					alert("Browser can't access XML!");				// !!! Link auf XML-Dokument
					AUTHORS_ready = false;
					WORDS_ready = false;
					MD5_ready = false;
					return;
				}
			}
		}
		AUTHORS_ready=true; AUTHORS_loaded=false;
		WORDS_ready=true;
		MD5_ready=true;

	if (preload!="") getDelivery(preload);

	load_keywords();

}

function proxim_authors(number,author) {

	if (AUTHORS_ready) {										// nur wenn connected
		if (!AUTHORS_loaded) {
		  	AUTHORS.open('GET', 'icuengine/authors.xml', true);			// authors.xml anfordern (asynchron)
			AUTHORS.setRequestHeader('Content-Type', 'text/xml');
			// umgeht Internet Explorers Caching von GET-Anfragen
			AUTHORS.setRequestHeader('If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT');
			AUTHORS.send(null);
			// nach Status-Aenderungen der Verbindung
			// werden die empfangenen Inhalte geparst
			AUTHORS.onreadystatechange = function() {
				// wenn Datei komplett empfangen ist ...
				if (AUTHORS.readyState == 4) {
					// Dokument nicht gefunden (Code 0 fuer lokale Tests):
					if (AUTHORS.status != 200 && AUTHORS.status != 0) {
						alert("authors.xml could not be loaded!");
						return;
					}
			    	// schreibe alle submissions in authors

			    	authorsXML = AUTHORS.responseXML.getElementsByTagName("submission");
			    	AUTHORS_loaded=true;
					// handler wieder setzen, die XML Daten sind jetzt geladen
					document.getElementById("txtEntityName").onkeyup = function () {processChange(this);}
					// wir rufen uns selber wieder auf, zur sicherheit mit dem aktuellen Inhalt
					proxim_authors(10,document.getElementById("txtEntityName").value);

				}
			}
		} else {
			for(var iXML = 0; iXML < authorsXML.length; iXML++) {

				if (author.toLowerCase() < authorsXML[iXML].firstChild.firstChild.nodeValue.toLowerCase()) {
					for(var j = 0; j < number && iXML+j < authorsXML.length; j++) {
						var vNode = authorsXML[iXML+j].firstChild.firstChild.nodeValue;
						var vNodeval = authorsXML[iXML+j].childNodes[1].firstChild.nodeValue;
						document.getElementById("frmData1").selEntity[j] = new Option(vNode,vNodeval);
	// TODO ggw absolut addressieren, der Teil mit den Childs und siblings ist sehr anfällig - vielleicht ändern
					}
				break
				}
			}
			if (iXML == authorsXML.length) document.getElementById("frmData1").selEntity[0] = new Option("","");
		}
	}
}

function load_keywords() {

	if (WORDS_ready) {										// nur wenn connected

		  	WORDS.open('GET', 'icuengine/words.xml', true);			// authors.xml anfordern (asynchron)
			WORDS.setRequestHeader('Content-Type', 'text/xml');
			// umgeht Internet Explorers Caching von GET-Anfragen
			WORDS.setRequestHeader('If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT');
			WORDS.send(null);
			// nach Status-Aenderungen der Verbindung
			// werden die empfangenen Inhalte geparst
			WORDS.onreadystatechange = function() {
				// wenn Datei komplett empfangen ist ...
				if (WORDS.readyState == 4) {
					// Dokument nicht gefunden (Code 0 fuer lokale Tests):
					if (WORDS.status != 200 && WORDS.status != 0) {
						alert("words.xml could not be loaded!");
						return;
					}
			    	// schreibe alle words in wordsXML

			    	wordsXML = WORDS.responseXML.getElementsByTagName("word");
			    	for(var iXML = 0; iXML < wordsXML.length; iXML++) {

						var vNode = wordsXML[iXML].firstChild.nodeValue;
						var vNodeval = wordsXML[iXML].childNodes[1].firstChild.nodeValue;
						document.getElementById("frmData2").selEntity[iXML] = new Option(vNode,vNodeval);

	// TODO ggw absolut addressieren, der Teil mit den Childs und siblings ist sehr anfällig - vielleicht ändern

					}
				}
			}
		}
	}


function getDelivery(IDs) {

	ID=IDs.split(",");
	// MD5.open('GET', 'http://papers.icultrasonics.org/icuengine/servlet/deliverBib?AbstractID=' + ID[0], true);
	MD5.open('GET', 'icuengine/servlet/deliverBib?AbstractID=' + ID[0], true);
	MD5.setRequestHeader('Content-Type', 'text/xml; charset=ISO-8859-1');
	MD5.onreadystatechange = function() {
		if (MD5.readyState == 4) {
			if (MD5.status != 200 && MD5.status != 0) {
				alert("Paper could not be loaded! Fehler=" + MD5.status);
				return;
			}

			// XML Satz geladen
			// was gefunden?


			if (MD5.responseXML.getElementsByTagName("titleline")[0].firstChild.nodeValue!="notfound") {
				// ausgabe titel
				document.getElementById("searchresult").innerHTML += "<span style=\"text-align:left; color: black; font: bold 14px verdana, arial, helvetica, sans-serif\">"
					 + MD5.responseXML.getElementsByTagName("titleline")[0].firstChild.nodeValue + "</span><br>";
				// ausgabe authoren
				document.getElementById("searchresult").innerHTML += "<span style=\"text-align:left; color: black; font: normal 12px verdana, arial, helvetica, sans-serif\">"
					+ MD5.responseXML.getElementsByTagName("authorline")[0].firstChild.nodeValue + "</span>"

				// ist das PDF freigeschalten?
				if (MD5.responseXML.getElementsByTagName("result")[0].firstChild.nodeValue=="0")
					document.getElementById("searchresult").innerHTML += "<br><span style=\"text-align:center; color: red; font: italic 10px verdana, arial, helvetica, sans-serif\">We know about this paper, however the authors have not yet transferred copyrights to us! Please come back later...</span><br><br>";
				else
					// TODO hier ggf. den Pfad anpassen (auf /2007)
					document.getElementById("searchresult").innerHTML +=
						"<a style=\"text-align:left; font: bold 12px verdana, arial, helvetica, sans-serif\" href=\"http://papers.icultrasonics.org/"
						+ MD5.responseXML.getElementsByTagName("result")[0].firstChild.nodeValue
						+ "\"> PDF</a><br><br>";

			} else document.getElementById("searchresult").innerHTML += "<i>We are sorry, we have no reference in the Database for ID " + ID + "!</i>";

			MD5.abort();

			// rekursiv aufrufen
			if (ID[1]==null) ; else getDelivery(IDs.substr(IDs.search(/,/)+1));
		// man koennte das ende des retrieve processes anzeigen, wenns denn ein eigenes feld dafuer geben wŸrde
		// document.getElementById("searchresult").innerHTML="retrieve fertig<br>"
		}
	}
	MD5.setRequestHeader('If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT');
	MD5.send(null);
}

		// cws 08/29/02
		// The following javascript is used to create a listbox underneath a textbox that displays
		// the results of a query to an xml recordset based on the user's input into the textbox
		// It is particularly useful when the xml recordset is large and you want to encourage
		// Users to select from the list instead of typeing in free form.


		function processChange(objTextBox)
		{
			//handles change to the text box
			var inText
			var strResult
			var vNode
			var oNodeList
			var lngPositionTop
			var lngPositionWidth
			var lngPositionHeight
			var lngPositonLeft
			var lngPositionButtonLeft
			//get the content of what's been typed
			inText = objTextBox.value;
			//grab the position of the textbox we want to make into a drop down
			//SR chg: wir sind anders eingepackt
			lngPositionLeft = objTextBox.offsetLeft + objTextBox.offsetParent.offsetParent.offsetParent.offsetLeft+2;
			lngPositionTop = objTextBox.offsetTop + objTextBox.offsetParent.offsetParent.offsetParent.offsetTop+2;
			/*alert(objTextBox.offsetParent.tagName + ";"
			 + objTextBox.offsetParent.offsetParent.tagName + ";"
			 + objTextBox.offsetParent.offsetParent.offsetParent.tagName + ";"
			 + objTextBox.offsetParent.offsetParent.offsetParent.offsetParent.tagName + ";"
			 + objTextBox.offsetParent.offsetParent.offsetParent.offsetParent.offsetParent.tagName + "\n"
			 + objTextBox.offsetParent.offsetTop + ";"
			 + objTextBox.offsetParent.offsetParent.offsetTop + ";"
			 + objTextBox.offsetParent.offsetParent.offsetParent.offsetTop + ";"
			 + objTextBox.offsetParent.offsetParent.offsetParent.offsetParent.offsetTop + ";"
			 + objTextBox.offsetParent.offsetParent.offsetParent.offsetParent.offsetParent.offsetTop + "\n"
			 + objTextBox.offsetParent.offsetHeight + ";"
			 + objTextBox.offsetParent.offsetParent.offsetHeight + ";"
			 + objTextBox.offsetParent.offsetParent.offsetParent.offsetHeight + ";"
			 + objTextBox.offsetParent.offsetParent.offsetParent.offsetParent.offsetHeight + ";"
			 + objTextBox.offsetParent.offsetParent.offsetParent.offsetParent.offsetParent.offsetHeight
			 );*/
			//SR chgEND
			lngPositionHeight = objTextBox.offsetHeight;
			lngPositionWidth = objTextBox.offsetWidth;
			lngPositionTop = lngPositionTop + lngPositionHeight;
			lngPositionButtonLeft = lngPositionLeft + lngPositionWidth;

			//first put a listbox on the page
			document.getElementById("dList").innerHTML = "<SELECT id=selEntity size=10	onclick='selectEntity(" + objTextBox.id + ")' " +
							"style='LEFT: " + lngPositionLeft + "px; WIDTH: " + lngPositionWidth + "px; POSITION: absolute; TOP: " + lngPositionTop + "px; HEIGHT: 100px'> " +
							"<OPTION></OPTION></SELECT>";

			//display those that are close
			if (!AUTHORS_loaded) {
				//handler wärend des ladens ausschalten
				document.getElementById("txtEntityName").onkeyup = null;
				document.getElementById("frmData1").selEntity[0] = new Option("Authors list being loaded...","");
				//dummy aufruf, dient nur dem laden
				proxim_authors(0,"");
				//document.getElementById("txtEntityName").onkeyup = function () {processChange(this);}
			} else proxim_authors(10,inText);




		}
		function selectEntity(objTextBox){
			//called when we want to put the slection from the drop down into the textbox
			//input is the id of the textbox we want to put into
			// varIn contains a string which corresponds to the tag tgCust on the form
			//use the dom to find the appropriate textbox referenced by the tag

		// f¸r mehrere Boxen (lt. Original from page.html)
		//	var strObj = varIn;
		//
		//	var elements = document.getElementsByTagName('input');
		//
		//	for (var i = 0; i < elements.length; i++) {
		//		var pattern = elements.item(i).getAttribute('tgCust');
		//		if (pattern == strObj)
		//			var elText = elements.item(i);
		//		}
		//
		//	elText.value = frmData1.selEntity.value;
		//	dList.innerHTML = "";

		//f¸r eine Box (lt. Original from page.html)
			objTextBox.value = document.getElementById("frmData1").selEntity.options[document.getElementById("frmData1").selEntity.selectedIndex].text;


			// frmData1.selEntity.value enthält die PaperIDs
			var IDs = document.getElementById("frmData1").selEntity.options[document.getElementById("frmData1").selEntity.selectedIndex].value;

			//document.getElementById("searchresult").innerHTML="Searchresult for author=" + objTextBox.value;

			// man koennte den beginn des retieve processes anzeigen, wenns ein feld geben wuerde
			// document.getElementById("searchresult").innerHTML="ret authors<br>";
			document.getElementById("searchresult").innerHTML="<span></span>";
			// listbox loeschen
			document.getElementById("dList").innerHTML = "<span></span>";
			//selection loeschen
			document.getElementById("frmData2").selEntity.selectedIndex=-1;
			getDelivery(IDs);
		}

		function selectKeyword(){
			// kruecke!! sollte eigentlci mit einer funktion gehen (auch kšnte man den Suchbegrif besser darstellen)

			// frmData2.selEntity.value enthält die PaperIDs
			var IDs = document.getElementById("frmData2").selEntity.options[document.getElementById("frmData2").selEntity.selectedIndex].value;

			// man koennte den beginn des retieve processes anzeigen, wenns ein feld geben wuerde
			// document.getElementById("searchresult").innerHTML="ret authors<br>";
			document.getElementById("searchresult").innerHTML="<span></span>";

			// listbox loeschen
			document.getElementById("dList").innerHTML = "<span></span>";
			// Texteingabe loeschen
			document.getElementById("txtEntityName").value="";
			getDelivery(IDs);
		}


// Aufruf der init-Funktion beim Laden
window.onload = init;