
/*
	Introduces Function.inheritsFrom(parent) [="extends"]
*/
Function.prototype.inheritsFrom = function(parentClassOrObject) { 
	if (parentClassOrObject.constructor == Function) { 
		// Normal Inheritance 
		this.prototype = new parentClassOrObject;
		this.prototype.constructor = this;
		this.prototype.parent = parentClassOrObject.prototype;
	} else { 
		// Pure Virtual Inheritance 
		this.prototype = parentClassOrObject;
		this.prototype.constructor = this;
		this.prototype.parent = parentClassOrObject;
	}
	return this;
}

/* 
	global objects
*/
window.Elias2 = new Elias2();


/* 
	Wrapper object
*/
function Elias2() {
	
	var that = this;
	
	var lastClick = null;
	this.lastClick = lastClick;
		
	this.downloadUrl = null;	
		
	if (!window.ConsoleWrapper) {
		alert('ERROR: ConsoleWrapper.js not loaded!');
	}
	

	this.doOnUnload = function doOnUnload(url) {
		if (this.lastClick == null) {
			SimpleAJAXCall(url, Elias2.doOnUnloadCallback);
			
			// wait 0.5 second
			var millis = 500;
			var date = new Date();
			var curDate = null;
			do { 
				curDate = new Date(); 
			} while(curDate-date < millis);
			
		}
  }
  
  this.doOnUnloadCallback = function doOnUnloadCallback ( in_responseText ) {
    // do nothing
  }

	this.setLastClick = function setLastClick() {
		var jetzt = new Date();
		this.lastClick = jetzt.getTime(); 
		if (ConsoleWrapper.debugEnabled) {
			ConsoleWrapper.debug("lastClick: " + this.lastClick);
		}
		
	}


	this.keepAlive = function keepAlive(url) {
  	SimpleAJAXCall(url, Elias2.keepAliveCallback);
  }

	this.keepAliveCallback = function keepAliveCallback() {
  	// do nothing
		if (ConsoleWrapper.debugEnabled) {
			ConsoleWrapper.debug("keep alive done");
		}

  }



	function evalInnerScripts(divId) {

		var div = document.getElementById(divId);
		//alert(div.id);
		var scripts = document.getElementsByTagName('script');
		
		for (var i = 0; i < scripts.length; i++) {
		
			var isChild = false;
			var parent = scripts[i].parentNode;
			while (parent) {
				if (parent == div) {
					isChild = true;
				}
				parent = parent.parentNode;
			}
			
			if (isChild) {
				
				/*
				alert(i + "/" + scripts.length + " " + div.id + ": " 
					+ scripts[i].text);
				*/	
				
				eval(scripts[i].text);
			} else {
				/*
				alert(i + "/" + scripts.length + " no: " + scripts[i].parentNode.id 
					+ " " + scripts[i].text);
				*/
			}
		}
	}


	function trim (str) {
    str = "" + str;
    return str.replace(/ +/g, ' ').replace(/^\s+/g, '').replace(/\s+$/g, '');
	}
	
	function validateValue(value,min,max,len) {
 			value = trim(value);
 			if (value == "") {
 				value = min;
 			}
			if (eval(value) < min) {
				value = min;
			}
			if (eval(value) > max) {
				value = max;
			}
			value = "" + value;
			while(value.length < len) {
				value = "0" + value;
			}
			// alert("value: " + value + " " + min + " " + max + " " + len);
			return "" + value;
 		}	
	

	
	/*
	 *	Init manager objects
	 */
	this.SimpleSearch = new SimpleSearch();
	this.ExtendedSearch = new ExtendedSearch();
	this.Update = new Update();
	this.TimeSlideExtended = new TimeSlideExtended();
	this.RelativeTimeSelect = new RelativeTimeSelect();
	this.TimelineBox = new TimelineBox();
	this.TopicsBox = new TopicsBox();
	this.Snapshot = new Snapshot();
	this.ResultList = new ResultList();
	this.DownloadWarning = new DownloadWarning();
	

	/*
		ManagerBase
		all specific Managers extend this
	*/ 
	function ManagerBase(actionUrl) { 
		
		var that = this;
		
		this.actionUrl = actionUrl;
		
		this.sayHello = function sayHello() {
			alert("hello");
		}
		
		/*
			Distribute the content snippets to the DOM elements
			(resultObj.content contains 'domId' -> 'innerHTML' pairs)
		*/
		this.updateAjaxElements = function updateAjaxElements(ajaxResultContent) {
			if (ajaxResultContent) {
				for(domId in ajaxResultContent) {
					var innerHTML = ajaxResultContent[domId];
					if (typeof(innerHTML) == 'string') {
						
						//alert(domId + ": " + innerHTML);
						document.getElementById(domId).innerHTML = innerHTML;
						 
					}
				}
			}
		}
		
		/*
			This is the "complex" callback. It is called for every stage
			of the request.
			
			For Stage 4 (complete), this callback is called prior to the
			"simple" callback.
			
			Parameters:
				in_stage:	This is the request stage (0-4)
				in_text:		The request result text.
				in_param:	This is the first of the two "extra" parameters
								that were supplied when the call was made.
				in_param2:	This is the second of the two parameters.
				in_index:	This is the index of the request. This can be
							used to directly index the request array.
		*/
		this.dummyStageCallback = function dummyStageCallback(in_stage, in_text, in_param, in_param2, in_index) {
			//if (ConsoleWrapper.debugEnabled) {
			//	ConsoleWrapper.debug(in_stage + " " + in_text + " " + in_param + " " + in_param2);
			//}
		}
		
		/*
			This is the "timeout" callback.
			
			Parameters:
				in_param:	This is the first of the two "extra" parameters
								that were supplied when the call was made.
				in_param2:	This is the second of the two parameters.
				in_index:	This is the index of the request. This can be
								used to directly index the request array.
		*/
		this.dummyTimeoutCallback = function dummyTimeoutCallback(in_param, in_param2, in_index) {
			if (ConsoleWrapper.debugEnabled) {
				ConsoleWrapper.debug(in_index + " timeout!");
				ConsoleWrapper.debugGroupEnd();
			}
		}
			
		this.showDiv = function showDiv(elem) {
			elem.style.display='block';
		}

		this.hideDiv = function hideDiv(elem) {
			elem.style.display='none';
		}
		
		return true;
	}


	function SimpleSearch() {
		
		this.clearSearchTerm = function clearSearchTerm() {
			$(".searchTermContainer input[name='searchTerm']").val('');
		}
	}

	/*
		Manages 'ExtendedSearch' action
	*/ 
	function ExtendedSearch() { 
		
		var actionUrl = '/sda-Direct/restricted/ExtendedSearch.act';
		
		ExtendedSearch.inheritsFrom(ManagerBase);
		ManagerBase.call(this, actionUrl); // =super();
		var that = this;
		
		this.checkAlertPermission  = function checkAlertPermission(elem) {
			var form = elem.form;
			if (elem.checked) {
				form.emailAlarm.disabled=true;
				form.smsAlarm.disabled = true;
				form.email.disabled = true;
				form.sms.disabled = true;
				form.emailAlarm.checked = false;
				form.smsAlarm.checked = false;
				form.email.value = "";
				form.sms.value = "";
			} else {
				form.emailAlarm.disabled=false;
				form.smsAlarm.disabled=false;
				form.email.disabled=false;
				form.sms.disabled=false;
			}
		}
		
		this.changeCheckbox  = function changeCheckbox(elem, value) {
			for (i = 0; i < elem.length; i ++) {
				var e = elem[i];
				if(value == false) {
	  			e.checked = false;
	  		} else {
	  			e.checked = true;
	  		}
			}
		}
 
 		this.validateDay = function validateDay(val) {
 			return validateValue(val,1,31,2);	
 		}
 		this.validateMonth = function validateMonth(val) {
 			return validateValue(val,1,12,2);
 		}
 		this.validateYear = function validateYear(val) {
 			return validateValue(val,1900,2030,4);
 		}

 		this.validateHour = function validateHour(val) {
 			return validateValue(val,0,23,2);
 		}
 		this.validateMin = function validateMin(val) {
 			return validateValue(val,0,59,2);
 		}
 		
 		this.toDate = function toDate(year,month,day) {
 			year.value = this.validateYear(year.value);
 			month.value = this.validateMonth(month.value);
 			day.value = this.validateDay(day.value);
 			return year.value + month.value + day.value;
 		}

 		this.toTime = function toDate(hour,min) {
 			hour.value = this.validateHour(hour.value);
 			min.value = this.validateMin(min.value)
 			return hour.value + min.value + "00";
 		}
 
 		this.setTimeslideFrom = function setTimeslideFrom(form) {
 			var date = this.toDate(form.fromYear, form.fromMonth, form.fromDay);
 			var time = this.toTime(form.fromHour, form.fromMin);
 			
 			if (typeof timeSelector_extended !== 'undefined') {
 	 			var from_tp = new timeSelector_extended.TimePoint(date, time, '','');
 	 			timeSelector_extended.setFrom(from_tp);
 	 			timeSelector_extended.init(Elias2.TimeSlideExtended); 
 			}
 			if (Elias2.RelativeTimeSelect.isInitialized()) {
 				Elias2.RelativeTimeSelect.selectAbsoluteFrom();
 			}
 			
 			form.fromToken.value = '';
 			this.resetTemplate();
 			this.setFromTimepoint(date + time, form.fromToken.value);
 		}

 		this.setTimeslideTo = function setTimeslideTo(form) {
 			var date = this.toDate(form.toYear, form.toMonth, form.toDay);
 			var time = this.toTime(form.toHour, form.toMin);
 			
 			if (typeof timeSelector_extended !== 'undefined') {
	 			var to_tp = new timeSelector_extended.TimePoint(date, time, '','');
	 			timeSelector_extended.setTo(to_tp);
	 			timeSelector_extended.init(Elias2.TimeSlideExtended);
 			}
 			if (Elias2.RelativeTimeSelect.isInitialized()) {
 				Elias2.RelativeTimeSelect.selectAbsoluteTo();
 			}
 			
 			form.toToken.value = '';
 			this.resetTemplate();
 			this.setToTimepoint(date + time, form.toToken.value);
 		}
 		
 		this.setFromTimepoint = function setFromTimepoint(timestamp, token) {
			var url = '/sda-Direct/restricted/ExtendedSearch_setProductFromTimepoint.act?';
			url += "fromTimestamp=" + timestamp;
			if (token != null && token != "") {
			 url += "&fromToken="+token;
			}
			return this.setTimepointAjaxCall(url);
 		}
 		
 		this.setToTimepoint = function setToTimepoint(timestamp, token) {
			var url = '/sda-Direct/restricted/ExtendedSearch_setProductToTimepoint.act?';
			url += "toTimestamp=" + timestamp;
			if (token != null && token != "") {
			 	url += "&toToken="+token; 
			}
			return this.setTimepointAjaxCall(url);
 		}

 		
		this.setTimepointAjaxCall = function setTimepointAjaxCall(url) {
			
			// when using POST a trailing ? is required!
			// CallXMLHTTPObject (called ba MakeNewAJAXCall) expects it 	
			
			if (ConsoleWrapper.debugEnabled) {
				ConsoleWrapper.debugGroup("setTimepointAjaxCall");
				ConsoleWrapper.debug(url);
			}
			
			var param1 = null;
			var param2 = null;
			var timeoutCallback = null;
			var timeoutSeconds = null;
			
			var index = MakeNewAJAXCall(url, 
				this.setTimepointAjaxCallback, 'POST', 
				this.dummyStageCallback, param1, param2, 
				timeoutCallback, timeoutSeconds);
		}		

		this.setTimepointAjaxCallback = function setTimepointAjaxCallback(in_text, in_param1, in_param2) {
			var content = in_text;
			ConsoleWrapper.debug(in_text);
		}	 		
 		
 
		this.checkAlleCheckbox  = function checkAlleCheckbox(elem, value) {
		  if(value == false) {
		  	elem.checked = false;
	  	}
		}

		this.showTemplateDialog = function showTemplateDialog() {
			var elem = document.getElementById("templatedialog");
			elem.style.display='block';
		}

		this.hideTemplateDialog = function hideTemplateDialog() {
			var elem = document.getElementById("templatedialog");
			elem.style.display='none';
		}
		
		this.saveTemplate = function saveTemplate() {
			var form = document.searchForm;
			form.action = form.action.replace("_doSearch","_saveTemplate");
			form.submit();
		}
		
		this.doSearch = function doSearch() {
			var form = document.searchForm;
			form.action = form.action.replace("_saveTemplate","_doSearch");
			form.showExtended.value='false';
			form.submit();
		}

		this.showSelectedTemplate = function showSelectedTemplate(elem) {
			/*
			if (elem.options.selectedIndex > 0) {
			  document.getElementById("button_edit").style.display='block';
			  document.getElementById("button_create").style.display='none';			  
			} else {
			  document.getElementById("button_edit").style.display='none';
			  document.getElementById("button_create").style.display='block';			  
			}
			*/
			var form = elem.form;
			form.action = this.getBaseUrl(form.action) + "ExtendedSearch_showTemplate.act";
			form.submit();
		}
		
		this.getBaseUrl = function getBaseUrl(url) {
			return url.substring(0, url.lastIndexOf("/")+1);
		}

		this.deleteSelectedTemplate = function deleteSelectedTemplate(elem) {
			var form = elem.form;
			form.action = this.getBaseUrl(form.action) + "ExtendedSearch_deleteTemplate.act";
			form.submit();
		}


		this.changeForm = function changeForm(form_elem, icon_elem, divId) {
 			var erweiterteSuche = form_elem.value == 'true';
			if (!erweiterteSuche) {
				icon_elem.src = icon_elem.src.replace(/closed/,"open");
				this.showExtendedForm(form_elem, divId);
			}	else {
				icon_elem.src = icon_elem.src.replace(/open/,"closed");
				this.hideExtendedForm(form_elem, divId);
			}	
		}
		
		this.showExtendedForm = function showExtendedForm(form_elem, divId) {
			form_elem.value = 'true';
			$('#' + divId).load('/sda-Direct/restricted/ExtendedForm_showExtendedForm.act', function() {
				if (window.timeSelector_extended) {
					window.timeSelector_extended.init(Elias2.TimeSlideExtended)
				}
			});
		}
		
		this.hideExtendedForm = function hideExtendedForm(form_elem, divId) {
			form_elem.value = 'false';
			document.getElementById(divId).innerHTML = "";
		}
		
		this.changeSource = function changeSource(elem) {
			var url = '/sda-Direct/restricted/ExtendedSearch_changeSource.act?';
			url += "src=" + elem.value + "&srcSelected=" + elem.checked;
			this.resetTemplate();
			this.changeSourceAjaxCall(url);
		}

		this.resetTemplate = function resetTemplate() {
			var form = document.searchForm;
			if (form.searchTemplate) {
				form.searchTemplate.selectedIndex = 0;
			}
		}

		this.changeAllSource = function changeAllSource(elem) {
			var url = '/sda-Direct/restricted/ExtendedSearch_changeSource.act?';
			url += "src=ALL_SOURCES&srcSelected=" + elem.checked;
			this.resetTemplate();
			this.changeSourceAjaxCall(url);
		}
		
		this.changeSourceAjaxCall = function changeSourceAjaxCall(url) {
			
			// when using POST a trailing ? is required!
			// CallXMLHTTPObject (called ba MakeNewAJAXCall) expects it 	
			
			if (ConsoleWrapper.debugEnabled) {
				ConsoleWrapper.debugGroup("changeSourceAjaxCall");
				ConsoleWrapper.debug(url);
			}
			
			var param1 = null;
			var param2 = null;
			var timeoutCallback = null;
			var timeoutSeconds = null;
			
			var index = MakeNewAJAXCall(url, 
				this.changeSourceAjaxCallback, 'POST', 
				this.dummyStageCallback, param1, param2, 
				timeoutCallback, timeoutSeconds);
		}		

		this.changeSourceAjaxCallback = function changeSourceAjaxCallback(in_text, in_param1, in_param2) {
			var content = in_text;
			ConsoleWrapper.debug(in_text);
			// SDA-344
			if (document.getElementById('timeSlideContainer_extended')) {
				window.setTimeout("Elias2.ExtendedSearch.loadTimeSlider('timeSlideContainer_extended','extended')", 100);
			}
			if (document.getElementById('ExtendedSearch_relativeTimeSelect')) {
				window.setTimeout("Elias2.ExtendedSearch.loadRelativeTimeSelect('ExtendedSearch_relativeTimeSelect')", 100);
			}
		}	
			
		this.changeChannel = function changeChannel(elem) {
			var url = '/sda-Direct/restricted/ExtendedSearch_changeChannel.act?';
			url += "ch=" + elem.value + "&chSelected=" + elem.checked;
			this.resetTemplate();
			this.changeChannelAjaxCall(url);
		}

		this.changeAllChannel = function changeAllChannel(elem) {
			var url = '/sda-Direct/restricted/ExtendedSearch_changeChannel.act?';
			url += "ch=ALL_CHANNELS&chSelected=" + elem.checked;
			this.resetTemplate();
			this.changeChannelAjaxCall(url);
		}
		
		this.changeChannelAjaxCall = function changeChannelAjaxCall(url) {
			
			// when using POST a trailing ? is required!
			// CallXMLHTTPObject (called ba MakeNewAJAXCall) expects it 	
			
			if (ConsoleWrapper.debugEnabled) {
				ConsoleWrapper.debugGroup("changeChannelAjaxCall");
				ConsoleWrapper.debug(url);
			}
			
			var param1 = null;
			var param2 = null;
			var timeoutCallback = null;
			var timeoutSeconds = null;
			
			var index = MakeNewAJAXCall(url, 
				this.changeChannelAjaxCallback, 'POST', 
				this.dummyStageCallback, param1, param2, 
				timeoutCallback, timeoutSeconds);
		}		

		this.changeChannelAjaxCallback = function changeChannelAjaxCallback(in_text, in_param1, in_param2) {
			var content = in_text;
			ConsoleWrapper.debug(in_text);
		}				
			

		this.loadTimeSlider = function loadTimeSlider(divId, id) {
			$('#' + divId).load('/sda-Direct/restricted/TimeSlideExtended.act', {id: id}, function() {
				window.timeSelector_extended.init(Elias2.TimeSlideExtended);		
				
				// update current from/to fields
				var fromTp = window.timeSelector_extended.getFrom();
				var toTp = window.timeSelector_extended.getTo();			
				
				Elias2.TimeSlideExtended.setFromTimestamp(fromTp.aomDate, fromTp.aomTime.substring(0,4), fromTp.token);
				Elias2.TimeSlideExtended.setToTimestamp(toTp.aomDate, toTp.aomTime.substring(0,4), toTp.token); 
			});
		}	
		
		this.loadRelativeTimeSelect = function loadRelativeTimeSelect(divId) {
			
			$('#' + divId).load('/sda-Direct/restricted/RelativeTimeSelect.act', function() {
				
				var fromTp = Elias2.RelativeTimeSelect.getSelectedFrom();
				if (fromTp) {
					if (fromTp.token === Elias2.RelativeTimeSelect.TOKEN_ABSOLUTE) {
						document.searchForm.fromToken.value = '';
					} else {
						Elias2.TimeSlideExtended.setFromTimestamp(fromTp.date, fromTp.time, fromTp.token);
					}
				}
				
				var toTp = Elias2.RelativeTimeSelect.getSelectedTo();
				if (toTp) {
					if (toTp.token === Elias2.RelativeTimeSelect.TOKEN_ABSOLUTE) {
						document.searchForm.toToken.value = '';
					} else {
						Elias2.TimeSlideExtended.setToTimestamp(toTp.date, toTp.time, toTp.token);
					}
				}
			});
		}
		
		this.searchRunning = false;

		this.handleTextareaKeydown = function handleTextareaKeydown(event, inputObj) {
			var key = this.getKey(event);
	
			if (this.searchRunning) {
				// prevent typing/resubmit if search was submitted via ENTER
				return false;
			}
	
			if (key == "38" || key == "40") { // CURSOR UP/DOWN
				// ignore
			} else if (key == "37" || key == "39") { // CURSOR LEFT/RIGHT
				// ignore
			} else if (key == "27") { // ESCAPE
				// ignore
			} else if (key == "9") { // TAB
				// ignore
			} else if (key == "13") { // ENTER
				// submit directly
				window.searchRunning = true;
				inputObj.form.submit();
				return false;
			} else {
				// ignore
			}
		return true;
		}		
		
		this.getKey = function getKey(event) {
			var key = false;
			if (!event) {
				event = window.event;
			}
			if (event.which) {
				key = event.which;
			} else if (event.keyCode) {
				key = event.keyCode;
			}
		return key;
		}

		this.clearSearchTerm = function clearSearchTerm() {
			$('.searchTermContainer textarea').val('');
		}
	}	
	
	function Update() { 
		
		var actionUrl = '/sda-Direct/restricted/Update.act';
		
		Update.inheritsFrom(ManagerBase);
		ManagerBase.call(this, actionUrl); // =super();
		var that = this;
		
		this.getNewHits = function getNewHits(divId) {
			var url = '/sda-Direct/restricted/Update_getNewHits.act?';
			return this.newHitsAjaxCall(url, divId);
		} 
		
		/* This is the "simple" call 
		*/
		
		this.newHitsAjaxCall = function newHitsAjaxCall(url, divId) {
			
			// when using POST a trailing ? is required!
			// CallXMLHTTPObject (called ba MakeNewAJAXCall) expects it 	
			
			if (ConsoleWrapper.debugEnabled) {
				ConsoleWrapper.debugGroup("newHitsAjaxCall");
				ConsoleWrapper.debug(url);
			}
			
			var param1 = divId;
			var param2 = null;
			var timeoutCallback = null;
			var timeoutSeconds = null;
			
			var index = MakeNewAJAXCall(url, 
				this.newHitsAjaxCallback, 'POST', 
				this.dummyStageCallback, param1, param2, 
				timeoutCallback, timeoutSeconds);
		}
		
		this.newHitsAjaxCallback = function newHitsAjaxCallback(in_text, divId, in_param2) {
			try {
			  var now = new Date();
			  var ts = now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds();
			  var hit_cnt = parseInt(in_text);
			  if (''+hit_cnt == in_text) {
					if (hit_cnt > 0) {
					  
					  var content = in_text;
					  if (hit_cnt == 1) {
					  	content += ' neuer Treffer';
					  } else {
					   	content += ' neue Treffer';
					  }
						document.getElementById(divId).innerHTML = content;
						document.getElementById("divUpdates").style.display = 'block';
					}
					window.setTimeout("Elias2.Update.getNewHits('"+divId+"')",30000);
				}		
			} catch(e) {
				alert("Error in newHitsAjaxCallback: " + e.message);
			}
		}
		
		this.startPolling = function startPolling(divId, intervalInSeconds) {
			window.setTimeout("Elias2.Update.getNewHits('"+divId+"')", intervalInSeconds * 1000);
		}
		
	}	
		
	
	function TimeSlideExtended() {
		
		var id = "TimeSldeExtended";
		
		this.fromChanged = function fromChanged(date, time, name, token, timestamp) {
		    // ConsoleWrapper.debug(id + ".fromChanged " + date + " " + time + " " + name + " " + token + " " + timestamp);
		    this.setFromTimestamp(date,time,token);
		}
	
		this.toChanged = function toChanged(date, time, name, token, timestamp) {
			// ConsoleWrapper.debug(id + ".toChanged " + date + " " + time + " " + name + " " + token + " " + timestamp);
			this.setToTimestamp(date,time,token);			
		}
	
		this.fromSelected = function fromSelected(date, time, name, token, timestamp) {
			// ConsoleWrapper.debug(id + ".fromSelected " + date + " " + time + " " + name + " " + token + " " + timestamp);
			this.setFromTimestamp(date,time,token);
			Elias2.ExtendedSearch.resetTemplate();
			Elias2.ExtendedSearch.setFromTimepoint(date + time, token);
		}
	
		this.toSelected = function toSelected(date, time, name, token, timestamp) {
			// ConsoleWrapper.debug(id + ".toSelected " + date + " " + time + " " + name + " " + token + " " + timestamp);
			this.setToTimestamp(date,time,token);		
			Elias2.ExtendedSearch.resetTemplate();
			Elias2.ExtendedSearch.setToTimepoint(date + time, token);
		}
		
		this.setFromTimestamp = function setFromTimestamp(date, time, token) {
			var form = document.searchForm;
			form.fromYear.value = date.substring(0,4); 
			form.fromMonth.value = date.substring(4,6);
			form.fromDay.value = date.substring(6,8);
			form.fromHour.value = time.substring(0,2);
			form.fromMin.value = time.substring(2,4);
			form.fromToken.value = token;
		}

		this.setToTimestamp = function setToTimestamp(date, time, token) {
			var form = document.searchForm;
			form.toYear.value = date.substring(0,4); 
			form.toMonth.value = date.substring(4,6);
			form.toDay.value = date.substring(6,8);
			form.toHour.value = time.substring(0,2);
			form.toMin.value = time.substring(2,4);
			form.toToken.value = token;
		}
	}
	
	function RelativeTimeSelect() {
		
		this.TOKEN_ABSOLUTE = 'ABSOLUTE_DATE';
		
		function TimePoint(date, time, name, token) {
			this.date = date;
			this.time = time;
			this.name = name;
			this.token = token;
		}
		
		var initialized = false;
		var fromSelectName = null;
		var toSelectName = null;
		var fromTimePoints = [];
		var toTimePoints = [];
		
		this.init = function init(fromSelect, toSelect) {
			fromSelectName = fromSelect;
			toSelectName = toSelect;
			fromTimePoints = [];
			toTimePoints = [];
			initialized = true;
		}
		
		this.isInitialized = function isInitialized() {
			return initialized;
		}
		
		this.addFromTimePoint = function addFromTimePoint(date, time, name, token) {
			fromTimePoints[token] = new TimePoint(date, time, name, token);
		}
		
		this.addToTimePoint = function addToTimePoint(date, time, name, token) {
			toTimePoints[token] = new TimePoint(date, time, name, token);
		}
		
		this.fromSelected = function fromSelected() {
			var selectedTimePoint = this.getSelectedFrom();
			if (selectedTimePoint) {
				if (selectedTimePoint.token === this.TOKEN_ABSOLUTE) {
					document.searchForm.fromToken.value = '';
				} else {
					Elias2.TimeSlideExtended.fromSelected(selectedTimePoint.date, selectedTimePoint.time, selectedTimePoint.name, selectedTimePoint.token);
				}
			}
		}

		this.toSelected = function toSelected() {
			var selectedTimePoint = this.getSelectedTo();
			if (selectedTimePoint) {
				if (selectedTimePoint.token === this.TOKEN_ABSOLUTE) {
					document.searchForm.toToken.value = '';
				} else {
					Elias2.TimeSlideExtended.toSelected(selectedTimePoint.date, selectedTimePoint.time, selectedTimePoint.name, selectedTimePoint.token);
				}
			}
		}
		
		this.getSelectedFrom = function getSelectedFrom() {
			return fromTimePoints[document.searchForm[fromSelectName].value];
		}
		
		this.getSelectedTo = function getSelectedTo() {
			return toTimePoints[document.searchForm[toSelectName].value];
		}
		
		this.selectAbsoluteFrom = function selectAbsoluteFrom() {
			document.searchForm[fromSelectName].selectedIndex = 0;
		}
		
		this.selectAbsoluteTo = function selectAbsoluteTo() {
			document.searchForm[toSelectName].selectedIndex = 0;
		}
	}
	
	function TimelineBox() { 
		
		var actionUrl = '/sda-Direct/restricted/TimelineBox.act';
		
		TimelineBox.inheritsFrom(ManagerBase);
		ManagerBase.call(this, actionUrl); // =super();
		var that = this;
		
		var fromValue;
		var toValue;
		var fromIndex;
		var toIndex;
		
		var selectionDone;
		
		this.doMouseOver = function doMouseOver(value,index) {
	  	if (ConsoleWrapper.debugEnabled) {
			 	// ConsoleWrapper.debug("mouseOver: " + value);
		  }
		  this.logFromToValue();
		  if(fromValue != null && !selectionDone) {
				if (value < fromValue) {
				  if (fromValue > toValue) {
				  	toValue = fromValue;
				  	toIndex = fromIndex;
				  }
					fromValue = value;
				} else {
					if (value > toValue) {
						toValue = value;
						toIndex = index;
					}
				}
				this.changeBarColor();
		  }
		} 

		this.doMouseDown = function doMouseDown(value,index) {
	  	if (ConsoleWrapper.debugEnabled) {
			 	/*
			 	ConsoleWrapper.debugGroup("doMouseDown");
			 	ConsoleWrapper.debug("value: " + value);
			 	ConsoleWrapper.debug("fromValue: " + fromValue);
			 	ConsoleWrapper.debugGroupEnd();
			 	*/
		  }
			if (fromValue == null) {
		  	fromValue = value;
		  	fromIndex = index;
		  	if (toValue == null) {
		  		toValue = value;
		  		toIndex = index;
		  	}
		  	this.changeBarColor();
		  }
		} 

		this.doMouseUp = function doMouseUp(value,index,baseUrl) {
	  	if (ConsoleWrapper.debugEnabled) {
			 	// ConsoleWrapper.debug("mouseUp");
		  }
		  if (selectionDone == null && fromValue != null) {
		  	toValue = value;
		  	toIndex = index;
		  	selectionDone = true;
		  	url = baseUrl + "&fromInterval=" + fromIndex + "&toInterval=" + toIndex;
		  	// alert("selection done! baseUrl: " + url);
		  	location.href = url;
		  }
		} 

		

		this.changeBarColor = function changeBarColor() {
				var parentElem = document.getElementById("TimelineBars");
				var children = parentElem.getElementsByTagName('div');
			
				for (i = 0; i <children.length; i++) {
					var bar = children[i];
					if(bar.id.indexOf("TimelineBar")>-1) {
						var value = bar.id.substring("TimelineBar".length);
						if(toValue == null) {
							toValue = fromValue;
						}
						if(value >= fromValue && value <= toValue) {
							bar.className = 'timelineBarActive';
						} else {
							bar.className = 'timelineBar';
						}
					}
				} 
		}

		
		this.logFromToValue = function logFromToValue() {
	  	if (ConsoleWrapper.debugEnabled) {
			 	ConsoleWrapper.debug("fromValue: " + fromValue + " toValue: " + toValue);
		  }
		}
		
		
	}	
	
	
	
	function DownloadWarning() { 
		var actionUrl = '/sda-Direct/restricted/DownloadWarning.act';
		
		DownloadWarning.inheritsFrom(ManagerBase);
		ManagerBase.call(this, actionUrl); // =super();
		var that = this;
		
		this.showDialog = function showDialog(dialogUrl) {

			var dialogWidth = 400;
			var dialogHeight = 100;
			
			var left = Math.floor((screen.width - dialogWidth) / 2);
			var top = Math.floor((screen.height - dialogHeight) / 2 - 30);
		
			var dialogWindow = window.open(dialogUrl,'DownloadWarning', 'top=' + top + ',left=' + left + ',width=' + dialogWidth + ',height=' + dialogHeight + ',location=no,scrollbars=auto');
			dialogWindow.focus();
		} 
	}
		
	function TopicsBox() { 
		
		var actionUrl = '/sda-Direct/restricted/TopicsBox.act';
		
		TopicsBox.inheritsFrom(ManagerBase);
		ManagerBase.call(this, actionUrl); // =super();
		var that = this;
		
		this.showTopics = function showTopics(divId, sid) {
			$('#' + divId).load('/sda-Direct/restricted/TopicsBox_showBox.act', {sid: sid});
		}

	}	



	function ResultList() { 
		
		var actionUrl = '/sda-Direct/restricted/ResultList.act';
		
		Snapshot.inheritsFrom(ManagerBase);
		ManagerBase.call(this, actionUrl); // =super();
		var that = this;
	
		this.checkSelection = function checkSelection() {
		  var elems = document.getElementsByName("selectedHits");
			var selectionFound = false;
			for(i = 0; i < elems.length; i++) {
				var elem = elems[i];
				if (elem.checked) {
					selectionFound = true;
				}
			}
			if (!selectionFound) {
				alert('Wählen Sie bitte einen oder mehrere Artikel!');
				return false;
			}
			return true;
		}

		this.selectAll = function selectAll() {
		  var elems = document.getElementsByName("selectedHits");
			for(i = 0; i < elems.length; i++) {
				elems[i].checked = true;
			}
		}

		this.deselectAll = function deselectAll() {
		  var elems = document.getElementsByName("selectedHits");
			for(i = 0; i < elems.length; i++) {
				elems[i].checked = false;
			}
		}



	}

	function Snapshot() { 
		
		var actionUrl = '/sda-Direct/restricted/SimpleSearch.act';
		
		Snapshot.inheritsFrom(ManagerBase);
		ManagerBase.call(this, actionUrl); // =super();
		var that = this;
		
		this.getPageWidth = function getPageWidth() {
			var pageWidth = -1;
			if( document.body.clientWidth ) // Firefox 
			{
				pageWidth = document.body.clientWidth;
			}
			else if( document.body.scrollWidth > document.body.scrollWidth ) // all but Explorer Mac 
			{
				pageWidth = document.body.scrollWidth;
			}
			else // works in Explorer 6 Strict, Mozilla (not FF) and Safari 
			{ 
				pageWidth = document.body.offsetWidth + document.body.offsetLeft; 
			}
			
			if (window.innerWidth && window.innerWidth > pageWidth) {
				pageWidth = window.innerWidth; 
			}
			
			return pageWidth;
		}
		
		this.getPageHeight = function getPageHeight() {
		  var pageHeight = -1;
			if( window.innerHeight && window.scrollMaxY ) // Firefox 
			{
				pageHeight = window.innerHeight + window.scrollMaxY;
			}
			else if( document.body.scrollHeight > document.body.offsetHeight ) // all but Explorer Mac 
			{
				pageHeight = document.body.scrollHeight;
			}
			else // works in Explorer 6 Strict, Mozilla (not FF) and Safari 
			{ 
				pageHeight = document.body.offsetHeight + document.body.offsetTop; 
			}
			
			if (window.innerHeight && window.innerHeight > pageHeight) {
				pageHeight = window.innerHeight; 
			}
			
			return pageHeight;
		}
		
		this.getScrollPos = function getScrollPos() {
			var scrollPos = 0;
			if (window.pageYOffset && window.pageYOffset > 0) // IE  
			{
				scrollPos = window.pageYOffset;
			} else if (document.documentElement.scrollTop && document.documentElement.scrollTop > 0) { 
	 		  scrollPos = document.documentElement.scrollTop;
			} else {
				scrollPos = document.body.scrollTop;
			}
			return scrollPos;
		}
		
		this.getElemWidth = function getElemWidth(elem) {
			return elem.offsetWidth;
		}
		
		
		this.overlay = function overlay(dialogId) {
			var overlayDiv = document.getElementById("overlay");
			var dialogDiv = document.getElementById(dialogId);
			var bottomDiv = document.getElementById(dialogId + "-bottom");
			
			overlayDiv.style.visibility = (overlayDiv.style.visibility == "visible") ? "hidden" : "visible";
			dialogDiv.style.visibility = (dialogDiv.style.visibility == "visible") ? "hidden" : "visible";
			
			if (overlayDiv.style.visibility == "visible") {
				overlayDiv.setAttribute("onClick","Elias2.Snapshot.overlay('"+dialogId+"')");
			  this.setImageSrc(dialogId);
				overlayDiv.style.width = this.getPageWidth() + "px";
				overlayDiv.style.height = this.getPageHeight() + "px";
				var scrollPos = this.getScrollPos();	
				dialogDiv.style.top = (scrollPos + 80) + "px";
				dialogDiv.style.left = ((this.getPageWidth()  - this.getElemWidth(dialogDiv)) / 2) + "px";
				bottomDiv.style.width = (this.getElemWidth(dialogDiv) -20) + "px";
			} 
			
			this.bugfixIE6(overlayDiv.style.visibility);
						
		}
		
		this.setImageSrc = function setImageSrc(dialogId) {
  		var img = $('#' + dialogId + ' img');
  		img.attr('src',img.attr('hiddenSrc')); 
			/* ConsoleWrapper.debug("img:" + img.attr('src')); */			
		}
		

	this.bugfixIE6 = function bugfixIE6(visibility) {
		// bugfix IE6 for drowdowns
		var selectChannel = document.getElementById("SimpleSearch_doSearch_singleChannel");
		var selectSource = document.getElementById("SimpleSearch_doSearch_singleSource");
	
		if(document.all) {
			if (visibility == "visible") {
				// hide dropdowns
				if (selectChannel != null) {
					selectChannel.style.display='none';
				}
				if (selectSource != null) {
					selectSource.style.display='none';
				}
			} else {
				// show dropdowns
				if (selectChannel != null) {
					selectChannel.style.display='block';
				}
				if (selectSource != null) {
					selectSource.style.display='block';
				}
			}	
		}
	}


	}	

	
	return true;
}






function toggleDivDisplayStyle(divID) {
		displayStyle = "block";
		if (document.getElementById(divID).style.display == "block")
			{
			displayStyle = "none";
			}
	document.getElementById(divID).style.display = displayStyle
}


