var APSREQUEST_JS_VER = "2.2.1 WIP"
var DEFAULT_LANGUAGE = "de";
var ajaxrequest = new Array();
var apssession = new Array();
var apsrequest_baseurl = "/db/apsisa.dll";
var searchstate = "NEW";
var Query = new Object();
Query.lastDDUpdate = new Object();

var selectedEntityPrefix = undefined;

var m_strLastApsRequest = '';
var m_nWindowResizeDelay = 500;
var suggestTimeout = 0;
var DrillChildsTimeout = 0;
var Details = new Object();
var APSSuggestDelay = 650;
var DrillChildResizeDelay = 50;
var slider_offset = 0;
var slider_total = 0;
var slider_lpx = 0;
var slider_cmd = "";
var slider_count = 0;
var SWFInstance = null;
var LP = "";
var WK = "";
var WKOrder = "";
var WKOrderPersistent = false;
var WKOrderDifferent = false;
var WKcmt = "";
var Lang = DEFAULT_LANGUAGE;
var ExtraMenu = false;
var DMode='';
var listcount = 0;
var colcount = 0;
var rowcount = 0;
var nLoadingCounter = 0;
/*
var sBBLoadTarget = '';
var sBBLoadCmd = '';
*/

var m_nLastBodyWidth = 0
var m_nLastBodyHeight = 0;



var m_clientDictionary = {};


function resizeEventListener() {
	
	var nNewBodyWidth = getBodyWidth();
	var nNewBodyHeight = getBodyHeight();
	if (typeof(onWindowResized)=='function') {
		onWindowResized();
	}
	if ((nNewBodyHeight != m_nLastBodyHeight) || (nNewBodyWidth != m_nLastBodyWidth)) {
		m_nLastBodyHeight = nNewBodyHeight;
		m_nLastBodyWidth = nNewBodyWidth;
		window.setTimeout(resizeEventListener, m_nWindowResizeDelay);
	} 
	else {
		performResize();
	}
	
}


function performResize() {
	
	if (m_strLastApsRequest.search(/displayresultgalery/) >=0 || m_strLastApsRequest.search(/displayresultlist/) >=0) {
		var nNewListCount = undefined;
		if (m_strLastApsRequest.search(/displayresultgalery/) >=0) {
			nNewListCount = getListCount('galery');
		}
		else if (m_strLastApsRequest.search(/displayresultlist/) >=0) {
			nNewListCount = getListCount('list');
		}
		if ((nNewListCount > 0) && (listcount > 0) && (nNewListCount != listcount)) {
			listcount = nNewListCount;
			APSRequest(m_strLastApsRequest);
		}
	}
	resizeDrillChilds();
}



/**
 * Formatiert das Datum anhand eines Format-Strings
 * Folgende Kürzel können verwendet werden:
 * dd    Tag des Monats (immer 2-stellig)
 * MM    Monat des Jahres (immer 2-stellig)
 * yy    Jahr (2-stellig);
 * yyyy  Jahr (4-stellig)
 * hh    Stunden (immer 2-stellig) 
 * mm    Minuten (immer 2-stellig) 
 * ss    Sekunden (immer 2-stellig)
 * @param {String} sFormat Der Formatstring
 * @return {String} formatierter String 
 */
Date.prototype.formatDate = function(sFormat) {
	var addZero = function(vNumber) { 
    	return ((vNumber < 10) ? "0" : "") + vNumber; 
	};
	var vDay              = addZero(this.getDate()); 
    var vMonth            = addZero(this.getMonth()+1); 
    var vYearLong         = addZero(this.getFullYear()); 
    var vYearShort        = addZero(this.getFullYear().toString().substring(3,4)); 
    var vYear             = (sFormat.indexOf("yyyy")>-1?vYearLong:vYearShort); 
    var vHour             = addZero(this.getHours()); 
    var vMinute           = addZero(this.getMinutes()); 
    var vSecond           = addZero(this.getSeconds()); 
    var vDateString       = sFormat.replace(/dd/g, vDay).replace(/MM/g, vMonth).replace(/y{1,4}/g, vYear);
    vDateString           = vDateString.replace(/hh/g, vHour).replace(/mm/g, vMinute).replace(/ss/g, vSecond); 
    return vDateString;
}

document.getImagesByName = function(sName) {
	var nodeList = this.getElementsByName(sName);
	if (nodeList.length == 0) {
		var nodeList = new Array();
		for (var i=0; i<this.images.length; i++) {
			if (this.images[i].name == sName) {
				nodeList.push(this.images[i]);
			}
		}
	}	
	return nodeList;
}

/**
 * initAPS
 * Initialisiert APS vie AJAX. Funktion wird am Ende der Index.html aufgerufen.
 */
function initAPS(preloaded) {
	Query.media = "";
	Query.mediaID = "";
	Query.archive = "";
	Query.archiveID = "";
	Query.base = "";
	Query.catalog = "";
	Query.maps = "";
	Query.mapstxt = "";
	Query.mapslvl = "";
    Query.lastDDUpdate.catalog = "";
    Query.lastDDUpdate.tastr = "";
    Query.lastDDUpdate.start = "";
    var b = BrowserDetect.browser;
    var dosearch = true;
    
    if (!preloaded && location.search==='') {
		APSRequest("init?:media=ALL&:archiv=ALL&:dmode=galery&:browser=" + escape(b));
	} else if (!preloaded && location.search.indexOf('?ARCHIV_')== 0) {
		var thearchive = location.search.substring(8);
		dosearch = false;
		APSRequest("archivselect?option=preloaded&:dmode=galery&:archiv=" + thearchive + "&:browser=" + escape(b));
	} else if (!preloaded && location.search.indexOf('?MEDIA_')== 0) { 
		var themedia = location.search.substring(7);
		dosearch = false;
		APSRequest("mediaselect?option=preloaded&:archiv=ALL&:dmode=galery&:media=" + themedia + "&:browser=" + escape(b));
	} else {
		APSRequest("init?option=preloaded&:archiv=ALL&:media=ALL&:dmode=galery&:browser=" + escape(b)+"&pathname=" + escape(location.pathname));
	}
	
	initializeStatusfromCookie();
	
	if (location.search !== '' && location.search != '?NOSEARCH' && dosearch) {
		var s = unescape(location.search);
		s = s.replace(/^\?/, "");
		var numberParam = "&number=";
		if (s.indexOf(numberParam) != -1) {
			var q = s.substring(0, s.indexOf(numberParam));
			var no = s.substring(s.indexOf(numberParam) + numberParam.length);
			if (parseInt(no) == NaN) {
				no = 1;
			}
			APSRequest("searchdefine?:archiv=ALL&query=" + escape(q) + "&no=" + no, 1, true);
		}
		else {
			APSRequest("searchdefine?:archiv=ALL&query=" + escape(s), 1, true);
		}
	}
	
	    
    
    
}

function apsGetElementById(sID) {
	var oNode = bb.document.getElementById(sID);
	if (oNode) {
		oNode = oNode.viewNode;
	}
	else {
		oNode = document.getElementById(sID);
	}
	return oNode;
}

/**
 * setStatus
 * Aktualisierung der Statusfelder, mit AJAX-Feedback
 */
 function setStatus(text,katalog,zeit) {
	try {
		var div_status = apsGetElementById("status");
		div_status["innerHTML"] = text;
		if (zeit !== '') {
			var tmpDate = new Date(zeit);
			var div_time = apsGetElementById("time");
			sTime = '';
			if (Lang=='en') {
				sTime = tmpDate.formatDate("yyyy-MM-dd hh:mm:ss");  				
			}
			else if (Lang == 'de') {
				sTime = tmpDate.formatDate("dd.MM.yyyy hh:mm:ss");
			}
			//usw...
			else {
				//nix
			}
			div_time["innerHTML"] = sTime; 
		}
		if (katalog !== '') {
			var div_katalog	= apsGetElementById("katalogname");
			if (katalog == 'NONE') {
				div_katalog["innerHTML"] = '';
			} else {
				div_katalog["innerHTML"] = ': ' + katalog;
			}
		}
	} catch (ex) {}
}

function ShowLoading() {
	nLoadingCounter++;
	if (nLoadingCounter > 0) {
		showDiv("loadingOverlay", true);
		showDiv("loadingContent", true);
		if (m_strLastApsRequest.search(/search/) >= 0) {
			showDiv("cancelRequest", true);
		}
		lockUIControls();
	}
	
}

function HideLoading() {
	nLoadingCounter--;
	if (nLoadingCounter < 1) {
		showDiv("loadingOverlay", false);
		showDiv("loadingContent", false);
		showDiv("cancelRequest", false);
		unLockUIControls();		
	}
	
}
/**
 * APSRequest
 * @param {string} cmd Der Requeststring
 * @param {string} session Session-ID
 */
function APSRequest(cmd,session,history) {
	if (typeof(session) == 'undefined') {
		session = 1;
	}
	if (!session) {
		session = 1;
	}
		
	if (session == 1 || session == 3) {
		showDiv('suggestBox',false);
		cancelRunningSuggestRequest();
		if (cmd.search(/displayresultgalery/) >=0) {
			listcount = getListCount('galery');
			colcount = getColCount('galery');
			rowcount = getRowCount('galery');
		}
		else if (cmd.search(/displayresultlist/) >=0) {
			listcount = getListCount('list');
			colcount = getColCount('list');
			rowcount = getRowCount('list');
		}
			
		if (!history) {
			if (cmd.search(/searchdefine|searchdefinenq/) >= 0) {
				addSearchHistory('query', cmd, Query);
			} 
			else if (cmd.search(/searchreset/) >= 0) {
				addSearchHistory('searchreset','',Query);
				
			}
			else if (cmd.search(/catalogselect/) >= 0) {
				addSearchHistory('catalog', cmd, Query);
			}
			else if (cmd.search(/mediaselect/) >= 0) {
				addSearchHistory('media', cmd, Query);
			}
			else if (cmd.search(/archivselect/) >= 0) {
				addSearchHistory('archiv', cmd, Query);
			}
			else if (cmd.search(/displaylichtpult/) >= 0) {
				addSearchHistory('lichtpult', cmd, Query);
			}
			else if (cmd.search(/warenkorb/) >= 0) {
				addSearchHistory('warenkorb', cmd, Query);
			}
			else if (cmd.search(/info/) >= 0) {
				addSearchHistory('info', cmd, Query);
			}
		}
		ShowLoading();
	}
	m_strLastApsRequest = cmd;
    if (listcount > 0) {
        var sVarSep = '?';
        if (cmd.search(/\?/) > 1) {
            sVarSep = '&';
        }
        cmd = cmd + sVarSep + ':listcount=' + listcount;
    }
    if (colcount > 0) {
        var sVarSep = '?';
        if (cmd.search(/\?/) > 1) {
            sVarSep = '&';
        }
        cmd = cmd + sVarSep + ':colcount=' + colcount;
    }
    if (rowcount > 0) {
        var sVarSep = '?';
        if (cmd.search(/\?/) > 1) {
            sVarSep = '&';
        }
        cmd = cmd + sVarSep + ':rowcount=' + rowcount;
    }
	URLRequest(apsrequest_baseurl + "/" + cmd, session,false,false);
}

function cancelRunningSuggestRequest(){
    if (typeof(ajaxrequest[2]) != 'undefined') {
	    ajaxrequest[2].abort();
		ajaxrequest[2] = undefined;
    }
}

function cancelRunningApsRequest(){
    if (typeof(ajaxrequest[1]) != 'undefined') {
        ajaxrequest[1].abort();
		ajaxrequest[1] = undefined;
        HideLoading();
		unLockUIControls();
    }
}

