/*
 *	Dokumentation global.js
 *
 *
 *
 * */


// lade daten per ajax request nach
var loadhtml = Class.create();
loadhtml.prototype = {
	initialize : function(){
		this._targetdiv = null;
		this._url = null;
		this._loaded = false;
		// default lade ergebnis unter target
		this._insertion = Insertion.Bottom;
	},
	loaddata : function(myparams) {
		var myAjax = new Ajax.Updater(
					{success: this._targetdiv}, 
					this._url, 
					{
						insertion: this._insertion,
						method: 'get', 
						parameters: myparams,
						onFailure: this.errormsg,
						onComplete: (function() {
										this.loadcomplete();
									}).bind(this)
					});
	},
	errormsg : function(response){
		alert(response);
	},
	loadcomplete : function(){
		// do nothing
	}
};

var loadxml = function(){
	this._url = null;
	this._target = null;
}
loadxml.prototype = {
	loaddata : function(myparams){
		var myAjax = new Ajax.Request(
			this._url, 
			{ 
				method: 'get',
				parameters: myparams,
				onComplete: (function(ret) {
				  this.showResponse(ret);
				}).bind(this),
				onFailure: this.errormsg
			});
		return false;

	},
	showResponse : function(originalRequest)
	{
		alert("hier samma falsch");
		//put returned XML in the textarea
		// $('result').value = originalRequest.responseText;
	},
	errormsg : function(response){
		alert(response);
	}
}

// suchbereiche ein und ausblenden
var suchbereiche = Class.create();

// loaded states:   0 nicht geladen, 1 lade, 2 geladen, 3 hidden
Object.extend(Object.extend(suchbereiche.prototype, loadhtml.prototype), {
	initialize: function(url){
		loadhtml.prototype.initialize.call(this);
		this._url = url;
		this._checked = false;
		this._loaded = 0;
	},
	loadcomplete : function(){
		if(this._checked){
			this.checkall();
		}
		this._loaded = 2;
	},
	click : function(mythis,e){
		this._targetdiv = $(mythis).parentNode;
		if(this._loaded==0){
			this._loaded = 1;
			this.loaddata.call(this,"ajax=1");
		}else if(this._loaded==1){
			// lade -- do nothing
		}else if(this._loaded==2){
			// setze alles auf hiddem
			elems = document.getElementsByClassName("jssuchbereichsub",this._targetdiv);
			Element.hide(elems[0]);
			this._loaded = 3;
		}else{
			// setze alles auf visible
			elems = document.getElementsByClassName("jssuchbereichsub",this._targetdiv);
			Element.show(elems[0]);
			this._loaded = 2;
		}

		Event.stop(e);
	},
	erw : function(mythis,e){
		this._checked = mythis.checked;
		if(this._loaded==0){
			this._targetdiv = $(mythis).parentNode;
			this._loaded = 1;
			this.loaddata.call(this,"ajax=1");
		}else{
			if(mythis.checked){
				this.checkall();
				if(this._loaded==3){
					// setze alles auf visible
					elems = document.getElementsByClassName("jssuchbereichsub",this._targetdiv);
					Element.show(elems[0]);
					this._loaded = 2;
				}
			}else{
				this.uncheckall();
			}
		}
		return true;
	},
	checkall : function(){
		elems = this._targetdiv.getElementsByTagName("INPUT");
		for(i=0;i<elems.length;i++){
			elems[i].checked = true;
		}
	},
	uncheckall : function(){
		elems = this._targetdiv.getElementsByTagName("INPUT");
		for(i=0;i<elems.length;i++){
			elems[i].checked = false;
		}
	}
});

var erweiterteoptionen  = Class.create();

Object.extend(Object.extend(erweiterteoptionen.prototype, loadhtml.prototype), {
	initialize: function(url,target,ein,aus,undoder){
		loadhtml.prototype.initialize.call(this);
		this._url = url;
		this._tmptarget = target;
		this._einblenden = ein;
		this._ausblenden = aus;
		this._undoder = undoder;
	},
	click : function(mythis,e){
		if(this._targetdiv==null)
			this._targetdiv = $(this._tmptarget);

		if(this._loaded){
			Element.hide(this._undoder);
			while(this._targetdiv.firstChild)
				Element.remove(this._targetdiv.firstChild);
			mythis.value = this._einblenden;
			this._loaded=false;

		}else{
			Element.show(this._undoder);
			loadhtml.prototype.loaddata.call(this,"ajax=1");
			mythis.value = this._ausblenden;
			this._loaded=true;
		}
		Event.stop(e);
	}
});


var suchraumresult = function(){
	this._insertion = null;
	this._cache = null;
}
suchraumresult.prototype = new loadhtml();
suchraumresult.constructor = suchraumresult;

