var redirectTarget;
var imgForm;

function switchOn(layerId) {
		myLayer = document.getElementById(layerId);
		myLayer.style.visibility = 'visible';
	}
	
	function switchOff(layerId) {
		myLayer = document.getElementById(layerId);
		myLayer.style.visibility = 'hidden';
	}
	function toggleVisible(layerId) {
		myLayer = document.getElementById(layerId);
		if(myLayer.style.visibility == 'visible') {
			myLayer.style.visibility = 'hidden';
		} else {
			myLayer.style.visibility = 'visible';
		}
	}
	
	function showCatlist() {
		switchOn("catlistLayer");
	}
	
	function swapLayers(oldLayerId, newLayerId) {
		toggleVisible(oldLayerId);
		toggleVisible(newLayerId);
	}
	
	function showOneHideOtherLayers(layerToShow, layersToHide) {
		toggleVisible(layerToShow);
		for(var i=0; i < layersToHide.length; i++) {
			switchOff(layersToHide[i]);
		}
	}
	
	
	function verticalOnly(item) {
		item.toolManDragGroup.verticalOnly()
	}
	
	function horizontalOnly(item) {
		item.toolManDragGroup.horizontalOnly()
	}

	function showDNoParams(form) {
		var msg = "The displayNo of project ";
		var projects = form.projId;
		for(var i=0; i<projects.length; i++) {
			msg = msg + form.projId[i].value + " is: " + form.displayNo[i].value + "\n";
			
		}
		alert(msg);
		
	}
	
	function showImgDNoParams(form) {
		var msg = "The displayNo of image ";
		var images = form.id;
		for(var i=0; i<images.length; i++) {
			msg = msg + " id " + images[i].value + "  is: " + form.getElementsByTagName("img")[i].dNo+ "\n";
			
		}
		alert(msg);
		
	}
	function reorder(form) {
		form = document.forms["linkform"];
		var projects = form.projId;
		var displayNos = form.displayNo;
		
		for(var i=1; i<projects.length + 1; i++) {
			
			displayNos[i-1].value = i;
			
		}
		showDNoParams(form);
	}
	
	function reorderImages(form) {
		//alert("START reorderImages for form" + form.id);
		
		var images = document.getElementById("images").getElementsByTagName("img");
	//var images = document.getElementById("images").getElements("<div>");
		//alert("number of images: " + images.length);
		var displayNos = form.displayNoImg;
		var ids = form.imgid;
		//we have one image (mouse icon) more than images to order. Therefore, 
		//index starts at 1; the current index is adjusted for the hidden dNo and id fields
		//to prevent index overflow
		for(var i=1; i<images.length; i++) {
			//alert("new dNo of id: " + images[i].id + ": " + images[i].parentNode.dNo);
			//the dNo attribute was assigned in toolman.dragsort.js.makeListSortable()
			if(images[i].parentNode.dNo != null) {
			   
			   displayNos[i-1].value = images[i].parentNode.dNo;
			   
			   ids[i-1].value=images[i].id;
			   
			}
		}
//		showImgDNoParams(form);
	}
	
	function reorderLinks(form, layerName) {
//		alert("START reorderLinks for form" + form);
		
		var rows = document.getElementById(layerName).getElementsByTagName("tr");
//		alert("number of images: " + images.length);
		var checkboxes = form.projCheckbox;
		var currentDisplayNos = form.displayNoProj;
		//alert ("currentDiplayNos is " + currentDisplayNos + " and has a lenght of " + currentDisplayNos.length);
		var newDisplayNos = new Array(rows.length);
		
//		var ids = form.voId;
		var j = 0;
		for(var i=0; i<rows.length; i++) {
//			alert("new dNo of id: " + rows[i].id + ": " + rows[i].dNo);
			//the dNo attribute was assigned in toolman.dragsort.js.makeListSortable()
			if(rows[i].dNo != null) {
			   if(checkboxes[i].checked) {
//				   newDisplayNos[j] = currentDisplayNos[i];
//				   alert("currentDisplayNo["+i +": " + currentDisplayNos[i]);
				   currentDisplayNos[j].value = rows[i].dNo;
				   j++;
			   }
//			   ids[i].value=rows[i].id;
			   
			}
		}
		
		   
		
		form.displayNoProj = currentDisplayNos;
//		showImgDNoParams(form);
	}
	
	