function unLockUIControls() {
	try {
		apsGetElementById("submitButton").disabled = false;
		apsGetElementById("selector").disabled = false;
		apsGetElementById("pattern").disabled = false;
		apsGetElementById("ANDConnector").disabled = false;
		apsGetElementById("NANDConnector").disabled = false;
		apsGetElementById("NEWQUERY").disabled = false;
	}
	catch(ex){}
}

function lockUIControls() {
	try {
	    apsGetElementById("submitButton").disabled = "disabled";
		apsGetElementById("selector").disabled = "disabled";
		apsGetElementById("pattern").disabled = "disabled";
		apsGetElementById("ANDConnector").disabled = "disabled";
		apsGetElementById("NANDConnector").disabled = "disabled";
		apsGetElementById("NEWQUERY").disabled = "disabled";
	} catch (ex) {}
}

/**
 * URLRequest
 * @param {string} url Aufzurufende URL
 * @param {string} session Session-ID
 * @return xmlhttp objekt
 */
function URLRequest(url,session,sync,hist) {
	var hr = false;
	if (!session) {
		session = 0;
	}
	if (typeof(hist) == 'undefined') {
		hist = false;
	}
	setStatus("Bitte warten ...","","");
	
	if (url.search(/\.xml/)>= 0 && hist!=true) {
		addSearchHistory('xml',url,Query);
	}
	
	if (session > 0) {
		if (apssession.length < session + 1) {
			apssession[session] = "sid={02f71717-e5e9-49b1-b204-b80362c75aec};path=" + apsrequest_baseurl +";";
		}
		document.cookie = apssession[session];
	}
	if (window.XMLHttpRequest) {
		hr = new XMLHttpRequest();
		if (hr.overrideMimeType) {
			hr.overrideMimeType("text/xml");
		}
	} else {
		if (window.ActiveXObject) { // IE
			try {
				hr = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (ex) {
				try {
					hr = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (ex) {
					setStatus("Fehler: XMLHTTP nicht verfügbar [3].","","");
				}
			}
		}
	}
	if (!hr) {
		setStatus("Fehler: XMLHTTP nicht verfügbar [4].","","");
		return false;
	}
	if (!sync) {
		hr.onreadystatechange = function() {
			if (hr.readyState == 4) {
				if (hr.status == 200 || hr.status === 0) {
					var xmlDate = hr.getResponseHeader("Date");
					if (session > 0) {
						var xmlCookie = hr.getResponseHeader("set-cookie");
						apssession[session] = xmlCookie;
					}
					var xmlResponse = hr.responseXML;
					if (xmlResponse == null || xmlResponse == undefined) {
						try {
							xmlResponse = new DOMParser().parseFromString(hr.responseText);
						}
						catch (exSaS) {
							alert (exSaS);
						}
					}
					
					var xmlNode = xmlResponse.documentElement;
					if (xmlNode.nodeName == 'parsererror') {
						setStatus("Fehler: " + xmlNode.textContent,xmlDate);
					}
					else {
						interpreteResult(xmlNode, url);
						setStatus("Bereit.","",xmlDate);
					}
					
				} else {
					setStatus("Fehler " + hr.status + " aufgetreten.","","");
				}
				if (session == 1 || session == 3) {
					HideLoading();
				}
			}
			resizeDrillChilds();
		};
		hr.open("GET", url, true);
		hr.send(null);
		ajaxrequest[session] = hr;
	} else {
		hr.open("GET", url, false);
		hr.send(null);
		return hr.responseText;
	}
}

/**
 * wertet den AJAX Response aus und arbeitet ihn ein
 * @param xmlNode der von XMLHTTPResult ausgewertete  Knoten
 */
function interpreteResult(xmlNode,url) {
	try {
	for (var i = 0; i < xmlNode.childNodes.length; i++) {
		var nodeName = xmlNode.childNodes[i].nodeName;
		
		 
		if (nodeName.charAt(0) != '#') {
			var onBeforeNodeFunc = undefined;
			try  {
				onBeforeNodeFunc = eval('onBeforeNode_' + nodeName);
			}
			catch(exNSF) {/* Nix, das soll so sein */}
			
			if (typeof(onBeforeAnyNode) == 'function') {
				onBeforeAnyNode(xmlNode.childNodes[i]);
			}	
			if (typeof(onBeforeNodeFunc) == 'function') {
				onBeforeNodeFunc(xmlNode.childNodes[i]);
			}
		}
		
		switch (nodeName) {
			case 'alert':
				alert(xmlNode.childNodes[i].firstChild.nodeValue);
				break;
			case 'loadURL':
				URLRequest(xmlNode.childNodes[i].firstChild.nodeValue,0,false,true);
				break;
			case 'dictionary': {
				var sKey = xmlNode.childNodes[i].getAttribute("key");
				var sVal = xmlNode.childNodes[i].getAttribute("value");
				if (sKey && sVal) {
					m_clientDictionary[sKey] = sVal;
				}
				break;
			}
			case 'Logo':
				try {
					var ilogo = apsGetElementById("Logo");
					var lsrc = xmlNode.childNodes[i].getAttribute("img");
					var atxt = xmlNode.childNodes[i].getAttribute("alttext");
					if (ilogo.src != lsrc) {
						ilogo.src = lsrc;
						ilogo.alt = atxt;
					}
				} 
				catch (ev) {
				};
				break;
			case  'query_base':
			   	if (xmlNode.childNodes[i].childNodes.length === 0) {
			   		Query.base = "";
			   	} else {
					Query.base = unescape(trim(xmlNode.childNodes[i].firstChild.nodeValue));
			   	}
			   	break;
			case  'mediaID':
			   	if (xmlNode.childNodes[i].childNodes.length === 0) {
			   		Query.mediaID = "";
			   	} else {
					Query.mediaID = unescape(trim(xmlNode.childNodes[i].firstChild.nodeValue));
			   	}
			   	break;
			case  'query_media':
			   	if (xmlNode.childNodes[i].childNodes.length === 0) {
			   		Query.media = "";
			   	} else {
					Query.media = unescape(trim(xmlNode.childNodes[i].firstChild.nodeValue));
			   	}
			   	break;
			case  'query_catalog':
			   	if (xmlNode.childNodes[i].childNodes.length === 0) {
			   		Query.catalog = "";
			   	} else {
					Query.catalog = unescape(trim(xmlNode.childNodes[i].firstChild.nodeValue));
			   	}
			   	break;
			case  'archiveID':
			   	if (xmlNode.childNodes[i].childNodes.length === 0) {
			   		Query.archiveID = "";
			   	} else {
					Query.archiveID = unescape(trim(xmlNode.childNodes[i].firstChild.nodeValue));
			   	}
			   	break;
			case  'query_archive':
			   	if (xmlNode.childNodes[i].childNodes.length === 0) {
			   		Query.archive = "";
			   	} else {
					Query.archive = unescape(trim(xmlNode.childNodes[i].firstChild.nodeValue));
			   	}
			   	break;
			case   'query_maps':
			   	if (xmlNode.childNodes[i].childNodes.length === 0) {
			   		Query.maps = "";
			   		Query.mapstxt = "";
			   		Query.mapslvl = "";
			   	} else {
					Query.maps = unescape(trim(xmlNode.childNodes[i].firstChild.nodeValue));
				   	try {
				   		apsGetElementById("query_maps").innerHTML = Query.mapstxt;
				   	} catch(ex) {};
			   	}
			   	break;
			case 'searchstate':
			   	if (xmlNode.childNodes[i].childNodes.length === 0) {
			   		searchstate = "NEW";
			   	} else {
					searchstate = trim(xmlNode.childNodes[i].firstChild.nodeValue);
			   	}
			   	break;
			case 'reRegisterSliderEvent':
				slider_offset = xmlNode.childNodes[i].getAttribute("offset");
				slider_total = xmlNode.childNodes[i].getAttribute("total");
				slider_lpx = xmlNode.childNodes[i].getAttribute("lpx");
				slider_cmd = xmlNode.childNodes[i].getAttribute("cmd");
				slider_count = xmlNode.childNodes[i].getAttribute("count");
				slider_mover = xmlNode.childNodes[i].getAttribute("moverid");
				try {
					slider_lichtpult = xmlNode.childNodes[i].getAttribute("LP");
					slider_LP = slider_lichtpult.split('|');
					slider_useLP = true;
				} catch (elp) {
					slider_useLP = false;
				}
				try {
					bb.document.getElementById(slider_mover).addEventListener('mousedown', function(event){initSlider(event);},false);
					bb.document.getElementById(slider_mover).addEventListener('mouseup', function(event){releaseSlider(event);},false);
				}
				catch(ex) {
					try {
						//Lets try the classic way
						var mover = apsGetElementById(slider_mover);
				   		addEvent(mover,"mousedown",initSlider);
				   		addEvent(mover,"mouseup",releaseSlider);	
					}
					catch(ex2) {
						window.status = "Error in register SliderEvents: " + ex2;
					}
				}
			   	fnReleaseCallback = function(iLeft) {
			   		var dok = Math.round(((iLeft - slider_offset) * slider_total / slider_lpx) + 1);
			   		if (slider_useLP) {
			   			APSRequest(slider_cmd + slider_LP[dok - 1]);
			   		} else {
				   		APSRequest(slider_cmd + "?no=" + dok);
				   	}
			   	};
				fnMoveCallback = function(iLeft, tooltip) {
			   		var dok = Math.round(((iLeft - slider_offset) * slider_total / slider_lpx) + 1);
			   		var todok;
			   		todok = dok + Number(slider_count) - 1;
			   		if (todok > slider_total) {
			   		   todok = slider_total;
			   		}
			   		if (dok == todok) {
						tooltip.innerHTML = 'Dokument: ' + dok;
			   		} else {
						tooltip.innerHTML = 'Dokument: ' + dok + " - " + todok;
					}
				};
				break;
			case 'RegisterSuggestEvent':
				try {
					/*
					var patterninput = apsGetElementById("pattern");
					addEvent(patterninput,"keyup",RequestSuggest);
					*/
					bb.document.getElementById("pattern").addEventListener('keyup', function(event){RequestSuggest(event);},false);
				} catch (ex) {
					try {
						//OK, lets try the "classic" way if bb.event registration failes
						var patterninput = apsGetElementById("pattern");
						addEvent(patterninput,"keyup",RequestSuggest);
					}
					catch (ex2) {
						window.status = "Error in RegisterSuggestEvent: " + ex2;
					}
				}
				break;
			case 'refreshCatalog':
				DDRefresh(Query.base, false);
				break;
			case 'searchReset':
				Query.media = "";
				Query.archive = "";
				Query.base = "";
				Query.catalog = "";
				Query.maps = "";
				Query.mapstxt = "";
				Query.mapslvl = "";
			    Query.lastDDUpdate.catalog = "";
			    Query.lastDDUpdate.tastr = "";
			    Query.lastDDUpdate.start = "";
			    searchstate = "NEW";
				break;
			case 'suggesthits':
				showDiv('suggestBox', true);
				break;
			case 'displayresultlist':
				var no = xmlNode.childNodes[i].getAttribute("no");
				APSRequest("displayresultlist?no=" + no);
				break;
			case 'displayresultdocument':
				var no = xmlNode.childNodes[i].getAttribute("no");
				APSRequest("displayresultdocument?no=" + no);
				break;
			case 'displayresultdocumentmap':
				var no = xmlNode.childNodes[i].getAttribute("no");
				APSRequest("displayresultdocumentmap?no=" + no);
				break;
			case 'displayresultdocumentinfo':
				var no = xmlNode.childNodes[i].getAttribute("no");
				APSRequest("displayresultdocumentinfo?no=" + no);
				break;
			case 'displayresultzoom':
				var no = xmlNode.childNodes[i].getAttribute("no");
				var medium =  xmlNode.childNodes[i].getAttribute("medium");
				APSRequest("displayresultzoom?no=" + no + "&medium=" + medium);
				break;				
			case 'displayresultgalery':
				var no = xmlNode.childNodes[i].getAttribute("no");
				APSRequest("displayresultgalery?no=" + no);
				break;
			case 'displayresultmap':
				var no = xmlNode.childNodes[i].getAttribute("no");
				if (DMode=='map') {
					APSRequest("displayresultmap?no=" + no + "&map=reinit");
				} else {
					APSRequest("displayresultmap?no=" + no + "&map=init");
				}
				break;
			case 'scrollTop':
				window.scrollTo(0,0);
				break;
			case 'suggestRefresh':
				var sRtastr = xmlNode.childNodes[i].getAttribute("tastr");
				var sRsuggstart = xmlNode.childNodes[i].getAttribute("suggstart");
				var sRstart = xmlNode.childNodes[i].getAttribute("start");
				var sRsugg20 = xmlNode.childNodes[i].getAttribute("sugg20");
				var sRsuggcmd = xmlNode.childNodes[i].getAttribute("suggcmd");
				var sRmax = xmlNode.childNodes[i].getAttribute("max");
				var sRdir = xmlNode.childNodes[i].getAttribute("dir");
				var sInitialstart = xmlNode.childNodes[i].getAttribute("initialstart");
				APSSuggestNav(sRtastr,sRstart,sRdir,sRsuggstart,sRsugg20,sRsuggcmd,'',sRmax,sInitialstart);				
				break;
			case 'resetDetails':
			    resetDetails();
			    break;
			case 'displayDetail':
				var Detailid= xmlNode.childNodes[i].getAttribute("id");
				toggleDetail(Detailid,'','');
				break;
			case 'checkStatus':
				checkStatus();
				break;
			case 'WKLoadAdresses':
				WKLoadAdresses();
				break;
			case 'WKResetWK':
				WK='';
				WKcmt='';
				updateStatusCookie();
				refreshStatusHeadline();
				break;
			case 'resizeDrillChilds':
				resizeDrillChilds();
				break;
			case 'ExtraMenuSync':
				var path = xmlNode.childNodes[i].getAttribute("path");
				var def = xmlNode.childNodes[i].getAttribute("def");
				ExtraMenuSync(path,def,true);
				break;
			case 'MapInit':
				resizeMap();
				var lat = xmlNode.childNodes[i].getAttribute("lat");
				var lng = xmlNode.childNodes[i].getAttribute("lng");
				var zoom = xmlNode.childNodes[i].getAttribute("zoom");
				var map = xmlNode.childNodes[i].getAttribute("map");
				var lookup = xmlNode.childNodes[i].getAttribute("lookup") == 'true';
				mapinit(lat, lng, zoom, map, lookup);
				if (lookup) {
					maploadmarker();
				}
				break;
			case 'MapAddMarker':
				var lat = xmlNode.childNodes[i].getAttribute("lat");
				var lng = xmlNode.childNodes[i].getAttribute("lng");
				var motxt = xmlNode.childNodes[i].getAttribute("motxt");
				var cc = xmlNode.childNodes[i].getAttribute("colorcode");
				var dynload = xmlNode.childNodes[i].getAttribute("dynload") == 'true';
				var divid = xmlNode.childNodes[i].getAttribute("divid");				
				var des = "";
				if (document.importNode) {
					des = document.importNode(xmlNode.childNodes[i], true).innerHTML;
				} else {
					des = xmlNode.childNodes[i].childNodes[0].xml;
				}
				mapaddmarker(lat,lng,des,motxt,cc,dynload,divid);
				break;
			case 'MapDeleteMarker':
				mapdeletemarker();
				break;
			case 'MapGenerateMarker':
				mapgeneratemarker();
				break;
			case 'MapMarkerOverflow':
				mapmarkeroverflow();
				break;
			case 'SWFObject':
				var soswf = xmlNode.childNodes[i].getAttribute("swf");
				var soid = xmlNode.childNodes[i].getAttribute("id");
				var sowidth = xmlNode.childNodes[i].getAttribute("width");
				var soheight = xmlNode.childNodes[i].getAttribute("height");
				var sover = xmlNode.childNodes[i].getAttribute("version");
				var sobgcol = xmlNode.childNodes[i].getAttribute("background");
				SWFInstance = null;
				SWFInstance = new SWFObject(soswf,soid,sowidth,soheight,sover,sobgcol);
				break;
			case 'SWFObjectAddVariable':
				var sok = xmlNode.childNodes[i].getAttribute("key");
				var sov = xmlNode.childNodes[i].getAttribute("value"); 			
				SWFInstance.addVariable(sok,sov);
				break;
			case 'SWFObjectAddParam': 
				var pok = xmlNode.childNodes[i].getAttribute("key");
				var pov = xmlNode.childNodes[i].getAttribute("value"); 			
				SWFInstance.addParam(pok,pov);
				break;
			case 'SWFObjectWrite':
				var t = xmlNode.childNodes[i].getAttribute("target");
				SWFInstance.write(t);
				resizeZoomify();
				break;
			case 'DMode':
				DMode = xmlNode.childNodes[i].getAttribute("mode");
				break;
			case 'RefreshStatusHeadLine':
				refreshStatusHeadline();
				break;
			case 'partnerLogo':
				var partnerImgSrc = xmlNode.childNodes[i].getAttribute("src");
				var partnerImgNode = apsGetElementById('partnerlogo');
				if (partnerImgNode != null) {
					if (partnerImgSrc != null && partnerImgSrc != undefined) {
						partnerImgNode.src = partnerImgSrc;
						partnerImgNode.style.display = 'block';
					}
					else {
						partnerImgNode.style.display = 'none';
					}				
				}
				break;
			case 'scaleImages': 
				var maxSideLength = parseInt(xmlNode.childNodes[i].getAttribute("to"));
				var imgNodeName = xmlNode.childNodes[i].getAttribute("name");
				if (ImageScaler) {
					if (maxSideLength > 0 && imgNodeName) {
						ImageScaler.startResizeImagesInterval(imgNodeName, maxSideLength);
					}
				}
				break;
			case 'entity': {
				selectedEntityPrefix = xmlNode.childNodes[i].getAttribute("prefix");
				break;
			}
			default:
					try {
						var resultContainer = xmlNode.childNodes[i];
						var oParent = bb.document.getElementById(nodeName);
						var sParentNodeName = undefined;
						if (oParent != null) {
							sParentNodeName = oParent.viewNode.nodeName;
						}
						else {
							oParent = apsGetElementById(nodeName);
							sParentNodeName = oParent.nodeName;
						}
						
						if (resultContainer.childNodes.length == 0 && nodeName != '#text' && nodeName != '#comment') {
							//Zielknoten unsichtbar machen
							showDiv(nodeName, false);
							sParentNodeName = sParentNodeName.toLowerCase();
							var sXml = '<' + sParentNodeName + ' id="' + nodeName + '" xmlns="http://www.w3.org/1999/xhtml"/>';
							var replacementNode = new DOMParser().parseFromString(sXml, 'text/xml');
							bb.command.create(replacementNode.documentElement, oParent, 'replace');
						}
						else {
							//Zielknoten befüllen
							var iCounter = 0;
							for (var k = 0; k < resultContainer.childNodes.length && nodeName != '#text' && nodeName != '#comment'; k++) {
								var xml = bb.xml.serialize(resultContainer.childNodes[k], false);
								if (xml.search(/\</) >= 0 && !bb.string.startsWith(xml, "<!--")) {
									var bCounts = (xml.search(/^\<e:/) < 0);
									xml = new DOMParser().parseFromString(xml, 'text/xml');
									
									var sMode = 'replaceChildren';
									if (bb.document.modelNode.importNode) {
										try {
											xml = bb.document.modelNode.importNode(xml, true);
										} 
										catch (exSaS2) {
										//nix
										}
									}
									if (iCounter != 0) {
										sMode = 'appendChild';
									}
									bb.command.create(xml.documentElement, oParent, sMode);
									
									if (bCounts) {
										iCounter++;
									}
									
								}
							}
							
							// set container visible
							if (nodeName != '#text' && nodeName != '#comment') {
								if (nodeName != 'fmpartnermenu') {
									showDiv(nodeName, true);
								}
							}
						}
					} 
					catch (ex) {
						if (nodeName != '#text' && nodeName != '#comment') {
							setStatus(nodeName + " nicht gefunden. (" + ex + ")", "", "");
						}
					}
					performResize();
				break;
		}
		
		if (nodeName.charAt(0) != '#') {
			var onAfterNodeFunc = undefined;
			try  {
				onAfterNodeFunc = eval('onAfterNode_' + nodeName);
			}
			catch(exNSF) {/* Nix, das soll so sein */}
			
			if (typeof(onAfterAnyNode) == 'function') {
				onAfterAnyNode(xmlNode.childNodes[i]);
			}	
			if (typeof(onAfterNodeFunc) == 'function') {
				onAfterNodeFunc(xmlNode.childNodes[i]);
			}
		}
		
		
	}
	
	
	ExtraMenuSync(url);
	} catch (ex) {
	}
}
/**
 * showDiv
 * @param {String} id ID des anzuzeigenden Elements
 * @param {boolean} visible Sichtbarkeit
 */
function showDiv(id,visible) {
	try {
		if (typeof(visible)!='boolean') {
			visible = true;
		}
		var node = bb.document.getElementById(id);
		if (node) {
			if (visible) {
				bb.command.show(node);
				if (typeof(onShowNode)=='function') {
					onShowNode(node);
				}
			} 
			else {
				bb.command.hide(node);
				if (typeof(onHideNode)=='function') {
					onHideNode(node)
				}
			}
		}
		else if (apsGetElementById(id)) {
			node = apsGetElementById(id);
			if (visible) {
				bb.html.setStyle(node, 'display', 'block');
				if (typeof(onShowNode)=='function') {
					onShowNode(node);
				}		
			}
			else {
				bb.html.setStyle(node, 'display', 'none');
				if (typeof(onHideNode)=='function') {
					onHideNode(node);
				}		
			}
		}
		else {
			delete node;
		}
	} 
	catch (ex) {
	}
	resizeDrillChilds();
}

function clearDiv(id) {
	try {
		var div = apsGetElementById(id);
		div.innerHTML = "";
	}
	catch(ex) {};
}

/**
 * @param {String} strNodeid the node id
 * @param {String} strOverflowMode the overflow mode, either: 'auto' or 'scroll' or 'hidden' (default: 'auto')
 */
function setOverflow(strNodeid,strOverflowMode) {
	if (strOverflowMode !== 'auto' && strOverflowMode !== 'scroll' && strOverflowMode!='hidden') {
		strOverflowMode = 'auto';
	}
	try {
		//Der Weg über Backbase
		var oNode = bb.document.getElementById(strNodeid);
		bb.command.setStyle(oNode, {'overflow':strOverflowMode, 'overflow-x':strOverflowMode, 'overflow-y':strOverflowMode});
	}
	catch(ex) {
		//Wenn der Weg über Backbase nicht geht, dann wird der
		//"klassisiche" Weg über DOM veruscht
		try {
			var oNode = apsGetElementById(strNodeid);
			oNode.style.overflow = strOverflowMode;
			oNode.style.overflowX = strOverflowMode;
			oNode.style.overflowX = strOverflowMode;
		}
		catch(ex2) {
			//Entwerder existiert der zu stylende Knoten nicht,
			//oder aber es geht nicht. Das ist aber nicht weiter tragisch...
		}
	};
}

function toggleResultSection(blkid,headid) {
	var blkNode   = apsGetElementById(blkid)
	var headNode = apsGetElementById(headid);
		
	if (headNode && blkNode) {
		var bShowBlk = (bb.html.getStyle(blkNode, 'display') == 'none');
		showDiv(blkid, bShowBlk);
		
		var sHeadCls = 'collapsedHeading';
		if (bb.html.hasClass(headNode, 'collapsedHeading')) {
			sHeadCls = 'expandedHeading';
		}
		bb.html.setClass(headNode, sHeadCls);
		resizeDrillChilds();
	}
	
}

function Bildkarte(imgurl,blkid,headid) {
	var divname = apsGetElementById(blkid);
	if (divname.style.display == "none") {
	    divname.style.display = "block";
	    divname.innerHTML = '<img src="' + imgurl + '" onload="resizeDrillChilds()" onerror="this.src=\'/images/Scan-not-available.gif\'";/>';
	} else {
	    divname.style.display = "none";
	}
	var headname = apsGetElementById(headid);
	if (headname.className == "expandedBildkarte") {
	   headname.className = "collapsedBildkarte";
	} else {
	   headname.className = "expandedBildkarte";
	}
	resizeDrillChilds();
}

function execSimpleSearch(sIndex, sValue) {
	APSRequest('searchdefine?query='+sIndex+':"'+sValue+'"' + '&katalog=NONE');
}

/**
 * submitSearch
 * Eine Suche absetzen
 * @param suggestIndex wenn aus Suggest aufgerufen: Indexname
 * @param suggestPattern wenn aus Suggest aufgerufen: Descriptor 
 */
function submitSearch(suggestIndex,suggestPattern) {
	
	// Suggest abschalten
	showDiv("suggestBox",false);

	var inputPattern = trim(apsGetElementById("pattern").value);
	
	
	var inputIndex = apsGetElementById("selector").value;
	var opStr = "AND";
	var inputWords = new Array();
	
	inputPattern = trim(inputPattern);
	if (inputIndex == 'freitext' || inputIndex == 'motiv') {
		inputPattern = trim(inputPattern.replace(/[\:\"\'\,]/g,' '));
	}
	if (inputIndex == 'freitext') {
		inputPattern = inputPattern.replace(/(\S+)-(\S+)/g,'$1 $2');
	}
	if (arguments.length == 0) {
		if (inputPattern[0] == '"' ) {
			inputWords[0] = inputPattern;
		} else {
			inputWords = inputPattern.split(/\s/);
		}
	} else {
		inputPattern = suggestPattern;
		inputIndex = suggestIndex;
		inputWords[0] = '"' + inputPattern + '"';
	}
	try {
		if (apsGetElementById("NANDConnector").checked) {
			opStr = "NOT";
		}
	} catch (ex) {};
	
	try {
		if (apsGetElementById("NEWQUERY").checked) {
			Query.base = '';
		    Query.lastDDUpdate.tastr = "";
		    Query.lastDDUpdate.start = "";
		    searchstate = "NEWQUERY";
		}
	} catch (ex) {};
	
	if (searchstate != 'NEW' && searchstate != 'NEWQUERY') {
		var querystring = "";
		for (var i = 0; i < inputWords.length;i++) {
			if (inputWords[i] != "") {
				querystring += " ";
				if (opStr == 'AND') {
					querystring += "+";
				} else {
					querystring += "-";
				}
				if (inputIndex == '_spaeter') {
					querystring +=  "datierun>" + escape(inputWords[i]);
				} else if (inputIndex == '_frueher') {
					querystring += "datierun<" + escape(inputWords[i]);
				} else {
					querystring += inputIndex + ":" + escape(inputWords[i]);
				}
			}
		}
		basequery = escape(Query.base) + " " + querystring;
		querystring = escape(trim(Query.media + " " + Query.archive + " " + Query.maps) + " " ) + basequery + escape(" " + Query.catalog);
		if (querystring != '') {
			APSRequest("searchdefine?query=" + querystring);
		}
	} else {
		var querystring = "";
		for (var i = 0; i < inputWords.length;i++) {
			if (inputWords[i] != "") {
				querystring += " ";
				if (opStr == 'AND') {
					querystring += "+";
				} else {
					querystring += "-";
				}
					if (inputIndex == '_spaeter') {
						querystring +=  "datierun>" + escape(inputWords[i]);
					} else if (inputIndex == '_frueher') {
						querystring += "datierun<" + escape(inputWords[i]);
					} else {
						querystring += inputIndex + ":" + escape(inputWords[i]);
					}
			}
		}
		basequery = escape(Query.base) + " " + querystring;
		querystring = escape(trim(Query.media + " " + Query.archive + " " + Query.maps) + " ") + basequery + escape(" " + Query.catalog);
		if (querystring !='%20 %20') {
			if (searchstate == 'NEW') {
				APSRequest("searchdefine?query=" + querystring);
			} else {
				APSRequest("searchdefinenq?query=" + querystring);
			}
		} 	}
	if (Query.catalog) {
		DDRefresh(basequery,false);
	}
}


/**
 * trim
 * Einen String trimmen
 * @param instr der String
 * @return {string} der getrimmte String
 */
function trim(instr) {
	try {
		var r = instr.replace(/\s+/g," ");
		r = r.replace(/^\s+/,"");
		r = r.replace(/\s+$/,"");
		return r;
	} catch (ex) {
		return '';
	}
}

 
function RequestSuggest(evt) {

	var keycode;
	
	try {
		keycode = evt.keyIdentifier.toUpperCase();
	} 
	catch (f) {
		
	};
	switch (keycode) {
		case "U+001B": // ESC
			showDiv("suggestBox",false);
			return false;
			break;
		case "DOWN": // Down
			showDiv("suggestBox",false);
			return false;
			break;
		case "UP": // Up
			APSSuggest();
			return false;
			break;
		case "HOME": // Pos1
			var but = apsGetElementById("SuggA");
			but.onclick();
			return false;
			break;
		case "END": // Ende
			var but = apsGetElementById("Sugg4");
			but.onclick();
			return false;
			break;
		case "PAGEUP": // PgUp
			var but = apsGetElementById("Sugg2");
			but.onclick();
			return false;
			break;
		case "PAGEDOWN": // PgDw
			var but = apsGetElementById("Sugg3");
			but.onclick();
			return false;
			break;
		case 'ENTER': //
			submitSearch();
			return false;
			break;
		default:
			if (suggestTimeout > 0) {
			   clearTimeout(suggestTimeout);
			   suggestTimeout = 0;
			}
			suggestTimeout = setTimeout("APSSuggest()",APSSuggestDelay);
	}
}

/**
 * APSSuggest
 * Einen Suggest-Request absetzen
 */

function APSSuggest() {

	clearTimeout(suggestTimeout);
	
	var inputPattern = bb.document.getElementById("pattern").getProperty('value');
	var inputIndex = bb.document.getElementById("selector").getProperty('value');
	
	inputPattern = trim(inputPattern);
	//	var inputWords = inputPattern.split(/\s/);
	
	// Zeichen wie ,.;" entfernen
	inputPattern = inputPattern.replace(/[\"\,\.\;]/g,' ');
	inputPattern = inputPattern.replace(/\s+/g,' ');
	
	var basequerystring = "";
	
	if (Query.base||Query.media||Query.archive||Query.catalog) {
		var nq = false;
		try {
			nq = apsGetElementById("NEWQUERY").checked;
		} catch (ex) {
			nq = false;
		}
		if (nq) {
		    // basequerystring = Query.media + ' ' + Query.archive + ' ' +  Query.catalog;
			// basequerystring = "&query=" + escape(basequerystring) ;
			basequerystring = "";
		} else {
		    basequerystring = trim(Query.media + ' ' + Query.archive + ' ' + Query.maps + ' ' + Query.base + ' ' + Query.catalog);
			basequerystring = "&query=" + escape(basequerystring) ;
		}
	}
	
	//if (inputWords[0] != '') {
	//	APSRequest("suggest?tastr=" + inputIndex + "&start=" + escape(inputWords[0]) + "&max=20" + basequerystring,2);
	//}
	
	// Suggest für descriptorenweisen Index mit mehreren Worten zulassen
	if (inputPattern != '') {
		APSRequest("suggest?tastr=" + inputIndex + "&start=" + escape(inputPattern) + "&max=20" + basequerystring,2);
	}
		
}

/**
 * APSSuggestNav
 * APSSuggest-Navigation
 */
function APSSuggestNav(tastr,start,dir,suggstart,sugg20,suggcmd,thelkuplast,max,query) {
	var req = "suggest?";
	req += "tastr=" + tastr;
	req += "&start=" + escape(start);
	if (dir) {
		req += "&dir=" + dir;
	}
	if (suggstart) {
		req += "&suggstart=" + escape(suggstart);
	}
	if (sugg20) {
		req += "&sugg20=" + escape(sugg20);
	}
	req += "&suggcmd=" + suggcmd;
	if (thelkuplast) {
		req += "&thelkuplast=" + escape(thelkuplast);
	}
	req += "&max=" + max;
	if (query) {
	   req += "&query=" + escape(query);
	}
	APSRequest(req,2);
						
   
}

/**
 * getStyle
 * gibt den berechneten Stylesheetwert zurück
 */
function getStyle(elem, IEStyleProp, CSSStyleProp) {
	if (window.getComputedStyle) {
		var compStyle = window.getComputedStyle(elem, "");
		return compStyle.getPropertyValue(CSSStyleProp);
	} else if (elem.runtimeStyle) {
		return elem.runtimeStyle[IEStyleProp];
	} else if (elem.currentStyle) {
		return elem.currentStyle[IEStyleProp];
	}
	return "";
}

/**
 * resizeDrillChilds
 * Bei Resize das Drilldownmenü anpassen.
 */
function resizeDrillChilds() {
	try {
		resizeZoomify();
		resizeMap();
		resizeDrillChildsWorker();
		if (DrillChildsTimeout > 0) {
			clearTimeout(DrillChildsTimeout);
			DrillChildsTimeout = 0;
		}
		DrillChildsTimeout = setTimeout("resizeDrillChildsWorker()",DrillChildResizeDelay);
	}
	catch (ex) {
		
	}
} 

function resizeDrillChildsWorker() {

	clearTimeout(DrillChildsTimeout);
	
	var debug = new Object();
	var search;
	var drillChilds = apsGetElementById("drillChilds");
	
	if (drillChilds) {
		search = apsGetElementById("search");
		if (search) {
			var iUpperHeight = 0;
			var iLogoHeight = 180;
			var iSearchHeight = 0;

			
			if (search.offsetHeight) {
				iSearchHeight = search.offsetHeight;
			} else if (search.clientHeight) {
				iSearchHeight = search.clientHeight;
			}
			
			iUpperHeight = iLogoHeight + iSearchHeight;

			var catalog = apsGetElementById("catalog");
			var childs = catalog.childNodes;
			for (var i = 0; i < childs.length; ++i) {
				if (childs[i] != drillChilds) {
					
					var iLiHeight = 0;
					// checking for nodeType == Element
					if (childs[i].nodeType == 1) {
						iLiHeight += childs[i].clientHeight;
						iUpperHeight += iLiHeight;
					}
				}
			}
			
			
			var iBodyHeight;
			var browser = BrowserDetect.browser;
			var version = BrowserDetect.version + "";
			var iBodyHeight = getBodyHeight();
			
			if (browser == 'Explorer') {
				iUpperHeight +=43;
			}
			
//
//			if (browser == "Explorer" && version.indexOf('6') != -1) {
//				iUpperHeight -= 11; //IE6
//			}
//			else if (browser == "Explorer" && version.indexOf('7') != -1) {
//				iUpperHeight -= 11; //IE7
//			}			

			drillChilds.style.top = iUpperHeight - iLogoHeight + "px";
			var iNewHeight = iBodyHeight - iUpperHeight;
			
			try {
				drillChilds.style.height = iNewHeight + "px";
			} catch(ex) {
				
			}
		}
	}
}

// The constructor function: creates a cookie object for the specified
// document, with a specified name and optional attributes.
// Arguments:
//   document: The Document object that the cookie is stored for. Required.
//   name:     A string that specifies a name for the cookie. Required.
//   hours:    An optional number that specifies the number of hours from now
//             that the cookie should expire.
//   path:     An optional string that specifies the cookie path attribute.
//   domain:   An optional string that specifies the cookie domain attribute.
//   secure:   An optional Boolean value that, if true, requests a secure cookie.
//
function Cookie(document, name, hours, path, domain, secure)
{
    // All the predefined properties of this object begin with '$'
    // to distinguish them from other properties which are the values to
    // be stored in the cookie.
    this.$document = document;
    this.$name = name;
    if (hours)
        this.$expiration = new Date((new Date()).getTime() + hours*3600000);
    else this.$expiration = null;
    if (path) this.$path = path; else this.$path = null;
    if (domain) this.$domain = domain; else this.$domain = null;
    if (secure) this.$secure = true; else this.$secure = false;
}

// This function is the store() method of the Cookie object.
Cookie.prototype.store = function () {
    // First, loop through the properties of the Cookie object and
    // put together the value of the cookie. Since cookies use the
    // equals sign and semicolons as separators, we'll use colons
    // and ampersands for the individual state variables we store 
    // within a single cookie value. Note that we escape the value
    // of each state variable, in case it contains punctuation or other
    // illegal characters.
    var cookieval = "";
    for(var prop in this) {
        // Ignore properties with names that begin with '$' and also methods.
        if ((prop.charAt(0) == '$') || ((typeof this[prop]) == 'function')) 
            continue;
        if (cookieval != "") cookieval += '&';
        cookieval += prop + ':' + escape(this[prop]);
    }

    // Now that we have the value of the cookie, put together the 
    // complete cookie string, which includes the name and the various
    // attributes specified when the Cookie object was created.
    var cookie = this.$name + '=' + cookieval;
    if (this.$expiration)
        cookie += '; expires=' + this.$expiration.toGMTString();
    if (this.$path) cookie += '; path=' + this.$path;
    if (this.$domain) cookie += '; domain=' + this.$domain;
    if (this.$secure) cookie += '; secure';

    // Now store the cookie by setting the magic Document.cookie property.
    this.$document.cookie = cookie;
};

// This function is the load() method of the Cookie object.
Cookie.prototype.load = function() { 
    // First, get a list of all cookies that pertain to this document.
    // We do this by reading the magic Document.cookie property.
    var allcookies = this.$document.cookie;
    if (allcookies == "") return false;

    // Now extract just the named cookie from that list.
    var start = allcookies.indexOf(this.$name + '=');
    if (start == -1) return false;   // Cookie not defined for this page.
    start += this.$name.length + 1;  // Skip name and equals sign.
    var end = allcookies.indexOf(';', start);
    if (end == -1) end = allcookies.length;
    var cookieval = allcookies.substring(start, end);

    // Now that we've extracted the value of the named cookie, we've
    // got to break that value down into individual state variable 
    // names and values. The name/value pairs are separated from each
    // other by ampersands, and the individual names and values are
    // separated from each other by colons. We use the split method
    // to parse everything.
    var a = cookieval.split('&');    // Break it into array of name/value pairs.
    for(var i=0; i < a.length; i++)  // Break each pair into an array.
        a[i] = a[i].split(':');

    // Now that we've parsed the cookie value, set all the names and values
    // of the state variables in this Cookie object. Note that we unescape()
    // the property value, because we called escape() when we stored it.
    for(var i = 0; i < a.length; i++) {
        this[a[i][0]] = unescape(a[i][1]);
    }

    // We're done, so return the success code.
    return true;
};

// This function is the remove() method of the Cookie object.
Cookie.prototype.remove = function() {
    var cookie;
    cookie = this.$name + '=';
    if (this.$path) cookie += '; path=' + this.$path;
    if (this.$domain) cookie += '; domain=' + this.$domain;
    cookie += '; expires=Fri, 02-Jan-1970 00:00:00 GMT';

    this.$document.cookie = cookie;
};

function DDSelect(catalog,tastr,start) {
	   DDUpdate(catalog,tastr,start,'');
	}

	function DDUpdate(catalog,tastr,start,catalogquery) {
	   var DDsearch = "";
	   var DDthequery = "";
	   if (Query.base || catalogquery) {
		   
		   Query.base = Query.base.replace(/\+xdbdoctype!obj/,"");
		   Query.base = Query.base.replace(/\+xdbdoctype!foto/,"");
		   catalogquery = catalogquery.replace(/\+xdbdoctype!obj/,"");
		   catalogquery = catalogquery.replace(/\+xdbdoctype!foto/,"");
		   Query.base = Query.base.replace(/\+xdbdoctype!ico/,"");
		   catalogquery = catalogquery.replace(/\+xdbdoctype!ico/,"");
		   
	      if (!catalogquery) {catalogquery="";};
	       var dt = "";
	       var ds = "";
		   if (catalog == 'THEMEN'){
			   dt = " +xdbdoctype!ico";
			   ds = " +xdbdoctype!obj";
		   }
		   if (catalog == 'FOTOTHEMEN'){
			   dt = " +xdbdoctype!ico";
			   ds = " +xdbdoctype!foto";
		   }
		   if (catalog == 'PREMIUMTHEMEN'){
			   dt = " +xdbdoctype!ico";
			   ds = " +xdbdoctype!foto";
		   }
	      DDthequery = escape(trim(Query.media + " " + Query.maps + " " + Query.base) + " ") + catalogquery + dt;
	      DDsearch = escape(Query.base) + " " + catalogquery + ds;
	   }
	   Query.catalog = unescape(catalogquery);
	   Query.lastDDUpdate.catalog = catalog;
	   Query.lastDDUpdate.tastr = tastr;
	   Query.lastDDUpdate.start = start;
	//   if (tastr != '') {
		    //TODO ggf. Query mit "!" ???
		    DDthequery = escape(unescape(DDthequery).replace(/:/g, '!'));
		    APSRequest('catalognavigate?:katalog=' + catalog + '&tastr=' + tastr + '&dir=exact&start=' + start + "&query=" + DDthequery,3);
	   //}
	   DDsubmitSearch(DDsearch);   
	}

	function DDRefresh(basequery,sh) {
		var catalog = Query.lastDDUpdate.catalog;
	   	var tastr = Query.lastDDUpdate.tastr;
	   	var start = Query.lastDDUpdate.start;
	   	var dt = "";
	   	var thequery = '' 
	        var dt = "";
	    var ds = "";
		   basequery = basequery.replace(/\+xdbdoctype!obj/,"");
		   basequery = basequery.replace(/\+xdbdoctype!foto/,"");
		   catalogquery = catalogquery.replace(/\+xdbdoctype!obj/,"");
		   catalogquery = catalogquery.replace(/\+xdbdoctype!foto/,"");
		   basequery = basequery.replace(/\+xdbdoctype!ico/,"");
		   basequery = basequery.replace(/\+xdbdoctype!ico/,"");
		   catalog = catalog.replace(/\+xdbdoctype!ico/,"");
		   catalog = catalog.replace(/\+xdbdoctype!ico/,"");

		   if (catalog == 'THEMEN'){
			   dt = " +xdbdoctype!ico";
			   ds = " +xdbdoctype!obj";
		   }
		   if (catalog == 'FOTOTHEMEN'){
			   dt = " +xdbdoctype!ico";
			   ds = " +xdbdoctype!foto";
		   }
		   if (catalog == 'PREMIUMTHEMEN'){
			   dt = " +xdbdoctype!ico";
			   ds = " +xdbdoctype!foto";
		   }
		if (sh) {
			thequery = "&" + basequery;
		} else {
			if (Query.catalog || Query.media) {
				thequery = "&query=" + escape(Query.media) + " " + escape(Query.maps) + " " + basequery + " " + escape(Query.catalog);
	   		}
		}
		//TODO ggf. Query mit "!" ???
		//thequery = escape(unescape(thequery).replace(/:/g, '!'));
		APSRequest('catalognavigate?:katalog=' + catalog + '&tastr=' + tastr + '&start=' + start + thequery + dt,3);
	}   

	function DDReset() {
		Query.catalog = "";
		Query.lastDDUpdate.catalog = "";
	    Query.lastDDUpdate.tastr = "";
	    Query.lastDDUpdate.start = "";
	}

	function DDResetCatalog() {
		Query.catalog='';
		APSRequest('cataloglist',3);
		if (Query.base) {
			APSRequest("searchdefine?query=" + escape(Query.base) + "&:katalog=NONE");
		} else {
			APSRequest("searchreset?:katalog=NONE");
		}
	}

	function DDsubmitSearch(querystring) {
	    if (querystring) {
			//ABKA-114 Alle Bäume sind nicht normalisiert, daher müssen ! als Trenner für die Queries verwendet werden (anstelle von :)
			APSRequest("searchdefine?query=" + escape(unescape(querystring).replace(/\:/g, '!')));
		}
	}

	function CatalogSelect(id,tastr,catalogquery) {
		Query.archive = '';
		Query.archiveID = '';
		Query.media = '';
		Query.mediaID = '';
		
	    var dquery = '';
	    var wquery= '';
	    if (Query.base) {
	    	wquery = "&query=" + escape(Query.base);
		   	dquery = escape(Query.base);
	    }
	    
	    Query.lastDDUpdate.catalog = id;
	    Query.lastDDUpdate.tastr = tastr;
	    Query.lastDDUpdate.start = "*";
		APSRequest('catalogselect?media=ALL&archiv=NONE&:katalog=' + id + '&start=*&tastr=' + tastr + wquery);
	    Query.catalog = catalogquery;	

	    // Einführungstext anzeigen, ansonsten Query nachladen.
	    if (Query.base != '') {
		    DDsubmitSearch(dquery + escape(' ') + escape(catalogquery));
		}
	}

if (!Array.xpush) {
	Array.prototype.xpush = function(elem) {
		this[this.length++] = elem;
	};
}

var BrowserDetect = {
	
	init: function() {
		this.bb_browser = "unknown";
		this.bb_version = "unknown";
		this.bb_inQuirksMode = bb.browser.quirks;
		if (bb.browser.opera) {
			this.bb_browser="opera";
			this.bb_version=bb.browser.version;
		}
		else if (bb.browser.gecko) {
			this.bb_browser="gecko";
			this.bb_version=bb.browser.version;
		}
		else if (bb.browser.webkit) {
			this.bb_browser="webkit"
			this.bb_version=bb.browser.version;
		}
		else if (bb.browser.ie) {
			this.bb_browser="ie";
			this.bb_version=bb.browser.version;
		}
		this.initOld();
	},

	initOld: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]
};
BrowserDetect.init();

var debug = "";
function importNode(node, allChildren) {
	//alert(node);
//	return;
	debug += ".";	
	if (document.importNode) {
		//alert("Returning");
		return document.importNode(node, allChildren);
	} else {
		debug += "[" + node.nodeType + "]";
		switch (node.nodeType) {
			case 1: /* NODE_ELEMENT */
				var newNode = document.createElement(node.nodeName);
				/* does the node have any attributes to add? */
				if (node.attributes && node.attributes.length > 0) {
					for (var i = 0, il = node.attributes.length; i < il; ++i) {
						var nodeName = node.attributes[i].nodeName;
						var nodeValue = node.getAttribute(node.attributes[i].nodeName);
						/* if attrib is an eventhandler -> register event */
						if (nodeName.indexOf("on") == 0) {
							var sEvent = nodeName.replace(/^on/,'');
								debug += nodeName + ":" + nodeValue + "(" + sEvent + ")\n";
							
							//addEvent(newNode, sEvent, function(ex) {
								// pass the event reference to the window object
//								window.e = e;
//								eval(nodeValue);
 //							});
						}
						
						/* anyway add the attrib */
						else {
							newNode.setAttribute(nodeName, "\""+nodeValue+"\"");
						}
					}
				}

				/* are we going after children too, and does the node have any? */
				if (allChildren && node.childNodes && node.childNodes.length > 0) {
					var il = node.childNodes.length;
					for (var i = 0; i < il; ++i) {
						newNode.appendChild(importNode(node.childNodes[i], allChildren));
					}
				}
				return newNode;
				break;
	
			case 3: /* NODE_TEXT */
			case 4: /* NODE_CDATA_SECTION */
				return document.createTextNode(node.nodeValue);
				break;
		}
	}
	alert(debug);
	debug="";
}

function resetDetails() {
   Details = new Object;
}
function toggleDetail(divid,tastr,tdesc) {
	if (!Details[divid]) {
	   Details[divid] = "hidden";
	   if (tdesc != undefined && tastr != undefined) {
	   	  //ABKA-19654
		  APSRequest('detail?tastr=' + tastr + '&tdesc=' + tdesc + '&no=1&normalize=off&divid=' + divid);
		  return;
	   }
	} 
	if (Details[divid] == "hidden") {	
		Details[divid] = "visible";
		showDiv(divid,true);
	} 
	else {
		Details[divid] = "hidden";
		showDiv(divid,false);
	}
	resizeDrillChilds();
}

/****
*
* Lichtpult & Warenkorb
*****/

function toggleStatus(collection,picture) {
	try{
		if (collection == "LP") {
			CollectionVar = LP;
			divname = "LP" + picture;
			activepicture = "/images/img_addtoportfolio_active.gif";
			activetitle = "Bild aus dem Lichtpult entfernen";
			inactivepicture = "/images/img_addtoportfolio.gif";
			inactivetitle = m_clientDictionary['mo:actionlightbox'];
		} else {
			CollectionVar = WK;
			divname = "WK" + picture;
			activepicture = "/images/img_buy_active.gif";
			activetitle = "Bild der Fotobestellung entnehmen";
			inactivepicture = "/images/img_buy.gif";
			inactivetitle = m_clientDictionary['mo:actionorder'];
		}
		//div = apsGetElementById(divname);
		var divlst = document.getImagesByName(divname);
		var bPicAdded = false;
		for (var i=0; i < divlst.length; i++) {
			var div = divlst[i];
			if (div.src.indexOf(inactivepicture) > -1) {
			   div.src = activepicture;
			   div.title = activetitle;
			   if (bPicAdded == false) {
				   if (CollectionVar != "") {
				      CollectionVar += "|";
				   }
		 	   	   CollectionVar += picture;
		  	   	   bPicAdded = true;
			   }
			} else {
			   div.src = inactivepicture;
			   div.title = inactivetitle;
			   if (CollectionVar.indexOf(picture) >= 0) {
				   c = CollectionVar.substring(0,CollectionVar.indexOf(picture) - 1) + CollectionVar.substring(CollectionVar.indexOf(picture) + picture.length,CollectionVar.length);
				   CollectionVar = c;
				   CollectionVar = CollectionVar.replace(/\|\|/g,"|");
				   if (CollectionVar === "|") {
						CollectionVar = "";
				   }
				   if (CollectionVar.indexOf("|") == 0) {
				      CollectionVar = CollectionVar.substring(1,CollectionVar.length);
				   }
			   }
			}
		}
		if (collection == "LP") {
			LP = CollectionVar;
		} else {
			WK = CollectionVar;
		}
		updateStatusCookie();
		refreshStatusHeadline();
	}
	catch (ex) {}
}

function checkStatus() {
	var LPpictures = new Array;
	var WKpictures = new Array;

		
	LPpictures = LP.split("|");
	WKpictures = WK.replace(/\[\d,\d,\d,\d\]/g,'').split("|");
	
	var activepicture = "/images/img_addtoportfolio_active.gif";
	var activetitle = "Bild/Medium aus dem Lichtpult entfernen";
	for (var i= 0; i<LPpictures.length;i++) {
	    if (LPpictures[i] != "") {
		    var divname = "LP" + LPpictures[i];
		    try {
		       //div = apsGetElementById(divname);
	   	   	   var divlst = document.getImagesByName(divname);
	    	   for (var j=0; j<divlst.length; j++) { 
	    	   	  div = divlst[j];
		       	  div.src = activepicture;
		       	  div.title = activetitle;
		       }
		    } catch (ex) {};
		}
	}

	activepicture = "/images/img_buy_active.gif";
	activetitle = "Bild/Medium aus dem Warenkorb entfernen";
	for (var i= 0; i<WKpictures.length;i++) {
	    if (WKpictures[i] != "") {
		    var divname = "WK" + WKpictures[i];
		    try {
	    	   //div = apsGetElementById(divname);
	    	   var divlst = document.getImagesByName(divname);
	    	   for (var j=0; j<divlst.length; j++) { 
	    	      div = divlst[j];
		          div.src = activepicture;
		          div.title = activetitle;
		       }
		    } catch (ex) {
	    	};
	    }
	}
}

function loadLanguageCookie() {
	var allCookies = document.cookie;
	var cArray = allCookies.split(";");
	Lang = '';
	for (var i = 0; i < cArray.length; i++) {
		var ts = trim(cArray[i]);
		if (ts.indexOf("lang=") == 0) {
			Lang = ts.substring(5,ts.length);
		}
	}
	if (Lang == '') {
		Lang = DEFAULT_LANGUAGE;
	}
	storeLanguageCookie();
}


function storeLanguageCookie() {
	var nextYear = new Date();
	nextYear.setFullYear(nextYear.getFullYear() + 1);
	if (Lang != '') {
		document.cookie = trim("lang=" + Lang + ";expires=" + nextYear.toGMTString());
	}
	else {
		document.cookie = trim("lang=" + DEFAULT_LANGUAGE + ";expires=" + nextYear.toGMTString());
	}
}

function setLanguage(sLanguage) {
	if (sLanguage != undefined && sLanguage != null && sLanguage != '') {
		Lang = sLanguage;
		storeLanguageCookie();
	}
}

function updateStatusCookie() {
	var nextYear = new Date();
	nextYear.setFullYear(nextYear.getFullYear() + 1);
	document.cookie = trim("WK=" + WK + ";expires=" + nextYear.toGMTString());
	document.cookie = trim("LP=" + LP + ";expires=" + nextYear.toGMTString());
	if (WKOrderPersistent) {
		document.cookie = trim("WKOrder=" + escape(WKOrder) + ";expires=" + nextYear.toGMTString());
	} else {
		document.cookie = trim("WKOrder=" + escape(WKOrder));
	}
	var WKcmttmp = WKcmt.replace(/\x0A/g,"$!$");
	document.cookie = "WKcmt=" + escape(trim(WKcmttmp));
}



function initializeStatusfromCookie() {
	var allCookies = document.cookie;
	var cArray = allCookies.split(";");
	LP = "";
	WK = "";
	WKOrder = "";
	WKcmt = "";
	for (var i = 0; i < cArray.length; i++) {
		var ts = trim(cArray[i]);
		if (ts.indexOf("LP=") == 0) {
			LP = ts.substring(3,ts.length);
		} else if (ts.indexOf("WK=") == 0) {
			WK = ts.substring(3,ts.length);
		} else if (ts.indexOf("WKOrder=") == 0) {
			WKOrder = unescape(ts.substring(8,ts.length));
		}
	}
	refreshStatusHeadline();
}

function refreshStatusHeadline() {
	var my_l = apsGetElementById("lichtpult");
	var my_w = apsGetElementById("warenkorb");
	
	var lc = 0;
	var wc = 0;
	
	if (LP.length > 5) {
		lc = LP.split("|").length;
	}
	if (WK.length > 5) {
		wc = WK.split("|").length;
	}
	if (my_l != undefined && my_l != null) {
		//Damit hier nicht statisch "Lichtpult" steht, gehen wir davon aus, dass der Begriff bereits in dem Link
		//steht, entweder ohne Anzahl in Klammern, oder mit
		var sLPTinkText = my_l.innerHTML;
		
		if (sLPTinkText.indexOf('(') < 0) {
			my_l.innerHTML += " (" + lc + ")";
		}
		else {
			var strTxt = trim(sLPTinkText.substring(0, sLPTinkText.indexOf('(')));
			my_l.innerHTML = strTxt + " (" + lc + ")";
		}
	}
	if (my_w != undefined && my_w != null) {
		//Damit hier nicht statisch "Warenkorb" steht, gehen wir davon aus, dass der Begriff bereits in dem Link
		//steht, entweder ohne Anzahl in Klammern, oder mit
		var sWKLinkText = my_w.innerHTML;
		if (sWKLinkText.indexOf('(') < 0) {
			my_w.innerHTML += " (" + wc + ")";
		}
		else {
			var strTxt = trim(sWKLinkText.substring(0, sWKLinkText.indexOf('(')));
			my_w.innerHTML = strTxt + " (" + wc + ")";
		}
	}
}

function ResetCollection(col) {
	if (col=='LP') {
	   LP = "";
	} else if (col=='WK') {
	   WK = "";
	}
	updateStatusCookie();
	refreshStatusHeadline();
	if (col=='LP') {
	    APSRequest("displaylichtpult?LP=");
	} else if (col=='WK') {
		APSRequest("warenkorb?WK=");
	}
}

function WKapplySettings() {
	var WKpictures = WK.replace(/\[\d,\d,\d,\d\]/g,'').split("|");
	var divno = apsGetElementById("WKno"+WKpictures[0]).value;
	var divproduct = apsGetElementById("WKproduct"+WKpictures[0]).value;
	var divformat = 1;
	try {
		divformat = apsGetElementById("WKformat"+WKpictures[0]).value;
	} catch (ex) {
	}
	var divusage = apsGetElementById("WKusage"+WKpictures[0]).value;
	for (var i = 1; i < WKpictures.length; i++) {
		try {
			apsGetElementById("WKno"+WKpictures[i]).value = divno;	
			apsGetElementById("WKproduct"+WKpictures[i]).value = divproduct;
			apsGetElementById("WKusage"+WKpictures[i]).value = divusage;
			apsGetElementById("WKformat"+WKpictures[i]).value = divformat;
		} catch (ex) {
		}
	}
}
function saveWarenkorb(step) {
	if (step<=1) {
		var WKpictures = WK.replace(/\[\d,\d,\d,\d\]/g,'').split("|");
		WK = "";	
		for (var i = 0; i < WKpictures.length; i++) {
			var divno 		= apsGetElementById("WKno"+WKpictures[i]).value;
			var divproduct 	= apsGetElementById("WKproduct"+WKpictures[i]).value;
			var divformat = 1;
			try {
				divformat = apsGetElementById("WKformat"+WKpictures[i]).value;
			} catch (ex) {
				divformat = 1;
			}
			var divusage 	= apsGetElementById("WKusage"+WKpictures[i]).value;
			WKpictures[i] += "[" + divno + "," + divproduct + "," + divformat + "," + divusage + "]";
			if (divno > 0) {
				if (WK != '') {
					WK += "|";
				}
				WK += WKpictures[i];
			}
		}
		updateStatusCookie();
		refreshStatusHeadline();
		if (step==1) {
			APSRequest('warenkorb');
		}
	} else if (step==2) {
		WKSaveAdresses();
		updateStatusCookie();
		APSRequest('warenkorb?step=2');
	}
}

function checkoutWarenkorb() {
	/* 1. Alle WK Elemente abfragen
		2. Neuen WK Cookie setzen
		3. Step 2 aufrufen
		Wichtig: Alle Bestellangaben haben definitive IDs
	*/
	saveWarenkorb(0);
	APSRequest('warenkorb?step=2');
}

function checkOrder() {
	var res = "";
	var es = apsGetElementById("WKname1");
	if (trim(es.value) == '') {
		res += "Vorname";
	}
	es = apsGetElementById("WKname2");
	if (trim(es.value) == '') {
		if (res != '') res += ', ';
		res += "Nachname";
	}
	es = apsGetElementById("WKadr2");
	if (trim(es.value) == '') {
		if (res != '') res += ', ';
		res += "Anschrift";
	}
	es = apsGetElementById("WKplzort");
	if (trim(es.value) == '') {
		if (res != '') res += ', ';
		res += "Postleitzahl & Ort";
	}
	es = apsGetElementById("WKtel");
	if (trim(es.value) == '') {
		if (res != '') res += ', ';
		res += "Telefon (wird nur für Rückfragen verwendet)";
	}
	es = apsGetElementById("WKemail");
	if (trim(es.value) == '' || es.value.length < 8 || es.value.indexOf('@') < 1 || es.value.indexOf('.') < 1) {
		if (res != '') res += ', ';
		res += "E-Mail";
	}
	email = es.value;
	if (apsGetElementById("WKCbx1").checked) {
		var es = apsGetElementById("WKREname1");
		if (trim(es.value) == '') {
			if (res != '') res += ', ';
			res += "Name (Rechnungsanschrift)";
		}
		es = apsGetElementById("WKREadr2");
		if (trim(es.value) == '') {
			if (res != '') res += ', ';
			res += "Anschrift (Rechnungsanschrift)";
		}	
		es = apsGetElementById("WKREplzort");
		if (trim(es.value) == '') {
			if (res != '') res += ', ';
			res += "Postleitzahl & Ort (Rechnungsanschrift)";
		}	
	}
	if (res == '') {
		apsGetElementById("checkOrderFeedback").innerHTML = "";
		WKSaveAdresses();
		APSRequest('warenkorb?step=3&:orderemail=' + escape(email));
	} else {
		apsGetElementById("checkOrderFeedback").innerHTML = "Bitte prüfen Sie folgende Angaben: " + res + ".";
	}
	
	
	/*			 apsGetElementById("WKname2").value + '|' +
			  	 apsGetElementById("WKadr1").value  + '|' +
     			 apsGetElementById("WKadr2").value  + '|' +
				 apsGetElementById("WKadr3").value + '|' +
				 apsGetElementById("WKplzort").value + '|' +
				 apsGetElementById("WKland").value + '|' +
				 apsGetElementById("WKtel").value + '|' +
				 apsGetElementById("WKemail").value + '|' +
				 apsGetElementById("WKREname1").value + '|' +
				 apsGetElementById("WKREname2").value + '|' +
				 apsGetElementById("WKREadr1").value + '|' +
				 apsGetElementById("WKREadr2").value + '|' +
				 apsGetElementById("WKREadr3").value + '|' +
				 apsGetElementById("WKREplzort").value + '|' +
				 apsGetElementById("WKREland").value + '|' +
				 apsGetElementById("WKREtel").value + '|' +
				 apsGetElementById("WKREemail").value + '|';
	*/
};

function WKtoggleAnschriften(adressdifferent) {
	var headingLI=apsGetElementById("WKLI");
	var cbx1 = apsGetElementById("WKCbx1");
	cbx1.checked = adressdifferent;
	if (adressdifferent) {
		headingLI.innerHTML = m_clientDictionary['wk:delivAddr'];
		apsGetElementById("WKRE").style.display = "block";
		apsGetElementById("WKRE1").style.display = "block";
		apsGetElementById("WKRE1b").style.display = "block";
		apsGetElementById("WKRE2").style.display = "block";
		apsGetElementById("WKRE2b").style.display = "block";
		apsGetElementById("WKRE3").style.display = "block";
		apsGetElementById("WKRE4").style.display = "block";
		apsGetElementById("WKRE5").style.display = "block";
		apsGetElementById("WKRE6").style.display = "block";
		apsGetElementById("WKRE7").style.display = "block";
	} else {
		headingLI.innerHTML = m_clientDictionary['wk:combiAddr'];
		apsGetElementById("WKRE").style.display = "none";
		apsGetElementById("WKRE1").style.display = "none";
		apsGetElementById("WKRE1b").style.display = "none";
		apsGetElementById("WKRE2").style.display = "none";
		apsGetElementById("WKRE2b").style.display = "none";
		apsGetElementById("WKRE3").style.display = "none";
		apsGetElementById("WKRE4").style.display = "none";
		apsGetElementById("WKRE5").style.display = "none";
		apsGetElementById("WKRE6").style.display = "none";
		apsGetElementById("WKRE7").style.display = "none";
	}

}

function WKLoadAdresses() {
	var t = WKOrder.split('|');
	if (t.length != 22) {
	   return -1;
	}
	apsGetElementById("WKname1").value = t[0];
	apsGetElementById("WKname2").value = t[1];
	apsGetElementById("WKadr1").value = t[2];
	apsGetElementById("WKadr2").value = t[3];
	apsGetElementById("WKadr3").value = t[4];
	apsGetElementById("WKplzort").value = t[5];
	apsGetElementById("WKland").value = t[6];
	apsGetElementById("WKtel").value = t[7];
	apsGetElementById("WKfax").value = t[8];
	apsGetElementById("WKemail").value = t[9];
	apsGetElementById("WKREname1").value = t[10];
	apsGetElementById("WKREname2").value = t[11];
	apsGetElementById("WKREadr1").value = t[12];
	apsGetElementById("WKREadr2").value = t[13];
	apsGetElementById("WKREadr3").value = t[14];
	apsGetElementById("WKREplzort").value = t[15];
	apsGetElementById("WKREland").value = t[16];
	apsGetElementById("WKREtel").value = t[17];
	apsGetElementById("WKREfax").value = t[18];
	apsGetElementById("WKREemail").value = t[19];
	WKOrderPersistent = t[20]=='1';
	apsGetElementById("WKCbx2").checked = WKOrderPersistent;
	WKOrderDifferent = t[21]=='1';
	apsGetElementById("WKCbx1").checked = WKOrderDifferent;
    apsGetElementById("WKcmt").value = WKcmt;
	WKtoggleAnschriften(WKOrderDifferent);
}

function WKSaveAdresses() {
	var result = apsGetElementById("WKname1").value + '|' + 
				 apsGetElementById("WKname2").value + '|' +
			  	 apsGetElementById("WKadr1").value  + '|' +
     			 apsGetElementById("WKadr2").value  + '|' +
				 apsGetElementById("WKadr3").value + '|' +
				 apsGetElementById("WKplzort").value + '|' +
				 apsGetElementById("WKland").value + '|' +
				 apsGetElementById("WKtel").value + '|' +
				 apsGetElementById("WKfax").value + '|' +
				 apsGetElementById("WKemail").value + '|' +
				 apsGetElementById("WKREname1").value + '|' +
				 apsGetElementById("WKREname2").value + '|' +
				 apsGetElementById("WKREadr1").value + '|' +
				 apsGetElementById("WKREadr2").value + '|' +
				 apsGetElementById("WKREadr3").value + '|' +
				 apsGetElementById("WKREplzort").value + '|' +
				 apsGetElementById("WKREland").value + '|' +
				 apsGetElementById("WKREtel").value + '|' +
				 apsGetElementById("WKREfax").value + '|' +
				 apsGetElementById("WKREemail").value + '|';
    if (apsGetElementById("WKCbx2").checked) {
    	result += '1|';
    	WKOrderPersistent = true;
    } else {
    	result += '0|';
    	WKOrderPersistent = false;
    }
    if (apsGetElementById("WKCbx1").checked) {
    	result += '1';
    	WKOrderDifferent = true;
    } else {
    	result += '0';
    	WKOrderDifferent = false;
    }
    WKOrder = result;
    WKcmt = apsGetElementById("WKcmt").value;
	updateStatusCookie();
}

function CreateBookmarkLink(strTitle, strURL) {
        if (window.sidebar) { 
        // Mozilla Bookmark
        window.sidebar.addPanel(strTitle, strURL,"");
    } 
    else if(window.external) { 
        // IE Favorite
        window.external.AddFavorite( strURL, strTitle); 
    }
    else if(
        window.opera && window.print) { 
        // Opera Hotlist
        var mbm = document.createElement('a');
        mbm.setAttribute('rel','sidebar');
        mbm.setAttribute('href',strURL);
        mbm.setAttribute('title',strTitle);
        mbm.click();
    }
}
function ExtraMenuSelect(id,fn,noreload) {
	if (!ExtraMenu) {
		// Laden des Extramenüs, falls noch nicht vorhanden.
		ExtraMenuLoad(fn);
	}
	// Level zur ID feststellen
	if (id != 0) {
		lvl = ExtraMenu.Level[id];
	} else {
		lvl = 0;
	}
	resizeDrillChilds();
	
	apsGetElementById("result")["innerHTML"] = "";
	apsGetElementById("browsing")["innerHTML"] = "";
	
	var CatalogSection = apsGetElementById("catalog");
	var Menu = '<li class="caption"><a href="javascript:void(0)" onclick="DDResetCatalog()"><img src="/images/close_filled.gif" title="Katalog schließen"/></a><h3 id="katalog">Katalog </h3></li>';	
	u = "'0.'";
	currentMenu = '<li class="drillTop ExtraMenu"><a href="javascript:void(0)" onclick="ExtraMenuSelect('+ u +');">'+ ExtraMenu.Text['0.'] + '</a></li>';
	Menu += currentMenu;
	var lc = 0;
	var idc = "";
	if (lvl > 0) {
		var es = id.split(/\./);
		// Falls dieser Level keine Childs hat, eine Ebene weniger, später dann eine Ebene mehr ausführen
		if (!ExtraMenu.Text[id + "1."]) {
		   lc = 1;
		}
		for (i=0;i<(es.length - lc) && i < (lvl - lc);i++) {
				currentid = "";
				for (j = 0;j<=i;j++) {
					currentid += es[j] + ".";
				}
				u = "'" + currentid + "'";
				currentMenu = '<li class="drillParent"><a href="javascript:void(0)" onclick="ExtraMenuSelect('+ u + ');">'+ ExtraMenu.Text[currentid] + '</a></li>';
				Menu += currentMenu;
		}
		Menu += '<li id="drillChilds" style="top: 344px; height: 209px;"><ul>';
		var t = "1";
		if (lc == 0) {
		   idc = id;
		} else {
		   idc = id.replace(/\d+\.$/,'');
		}
		
		while(ExtraMenu.Text[idc + t + "."]) {
			currentid = idc + t + '.';
			u = "'" + currentid + "'";
			var c = "";
			if (currentid == id) {
			    c = ' class="active"';
			}
			currentMenu = '<li' + c + '><a href="javascript:void(0)" onclick="ExtraMenuSelect('+ u + ');">'+ ExtraMenu.Text[currentid] + '</a></li>';
			Menu += currentMenu;
			t++;
		}
		Menu += '</ul></li>';
		
	} else {
		Menu += '<li id="drillChilds" style="top: 344px; height: 209px;"><ul>';
		var t = "1";
		while(ExtraMenu.Text[t + "."]) {
			u = "'" + t + ".'";
			currentMenu = '<li><a href="javascript:void(0)" onclick="ExtraMenuSelect('+ u + ');">'+ ExtraMenu.Text[t + '.'] + '</a></li>';
			Menu += currentMenu;
			t++;
		}
		Menu += '</ul></li>';
	}
	CatalogSection.innerHTML = Menu;
	resizeDrillChilds();
	
	var ResultSection = apsGetElementById("result");
	ResultSection.innerHTML = "";
	if (!noreload) {
		URLRequest(ExtraMenu.File[id],0,false,false);
	}

	// Drilldown entsprechend der ID gestalten
	// Asynchones Laden des Dokuments auslösen
}

function ExtraMenuLoad(fn) {
	ExtraMenu = new Object;
	ExtraMenu.Text = new Object;
	ExtraMenu.File = new Object;
	ExtraMenu.Level = new Object;
	var menudef = URLRequest(fn,0,true,false);
	var lines = menudef.split(/\n/g);
	var lastlevel = 0;
	var levelcounter = new Array(0,0,0,0,0,0,0,0,0,0,0);
	for (i=0;i<lines.length;i++) {
		if (trim(lines[i]) != '') {
			e = lines[i].split(/\\=/);
			f = e[1].split(/:/);
			lvl = e[0];
			fil = f[0];
			txt = f[1];
			levelcounter[lvl] ++;
			if (lvl < lastlevel) {
			    for (j = lastlevel; j > lvl; j--) {
					levelcounter[j] = 0;
				}
			}
			lastlevel = lvl;
			levelstr = "";
			for (j = 1; j <= lvl; j++) {
				levelstr += levelcounter[j] + ".";
			}
			if (levelstr == "") {
				levelstr= '0.';
			}
			ExtraMenu.Text[levelstr] = txt;
			ExtraMenu.File[levelstr] = fil;
			ExtraMenu.Level[levelstr] = lvl;
		}
	}
}

function ExtraMenuSync(path,fn,force) {
	if (!force && path.indexOf(".xml") < 0) {
	   return;
	}
	var xmlfn = path.replace(/\.html$/,".xml");
	xmlfn = xmlfn.replace(/^\//,"");
	if (!ExtraMenu) {
		// Laden des Extramenüs, falls noch nicht vorhanden.
		if (!fn) {
		   fn = "extramenu.def";
		}
		ExtraMenuLoad(fn);
	}
	// Über ExtraMenu.File iterieren um levelstr zu finden
	levelstr = "";
	for (l in ExtraMenu.File) {
		if (ExtraMenu.File[l] == xmlfn) {
		   levelstr = l;
		   break;
		}
	}
	
	// Mit levelstr ExtraMenuSelect aufrufen
	if (levelstr != "") {
		ExtraMenuSelect(levelstr,fn,true);
	}
}

function resizeZoomify() {
	try {
		var swf = apsGetElementById("theMovie");
		
		var iBodyHeight=0;
		var browser = BrowserDetect.browser;
		if (window.innerHeight) {
			iBodyHeight = window.innerHeight;
		} else if (document.documentElement && document.documentElement.innerHeight){
			iBodyHeight = document.documentElement.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight){
			iBodyHeight = document.documentElement.clientHeight;
		} else if (document.body && document.body.clientHeight){
			iBodyHeight = document.body.clientHeight;
		} else if (document.getElementsByTagName("body")[0].clientHeight) {
			iBodyHeight = document.getElementsByTagName("body")[0].clientHeight;
		}
		if (iBodyHeight > 600) { 
			swf.style.height = iBodyHeight - 200 + "px";
		} else {
			swf.style.height = "400px";
		}
	} catch (ex) {}
}

function resizeMap() {
	try {
		var map = bb.document.getElementById("map").viewNode;
		
		var iBodyHeight;
		var browser = BrowserDetect.browser;
		if (window.innerHeight) {
			iBodyHeight = window.innerHeight;
		} else if (document.documentElement && document.documentElement.innerHeight){
			iBodyHeight = document.documentElement.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight){
			iBodyHeight = document.documentElement.clientHeight;
		} else if (document.body && document.body.clientHeight){
			iBodyHeight = document.body.clientHeight;
		} else if (document.getElementsByTagName("body")[0].clientHeight) {
			iBodyHeight = document.getElementsByTagName("body")[0].clientHeight;
		}
		if (iBodyHeight > 600) { 
			map.style.height = iBodyHeight - 200 + "px";
		} else {
			map.style.height = "400px";
		}
	} catch (ex) {}
}


/**
 * @return {Number}
 */
function getBodyWidth() {
	var iBodyWidth = window.innerWidth;
	if (bb.browser.ie) {
		iBodyWidth = document.body.clientWidth;
	}
	return iBodyWidth;
}
/**
 * @return {Number}
 */
function getBodyHeight() {
	var iBodyHeight = window.innerHeight;
	if (bb.browser.ie) {
		iBodyHeight = document.body.clientHeight;
	}
	return iBodyHeight;
}

/**
 * Gibt die Anzahl der Spalten zurück die in der überg. Ansicht in den Ergebnisbereich passen würden 
 * @param {String} dispMode 'list' oder 'galery'
 * @return {Number} Anzahl der in den Ergebnisbereich passenden Spalten (jedoch mindestens 1)
 */
function getColCount(dispMode) {
	var nColCount = 0;
	if (dispMode=='galery') {
		var bodyWidth = getBodyWidth();
		var maxCols = Math.floor(bodyWidth / 190);
		nColCount = ((maxCols - 2) > 0)?(maxCols - 2):1;
	}
	else if (dispMode == 'list') {
		var bodyWidth = getBodyWidth();
		var maxCols = Math.floor(bodyWidth / 380);
		nColCount = ((maxCols -1)> 0)?(maxCols-1):1;
	}
	return nColCount;
}


/**
 * Gibt die Anzahl der Zeilen zurück die in der überg. Ansicht in den Ergebnisbereich passen würden 
 * @param {String} dispMode 'list' oder 'galery'
 * @return {Number} Anzahl der in den Ergebnisbereich passenden Zeilen (jedoch mindestens 1)
 */
function getRowCount(sDispMode) {
	var resAreaHeight = (getBodyHeight() - apsGetElementById('headerContainer').clientHeight)
	var nRowCount = 1;
	if (sDispMode == 'galery') {
		nRowCount = Math.floor(resAreaHeight/250)
	}
	else if(sDispMode == 'list') {
		nRowCount = Math.floor(resAreaHeight/230)
	}
	if (nRowCount < 1) {
		nRowCount = 1;
	}
	return nRowCount;
}

/**
 * Gibt die Anzahl der Elemente zurück die in die Ergebnisfläche der überg. Ansicht passen würden
 * @param {String} strDisplayMode 'list' oder 'galery'
 * @return {Number} Die Anzahl der Elemente, die in die Ergebnisfläche passen, jedoch mind. 1
 */
function getListCount(strDisplayMode) {
	return (getColCount(strDisplayMode) * getRowCount(strDisplayMode));
}

function CoordinateLookup(level) {
	var coordstring = "";
	var boundstring = "";
	if (Query.maps) {
		coordstring = escape(' ' + Query.maps);
		boundstring=coordstring.replace(/^\%20\+koordinaten\d\%5B/,'');
	} else {
		boundstring = mapgetbounds() + ',' + level;
		coordstring = escape(' +koordinaten' + level) + '[' + boundstring;
	}
	var querystring = escape(trim(Query.media + " " + Query.archive) + " ") + coordstring + " " + escape(Query.base)  + escape(" " + Query.catalog);
//	var querystring = escape(trim(Query.media + " " + Query.archive) + " ") + escape(Query.base)  + escape(" " + Query.catalog);
	APSRequest("coordinatelookup?tastr=koordinaten" + level + "&start=" + boundstring + "&query=" + querystring);
}

function submitLocationSearch(lat,lng,level,id,motxt) {
	var coordstring = escape(' +koordinaten' + level) + '[' + lat + ',' + lng + ',' + lat + ',' + lng + ',' + level;
	var querystring = escape(trim(Query.media + " " + Query.archive) + " ") + coordstring + " " +  escape(Query.base)  + escape(" " + Query.catalog);
	Query.mapstxt = motxt;
	Query.mapslvl = level;
	APSRequest("maplookup?query=" + querystring + "&target=" + id,3);
}

function submitLocationQuery(query,dmode,no) {
	var querystring = query;
	APSRequest("searchdefine?query=" + querystring + "&dmode="+ dmode + "&no=" + no);
}	

function maplookupnavigate(no,id) {
	APSRequest("maplookupnavigate?no=" + no + "&target=" + id,3);
}

/* Search History mit Backbase */

var SH = new Array();

function addSearchHistory(atype, a1, a2) {
	i = SH.length;
	SH[i] = new Object;
	SH[i].requesttype = atype;
	SH[i].param1 = a1;
	SH[i].param2 = CopyQuery(a2);
	bb.history.add('|' + i, document.title + " (" + i + ")");
}

function APSHistory(evnt) {
	try {
		if (evnt.bookmark == "|home" || evnt.bookmark == '') {
			initAPS();
		}
		else {
			i = evnt.bookmark.substr(1);
			if (!(i >= 0)) {
				return;
			};
			switch (SH[i].requesttype) {
				case 'searchreset':
					initAPS();
					break;
				case 'plain':
					Query = CopyQuery(SH[i].param2);
					APSRequest(SH[i].param1 + "&:media=" + Query.mediaID + "&:archiv=" + Query.archiveID, 1, true);
					break;
				case 'archiv':
					Query = CopyQuery(SH[i].param2);
					APSRequest(SH[i].param1 + "&:media=" + Query.mediaID, 1, true);
					break;
				case 'media':
					Query = CopyQuery(SH[i].param2);
					APSRequest(SH[i].param1 + "&:archiv=" + Query.archiveID, 1, true);
					break;
				case 'query':
					Query = CopyQuery(SH[i].param2);
					APSRequest(SH[i].param1 + "&:media=" + Query.mediaID + "&:archiv=" + Query.archiveID, 1, true);
					var t = SH[i].param1.replace(/searchdefine\?/, '');
					DDRefresh(t, true);
				case 'info':
				case 'warenkorb':
				case 'lichtpult':
				case 'catalog':
					Query = CopyQuery(SH[i].param2);
					APSRequest(SH[i].param1, 1, true);
					break;
				case 'xml':
					Query = CopyQuery(SH[i].param2);
					URLRequest(SH[i].param1, 1, false, true);
					break;
			}
		}
	}
	catch (exHist) {
		//nix, soll AKHIF-92 vorbeugen
	} 
}

function CopyQuery(q) {
	var r = new Object;
	r.lastDDUpdate = new Object;
	r.lastDDUpdate.tastr = q.lastDDUpdate.tastr;
	r.lastDDUpdate.catalog = q.lastDDUpdate.catalog;
	r.lastDDUpdate.start = q.lastDDUpdate.start;
	r.catalog = q.catalog;
	r.media = q.media;
	r.mediaID = q.mediaID;
	r.base = q.base;
	r.archive = q.archive;
	r.archiveID = q.archiveID;
	r.maps = q.maps;
	r.mapstxt = q.mapstxt;
	r.mapslvl = q.mapslvl;
	
	return r;
}
/*
function APSBBLoad() {
	alert(sBBLoadTarget);
	alert(sBBLoadCmd);
	bb.callFunction('BBLoad', [sBBLoadTarget, sBBLoadCmd]);
	sBBLoadTarget = '';
	sBBLoadCmd = '';
}*/
