
/**
 * @author p.stenzel
 */
if (!com) 
	var com = {};
if (!com.videotaxi) 
	com.videotaxi = {};
if (!com.videotaxi.kunden) 
	com.videotaxi.kunden = {};

com.videotaxi.kunden = {
	vtid: 0,
	login_einleitung: "",
	login_ani: true,
	ajaxcall: null,
	auftragCall: null,
	done: false,
	pe: null,
	plz: "",
	targeturl: "",
	
	registerHandlers: function(){
		var self = this;
		
		var els = $$('[login=true]');
		els.each(function(el){
			el.setStyle({
				cursor: 'pointer'
			});
			el.observe('click', function(event){
				self.initLogin(el);
			})
		});
		var els = $$('[logout=true]');
		els.each(function(el){
			el.observe('click', function(event){
				self.logout();
			})
		})
		
		var els = $$('[bewertung=add]');
		els.each(function(el){
			el.observe('click', function(event){
				self.initBewertung(el, el.readAttribute('q'));
			})
		});
		
		var els = $$('[merkzettel=show]');
		els.each(function(el){
			el.observe('click', function(event){
				self.showMerkzettel(el, 'vert', el.readAttribute('q'));
			})
		});
		var els = $$('[merkzettel=add]');
		els.each(function(el){
			el.observe('click', function(event){
				self.addToMerkzettel(el, 'vert', el.readAttribute('q'));
			})
		});
		var els = $$('[merkzettel=del]');
		els.each(function(el){
			el.observe('click', function(event){
				self.deleteMerkzettel(el, 'vert', el.readAttribute('q'));
			})
		});
		
		var els = $$('[oeffnungstage=get]');
		els.each(function(el){
			el.observe('click', function(event){
				self.getOeffnungstage(el, 'vert', el.readAttribute('q'));
			})
		});
		
		var els = $$('[reservierung=show]');
		els.each(function(el){
			el.observe('click', function(event){
				self.showReservierung(el, 'vert', el.readAttribute('q'));
			})
		});
		var els = $$('[reservierung=add]');
		els.each(function(el){
			el.observe('click', function(event){
//				el.stopObserving('click');
				self.addToReservierung(el, 'vert', el.readAttribute('q'));
			})
		});
		var els = $$('[reservierung=del]');
		els.each(function(el){
			el.observe('click', function(event){
				self.addToReservierung(el, 'vert', el.readAttribute('q'));
			})
		});
		
		var els = $$('[warenkorb=show]');
		els.each(function(el){
			el.observe('click', function(event){
				self.showWarenkorb(el, 'vert', el.readAttribute('q'));
			})
		});
		var els = $$('[warenkorb=add]');
		els.each(function(el){
			el.observe('click', function(event){
				self.addToWarenkorb(el, 'vert', el.readAttribute('q'));
			})
		});
		/**
		 * Ausnahme für Warenkorb-Button auf der Aktionen-Seite
		 * @todo Eventuell müsste man das auch in der oberen Struktur zugänglich machen
		 */
		if ($('aktionen_warenkorb')) {
			var self = this;
			$('aktionen_warenkorb').observe('click', function(event){
				var artikelArr = Array();
				var targets = $$('#rightPane .target');
				var uhash = $('aktionen_warenkorb').readAttribute('q');
				targets.each(function(target){
					var artikel = target.select('[class="cover"]');
					var id = artikel[0].id.split("_")[1];
					tmp = id + "_";
					tmp += $(artikel[0].id).readAttribute("titel");
					artikelArr.push(tmp);
					if (artikelArr.length == targets.length) {
						/**
						 * @todo Richtiges Sortiment auslesen und mitgeben
						 */
						self.addMultipleToWarenkorb(artikelArr, 'neu', 'vert', uhash);
					}
				})
				com.videotaxi.aktionen.nextFreeTarget = "target_1";
			})
		}
		/**
		 * muss zuletzte geladen werden, weil, wenn keine Videothek ausgewählt ist geht finder über alles
		 */
		var els = $$('[finder=true]');
		els.each(function(el){
			el.observe('click', function(event){
				tmp = el.readAttribute('targeturl');
				if (tmp != null) {
					self.targeturl = el.readAttribute('targeturl');
				}	else	{
					self.targeturl = "";
				}
				self.initFinder(el);
			})
		});
	},
	initFinder: function(el){
		if (el.readAttribute('logintext')) 
			this.login_einleitung = el.readAttribute('logintext');
		
		var content = "<div id='headline'>" +
		"<div style='float:left;'>Filialfinder</div>" +
		"<img id='modal_closebutton' src='/images/default/icons/close_24x24.png' />" +
		"<div class='cleaner'></div>" +
		"</div>";
		content += "<div id='einleitung'>" + this.login_einleitung + "</div>";
		content += "<div id='finder_inhalt'>";
		content += "<form id=loginform method='post' action='' onsubmit='return false;'>" +
		"<table align=center style='font-size:14px;'>" +
		"<tr>" +
		"<td align=right>" +
		"Postleitzahl:" +
		"</td>" +
		"<td>" +
		"<input type=text name=plz id=plz value='' />" +
		"</td>" +
		"<td>" +
		"<input type=submit name=submit_finder id=submit_finder value='Filiale finden' class='inaktiv'/>" +
		"</td>" +
		"</tr>" +
		"<tr>" +
		"<td colspan=3>" +
		"<div class=videothek_hit id=videothek_hit></div>" +
		"<div class=videothek_liste id=videothek_liste></div>" +
		"</td>" +
		"</tr>" +
		"</table>" +
		"</form></div>";
		var mod = com.videotaxi.boxes.insertModal();
		if (mod) {
			this.showFinder(content);
		}
		else {
			//TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
			alert("Ein Fehler ist aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
		}
	},
	showFinder: function(content){
		//		alert("showFinder");
		$('modalfg_content').update(content);
		
		$('modal_closebutton').observe('click', function(){
			if (com.videotaxi.kunden.pe) 
				com.videotaxi.kunden.pe.stop();
			com.videotaxi.boxes.toggleModal(true);
		})
		this.pe = new PeriodicalExecuter(this.checkPLZInput, 0.5);
		
		com.videotaxi.boxes.toggleModal(this.login_ani);
		
	},
	initLogin: function(el){
		try {
			if (el && Object.isString(el)) {
				this.login_einleitung = el;
			}else if (el && el.readAttribute('logintext')) {
				this.login_einleitung = el.readAttribute('logintext');
			}
			else {
				this.login_einleitung = "";
			}
			if (this.vtid == 0) {
				this.login_einleitung = "Bitte gib zunächst Deine Postleitzahl ein";
				var content = "<div id='headline'>" +
				"<div style='float:left;'>Login</div>" +
				"<img id='modal_closebutton' src='/images/default/icons/close_24x24.png' />" +
				"<div class='cleaner'></div>" +
				"</div>";
				content += "<div id='einleitung'>" + this.login_einleitung + "</div>";
				content += "<div id='login_inhalt'>";
				content += "<form id=loginform method='post' action='' onsubmit='return false;'>" +
				"<input type=hidden name=videothek id=videothek value='" +
				this.vtid +
				"' />" +
				"<table align=center style='font-size:14px;'>" +
				"<tr>" +
				"<td align=right>" +
				"Postleitzahl:" +
				"</td>" +
				"<td>" +
				"<input type=text name=plz id=plz value='' />" +
				"</td>" +
				"<td>" +
				"<input type=submit name=submit_finder id=submit_finder value='Filiale finden' class='inaktiv'/>" +
				"</td>" +
				"</tr>" +
				"<tr>" +
				"<td colspan=3>" +
				"<div class=videothek_hit id=videothek_hit></div>" +
				"<div class=videothek_liste id=videothek_liste></div>" +
				"</td>" +
				"</tr>" +
				"</table>" +
				"</form></div>";
			} else {
				var content = "<div id='headline'>" +
				"<div style='float:left;'>Login</div>" +
				"<img id='modal_closebutton' src='/images/default/icons/close_24x24.png' />" +
				"<div class='cleaner'></div>" +
				"</div>";
				content += "<div id='einleitung'>" + this.login_einleitung + "</div>";
				content += "<div id='login_inhalt'>";
				content += "<form id=loginform method='post' action='' onsubmit='return false;'>" +
				"<input type=hidden name=videothek id=videothek value='" +
				this.vtid +
				"' />" +
				"<table align=center style='font-size:14px;'>" +
				"<tr>" +
				"<td align=right>" +
				"E-Mail-Adresse:" +
				"</td>" +
				"<td>" +
				"<input type=text name=email id=email />" +
				"</td>" +
				"</tr>" +
				"<tr>" +
				"<td align=right>" +
				"PIN:" +
				"</td>" +
				"<td>" +
				"<input type=password name=pass id=pass value='' /> <img id='faq_login_pin' faq_gruppe='1' mouseover='hilfe' src='/images/default/icons/help.png' title='Informationen zum Login' />" +
				"</td>" +
				"</tr>" +
				"<tr>" +
				"<td align=right></td>" +
				"<td>" +
				"<input type=submit name=login id=login value='Einloggen' />" +
				"</td>" +
				"</tr>" +
				"</table>" +
				"</form></div>";
			}

			com.videotaxi.boxes.insertModal();
			this.showLogin(content);
			
		} catch (e) {
			Utilities.bug_tracking(e, 'initLogin',1);
		}

	},
	showLogin: function(content){
		try {
			var self = this;
			if($('modalbg')){
				$('modalbg').setStyle({
					cursor: 'auto'
				});
				$('modalfg').setStyle({
					cursor: 'auto'
				});
				$('modalfg_content').update(content);
				
				if($('faq_login_pin'))com.videotaxi.hilfe.registerSingleHandler($('faq_login_pin'));
				$('modal_closebutton').observe('click', function(){
					if (com.videotaxi.kunden.pe){
						com.videotaxi.kunden.pe.stop();
					} 
					if($('olfg') && $('olfg').visible()){
						com.videotaxi.boxes.closeOverlay();
					}
					com.videotaxi.boxes.toggleModal(true);
				})
				if (!$('modalfg').visible()) {
					com.videotaxi.boxes.toggleModal(this.login_ani);
				}
				if ($('plz')) {
					//			alert("startPe");
					this.pe = new PeriodicalExecuter(this.checkPLZInput, 0.5);
				}
				else if ($('loginform')) {
					$('loginform').observe('submit', function(){
						self.login();
					});
				}
			}
		} catch (e) {
			Utilities.bug_tracking(e, 'showLogin',1);
		}

	},
	showLoading: function(el){
		if (Object.isString(el)) {
			el = $(el);
		}
		if (el) {
			var content = "<div><center>" +
			"<img src='/images/default/loading/Loading.gif' />" +
			"</center></div>";
			el.update(content);
		}
	},
	getVTListe: function(vtid){
		var id_vt_ar = new Array();
		for (i = 0; i < vtid.length; i++) {
			id_vt_ar.push(vtid[i]);
			i++;
		}
		
		$('modalbg').setStyle({
			cursor: 'wait'
		});
		$('modalfg').setStyle({
			cursor: 'wait'
		});
		var url = "http://" + location.hostname + "/" + this.vtid + "/ajax";
		
		var whereHash = new Hash();
		whereHash.set('offen', 1);
		whereHash.set('testvideothek', 0);
		
		if (vtid && vtid != "undefined") 
			whereHash.set('id_videothek', new Array(id_vt_ar, 'array'));
		var fieldHash = new Hash();
		fieldHash.set('fields', 'id_videothek,strasse,plz,ort');
		//		fieldHash.set('order_by', "plz");
		fieldHash.set('where', whereHash);
		var paramArr = new Array("videotaxi", "", "Videothek", fieldHash);
		//		alert(paramArr.inspect());
		var self = this;
		
		if (this.ajaxcall) {
			this.ajaxcall.transport.abort();
			this.ajaxcall = null;
		}
		
		this.ajaxcall = new Ajax.RPCRequest(url, {
			methodName: 'get',
			methodParams: paramArr,
			contentType: 'text/xml',
			onCreate: function(){
				self.showLoading($('videothek_liste')); //.update("<div>Liste der Videotheken wird geladen</div>");
			},
			onComplete: function(transport){
				var tmpStr = "";
				//				alert(transport.responseText);
				/**
				 * das Erweitern des Transport-Objects um das responseObject funktioniert leider im IE6 nicht,
				 * deshalb der Umweg über das Request-Objekt selbst
				 */
				var erg = self.ajaxcall.responseObject;
				
				var x = 0;
				if (erg.length > 0) {
					tmpStr += "<div>Bitte wähle eine Videothek:</div>";
				}
				/**
				 *
				 * @todo Aufbau der gefundenen Videotheken anpassen
				 */
				if (erg.length > 0) {
					$('einleitung').update("");
					$('videothek_hit').update("");
					$('videothek_liste').update("");
					var entfernung = 0;
					for (i = 0; i < vtid.length; i++) {
						tmpVTID = vtid[i];
						entfernung = vtid[++i];
						
						erg.each(function(child){
							if (tmpVTID.toString() == child['id_videothek'].toString()) {
								var tmpStr = '';
								var image = '';
								var title = '';
								if (child['id_videothek'].toString().startsWith('4')) {
									title = "Videotaxi Partner Shop";
									image = "/images/default/icons/vtps-logo.png";
								}
								else {
									title = "Videotaxi Media Store";
									image = "/images/default/icons/vtms-logo.png";
								}
								//		//						for(i=0;i<vtid.length;i++){
								//		//							if(vtid[i].toString() == child['id_videothek'].toString()){
								//		//								var id_vt = vtid[i];
								//		//								var entf = vtid[++i];
								//		//								entfernung = entf;
								//		//							}
								//		//						}
								
								x++;
								tmpStr += "<div id='" + child['id_videothek'] + "' class='list_element'>";
								if ($('finder_inhalt')) {
									tmpStr += "<div class='entfernung'>" + entfernung + " km </div>" +
									"<div class='videothek_link' id='videothek_link'>" +
									"<img src=" +
									image +
									" id='vt_icon' /> " +
									"<a href='http://" +
									location.hostname +
									"/" +
									child['id_videothek'];
									if (self.targeturl != null && self.targeturl != "") {
										tmpStr += "/"+self.targeturl+"' ";
									}	else {
										tmpStr += "/welcome' ";
									}
									tmpStr += "title='" +
									title +
									"'>" +
									child['plz'] +
									" " +
									child['ort'] +
									", " +
									child['strasse'] +
									"</a>" +
									"</div>" +
									"<div class='cleaner'></div>";
								}
								else 
									if ($('login_inhalt')) {
										tmpStr += "<div class='entfernung' id='entfernung'>" + entfernung + " km </div>" +
										"<div class='videothek_link' id='videothek_link'>" +
										"<img src=" +
										image +
										" id='vt_icon' /> " +
										"<span id='videothek_string'>" +
										child['plz'] +
										" " +
										child['ort'] +
										", " +
										child['strasse'] +
										"</span>" +
										"</div>" +
										"<div class='cleaner'></div>";
									}
								tmpStr += "</div>";
								//						alert(child['plz'].toString() +" == "+ $('plz').value.toString());
								if (child['plz'].toString() == $('plz').value.toString()) {
									tmpStr = tmpStr + "<div class='sub_head'>weitere Filialen in deiner Nähe:</div>";
									$('videothek_hit').update(tmpStr);
								}
								else {
									$('videothek_liste').insert(tmpStr);
								}
							}
						})
					}
					if ($('login_inhalt')) {
						var els = $$('[class=list_element]');
						els.each(function(el){
							el.observe('click', function(event){
								self.selectVideothek(el);
							})
						});
					}
				}
				else {
					$('einleitung').update("<font color=red>" +
					"Wir haben leider kein Videotaxi in der Nähe der Postleitzahl " +
					$('plz').value +
					" gefunden.<br />Ich schränke die Suche ein. Gesucht wird: " +
					$('plz').value.substr(0, ($('plz').value.length - 1)) +
					"</font>");
					$('plz').value = $('plz').value.substr(0, ($('plz').value.length - 1));
					if ($('plz').value.length > 0) {
						self.checkPLZInput(true);
					}
					else {
						self.getVTListe();
					}
				}
				/**
				 * @todo Automatische Suche wieder aktivieren
				 */
				//				if (tmpStr != $('videothek_liste').innerHTML) {
				//					if(tmpStr.length==0)	{
				//						$('einleitung').update(
				//							"<font color=red>"
				//							+"Wir haben leider kein Videotaxi in der Nähe der Postleitzahl "+$('plz').value
				//							+" gefunden.<br />Ich schränke die Suche ein. Gesucht wird: "
				//							+$('plz').value.substr(0,($('plz').value.length-1))
				//							+"</font>"
				//						);
				//						$('plz').value = $('plz').value.substr(0,($('plz').value.length-1));
				//						if ($('plz').value.length > 0) {
				//							self.checkPLZInput(true);
				//						}	else	{
				//							self.getVTListe();
				//						}
				//					}	else	{
				//						$('einleitung').update("");
				//						$('videothek_liste').update(tmpStr);
				//					}
				//				}
				$('modalbg').setStyle({
					cursor: 'auto'
				});
				$('modalfg').setStyle({
					cursor: 'auto'
				});
				
				$('plz').observe('change', function(){
					if (com.videotaxi.kunden.pe) {
						com.videotaxi.kunden.pe.stop();
					}
					self.pe = new PeriodicalExecuter(self.checkPLZInput, 0.5);
				})
			},
			onException: function(transport, e){
				/**
				 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
				 */
				alert("Fehler:\nBeim Abrufen der Videotheken ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
				var error = "";
				
				for (var test in e) {
					error += test + ": " + e[test] + "\n";
				}
			}
		});
	},
	getFinderListe: function(plz, max_entfernung){
		$('modalbg').setStyle({
			cursor: 'wait'
		});
		$('modalfg').setStyle({
			cursor: 'wait'
		});
		var url = "http://" + location.hostname + "/" + this.vtid + "/ajax";
		
		if (max_entfernung == "") 
			max_entfernung = 100;
		
		var whereHash = new Hash();
		whereHash.set('plzort', plz);
		whereHash.set('max_entfernung', max_entfernung);
		
		var fieldHash = new Hash();
		fieldHash.set('where', whereHash);
		var paramArr = new Array("videotaxi", "", "VideothekenFinder", fieldHash);
		
		var self = this;
		//		alert("getFinderListe: url:" + url + "\nmit plz: " + plz + "\nund Entf: " + max_entfernung);
		this.ajaxcall = new Ajax.RPCRequest(url, {
			methodName: 'get',
			methodParams: paramArr,
			contentType: 'text/xml',
			onComplete: function(transport){
				//				alert(transport.responseText);
				//				$('body').update(transport.responseText);
				var erg = self.ajaxcall.responseObject;
				if (erg != "") {
					var vtid = new Array();
					//					self.ajaxcall.inspect();
					
					erg.each(function(child){
						vtid.push(child['id_videothek']);
						vtid.push(child['entfernung']);
					})
					
					if (vtid.length > 0) {
						self.getVTListe(vtid);
					}
				}
				else {
					self.getFinderListe(plz, max_entfernung + max_entfernung);
				}
			},
			onException: function(transport, e){
				/**
				 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
				 */
				alert("Beim Abrufen der Videotheken ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
				//				for (var test in e) {
				//					alert(test+": "+e[test]);
				//				}
			}
		});
	},
	checkPLZInput: function(force){
		var plz = $('plz').value;
		var self = com.videotaxi.kunden;
		if ((plz.length == 5 || force == true) && !isNaN(plz)) {
			//			alert("check: " + plz);
			var max_entfernung = 125;
			var sub = plz.length * 20;
			max_entfernung = max_entfernung - sub;
			if (com.videotaxi.kunden.pe) 
				com.videotaxi.kunden.pe.stop();
			$('submit_finder').stopObserving('click');
			self.getFinderListe(plz, max_entfernung);
		}
		else 
			if ((plz.length > 3 || force == true) && !isNaN(plz)) {
				var max_entfernung = 125;
				var sub = plz.length * 20;
				max_entfernung = max_entfernung - sub;
				if ($('submit_finder').readAttribute('class') == 'inaktiv') {
					$('submit_finder').writeAttribute('class', 'aktiv');
				}
				$('submit_finder').stopObserving('click');
				$('submit_finder').observe('click', function(event){
					if (com.videotaxi.kunden.pe) 
						com.videotaxi.kunden.pe.stop();
					self.getFinderListe(plz, max_entfernung);
				})
			}
			else {
				if ($('submit_finder').readAttribute('class') == 'aktiv') {
					$('submit_finder').writeAttribute('class', 'inaktiv');
					$('submit_finder').stopObserving('click');
				}
			}
	},
	selectVideothek: function(el){
		var self = this;
		var vtid = el.id;
		var out = '';
		childs = el.childElements();
		if (com.videotaxi.kunden.pe) 
			com.videotaxi.kunden.pe.stop();
		
		childs.each(function(child){
			if (child.id == 'videothek_link' && child.innerHTML.strip() != '') {
				out += child.innerHTML + " ";
			}
		})
		
		$('einleitung').update(out);
		
		var content = "<div id='login_inhalt'>";
		content += "<form id=loginform method='post' action='' onsubmit='return false;'>" +
		"<input type=hidden name=videothek id=videothek value='" +
		vtid +
		"' />" +
		"<table align=center style='font-size:14px;'>" +
		"<tr>" +
		"<td align=right>" +
		"E-Mail-Adresse:" +
		"</td>" +
		"<td>" +
		"<input type=text name=email id=email />" +
		"</td>" +
		"</tr>" +
		"<tr>" +
		"<td align=right>" +
		"PIN:" +
		"</td>" +
		"<td>" +
		"<input type=password name=pass id=pass value='' />" +
		"</td>" +
		"</tr>" +
		"<tr>" +
		"<td align=right></td>" +
		"<td>" +
		"<input type=submit name=login id=login value='Einloggen' />" +
		"</td>" +
		"</tr>" +
		"</table>" +
		"</form></div>";
		$('login_inhalt').update(content);
		this.formObserver();
	},
	formObserver: function(){
		var self = this;
		$('loginform').observe('submit', function(){
			self.login();
		});
	},
	login: function(){
		//		alert("login");
		var vt = $('videothek').value;
		if (vt == 0) {
			//			alert("Bitte wähle eine Videothek");
			//			return false;
		}
		
		$('modalbg').setStyle({
			cursor: 'wait'
		});
		$('modalfg').setStyle({
			cursor: 'wait'
		});
		
		var email = $('email').value.toLowerCase();
		var pass = $('pass').value;
		//		alert("email: "+email+" pass: "+pass);
		if (email && email != '' && pass && pass != '') {
			var loginStr = email + "*" + pass;
		}
		else {
			alert("Deine Eingabe war unvollständig.\n" + "Bitte gib deine Email-Adresse und Deine PIN in die entsprechenden Felder ein.");
			this.initLogin();
			return false;
		}
		
		var url = "http://" + location.hostname + "/" + this.vtid + "/ajax";
		var whereHash = new Hash();
		whereHash.set('id_videothek', vt);
		whereHash.set('user', MD5(loginStr));
		
		var fieldHash = new Hash();
		fieldHash.set('where', whereHash);
		fieldHash.set('fields', 'uknr,vt_id,email,pin,id_kunde_wawi,vorname,nachname,geburtsdatum,kontostand,gesperrt,fsk18frei,strasse,plz,ort');
		var paramArr = new Array("videotaxi", "", "Kunden", fieldHash);
		
		//		alert(paramArr.inspect());
		
		var self = this;
		this.ajaxcall = new Ajax.RPCRequest(url, {
			methodName: 'get',
			methodParams: paramArr,
			contentType: 'text/xml',
			onCreate: function(){
				self.showLoading($('login_inhalt'));
			},
			onComplete: function(transport){
				//				alert(transport.responseText);
				if (transport.responseText && transport.responseText.include("Login fehlgeschlagen")) {
					self.initLogin("Der Login ist fehlgeschlagen. Bitte versuch es erneut");
				}
				else {
					var erg = self.ajaxcall.responseObject;
					if (erg) {
						try {
							//							alert("try");
							erg.each(function(child){
								if (Object.isArray(child)) {
									//									alert("isArray");
									child.each(function(gchild){
										if (gchild['uknr'] > 0) {
											if (document.location.href.indexOf(vt) > 0) {
												document.location.reload();
											}
											else {
												document.location = "/" + vt + "/welcome";
											}
										}
									});
									self.initLogin("Der Login ist fehlgeschlagen. Bitte versuch es erneut");
								}
								else {
									if (child['uknr'] > 0) {
										var peUser = new PeriodicalExecuter(function(){
											if ($('begruessung')) {
												peUser.stop();
												if (document.location.href.indexOf(vt) > 0) {
													document.location.reload();
												}
												else {
													document.location = "/" + vt + "/welcome";
												}
											}
											else {
												if ($('einleitung')) {
													$('einleitung').update('');
												}
												var content = '';
												if ($('login_inhalt')) {
													content += "<div style='margin:10px 0px 10px 0px;'>";
													content += "<div id='begruessung' style='float:left;font-size:12;'>";
													content += "<div style='font-weight:bold;margin-bottom:5px;'>Hallo ";
													if (child['nachname'] && child['vorname']) {
														content += child['vorname'] + " " + child['nachname'];
													}
													if (child['kontostand']) {
														content += "<br />dein Kontostand beträgt: " + child['kontostand'] + "€";
													}
													content += "</div>";
													content += "<div>viel Spass bei Videotaxi</div>";
													content += "</div>";
													content += "<div id='begruessung_verlassen' class='button_forw'>weiter zur Seite</div>";
													content += "<div class='cleaner'></div>";
													content += "</div>";
													
													$('login_inhalt').update(content);
													if ($('modal_closebutton')) {
														$('modal_closebutton').stopObserving('click');
														$('modal_closebutton').observe('click', function(){
															if (document.location.href.indexOf(vt) > 0) {
																document.location.reload();
															}
															else {
																document.location = "/" + vt + "/welcome";
															}
														})
													}
													if ($('begruessung_verlassen')) {
														$('begruessung_verlassen').observe('click', function(){
															if (document.location.href.indexOf(vt) > 0) {
																document.location.reload();
															}
															else {
																document.location = "/" + vt + "/welcome";
															}
														})
													}
												}
											}
										}, 4);
									}
									else {
										self.initLogin("Der Login ist fehlgeschlagen. Bitte versuch es erneut");
									}
								}
							})
							$('modalbg').setStyle({
								cursor: 'auto'
							});
							$('modalfg').setStyle({
								cursor: 'auto'
							});
							
						} 
						catch (e) {
							Utilities.bug_tracking(e, 'login',1);
							self.initLogin("Der Login ist fehlgeschlagen. Bitte versuch es erneut");
						}
					}
					else {
						self.initLogin("Der Login ist fehlgeschlagen. Bitte versuch es erneut");
					}
				}
				
			},
			onException: function(transport, e){
				/**
				 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
				 */
				alert("Beim Einloggen in deiner Videothek ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.\n" + e.message);
				self.initLogin("Der Login ist fehlgeschlagen. Bitte versuch es erneut");
			}
		});
		return false;
	},
	showUser: function(user){
		var content = '';
		if ($('login_inhalt')) {
			content += "Hallo " + user['vorname'] + " " + user['nachname'] + "<br />";
			content += "dein Kontostand beträgt: " + user['kontostand'] + "€<br />";
			content += "viel Spass auf Videotaxi.de";
			
			$('login_inhalt').update(content);
		}
		
	},
	logout: function(){
		var self = this;
		var content = "<div id='headline'>" +
		"<div style='float:left;'>Logout</div>" +
		"<img id='modal_closebutton' src='/images/default/icons/close_24x24.png' />" +
		"<div class='cleaner'></div>" +
		"</div>";
		content += "<div id='einleitung'>bitte einen Moment Geduld</div>";
		content += "<div id='logout_inhalt'></div>";
		
		new Ajax.Request('/logout', {
			onCreate: function(){
				var mod = com.videotaxi.boxes.insertModal();
				if (mod) {
					com.videotaxi.boxes.toggleModal(true);
					$('modalfg_content').update(content);
					self.showLoading($("logout_inhalt"));
				}
			},
			onComplete: function(transport){
				if (transport.responseText == "success") {
					document.location.reload();
				}
				else {
					alert("logout nicht Erfolgreich\n" + transport.responseText);
				}
			}
		})
	},
	showBewertung: function(content){
		var self = this;
		if ($('modalfg_content')) {
			$('modalfg_content').update(content);
			$('modal_closebutton').observe('click', function(){
				com.videotaxi.boxes.toggleModal(true);
			})
			$('bewertung_absenden').observe('click', function(){
				self.addBewertung();
			})
			com.videotaxi.boxes.toggleModal(this.login_ani);
		}
	},
	initBewertung: function(el){
		var artikelNr = el.readAttribute('artikel');
		this.katalog = false;
		if (el.readAttribute('logintext')){
			this.login_einleitung = el.readAttribute('logintext');
		}
		if(el.readAttribute('katalog')){
			this.katalog = el.readAttribute('katalog');
		}
			
		
		var content = "<div id='headline'>" +
		"<div style='float:left;'>Bewertung abgeben</div>" +
		"<img id='modal_closebutton' src='/images/default/icons/close_24x24.png' />" +
		"<div class='cleaner'></div>" +
		"</div>";
		content += "<div id='einleitung'>" + this.login_einleitung + "</div>";
		content += "<form id=bewertungsform method='post' action='' onsubmit='return false;'>" +
		"<input type='hidden' id='bewertung_artikelnr' value='" +
		artikelNr +
		"' />" +
		"<table align=center>" +
		"<tr>" +
		"<td align=right>" +
		"Bewertung:" +
		"</td>" +
		"<td>" +
		"<select name=anzahl_sterne id=anzahl_sterne>" +
		"<option value=5>5 (sehr gut)</option>" +
		"<option value=4>4 (gut)</option>" +
		"<option value=3>3 (mittelmäßig)</option>" +
		"<option value=2>2 (schlecht)</option>" +
		"<option value=1>1 (sehr schlecht)</option>" +
		"</select>" +
		"</td>" +
		"</tr>" +
		"<tr>" +
		"<td align=right valign=top>" +
		"Text: " +
		"</td>" +
		"<td>" +
		"<textarea name=bewertungstext id=bewertungstext rows=5 cols=35></textarea>" +
		"</td>" +
		"</tr>" +
		"<tr>" +
		"<td align=right></td>" +
		"<td>" +
		"<input type=submit name=bewertung_absenden id=bewertung_absenden value='Bewertung absenden' />" +
		"</td>" +
		"</tr>" +
		"</form>" +
		"</table>";
		var mod = com.videotaxi.boxes.insertModal();
		if (mod) {
			this.showBewertung(content);
		}
		else {
			//TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
			alert("Ein Fehler ist aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
		}
	},
	addBewertung: function(){
		try{
			/**
			 * @todo: Statt id_kunde_wawi eine eineindeutige Kundennummer (UKNR) verwenden
			 */
			//		alert("addBewertung");
			var url = "http://" + location.hostname + "/" + this.vtid + "/ajax_laufzeit/get_id_kunde_wawi";
			var url2 = "http://" + location.hostname + "/" + this.vtid + "/ajax";
			var id_kunde_wawi = false;
			var text = $('bewertungstext').value;
			var sterne = $('anzahl_sterne').value;
			var fieldHash = new Hash();
			var valueHash = new Hash();
			valueHash.set('vtid', this.vtid);
			valueHash.set('inhalt', text);
			valueHash.set('sterne', sterne);
			valueHash.set('artikelNr', $('bewertung_artikelnr').value);
			if(this.katalog){
				valueHash.set('katalog', this.katalog);
			}
			var self = this;
			var outer_ajaxcall = new Ajax.Request(url, {
				onComplete: function(transport){
					id_kunde_wawi = transport.responseText;
					if (!id_kunde_wawi) {
						alert("Fehler 1: Die Bewertung konnte leider nicht gespeichert werden.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
						return;
					}
					valueHash.set('kundenNr', id_kunde_wawi);
					var dataArr = new Array(valueHash);
					fieldHash.set('data', dataArr);
					var paramArr = new Array("videotaxi", "", "Artikelbewertungen", fieldHash);
					//alert(fieldHash);
					//alert(paramArr.inspect());
					inner_self = self;
					self.inner_ajaxcall = new Ajax.RPCRequest(url2, {
						methodName: 'write',
						methodParams: paramArr,
						contentType: 'text/xml',
						onComplete: function(transport){
							//						alert(transport.responseText);					
							var erg = self.inner_ajaxcall.responseObject;
							if (erg && erg.length > 0) {
								erg.each(function(child){
									if (child['Inserts'] == 1) {
										alert("Deine Bewertung wurde gespeichert.\nEs kann bis zu 24 Stunden dauern, bis deine Bewertung angezeigt wird.")
										com.videotaxi.boxes.toggleModal(true);
										return true;
									}
									if (child['Errors'].length > 0) {
										for (part in child['Errors']) {
											for (part2 in child['Errors'][part]) {
												alert("Fehler:\n" + child['Errors'][part][part2]);
												com.videotaxi.boxes.toggleModal(true);
												return true;
											}
										}
									}
								})
							}
							//						alert("Bewertung gespeichert.");
						},
						onException: function(transport, e){
							alert("Fehler 2: Die Bewertung konnte leider nicht gespeichert werden.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal." + e);
						}
					});
				},
				onException: function(transport, e){
					/**
					 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
					 */
					alert("Fehler 3: Die Bewertung konnte leider nicht gespeichert werden.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
					//alert(e.message + "\n" + e.stack);
					return;
				}
			});
		}catch(e){
			Utilities.bug_tracking(e, 'addBewertung', 3, false);
		}
	},
	showMerkzettel: function(el, orientation, uhash){
		/**
		 * @todo Die Performance des Merkzettels ist noch nicht so besonders. Hier muss noch geschraubt werden
		 */
		//TODO RSS-Feed für den Merkzettel mit Verfügbarkeits- und Preisänderungen
		var ol = com.videotaxi.boxes.insertOverlay(el, orientation);
		var content = "<div id='headline'>" +
		"<div style='float:left;'>Merkzettel</div>" +
		"<img id='overlay_closebutton' src='/images/default/icons/close_24x24.png' />" +
		"<div class='cleaner'></div>" +
		"</div>" +
		"<div class='cleaner'></div>" +
		"<div id='merkzettel_inhalt'>";
		+"<div id='einleitung_text'>Merkzettel leeren</div>" +
		"<div id='einleitung_button'>" +
		"<img q=" +
		uhash +
		"' merkzettel='del' src='/images/default/icons/bin.png' id='merkzettel_all' />" +
		"</div>" +
		"</div>";
		$('olfg_content').update(content);
		content = '';
		com.videotaxi.boxes.openOverlay(true, orientation, 300);
		if ($('merkzettel_inhalt')) 
			this.showLoading($('merkzettel_inhalt'));
		
		var url = "http://" + location.hostname + "/" + this.vtid + "/ajax";
		var whereHash = new Hash();
		whereHash.set('id_videothek', this.vtid);
		whereHash.set('user', uhash);
		
		var fieldHash = new Hash();
		fieldHash.set('where', whereHash);
		var paramArr = new Array("videotaxi", "", "Merkzettel", fieldHash);
		
		var self = this;
		try {
			this.ajaxcall = new Ajax.RPCRequest(url, {
				methodName: 'get',
				methodParams: paramArr,
				contentType: 'text/xml',
				onComplete: function(transport){
					var erg = self.ajaxcall.responseObject;
					if (erg && erg.length > 0) {
						erg.each(function(child){
							var hatTitel = true;
							for (var part in child) {
								if (child[part].toString().strip() == '') {
									hatTitel=false;
//									content = "Auf deinem Merkzettel stehen noch keine Artikel.<br />" +
//									"Wähle Artikel für deinen Merkzettel aus in dem Du in den Listen oder den Artikelseiten auf das Symbol klickst.<br />" +
//									"<center><img src='/images/default/icons/icon-merkzettel.png' /></center>";
//									ergebnis = false; //continue;
								}
							}
							if (hatTitel) {
								if (Object.isArray(child)) {
									child.each(function(gchild){
										//								titel = gchild['titel'];
										titel = gchild['titel'].toString().replace(/\+/g, "%20");
										titel = decodeURIComponent(titel);
										
										content += "<div id='merkzettel_artikel_" + gchild['artikelNr'] + "'>" +
										"<div style='float: left;'>" +
										"<a href='/" +
										self.vtid +
										"/details/index/" +
										gchild['artikelNr'] +
										"'>" +
										titel +
										"</a>" +
										"</div>" +
										"<div style='float: right;'>" +
										"<img id='merkzettel_" +
										gchild['artikelNr'] +
										"' class='right' src='/images/default/icons/bin.png' style='cursor: pointer;' merkzettel='del' q='" +
										uhash +
										"'/>" +
										"</div>" +
										"</div>" +
										"<div class='cleaner'></div>";
										//								"<a href='/" + self.vtid + "/details/index/" + gchild['artikelNr'] + "'>" +
										//								gchild['titel'] +
										//								"</a>" +
										//								"<br />";
									})
								}
								else {
									titel = child['titel'];
									titel = child['titel'].toString().replace(/\+/g, "%20");
									titel = decodeURIComponent(titel);
									content += "<div id='merkzettel_artikel_" + child['artikelNr'] + "'>" +
									"<div style='float: left;'>" +
									"<a href='/" +
									self.vtid +
									"/details/index/" +
									child['artikelNr'] +
									"'>" +
									titel +
									"  " +
									"</a>" +
									"</div>" +
									"<div style='float: right;'>" +
									"<img id='merkzettel_" +
									child['artikelNr'] +
									"' class='right' src='/images/default/icons/bin.png' style='cursor: pointer;' merkzettel='del' q='" +
									uhash +
									"'/>" +
									"</div>" +
									"</div>" +
									"<div class='cleaner'></div>";
								}
							}							
						})
					}
					else {
						content = "Auf deinem Merkzettel stehen noch keine Artikel.<br />" +
						"Wähle Artikel für deinen Merkzettel aus in dem Du in den Listen oder den Artikelseiten auf das Symbol klickst.<br />" +
						"<center><img  src='/images/default/icons/icon-merkzettel.png' /></center>";
					}
					if ($('merkzettel_inhalt')) 
						$('merkzettel_inhalt').update(content);
					var els = $$('[merkzettel=del]');
					els.each(function(el){
						el.observe('click', function(event){
							self.deleteMerkzettel(el, 'vert', el.readAttribute('q'));
						})
					});
					if ($('overlay_closebutton')) {
						$('overlay_closebutton').observe('click', function(){
							com.videotaxi.boxes.closeOverlay(true, orientation)
						})
					}
				},
				onException: function(transport, e){
					/**
					 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
					 */
					alert("Beim Abrufen des Merkzettels ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
					alert(e.message + "\n" + e.stack);
				}
			});
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'showMerkzettel',3);
		}
	},
	addToMerkzettel: function(el, orientation, uhash){
		var artikelNr = el.id.split("_")[1];
		var titel = el.readAttribute('titel');
		//		alert(artikelNr);
		el = $('merkzetteldiv');
		if ($('pagination_container')) {
			cat = 'artikelliste';
		}
		else {
			cat = 'details';
		}
		var ol = com.videotaxi.boxes.insertOverlay(el, orientation);
		
		var url = "http://" + location.hostname + "/" + this.vtid + "/ajax";
		var whereHash = new Hash();
		whereHash.set('id_videothek', this.vtid);
		whereHash.set('user', uhash);
		
		var valueHash = new Hash();
		valueHash.set('artikelNr', artikelNr);
		var dataArray = new Array();
		dataArray.push(valueHash);
		
		var fieldHash = new Hash();
		fieldHash.set('where', whereHash);
		fieldHash.set('data', dataArray);
		var paramArr = new Array("videotaxi", "", "Merkzettel", fieldHash);
		
		var self = this;
		try{
			this.ajaxcall = new Ajax.RPCRequest(url, {
				methodName: 'write',
				methodParams: paramArr,
				contentType: 'text/xml',
				onComplete: function(transport){
					var erg = self.ajaxcall.responseObject;
					Utilities.trackEvent(cat, 'Merkzettel hinzufügen', titel);
					self.showMerkzettel(el, orientation, uhash);
				},
				onException: function(transport, e){
					/**
					 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
					 */
					alert("Beim Abrufen des Merkzettels ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
				}
			});	
		} catch(e){
			Utilities.bug_tracking(e, 'addToMerkzettel',3);
		}
		
	},
	deleteMerkzettel: function(el, orientation, uhash){
		//		alert('delete');
		var artikelNr = el.id.split("_")[1];
		var titel = el.readAttribute('titel');
		if ($('pagination_container')) {
			cat = 'artikelliste';
		}
		else {
			cat = 'details';
		}
		
		el = $('merkzetteldiv');
		var ol = com.videotaxi.boxes.insertOverlay(el, orientation);
		
		var url = "http://" + location.hostname + "/" + this.vtid + "/ajax";
		
		var whereHash = new Hash();
		whereHash.set('id_videothek', this.vtid);
		whereHash.set('user', uhash);
		whereHash.set('artikelNr', artikelNr);
		
		var fieldHash = new Hash();
		fieldHash.set('where', whereHash);
		fieldHash.set('delete', true);
		
		var paramArr = new Array("videotaxi", "", "Merkzettel", fieldHash);
		//		alert(paramArr.inspect());
		try {
			var self = this;
			this.ajaxcall = new Ajax.RPCRequest(url, {
				methodName: 'write',
				methodParams: paramArr,
				contentType: 'text/xml',
				onComplete: function(transport){
					Utilities.trackEvent(cat, 'Merkzettel entfernen', titel);
					var erg = self.ajaxcall.responseObject;
					self.showMerkzettel(el, orientation, uhash);
				},
				onException: function(transport, e){
					/**
					 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
					 */
					alert("Beim Abrufen des Merkzettels ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
					alert(e.message);
				}
			});
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'deleteMerkzettel',3);
		}
		
	},
	getOeffnungstage: function(el, orientation, uhash){
		var self = this;
		var content = "<div id='headline'>" +
		"<div style='float:left;'>Reservierung</div>" +
		"<img id='modal_closebutton' src='/images/default/icons/close_24x24.png' />" +
		"<div class='cleaner'></div>" +
		"</div>";
		content += "<div id='einleitung'>bitte einen Moment Geduld</div>";
		content += "<div id='reservierung_inhalt'></div>";
		var mod = com.videotaxi.boxes.insertModal();
		if (mod) {
			com.videotaxi.boxes.toggleModal(true);
			$('modalfg_content').update(content);
			this.showLoading($('reservierung_inhalt'));
			$('modal_closebutton').observe('click', function(){
				com.videotaxi.boxes.toggleModal(true);
			})
		}
		try {
			var ol = com.videotaxi.boxes.insertOverlay($('reservierungdiv'), orientation);
			
			var url = "http://" + location.hostname + "/" + this.vtid + "/ajax_laufzeit/reservierungstage";
			var self = this;
			
			this.ajaxcall = new Ajax.Request(url, {
				onComplete: function(transport){
					$('einleitung').update("wähle den Tag der Reservierung");
					content = transport.responseText;
					$('reservierung_inhalt').update(transport.responseText);
					if ($('loginform')) {
						$('loginform').observe('submit', function(){
							if (mod) 
								com.videotaxi.boxes.toggleModal(true);
							self.addToReservierung(el, orientation, uhash);
						})
					}
					
				},
				onException: function(transport, e){
					/**
					 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
					 */
					alert("Beim Abrufen der Oeffnungstage ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
					alert(e.message + "\n" + e.stack);
				}
			});
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'getOeffnungstage',1);
		}
		
	},
	showReservierung: function(el, orientation, uhash){
		try {
			var ol = com.videotaxi.boxes.insertOverlay(el, orientation);
			var content = "<div id='headline'>" +
			"<div style='float:left;'>Reservierung</div>" +
			"<img id='overlay_closebutton' src='/images/default/icons/close_24x24.png' />" +
			"<div class='cleaner'></div>" +
			"</div>" +
			"<div class='cleaner'></div>" +
			"<div id='reservierungen_inhalt'></div>";
			$('olfg_content').update(content);
			com.videotaxi.boxes.openOverlay(true, orientation, 300);
			if ($('reservierungen_inhalt')) 
				this.showLoading($('reservierungen_inhalt'));
			
			var url = "http://" + location.hostname + "/" + this.vtid + "/ajax_cookie/show/reservierung/";
			var self = this;
			this.ajaxcall = new Ajax.Request(url, {
				onComplete: function(transport){
					//					alert("showReserv:"+transport.responseText);
					if ($('reservierungen_inhalt')) 
						$('reservierungen_inhalt').update(transport.responseText.sub('ERROR: ',''));
					var els = $$('[reservierung=del]');
					els.each(function(el){
						el.observe('click', function(event){
							self.deleteReservierung(el, 'vert', el.readAttribute('q'));
						})
					});
					var els = $$('img[reservierung=alter]');
					els.each(function(el){
						el.observe('click', function(event){
							self.alterReservierung(el, 'vert', el.readAttribute('q'));
						})
					});
					var els = $$('[class=show_auftrag]');
					els.each(function(el){
						if(el.readAttribute('login') == 'true'){
							el.observe('click', function(event){
								self.initLogin(el);
							})
						}
					});
					if($('olfg')){
						var els = $('olfg').select('[id=reservierung_laden]');
						if (els.length > 0) {
							els.each(function(el){
								el.observe('click', function(event){
//									var kasse = new Kasse();
									Kasse.initAuftrag(el, 'vert', el.readAttribute('q'));
								});
							});
						}
					}
					if ($('overlay_closebutton')) {
						$('overlay_closebutton').observe('click', function(){
							com.videotaxi.boxes.closeOverlay(true, orientation)
						})
					}
					
					if ($('button_back_overlay')) {
						$('button_back_overlay').observe('click', function(){
							com.videotaxi.boxes.closeOverlay(true, orientation)
						})
					}
				},
				onException: function(transport, e){
					/**
					 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
					 */
					alert("Beim Abrufen der Reservierungen ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
				}
			});
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'showReservierung',1);
		}
	},
	addToReservierung: function(el, orientation, uhash){
		try {
			if ($('reservierungs_tag')) {
				var day = $('reservierungs_tag').value;
			}
			else {
				var day = el.readAttribute('reservierungs_tag');
			}
			//			day = (daystring.split("+")[2] + "-" + daystring.split("+")[3]).replace(/\./g,"");
			if ($('pagination_container')) {
				cat = 'artikelliste';
			}
			else {
				cat = 'details';
			}
			var artikelNr = el.id.split("_")[1];
			var titel = el.readAttribute('titel');
//			titel = titel.gsub('/', '-');
//			titel = encodeURIComponent(titel);
//			titel = titel.replace(/%20/g, "+");
			var sortiment = el.readAttribute('sortiment');
			
			var ol = com.videotaxi.boxes.insertOverlay($('reservierungdiv'), orientation);
			
			var url = "http://" + location.hostname + "/" + this.vtid + "/ajax_cookie/add/reservierung/" + artikelNr + "/verleih/" + day;
			
			var self = this;
			this.ajaxcall = new Ajax.Request(url, {
				onComplete: function(transport){
					Utilities.trackEvent(cat, 'Reservierung hinzufügen', titel);
					self.showReservierung($('reservierungdiv'), orientation, uhash);
				},
				onException: function(transport, e){
					/**
					 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
					 */
					alert("Beim Hinzufügen zu den Reservierungen ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
				}
			});
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'addToReservierung',1);
		}
	},
	deleteReservierung: function(el, orientation, uhash){
		try {
			var artikelNr = el.id.split("_")[1];
			if (artikelNr == 'all' && !confirm("Willst Du wirklich alle Artikel aus der Reservierungsliste löschen?")) {
				return;
			}
			var sortiment = el.readAttribute('sortiment');
			var day = el.readAttribute('day');
			var titel = el.readAttribute('titel');
			var ol = com.videotaxi.boxes.insertOverlay($('reservierungdiv'), orientation);
			if ($('pagination_container')) {
				cat = 'artikelliste';
			}
			else {
				cat = 'details';
			}
			
			var url = "http://" + location.hostname + "/" + this.vtid + "/ajax_cookie/delete/reservierung/" + artikelNr + "/" + sortiment + "/" + day;
			
			var self = this;
			this.ajaxcall = new Ajax.Request(url, {
				onComplete: function(transport){
					var erg = transport.responseText;
					Utilities.trackEvent(cat, 'Reservierung entfernen', titel);
					self.showReservierung($('reservierungdiv'), orientation, uhash);
				},
				onException: function(transport, e){
					/**
					 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
					 */
					alert("Beim Löschen aus der Einkaufsliste ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal. \n" + transport.responseText);
				}
			});
			
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'deleteReservierung',1);
		}
	},
	showWarenkorb: function(el, orientation, uhash){
		try {
			var ol = com.videotaxi.boxes.insertOverlay(el, orientation);
			var content = "<div id='headline'>" +
			"<div style='float:left;'>Einkaufsliste</div>" +
			"<img id='overlay_closebutton' src='/images/default/icons/cross.png' />" +
			"<div class='cleaner'></div>" +
			"</div>" +
			"<div class='cleaner'></div>" +
			"<div id='warenkorb_inhalt'></div>";
			$('olfg_content').update(content);
			com.videotaxi.boxes.openOverlay(true, orientation, 300);
			if ($('warenkorb_inhalt')) 
				this.showLoading($('warenkorb_inhalt'));
			var url = "http://" + location.hostname + "/" + this.vtid + "/ajax_cookie/show/warenkorb/";
			var self = this;
			this.ajaxcall = new Ajax.Request(url, {
				onComplete: function(transport){
					if ($('warenkorb_inhalt')) {
						$('warenkorb_inhalt').update(transport.responseText.sub('ERROR: ',''));
					}
					var els = $$('[warenkorb=del]');
					els.each(function(el){
						el.observe('click', function(event){
							self.deleteWarenkorb(el, 'vert', el.readAttribute('q'));
						})
					});
					var els = $$('img[warenkorb=alter]');
					els.each(function(el){
						el.observe('click', function(event){
							self.alterWarenkorb(el, 'vert', el.readAttribute('q'));
						})
					});
					var els = $$('[class=show_auftrag]');
					els.each(function(el){
						if(el.readAttribute('login') == 'true'){
							el.observe('click', function(event){
								self.initLogin(el);
							})
						}
					});
					if($('olfg')){
						var els = $('olfg').select('[id=warenkorb_laden]');
						if (els.length > 0) {
							els.each(function(el){
								el.observe('click', function(event){
//									var kasse = new Kasse();
									Kasse.initAuftrag(el, 'vert', el.readAttribute('q'));
								});
							});
						}
					}
				
					if ($('button_back_overlay')) {
						$('button_back_overlay').observe('click', function(){
							com.videotaxi.boxes.closeOverlay(true, orientation)
						})
					}
				},
				onException: function(transport, e){
					/**
					 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
					 */
					alert("Beim Abrufen der Einkaufsliste ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
					alert(e.message + "\n" + e.stack);
				}
			});
			if ($('overlay_closebutton')) {
				$('overlay_closebutton').observe('click', function(){
					com.videotaxi.boxes.closeOverlay(true, orientation)
				})
			}
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'showWarenkorb',1);
		}
	},
	addToWarenkorb: function(el, orientation, uhash){
		try {
			var artikelNr = el.id.split("_")[1];
			var titel = el.readAttribute('titel');
//			titel = encodeURIComponent(titel);
//			titel = titel.replace(/%20/g, "+");
			var sortiment = el.readAttribute('sortiment');
			if ($('pagination_container')) {
				cat = 'artikelliste';
			}
			else {
				cat = 'details';
			}
			
			var ol = com.videotaxi.boxes.insertOverlay($('warenkorbdiv'), orientation);
			
			var url = "http://" + location.hostname + "/" + this.vtid + "/ajax_cookie/add/warenkorb/" + artikelNr + "/" + sortiment;
			
			if(sortiment == 'hustler'){
				titel_split = titel.split("_");
				groesse = titel_split[(titel_split.length -1)];
				farbe = titel_split[(titel_split.length - 2)];
				url = url + "/" + farbe + "/" + groesse;
			}
			
			var self = this;
			this.ajaxcall = new Ajax.Request(url, {
				onComplete: function(transport){
					var erg = transport.responseText;
					if(erg.startsWith('ERROR: ')){
						Utilities.bug_tracking(erg.sub('ERROR: ',''), 'addToWarenkorb',4);
						self.showWarenkorb($('warenkorbdiv'), orientation, uhash);
						return false;
					}
					Utilities.trackEvent(cat, 'Warenkorb hinzufügen', titel);
					self.showWarenkorb($('warenkorbdiv'), orientation, uhash);
				},
				onException: function(transport, e){
					Utilities.bug_tracking(e, 'addToWarenkorb',1);
					/**
					 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
					 */
					alert("Beim Hinzufügen in die Einkaufsliste ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
				}
			});
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'addToWarenkorb',1);
		}
	},
	addMultipleToWarenkorb: function(artikelArr, sortiment, orientation, uhash){
		try {
			var x = 0;
			var self = this;
			if ($('pagination_container')) {
				cat = 'artikelliste';
			}
			else {
				cat = 'details';
			}
			artikelArr.each(function(artikel){
				var artikelSplit = artikel.split("_");
				var artikelNr = artikelSplit[0];
				var titel = artikelSplit[1];
				Utilities.trackEvent(cat, 'Warenkorb hinzufügen', titel);
//				titel = encodeURIComponent(titel);
//				titel = titel.replace(/%20/g, "+")
				
				var ol = com.videotaxi.boxes.insertOverlay($('warenkorbdiv'), orientation);
				
				var url = "http://" + location.hostname + "/" + self.vtid + "/ajax_cookie/add/warenkorb/" + artikelNr + "/" + sortiment;
				
				self.ajaxcall = new Ajax.Request(url, {
					asynchronous: false,
					onComplete: function(transport){
						x++;
						if (x == artikelArr.length) {
							self.showWarenkorb($('warenkorbdiv'), orientation, uhash);
							var targets = $$('#rightPane .target');
							targets.each(function(target){
								target.update("");
							})
						}
					},
					onException: function(transport, e){
						/**
						 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
						 */
						alert("Beim Hinzufügen in die Einkaufsliste ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
					}
				});
			});
			
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'addMultipleToWarenkorb',2);
		}
	},
	alterWarenkorb: function(el, orientation, uhash){
		try {
			var artikelNr = el.id.split("_")[1];
			var sortiment = el.readAttribute('sortiment');
			var count = el.readAttribute('count');
			var titel = el.readAttribute('titel');
			if ($('pagination_container')) {
				var cat = 'artikelliste';
			}
			else {
				var cat = 'details';
			}
			var ol = com.videotaxi.boxes.insertOverlay($('warenkorbdiv'), orientation);
			var url = "http://" + location.hostname + "/" + this.vtid + "/ajax_cookie/alter/warenkorb/" + artikelNr + "/" + sortiment + "/" + count;
			//		alert('addWarenkorb try: '+url);
			
			var self = this;
			this.ajaxcall = new Ajax.Request(url, {
				onComplete: function(transport){
					var erg = transport.responseText;
					if(erg.startsWith('ERROR: ')){
						Utilities.bug_tracking(erg.sub('ERROR: ',''), 'alterWarenkorb',4);
						return false;
					}else{
						Utilities.trackEvent(cat, 'Warenkorb ändern', titel);
						
						if ($('modalfg') && $('modalfg').visible()) {
//							var kasse = new Kasse();
							Kasse.initAuftrag(el, 'vert', uhash);
						}else{
							self.showWarenkorb($('warenkorbdiv'), orientation, uhash);
						}
					}
				},
				onException: function(transport, e){
					/**
					 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
					 */
					throw "Beim Ändern der Einkaufsliste ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.";
				}
			});
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'alterWarenkorb',2);
		}
	},
	deleteWarenkorb: function(el, orientation, uhash){
		try {
			var artikelNr = el.id.split("_")[1];
			var titel = el.readAttribute('titel');
			if ($('pagination_container')) {
				var cat = 'artikelliste';
			}
			else {
				var cat = 'details';
			}
			if (artikelNr == 'all' && !confirm("Willst Du wirklich alle Artikel aus der Einkaufsliste löschen?")) {
				return;
			}
			var sortiment = el.readAttribute('sortiment');
			var ol = com.videotaxi.boxes.insertOverlay($('warenkorbdiv'), orientation);
			var url = "http://" + location.hostname + "/" + this.vtid + "/ajax_cookie/delete/warenkorb/" + artikelNr + "/" + sortiment;
			
			var self = this;
			this.ajaxcall = new Ajax.Request(url, {
				onComplete: function(transport){
					var erg = transport.responseText;
					Utilities.trackEvent(cat, 'Warenkorb entfernen', titel);
					if ($('modalfg') && $('modalfg').visible()) {
//						var kasse = new Kasse();
						Kasse.initAuftrag(el, 'vert', uhash);
					}else{
						self.showWarenkorb($('warenkorbdiv'), orientation, uhash);
					}
				},
				onException: function(transport, e){
					/**
					 * @TODO Bessere Fehlermeldung. Globale Methode zur Fehlerausgabe?
					 */
					throw "Beim Löschen aus der Einkaufsliste ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal. \n" + transport.responseText;
				}
			});
			
			//			$('warenkorb_artikel_'+artikelNr).remove();		
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'deleteWarenkorb',2);
		}
	}
}