//	function waitForApplet() {
//		
//	}
/*
	function getImageReqParamsFromApplet(targetLink) {
		//alert("start saveNewImages()");
		var applet = document.applets[0];
//		alert("Applet name before getNewImageNames: " + applet.getName());
//		alert("18:24 call to applet.getNewImageNamesDelimited");
		var timerID;
		if(applet.isDone() != "true") {
			alert("#1applet.isDone()? " + applet.isDone());
			//timerID = window.setTimeout("saveNewImages()", 10);
			timerID = window.setTimeout("getImageReqParamsFromApplet()", 10);


//			setTimeout() is NOT a wait!! Execution after setTimeout() statement 
//			proceeds, therefore return. The setTimeout() function will ensure recursion.
//			return "";
		//	alert("newImages while applet is running: " + applet.getNewImageNames());
		} else {
			alert("#2applet.isDone()? " + applet.isDone());
			window.clearTimeout(timerID);
		}
		alert("#3applet.isDone()? " + applet.isDone());
		var imgNamesAsString = applet.getNewImageNamesDelimited();
//		alert("imgNamesAsString: " + imgNamesAsString);
		var imgNames = imgNamesAsString.split("|");
//		alert("imgNames: " + imgNames);
		if(imgNames == null) {
			//alert("imgNames is null");
//			return "no_images_returned_by_applet";
		}

		if(imgNames.length == 0) {
			//alert("imgNames.length is 0");
		}
		//alert("applet.getNewImageNames: " + imgNames + "length: " + imgNames.length);
		var searchParams = "";
		
		if(imgNames.length > 0) {
			searchParams = "&action=addImages" + "&"; //Check with ActionNames.ADD_IMAGES!
			
		} 
		for(var i = 0; i< imgNames.length; i++) {
			searchParams = searchParams + "newImg=" + imgNames[i] + (i<imgNames.length-1? "&" : "");			
		}
//		return searchParams;
		redirect(targetLink, searchParams);
	}
*/	
	
	function getImageReqParamsFromApplet(form) {
		//alert("start saveNewImages()");
		var applet = document.applets[0];
		
//		redirectTarget = targetLink;
//		alert("Applet name before getNewImageNames: " + applet.getName());
//		alert("18:24 call to applet.getNewImageNamesDelimited");
		var timerID;
		if(applet.isDone() == "true") {
//			alert("#1applet.isDone()? " + applet.isDone()+ ", full link: " + redirectTarget);
			
			var imgNamesAsString = applet.getNewImageNamesDelimited();
//			alert("imgNamesAsString: " + imgNamesAsString);
			var imgNames = imgNamesAsString.split("|");
//			alert("imgNames: " + imgNames);
			if(imgNames == null) {
				//alert("imgNames is null");
//				return "no_images_returned_by_applet";
			}

			if(imgNames.length == 0) {
				//alert("imgNames.length is 0");
			}
			//alert("applet.getNewImageNames: " + imgNames + "length: " + imgNames.length);
			var searchParams = "";
			
//			if(imgNames.length > 0) {
//				searchParams = "&action=addImages" + "&"; //Check with ActionNames.ADD_IMAGES!
//				
//			} 
			
			for(var i = 0; i< imgNames.length; i++) {
//				searchParams = searchParams + "newImg=" + imgNames[i] + (i<imgNames.length-1? "&" : "");
				newImgField = document.createElement("input");
				newImgField.type = "hidden";
				newImgField.name = "newImg";
				newImgField.value = imgNames[i];
				imgForm.appendChild(newImgField);
				
			}
//			alert("targetLink#3: " + redirectTarget+searchParams);
//			redirect(redirectTarget, searchParams);
			window.clearTimeout(timerID);
			form.submit();
			
			//timerID = window.setTimeout("saveNewImages()", 10);
			


//			setTimeout() is NOT a wait!! Execution after setTimeout() statement 
//			proceeds, therefore return. The setTimeout() function will ensure recursion.
//			return "";
		//	alert("newImages while applet is running: " + applet.getNewImageNames());
		} else {
//			alert("#2applet.isDone()? " + applet.isDone() + " targetLink: " + redirectTarget);
			timerID = window.setTimeout("getImageReqParamsFromApplet(imgForm)", 1000);
			
			
		}
//		alert("#3applet.isDone()? " + applet.isDone());
		
	}
	
	function redirect(targetLink, reqParams) {
//		alert("redirect: received " + targetLink + reqParams);
		document.location = targetLink + reqParams;
	}
	
	function saveNewImages(form) {
		//alert("saveNewImages called with targetLink " + targetLink);
//		var reqParams = 
		var applet = document.applets[0];
		applet.go();
			getImageReqParamsFromApplet(form);
//		redirect(targetLink, reqParams);
		
	}

	function uploadImages(formName) {
		//alert("Applets[0]: " + document.applets[0]);
		//alert("start uploadImages() with targetLink " + targetLink);
//		var applet = document.applets[0];
//		applet.go();
		imgForm = document.forms[formName];
		saveNewImages(imgForm);
		
	}
	
	
	
	function swapImage() {
		var changeButton = document.getElementById("swapImgButton");
		
		//alert("markImgLayer:" + markImgLayer.style.visibility);
		
			//delButton.value="markierte löschen";
			//toggleVisible("images");
			//toggleVisible("images");
		
		swapLayers("images", "images3");
			
	}
	
	function deleteImages() {
		//alert("START deleteImages()");
		//alert("Applets[0]: " + document.applets[0]);
		var delButton = document.getElementById("delImgButton");
		
		//alert("markImgLayer:" + markImgLayer.style.visibility);
		if(delButton.value=="Bilder löschen") {
			//delButton.value="markierte löschen";
			//toggleVisible("images");
			//toggleVisible("images");
			swapLayers("images", "images2");
			
				
		} else if(delButton.value=="markierte löschen") {
			//document.location = document.location.href;
			//swapLayers("images", "images2");
			//toggleVisible("images");
		}
		//applet.go();
	}
	
	function toggleLayer(layerId, selectedIdx, comparisonIdx) {
		if(selectedIdx == comparisonIdx) {
			switchOn(layerId);
		} else {
			switchOff(layerId);
		}
	}
	
	function toggleConstructionPeriodLayer(selectedProjStatusIdx) {
		toggleLayer("constructionPeriodLayer", selectedProjStatusIdx, 1);
	}
	
	function toggleCatDescriptionLayer(selectedCatTypeIdx) {
		toggleLayer("catDescription", selectedCatTypeIdx, 1);
	}
	
	function toggleAdditionalCategoryLayers(selectedCatTypeIdx) {
		toggleLayer("catDescription", selectedCatTypeIdx, 1);
		toggleLayer("images", selectedCatTypeIdx, 1);
	
		toggleLayer("applet", selectedCatTypeIdx, 1);
	}
	
	function deleteFromDb(voType, targetLink, reqParamStub, internalName, voId) {
		var msg = voType + " " + internalName + " wirklich löschen?";
		if(confirm(msg, "")) {
			redirect(targetLink, ("?action=" + reqParamStub + voId));
		}
	}
	
	function deleteProject(projId, internalName) {
		deleteFromDb("Projekt", "projektedit.jsp", "deleteProject&projId=", internalName, projId);
	}
	
	function deleteCategory(catId, internalName) {
		deleteFromDb("Thema", "themaedit.jsp", "deleteCategory&catId=", internalName, catId);
	}
	
	function captureTextSelection() {
		
		var isNav4 = (navigator.appName == "Netscape" && parseInt(navigator.appVersion) == 4)
		var isNav4Min = (navigator.appName == "Netscape" && parseInt(navigator.appVersion) >= 4)
		var isIE4Min = (navigator.appName.indexOf("Microsoft") != -1 && parseInt(navigator.appVersion) >= 4)
		var surroundedText = "";
		    if (isNav4Min) {
		    	surroundedText = document.getSelection();
		    	
		    } else if (isIE4Min) {
		        if (document.selection) {
		        	surroundedText =
		                document.selection.createRange().text
		            event.cancelBubble = true
		        }
		    }
		    
		if (isNav4) {
		    document.captureEvents(Event.MOUSEUP);
		}
//		alert("Link label will be: " + surroundedText);
		
		return surroundedText;
		
	}
	
	function inputFieldSelectionData() {
		this.form = null;
		this.inputFieldId = null
		this.selectedText = null;
		this.start = 0;
		this.end = 0;
	}
	