suchraumresult.prototype.click = function(mythis,e){
	this._targetdiv = $(mythis).parentNode.parentNode;
	this._url = mythis.href;

	this._cache = this._targetdiv.innerHTML;

	loadhtml.prototype.loaddata.call(this,"ajax=1");

	Event.stop(e);
}
suchraumresult.prototype.subclick = function(mythis,e){
	this._targetdiv = $(mythis).parentNode.parentNode.parentNode;
	this._url = mythis.href;

	loadhtml.prototype.loaddata.call(this,"ajax=1");

	Event.stop(e);
}
suchraumresult.prototype.restore = function(mythis,e){
	this._targetdiv = $(mythis).parentNode.parentNode.parentNode;

	while(this._targetdiv.firstChild){
		Element.remove(this._targetdiv.firstChild);
	}
	this._targetdiv.innerHTML = this._cache;
	Event.stop(e);
}


var drilldowns = Class.create();

Object.extend(Object.extend(drilldowns.prototype, loadxml.prototype), {
	initialize: function(){
		this._target = "abc";
	},
	mehr : function(mythis,e,url){
		this._url = url;
		this._target = $(mythis).parentNode.parentNode;

		loadxml.prototype.loaddata.call(this,"ajax=1");

		Event.stop(e);
	},
	weniger : function(mythis,e){
		this._target = $(mythis).parentNode.parentNode;
		var lis = this._target.getElementsByTagName("li");
		var j = 5;
		// den letzten li immer stehen lassen
		if(lis.length <= 6){
			j = lis.length - 2;
		}
		for(var i=1;i <= j;i++){
			Element.remove(lis[lis.length-1]);
		}
		Event.stop(e);
	},
	showResponse : function(originalRequest)
	{
		var data = originalRequest.responseXML;
		var dds = data.getElementsByTagName("drilldowns")[0].getElementsByTagName("drilldown");

		// for schleife für jedes drildown element
		for(var i=0;i < dds.length;i++){
			var name = dds[i].getElementsByTagName("name")[0].firstChild.nodeValue;
			var link = dds[i].getElementsByTagName("link")[0].firstChild.nodeValue;
			var treffer = dds[i].getElementsByTagName("treffer")[0].firstChild.nodeValue;
			
			// baue ergebnis LI Element
			var newli = document.createElement("li");
			var newlink = document.createElement("a");
			newlink.appendChild(document.createTextNode(name + " (" + treffer + ")"));
			newlink.setAttribute("href",link);
			newli.appendChild(newlink);

			this._target.appendChild(newli);
	}

	var more = data.getElementsByTagName("drilldowns")[0].getElementsByTagName("more")[0].getElementsByTagName("return")[0].firstChild.nodeValue;
}
});


//	merklistenid des merklistenlinks in der linken navigation: jsmerkliste
//
//
var classmerkliste = Class.create();

Object.extend(Object.extend(classmerkliste.prototype, loadxml.prototype), {
	initialize: function(){
	},
	set : function(mythis,e,url){
		this._url = url;
		this.loaddata();
		this._mythis = $(mythis);

// 		

		this._mythis.disabled = true;
		this._mythis.href = "#";
		this._mythis.onclick = Prototype.emptyFunction;

		Element.addClassName(this._mythis,"linkstyle01_box_off");
		Element.removeClassName(this._mythis,"linkstyle01_box");

		Event.stop(e);
	},
	unset : function(){
	},
	
	showResponse : function(originalRequest)
	{
		var data = originalRequest.responseXML.getElementsByTagName("merkliste")[0];

		var treffernr = data.getElementsByTagName("treffernr")[0].firstChild.nodeValue;
		var iserror = data.getElementsByTagName("fehlercode")[0].firstChild.nodeValue;
		
		if(iserror==0){
			// kein fehler
			var datenbankid = data.getElementsByTagName("datenbankid")[0].firstChild.nodeValue;
			var anzahl = data.getElementsByTagName("anzahl")[0].firstChild.nodeValue;

			var mltag = $('jsmerkliste');

			Element.update(mltag,anzahl + ' in Merkliste');
		}else{
			// fehler
			var errortext = data.getElementsByTagName("fehlertext")[0].firstChild.nodeValue;

			var errortag = $(treffernr + '_ml_error');
			Element.show(errortag);

			Element.update(errortag,errortext);
		}

//		alert("Sie haben "  + data.getElementsByTagName("anzahl")[0].firstChild.nodeValue + " Einträge in der Merkliste");
//		Element.remove(this._mythis);

	},
	errormsg : function(response){
		alert(response);
	}
});


// für "daten werden geladen" div

var myGlobalHandlers = {
		onCreate: function(){
			Element.show('ajaxloading');
		},

		onComplete: function() {
			if(Ajax.activeRequestCount == 0){
				Element.hide('ajaxloading');
			}
		}
	};

Ajax.Responders.register(myGlobalHandlers);