function getInputFieldTextSelection(form, inputFieldId) {
		
		var isNav4 = (navigator.appName == "Netscape" && parseInt(navigator.appVersion) == 4)
		var isNav4Min = (navigator.appName == "Netscape" && parseInt(navigator.appVersion) >= 4)
		var isIE4Min = (navigator.appName.indexOf("Microsoft") != -1 && parseInt(navigator.appVersion) >= 4)
		//var selectionData = new Array();
		var selectionData = new inputFieldSelectionData();
		var selectedText = "";
		var start = 0;
		var end = 0;
		    if (isNav4Min) {
		    	var input = form? document.forms[form].elements[inputFieldId] : document.getElementById(inputFieldId);
		    	start = input.selectionStart;
		    	    
		    	end = input.selectionEnd;
		    	    selectedText = input.value.substring(start, end);
//		    	    alert("markierter Text: " + selectedText);
		    	
		    } else if (isIE4Min) {
		    	var range = document.selection.createRange();
		        selectedText = range.text;
		        //alert("In IE markierter Text: " + selectedText);

		    }
		if (isNav4) {
		    document.captureEvents(Event.MOUSEUP);
		}
		//alert("Link label will be: " + selectedText + " at position: (" + start + "," + end + ") in inputField " + inputFieldId);
		//selectionData[0] = form;
		//selectionData[1] = inputFieldId;
		//selectionData[2] = selectedText;
		//selectionData[3] = start;
		//selectionData[4] = end;
		
		selectionData.form = form;
		selectionData.inputFieldId = inputFieldId;
		selectionData.selectedText = selectedText;
		selectionData.start = start;
		selectionData.end = end;
//		alert("inputSelectionData.selectedText: " + selectionData.selectedText);
		return selectionData;
		
	}

	function openInternalLinkChooser(textSelectionData) {
/*
		var form = textSelectionData[0];
		var inputFieldId = textSelectionData[1];
		var linkLabel = textSelectionData[2];
		var selStart = textSelectionData[3];
		var selEnd = textSelectionData[4];
*/		
		var form = textSelectionData.form;
		var inputFieldId = textSelectionData.inputFieldId;
		var linkLabel = textSelectionData.selectedText;
		var selStart = textSelectionData.start;
		var selEnd = textSelectionData.end;
		var searchString = "form=" + form
		+ "&inputFieldId=" + inputFieldId
		+ "&linklabel=" + (escape(linkLabel))
		+ "&start=" + selStart
		+ "&end=" + selEnd;
		var fchWindow = window.open("internalLinkList.jsp?"
				+ searchString, 
				"Linkziel w&auml;hlen",  "width=1000,height=500,status=yes,scrollbars=yes,resizable=yes");
		
		//alert("fcWindow: " + fchWindow);
		fchWindow.width=600;
		fchWindow.height=100;
		
	}
	
	function storeInputFieldTextSelection(inputFieldId) {
		inputSelectionData = getInputFieldTextSelection(null, inputFieldId);
//		alert("selectionData: \nselectedText=" + inputSelectionData.selectedText
//				+ "\nstart=" + inputSelectionData.start
//				+ "\nend=" + inputSelectionData.end);
		
	}
	
//	function createLink(linkTarget, linkLabel, targetWindow, form, inputFieldId, start, end) {
	function createLink(linkTarget, selectionData, targetWindow) {
//		var fchWindow = window.open("internalLinkList.jsp", "Dateiauswahl",  "width=1000,height=500,status=yes,scrollbars=yes,resizable=yes");
		//alert("fcWindow: " + fchWindow);
//		fchWindow.width=600;
//		fchWindow.height=100;
		
		var res = "";
		var linkStub = "<a href=\"";
	    res = linkStub + linkTarget + "\">" + selectionData.selectedText + "</a>";
		//alert("will create Link: " + res);
		if(!targetWindow) {
			targetWindow = self.window;
		}
		var inputField;
		if(selectionData.form != null && selectionData.form != "null") {
			inputField = targetWindow.document.forms[selectionData.form].elements[selectionData.inputFieldId];
		} else {
			inputField = document.getElementById(selectionData.inputFieldId);
//			alert("inputField in createLink: " + inputField);
		}
		var currText = "";
		currText = inputField.value;
		//alert("currText: " + currText);
		if(currText) {
			inputField.value = currText.replace(currText.substring(selectionData.start, selectionData.end), res);
		}
		return res;
		
	}
	
	
	
	function linkSelectionToPage(selectionData, inputFieldId) {
		
		var linkTarget = document.getElementById(inputFieldId).value;
		return createLink(linkTarget, selectionData);
		
	}
	
	function getInputValueAsSelectionData(inputFieldId) {
		var selData = new inputFieldSelectionData();
		var inputField = document.getElementById(inputFieldId);
		//alert("input field: " + inputField + ", " + inputField.id);
		selData.form ="catForm";
		selData.selectedText = inputField.value;
		//alert("input fiel value: " + inputField.value);
		selData.inputFieldId = inputFieldId;
		selData.start = 0;
		selData.end = selData.selectedText.length;
		inputSelectionData = selData;
		return selData;
	}
	
		
	function getReqParams(url) {
		return unescape(url.search.substr(1));
	}
	
	function getReqParamVal(reqParam) {
		var res = "";
		var reqParams = getReqParams(location);
		if(reqParams) {
			var srchArray = reqParams.split("&");
			
			var tempArr = new Array();
			for(var i=0; i<srchArray.length; i++) {	
				tempArr = srchArray[i].split("=");
				
				var param = tempArr[0];
				if(param && param == reqParam) {
					res = tempArr[1];
					break;
				}
			}
		}
		//alert("reqParam was: " + reqParam + "; value = " + res)
		return res;
	}
	
	function getLinkLabelFromCaller() {
		//alert("LinkFromCaller: " + getReqParamVal("linklabel"));
		return getReqParamVal("linklabel");
	}
	
	function getFormFromCaller() {
		//alert("FormFromCaller: " + getReqParamVal("form"));
		return getReqParamVal("form");
	}
	
	function getInputFieldFromCaller() {
		//alert("InputFieldFromCaller: " + getReqParamVal("inputFieldId"));
		return getReqParamVal("inputFieldId");
	}
	
	function getSelStartFromCaller() {
		return getReqParamVal("start");
	}
	
	function getSelEndFromCaller() {
		return getReqParamVal("end");
	}
	
	
	
	
	
	function chooseFile() {
		var fchWindow = window.open("", "Dateiauswahl",  "width=600,height=400,status=yes,scrollbars=yes,resizable=yes");
//		alert("fcWindow: " + fchWindow);
		fchWindow.width=600;
		fchWindow.height=100;
		var location = fchWindow.document.location;
		var content = "<p>Eine Datei ausw&auml;hlen<br>"+ 
					"<form id='fileForm' action='+ location + '>" +
					" <input type='file' id='linkChooser' name='inputFile' size='100'/>" +
				"<br><input type='submit' name='fileBtn'></input>"
			fchWindow.document.write(content);
		
		var linkTarget = fchWindow.document.getElementById("linkChooser").value;
		var timerID;
		if(linkTarget == null || linkTarget == "") {
			timerID = window.setTimeout("saveNewImages()", 2000);

//			setTimeout() is NOT a wait!! Execution after setTimeout() statement 
//			proceeds, therefore return. The setTimeout() function will ensure recursion.
			return "";
		//	alert("newImages while applet is running: " + applet.getNewImageNames());
		} else {
			window.clearTimeout(timerID);
		}
//		alert("Will return " + linkTarget);
		return linkTarget;
	}
	
	function linkInternally() {
		var fchWindow = window.open("internalLinkList.jsp", "Dateiauswahl",  "width=1000,height=500,status=yes,scrollbars=yes,resizable=yes");
		//alert("fcWindow: " + fchWindow);
		fchWindow.width=600;
		fchWindow.height=100;
	}
	var thumbnails = new Array();
	
	function storeImgReference(imgLink) {
		var imgRef = new Image();
		imgRef.src = imgLink;
		thumbnails[imgLink] = imgRef;
//		alert("stored image in thumbnails["+imgLink+"]: " + thumbnails[imgLink]);
//		alert("thumbnails[link]: " + thumbnails[imgLink]);
		
			var largeImg = document.images["largeImg"];
			if(imgRef.src == largeImg.src) {
				resizeLargeImg(imgLink, largeImg);
			}
		
	}
	
	function resizeLargeImg(imgLink, largeImg) {
		var mainImgStdWidth = 450;
		var mainImgStdHeight = 450;
//		var largeImg = document.getElementById("largeImg");
//		alert("largeImg: " + largeImg);
		if(largeImg) {
			
			var height = thumbnails[imgLink].height;
			var width = thumbnails[imgLink].width;
//			alert("height: " + height + ", width: " + width);
			var ratio = height/width;
//			alert("found Image " + largeImg.name + ", ratio: " + ratio);
			if(height > width) {
//				alert("height > width");
				largeImg.height = mainImgStdHeight;
				largeImg.width = Math.ceil(mainImgStdHeight / ratio);
			} else if(width > height) {
//				alert("width > height");
				largeImg.width = mainImgStdWidth;
				largeImg.height = mainImgStdWidth * ratio;
			}
				
		}
	}
	
	function showImgLarge(imgLink) {
//		var imgRef = new Image(0,0);
//		imgRef.src = imgLink;
//		thumbnails[imgLink] = imgRef;
//		alert("stored image in thumbnails["+imgLink+"]: " + thumbnails[imgLink]);
		var currLargeImg = document.getElementById("largeImg");
		currLargeImg.src=imgLink;
//		currLargeImg = newLargeImg;
		resizeLargeImg(imgLink, currLargeImg);
	}
	
	function showImgLargeWithCaption(caption, imgLink) {
		showImgLarge(imgLink);
		//alert("caption: " + caption);
		document.getElementById("captionRow").innerHTML = caption;
	}
	
	
