/**
 * @author f.deeg
 */

function Kasse(){
}
Kasse.initAuftrag = function(el, orientation, uhash){
//	Utilities.console_log("initAuftrag  um "+new Date().getSeconds()+" "+new Date().getMilliseconds());
//	Utilities.console_log("initAuftrag  mit el "+el+" uhash "+uhash);
	try {
		if ($('overlay_closebutton')) {
			if ($('olfg') && $('olfg').visible()) {
				com.videotaxi.boxes.closeOverlay(true, orientation);
			}
		}
		
		var self = new Kasse_obj;
		self.uhash = uhash;
		
		var controller;
		var cat;
		if ($('pagination_container')) {
			cat = 'artikelliste';
		}
		else {
			cat = 'details';
		}

		if (el.id) {
			controller = el.id.split("_")[0];
		}
		else {
			var els = $$('[class=show_auftrag]');
			els.each(function(el){
				controller = el.id.split("_")[0];
			})
		}
		self.controller = controller;
		var content = "<div id='headline'>" +
		"<div style='float:left;'>Auftrag ausführen</div>" +
		"<img id='modal_closebutton' src='"+Utilities.theme_images+"content/buttons/cross.png' />" +
		"<div class='clear'></div>" +
		"</div>";
		content += "<div id='einleitung'>" + com.videotaxi.kunden.login_einleitung + "</div>";
		content += "<div id='auftrag_inhalt'></div>";
		if (!$('modalfg_content')) {
			var mod = com.videotaxi.boxes.insertModal();
		}
		if ($('modalfg_content')) {
			$('modalfg_content').update(content);
			if (!$('modalfg').visible()){
				com.videotaxi.boxes.toggleModal(com.videotaxi.kunden.login_ani);
			}
			Utilities.showLoading($('auftrag_inhalt'));
			var url = "http://" + location.hostname + "/" + com.videotaxi.kunden.vtid + "/" + controller + "/index";
			var ajaxCall = new Ajax.Request(url, {
				asynchronous: false,
				onCreate: function(transport){
					Utilities.showLoading($('auftrag_inhalt'));
				},
				onComplete: function(transport){
					Utilities.trackEvent(cat, 'Auftrag ausführen', controller);
					self.showAuftrag(transport.responseText);
					/**
					 * Bitte darauf achten, das diese Zeilen DRINNEN BLEIBEN, 
					 * UND NICHT GELÖSCHT WERDEN BEI NEUER VERSION!!!!!111!!!!eins!!elf (ist jetzt schon 2x passiert...)
					 * @author j.rodenwald 26.04.2010
					 */
					var viewporthoehe = document.viewport.getHeight() - 50;
					var max_hoehe = viewporthoehe + "px"; // zahl + px muss vor setStyle zusammengesetzt werden
					$('auftrag_inhalt').setStyle({
						maxHeight: max_hoehe
					});
					/**
					 * ab hier darf wieder geändert werden.
					 * @author j.rodenwald
					 */
				},
				onException: function(transport, e){
					throw "Beim Abrufen der Reservierungen ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.\n";
				}
			});
		}
		else {
			alert("Ein Fehler ist aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.");
		}
	} 
	catch (e) {
		Utilities.bug_tracking(e, 'initAuftrag',1);
	}
}
var Kasse_obj = Class.create({
	initialize: function(){
		try {
			this.rueckgabedatum = new Array;
			this.terminwunsch = '';
			this.mr_peterson = new Mr_Peterson;
		} catch (e) {
			Utilities.bug_tracking(e, 'initializeKasse',1);
		}
	},
	paypalzahlung: function(){
		if ($('button_forw')) {
			$('button_forw').observe('click', function(){
				$('button_forw').stopObserving('click');
				self.addAuftrag();
			})
		}
	},
	countPays: function(from, to){
		try {
			var url = "http://" + location.hostname + "/" + com.videotaxi.kunden.vtid + "/ajax_countdays/count_pay/" + from + "/" + to;
			var tage;
			var self = this;
			var countPaysAjax = new Ajax.Request(url, {
				asynchronous: false,
				onComplete: function(transport){
					tage = transport.responseText;
				},
				onException: function(transport, e){
					alert(e.message + "\n" + e.stack);
				}
			});
			return tage;
		} catch (e) {
			Utilities.bug_tracking(e, 'countPays',1);
		}
	},
	getControllerName: function(){
		try{
			controller = this.controller;
			var cont_vars;
			var els = $$('[class=show_auftrag]');
			if ($('auftrag_inhalt')) {
				cont_vars = $('auftrag_inhalt').select('div[id=cont_vars]');
			}
			if(cont_vars.length > 0){
				cont_vars.each(function(el){
					controller = el.readAttribute('controller');
				});
				return controller
			}else if(els.length > 0){
				els.each(function(el){
					controller = el.id.split("_")[0];
				})
				return controller;
			}else if(controller != ''){
				return controller;
			}else{
				Utilities.bug_tracking('kein Controller gefunden', 'getControllerName',2)
			}
			
		}catch(e){
			Utilities.bug_tracking(e, 'getControllerName',1);
		}
	},
	getUhash: function(){
		try{
			return this.uhash;
		}catch(e){
			Utilities.bug_tracking(e, 'getUhash',2);
		}
	},
	isVorbestellung: function(){
		try{
			if(this.getControllerName() === 'warenkorb'){
				if ($('auftrag_inhalt')) {
					var head_con = $('auftrag_inhalt').select('[class=sortiment_head]');
					if(head_con.length > 0){
						head_con.each(function(el){
//							day = el.getAttribute('day');
							if (['vorbestellung_gebraucht'].include(el.getAttribute('sortiment'))) {
								throw true;
							}else{
								return false;
							}
						});
					}else{
						return false;
					}
				}else{
					return false;
				}
			}else{
				return false;
			}
		}catch(e){
			if(e === true){
				return e;
			}
			Utilities.bug_tracking(e, 'isVorbestellung',2);
		}
	},
	isVorbestellungOnly: function(){
		try{
			if(this.getControllerName() === 'warenkorb'){
				if ($('auftrag_inhalt')) {
					var head_con = $('auftrag_inhalt').select('[class=sortiment_head]');
					if(head_con.length == 1){
						head_con.each(function(el){
							if (['vorbestellung'].include(el.getAttribute('sortiment'))) {
								throw true;
							}else{
								return false;
							}
						});
					}else{
						return false;
					}
				}else{
					return false;
				}
			}else{
				return false;
			}
		}catch(e){
			if(e === true){
				return e;
			}
			Utilities.bug_tracking(e, 'isVorbestellungOnly',2);
		}
	},
	isBeschaffungOnly: function(){
		try{
			if(this.getControllerName() === 'warenkorb'){
				if ($('auftrag_inhalt')) {
					var head_con = $('auftrag_inhalt').select('[class=sortiment_head]');
					if(head_con.length == 1){
						head_con.each(function(el){
							if (['beschaffung'].include(el.getAttribute('sortiment'))) {
								throw true;
							}else{
								return false;
							}
						});
					}else{
						return false;
					}
				}else{
					return false;
				}
			}else{
				return false;
			}
		}catch(e){
			if(e === true){
				return e;
			}
			Utilities.bug_tracking(e, 'isBeschaffungOnly',2);
		}
	},
	isHustlerOnly: function(){
		try{
			var isHustler = false;
			if(this.getControllerName() === 'warenkorb'){
				if ($('auftrag_inhalt')) {
					var head_con = $('auftrag_inhalt').select('[class=sortiment_head]');
					if(head_con.length == 1){
						head_con.each(function(el){
							if (['hustler'].include(el.getAttribute('sortiment'))) {
								if($('form_')){
									$('form_').remove();
								}
								throw true;
							}else{
								return false;
							}
						});
					}else{
						return false;
					}
				}else{
					return false;
				}
			}else{
				return false;
			}
		}catch(e){
			if(e === true){
				return e;
			}
			Utilities.bug_tracking(e, 'isHustlerOnly',2);
		}
	},
	isPayPal: function(){
		var isHustler=false;
		var isVorbestellung=false;
		var isBeschaffung=false;
		
		try{
			if(this.isVorbestellungOnly() || this.isHustlerOnly() || this.isBeschaffungOnly()){
				return true;
			}
			if(this.getControllerName() === 'warenkorb'){
				if ($('auftrag_inhalt')) {
					var head_con = $('auftrag_inhalt').select('[class=sortiment_head]');
					if(head_con.length == 2){
						head_con.each(function(el){
							if (['hustler'].include(el.getAttribute('sortiment'))) {
								isHustler = true;
							}else if(['vorbestellung'].include(el.getAttribute('sortiment'))){
								isVorbestellung = true;
							}else if(['beschaffung'].include(el.getAttribute('sortiment'))){
								isBeschaffung = true;
							}
						});
						if(isHustler && isVorbestellung && isBeschaffung){
							throw true;
						}
						return false;
					}else{
						return false;
					}
				}else{
					return false;
				}
			}else{
				return false;
			}
		}catch(e){
			if(e === true){
				return e;
			}
			Utilities.bug_tracking(e, 'isPayPal',2);
		}
	},
	registerCheckAuftrag: function(){
//		Utilities.console_log("registerCheckAuftrag  um "+new Date().getSeconds()+" "+new Date().getMilliseconds());
		if ($('button_check')) {
			var controller = this.getControllerName();
			var uhash = this.getUhash();
			try {
				var self = this;
				$('button_check').observe('click', function(){
					try {
						var gesamtContainer = $$('[class=sortiment_rahmen]');
						gesamtContainer.each(function(cont){
							var day = '';
							if (cont.select('[class=sortiment_head]')) {
								var head_con = cont.select('[class=sortiment_head]');
								head_con.each(function(el){
									day = el.getAttribute('day');
								});
							}
							var formular;
							(cont && cont.select('[class=formular_rahmen]').length > 0) ? formular = cont.select('[class=formular_rahmen]') : formular = $$('[class=formular_rahmen]');
							formular.each(function(form){
								var formAltLA = form.select('[class=alt_la_container]');
								formAltLA.each(function(alt_LA_cont){
									alt_LA_fields = alt_LA_cont.select('input', 'select');
									alt_LA_fields.each(function(alt_LA_field){
										if (alt_LA_field.value == '') {
											throw "Alle Felder der alternativen Lieferadresse müssen ausgefüllt sein.";
										};
									});
								});
							});
						});
						$('button_check').stopObserving('click');
						self.addAuftrag();
					} 
					catch (e) {
						Utilities.bug_tracking(e, 'registerCheckAuftrag',1);
					}
				});
			} 
			catch (e) {
				Utilities.bug_tracking(e, 'registerCheckAuftrag',1);
			}
		}
	},
	checkKasseButton: function(){
//		Utilities.console_log("checkKasseButton  um "+new Date().getSeconds()+" "+new Date().getMilliseconds());
		try {
			var controller = this.getControllerName();
			var uhash = this.getUhash();
			var self = this;
			var check_adresse = false;
			var alt_liefer_cont = new Array;
			var kasse_cont = new Array;
			kasse_cont = $$('[class=kasse_formular_container]');
//			Utilities.console_log("Kassen Container gefunden : " + kasse_cont.length + "\n");
			if (kasse_cont.length > 0) {
				kasse_cont.each(function(cont){
					var adress_cont = new Array;
					adress_cont = cont.select('[name="liefer_container"]')
					adress_cont.each(function(a_cont){
						if (a_cont.visible()) {
							var adresse_red = new Array;
							adresse_red = a_cont.select('[name=deine_adresse_red]');
//							Utilities.console_log("ungültige Adresse gefunden : " + adresse_red.length);
							if (adresse_red.length > 0) {
								check_adresse = true;
							}
						}
					})
					var alt_la_cont = new Array;
					alt_la_cont = cont.select('[class=alt_la_container]');
					if (alt_la_cont.length > 0) {
						alt_la_cont.each(function(alt_la){
							if (alt_la.visible()) {
//								Utilities.console_log("alt Lieferadressen gefunden : " + alt_la_cont.length);
								check_adresse = true;
							}
						});
					}
				});
			} else {
				if(!self.isHustlerOnly()){
					throw "Keine Kassendaten gefunden.";
				}
			}
//			Utilities.console_log("check Adresse: " + check_adresse + " ?\n");
			if (!check_adresse) {
				if ($('button_check')) {
					$('button_check').stopObserving('click');
					$('button_check').id = 'button_forw';
				}
				if ($('button_forw')) {
					$('button_forw').observe('click', function(){
						$('button_forw').stopObserving('click');
						self.addAuftrag();
					})
				}
			}
			else {
				if ($('button_forw')) {
					$('button_forw').stopObserving('click');
					$('button_forw').id = 'button_check';
					self.registerCheckAuftrag();
				}
			}
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'checkKasseButton',1);
		}
	},
	getKasseFormular: function(cont, day, art){
//		Utilities.console_log("getKasseFormular für "+day+" um "+new Date().getSeconds()+" "+new Date().getMilliseconds());
		try {
			var controller = this.getControllerName();
			var uhash = this.getUhash();
			if ($('button_forw')) {
				$('button_forw').stopObserving('click');
				$('button_forw').id = 'button_check';
			}

			var self = this;
			var content;
			var form;
			if(controller == 'reservierung'){
				form = cont.select('[class=formular_rahmen]');
			}else if(controller == 'warenkorb'){
				form = $$('[class=formular_rahmen]');
			}
			form = form.first();

			if (!controller || controller == '') {
				throw "Fehlender Parameter zum Holen der Kassendaten";
			}
			var url = "http://" + location.hostname + "/" + com.videotaxi.kunden.vtid + "/ajax_formular/index/" + controller + "_form";
			
			if (controller == 'reservierung') {
				pg_tage = 1;
				if ($('mindest_verleihdauer'+day)) {
					pg_tage = $('mindest_verleihdauer'+day).readAttribute('tage');
				}
				url = url += "/" + pg_tage;
				if(!cont || cont == ''){
					throw "Fehlender Parameter zum Holen der Kassendaten";
				}
				if (day && day != '') {
					url += "/" + day;
					if (art && art != '') {
						url += "/" + art;
					}
				}
				var ajaxFormular = new Ajax.Request(url, {
					asynchronous: false,
					onCreate: function(){
						Utilities.showLoading(form);
					},
					onComplete: function(transport){
						if (transport.responseText != "fehler") {
							content = transport.responseText;
						}
						else {
							throw "Keine Formulardaten gefunden."
						}
						form.update(content);
						if(self.rueckgabedatum[day]){
							var datumsbox = form.select('select[name=rueckgabedatum]');
							datumsbox.each(function(box){
								var boxoptions = box.options;
								for (var i=0; i<boxoptions.length; i++){
									if (boxoptions[i].value == self.rueckgabedatum[day]){
										boxoptions[i].selected = true;
									}
								}
							});
						}
						self.registerKasseHandler(cont, day);
					}
				});
			}
			if (controller == 'warenkorb') {
				pg_tage = 1;
				url = url += "/" + pg_tage;
				if (day && day != '') {
					url += "/" + day;
					if (art && art != '') {
						url += "/" + art;
					}
				}
				else {
					day = Utilities.formatDate(new Date(),'yyyy-MM-dd');
				}
				var ajaxFormular = new Ajax.Request(url, {
					asynchronous: false,
					onCreate: function(){
						Utilities.showLoading(form);
					},
					onComplete: function(transport){
						if (transport.responseText != "fehler") {
							content = transport.responseText;
						}
						else {
							throw "Keine Formulardaten gefunden."
						}
						form.update(content);
						var auftragsdatum = form.select('select[name=auftragsdatum]')
						if (auftragsdatum.length > 0) {
							if(day != ''){
								if(self.terminwunsch != ''){
									auftragsdatum.each(function(box){
										var boxoptions = box.options;
										for (var i=0; i<boxoptions.length; i++){
											if (boxoptions[i].value == self.terminwunsch){
												boxoptions[i].selected = true;
											}
										}
									});
								}
							}
//							else{
//								day = Utilities.formatDate(new Date(),'yyyy-MM-dd')
////								day = box.value;
//							}
						}
						self.registerKasseHandler(cont, day);
					}
				});
			}
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'getKasseFormular',1);
		}
	},
	getZahlungsartenForm : function(){
		try{
			var url = "http://" + location.hostname + "/" + com.videotaxi.kunden.vtid + "/ajax_formular/zahlung_form";
			var pay_form_container = $('zahlungsart');
					var ajaxFormular = new Ajax.Request(url, {
					asynchronous: false,
					onCreate: function(){
						;
					},
					onComplete: function(transport){
						pay_form_container.update(transport.responseText);
						if(!pay_form_container.visible()){
							pay_form_container.toggle();
						}
					}
				});		
		}catch (e) {
			Utilities.bug_tracking(e, 'getZahlungsartenForm',3);
		}
	},
	registerKasseHandler: function(cont, day){
//		Utilities.console_log("registerKasseHandler für "+day+" um "+new Date().getSeconds()+" "+new Date().getMilliseconds());
		try {
			var controller = this.getControllerName();
			var uhash = this.getUhash();
			var self = this;
			var form;
				if(controller == 'reservierung'){
					form = cont.select('[class=formular_rahmen]');
				}else if(controller == 'warenkorb'){
					form = $$('[class=formular_rahmen]');
				}
			form = form.first();
			if (!controller || controller == '') {
				throw "Fehlender Parameter zum Bearbeiten der Kassendaten";
			}
			if (!day) {
				var day = '';
			}
			if (controller == 'reservierung') {
				if(!cont || cont == ''){
					throw "Fehlender Parameter zum Bearbeiten der Kassendaten";
				}
				var next_day = form.select('span[class=next_day]');
				if (next_day.length > 0) {
//					var parentNode = form.parentNode;
//					var sortiment_rahmen = parentNode.select('[class=sortiment_head]');
					var sortiment_rahmen = cont.select('[class=sortiment_head]');
					if (sortiment_rahmen.length > 0) {
						next_day.each(function(n_d){
							sortiment_rahmen.each(function(head){
								day = n_d.readAttribute('value');
								head.writeAttribute('day', day);
								head.update("<b>Reservierung für " + n_d.innerHTML + "</b>");
							});
						});
					}
				}
				var selectbox = form.select('select[name=auftragsart]');
				var datumsbox = form.select('select[name=rueckgabedatum]');
				var plzbox = form.select('select[name=alt_plz]');
				selectbox.each(function(box){
					box.observe('change', function(){
						self.mr_peterson.startLoop('calcTeilsumme',1);
						self.getKasseFormular(cont, day, box.value);
						self.calcTeilsumme(cont);
						self.checkKasseButton();
					});
				});
				datumsbox.each(function(option){
					option.observe('change', function(){
						self.rueckgabedatum[day] = option.value;
						self.mr_peterson.startLoop('calcTeilsumme',1);
						self.calcTeilsumme(cont);
						self.checkKasseButton();
					});
				});
				plzbox.each(function(plz){
					plz.observe('change',function(){
						self.mr_peterson.startLoop('calcTeilsumme',1);
						self.calcTeilsumme(cont);
					});
				});
//				return true;
			}
			if (controller == 'warenkorb') {
				var art;
				var selectbox = form.select('select[name=auftragsart]');
				var datumsbox = form.select('select[name=auftragsdatum]');
				var plzbox = form.select('select[name=alt_plz]');
				selectbox.each(function(box){
					box.observe('change', function(){
						self.getKasseFormular(cont, day, box.value);
						self.mr_peterson.startLoop('getGebuehr',1);
						self.getGebuehr();
//						self.calcTeilsumme(cont);
//						self.calcGesamtsumme();
						self.checkKasseButton();
					});
					datumsbox.each(function(option){
						option.observe('change', function(){
							self.terminwunsch = option.value;
							self.getKasseFormular(cont, option.value, box.value);
							self.mr_peterson.startLoop('getGebuehr',1);
							self.getGebuehr();
							self.checkKasseButton();
						});
					});
				});
				plzbox.each(function(plz){
					plz.observe('change',function(){
						self.mr_peterson.startLoop('getGebuehr',1);
						self.getGebuehr();
					});
				});
				var auftragsdatum = form.select('select[name=auftragsdatum]')
//				if (auftragsdatum) {
//					auftragsdatum.each(function(box){
//						day = box.value;
//					});
//				}
			}

			var button = form.select('[class=button_forw]');
			button.each(function(el){
				if (el.id == 'insert_alt_adresse_' + day) {
					el.observe('click', function(){
						$('alt_liefer_adresse_' + day).toggle();
						self.checkKasseButton();
					});
				}
				else {
					throw "Container für Lieferadresse in der Einkaufsliste nicht gefunden";
				}
			});
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'registerKasseHandler',1);
	   }
	},
	calcTeilsumme: function(cont){
//		Utilities.console_log("calcTeilsumme  um "+new Date().getSeconds()+" "+new Date().getMilliseconds()+" mit "+controller+" "+uhash+" "+cont);
		try {
			var controller = this.getControllerName();
			var uhash = this.getUhash();
			var self = this;
			var preis_gesamt = 0;
			var is_vorbestellung = this.isVorbestellung();
			if(controller){
				var day;
				var factor;
				var rueckgabe;
				var liefern = 0;
				var plz = 0;
				var preis_summ = 0;
				if(cont){
					var head_con = cont.select('[class=sortiment_head]');
					head_con.each(function(el){
						day = el.getAttribute('day');
					});
				}
				var form;
				if(controller == 'reservierung'){
					form = cont.select('[class=formular_rahmen]');
				}else if(controller == 'warenkorb'){
					form = $$('[class=formular_rahmen]');
				}
//				(cont && cont.select('[class=formular_rahmen]').length > 0) ? form = cont.select('[class=formular_rahmen]') : form = $$('[class=formular_rahmen]');
				if (form.length > 0) {
					form.each(function(el){
						var adressen = new Array();
						var formFields = el.select('select');
						formFields.each(function(formField){
							if (['rueckgabedatum'].include(formField.getAttribute('name'))) {
								rueckgabe = formField.value.stripTags();
							}
							if (['auftragsdatum'].include(formField.getAttribute('name'))) {
								day = formField.value.stripTags();
							}
							if (['auftragsart'].include(formField.getAttribute('name'))) {
								liefern = formField.value.stripTags();
							}
						});
						if(liefern > 0){
							l_adress = el.select('[name=liefer_container]');
							l_adress.each(function(con){
								adressen.push(con);
							});
							la_adress = el.select('[class=alt_la_container]');
							la_adress.each(function(con){
								adressen.push(con);
							});
							if(adressen.length > 0 ){
//								alert(adressen.length);
								adressen.each(function(adresse){
//										alert(adresse)
//										return;
									if(adresse.visible()){
										if(adresse.getAttribute('name') == 'alt_la_container'){
											formFields.each(function(formField){
												if (['alt_plz'].include(formField.getAttribute('name'))) {
													plz = formField.value.stripTags();
												}
											})
										}else{
											adressfields = adresse.select('span');
											adressfields.each(function(field){
												if(['plz'].include(field.readAttribute('field'))){
													plz = field.innerHTML;
												}
											})
										}
									}
								})
							}else{
								alert("keine adresse")
							}
						}
					});
				}else{
					throw "Keine Formulardaten gefunden";
				}
				if(!day || day == null){
					day = Utilities.formatDate(new Date(),'yyyy-MM-dd');
				}
				if (controller == 'reservierung') {
					var now = (new Date()).getTime();
					factor = self.countPays(day, rueckgabe);
					
					if (!Object.isNumber(Math.abs(factor)) || factor == 0) {
						throw "Berechnung der Leihtage ist fehlgeschlagen.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal";
					}
				}else{
					if(!cont){
						
					}
				}
				var artikelArr = new Array();
				var artikel_frame = cont.select('[class=artikel_rahmen]')
				if (artikel_frame.length > 0) {
					artikel_frame.each(function(artikel){
						if (controller == 'warenkorb') {
							var artikel_con = artikel.select('[class=artikel_con]');
							if (artikel_con.length > 0) {
								artikel_con.each(function(art_con){
//									if(['vorbestellung_gebraucht'].include(art_con.getAttribute('sortiment')))is_vorbestellung = true;
									factor = art_con.readAttribute('anzahl');
									var artHash = new Hash();
									artHash.set('artikelNr',art_con.readAttribute('artikelnr'));
									artHash.set('preis',Math.abs(art_con.readAttribute('p').sub(',','.'))); 
									artHash.set('anzahl',Math.abs(art_con.readAttribute('anzahl'))); 
									preis_summ = preis_summ + (Math.abs(art_con.readAttribute('p').sub(',','.')) * Math.abs(factor));
									preis_gesamt += preis_summ;
									artikelArr.push(artHash);
								})
							}
						}else{
							var artikel_con = artikel.select('[class=artikel_con]');
							if (artikel_con.length > 0) {
								artikel_con.each(function(art_con){
									var artHash = new Hash();
									artHash.set('artikelNr',art_con.readAttribute('artikelnr'));
									artHash.set('preis',Math.abs(art_con.readAttribute('p').sub(',','.'))); 
									preis_summ = preis_summ + (Math.abs(art_con.readAttribute('p').sub(',','.')) * Math.abs(factor));
									preis_gesamt += preis_summ;
									artikelArr.push(artHash);
								});
							}
						}
					});
				}else {
					throw "Keine Artikel gefunden.";
				}
				
				
				var url = "http://" + location.hostname + "/" + com.videotaxi.kunden.vtid + "/ajax_calc_teilsumme/index";
				
				var paramArr = new Array();
				paramArr.push(com.videotaxi.kunden.vtid);
				paramArr.push(factor);
				paramArr.push(day);
				paramArr.push(artikelArr);
				paramArr.push(liefern);
				paramArr.push(plz);
				
				var f;
				if(controller == 'reservierung'){
					f = 'get_leih_summe';
				}else if(controller == 'warenkorb'){
					f = 'get_kauf_summe';
				}
				
				var calcTeilSumme = new Ajax.RPCRequest(url, {
					methodName: f,
					methodParams: paramArr,
					contentType: 'text/xml',

					onComplete: function(transport){
						var erg = calcTeilSumme.responseObject;
						self.mr_peterson.countDone('calcTeilsumme');
						if (erg && erg.length > 0) {
							erg.each(function(child){
								var teil_summe = cont.select('[class=teil_summe]');
								if(teil_summe.length > 0){
									teil_summe.each(function(teil_cont){
										var gebuehr_span = teil_cont.select('[name="gebuehr"]');
										var artikel_span = teil_cont.select('[name="artikel"]');
										var cont_clone;
										if(artikel_span.length > 0){
											artikel_span.each(function(span){
												var summe_cont = span.select('[class=summe_con]');
												var preis_cont = span.select('[class=button_con]');
												cont_clone = Utilities.cloneContainer(span);
												if(!is_vorbestellung && summe_cont.length > 0 && preis_cont.length > 0){
													summe_cont.each(function(el){
														if(!el.visible()){
															el.toggle();
														}
													});
													preis_cont.each(function(el){
														if(!el.visible()){
															el.toggle();
														}
														el.update(Math.abs(child['summe']).toFixed(2).toString().sub(/\./,',')+" €");
													});
												}else{
													summe_cont.each(function(el){
														if(el.visible()){
															el.toggle();
														}
													});
													preis_cont.each(function(el){
														if(el.visible()){
															el.toggle();
														}
													});
												}
											})
										}
										if($('bestellwertError')){
											$('bestellwertError').remove();
										}
										if(child['bestellwert_gering'] > 0){
											if (gebuehr_span.length > 0) {
												gebuehr_span.each(function(span){
													span.remove();
												});
											}
											Utilities.errCont('Der Bestellwert für die Option "liefern lassen" ist leider um '+Math.abs(child['bestellwert_gering']).toFixed(2).toString().sub(/\./,',')+' € zu gering.', 'bestellwertError', teil_cont);
											if ($('button_forw')) {
												$('button_forw').stopObserving('click');
												$('button_forw').id = 'button_check';
											}
											return false;
										}
										if(controller == 'reservierung' && child['gebuehr'] > 0){
											var tmp_cont;
											if (gebuehr_span.length > 0) {
												gebuehr_span.each(function(span){
													tmp_cont = span
													span.remove();
												});
											}else{
												tmp_cont = cont_clone;
											}
											var summe_cont = tmp_cont.select('[class=summe_con]');
											var preis_cont = tmp_cont.select('[class=button_con]');
											if (!is_vorbestellung && summe_cont.length > 0 && preis_cont.length > 0) {
												summe_cont.each(function(el){
													el.update("Liefergebühr (zuzüglich):");
													if (!el.visible()) {
														el.toggle();
													}
												});
												preis_cont.each(function(el){
													el.update(Math.abs(child['gebuehr']).toFixed(2).toString().sub(/\./, ',') + " €");
													if (!el.visible()) {
														el.toggle();
													}
												});
												teil_cont.insert("<span name='gebuehr' p='"+child['gebuehr']+"'>"+tmp_cont.innerHTML+"</span>");
											}
										}else if(controller == 'warenkorb'){
										}else{
											if (gebuehr_span.length > 0) {
												gebuehr_span.each(function(span){
													span.remove();
												});
											}
										}
									});
								} else {
									throw "Preisberechnung ist fehlgeschlagen\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.";
								}
							});
						}
						if(!self.mr_peterson.loopRunning('calcTeilsumme')){
							self.mr_peterson.endLoop('calcTeilsumme');
							self.calcGesamtsumme();
						}
					 },
					 onException: function(transport, e){
					 	alert (e.message + "\n" + e.stack);
					}
				});
			}
			
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'calcTeilsumme',1);
		}
	},
	getGebuehr: function(){
//		Utilities.console_log("getGebuehr  um "+new Date().getSeconds()+" "+new Date().getMilliseconds());
		try {
			var self = this;
			var controller = this.getControllerName();
			var uhash = this.getUhash();
			liefern = false;
			form = $$('[class=formular_rahmen]');
			if (form.length > 0) {
				form.each(function(el){
					var adressen = new Array();
					var formFields = el.select('select');
					formFields.each(function(formField){
						if (['auftragsdatum'].include(formField.getAttribute('name'))) {
							day = formField.value.stripTags();
						}
						if (['auftragsart'].include(formField.getAttribute('name'))) {
							liefern = formField.value.stripTags();
						}
					});
					if (liefern > 0) {
						l_adress = el.select('[name=liefer_container]');
						l_adress.each(function(con){
							adressen.push(con);
						});
						la_adress = el.select('[class=alt_la_container]');
						la_adress.each(function(con){
							adressen.push(con);
						});
						if (adressen.length > 0) {
							//								alert(adressen.length);
							adressen.each(function(adresse){
								//										alert(adresse)
								//										return;
								if (adresse.visible()) {
									if (adresse.getAttribute('name') == 'alt_la_container') {
										formFields.each(function(formField){
											if (['alt_plz'].include(formField.getAttribute('name'))) {
												plz = formField.value.stripTags();
											}
										})
									} else {
										adressfields = adresse.select('span');
										adressfields.each(function(field){
											if (['plz'].include(field.readAttribute('field'))) {
												plz = field.innerHTML;
											}
										})
									}
								}
							})
						} else {
							alert("keine adresse")
						}
					} else {
						return false;
					}
				});
			}
			var preis_gesamt = 0;
			var is_vorbestellung = this.isVorbestellung();
			var gesamtContainer = $$('[class=sortiment_rahmen]');
			if (gesamtContainer.length > 0) {
				gesamtContainer.each(function(cont){
					var day;
					var teil_summe = cont.select('[class=teil_summe]');
					if (!is_vorbestellung && teil_summe.length > 0) {
						teil_summe.each(function(teil_cont){
							var summe_cont = teil_cont.select('[class=summe_con]');
							var preis_cont = teil_cont.select('[class=button_con]');
							if (summe_cont.length > 0 && preis_cont.length > 0) {
								summe_cont.each(function(el){
									if (!el.visible()) {
										el.toggle();
									}
								});
								preis_cont.each(function(el){
									if (!el.visible()) {
										el.toggle();
									}
									preis_gesamt += Math.abs(el.innerHTML.sub(/\,/, '.').sub('€', '').strip());
								});
							}
						});
					} else {
						throw "Preisberechnung ist fehlgeschlagen.\nKeine Teilsummen gefunden.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.";
					}
				});
			}
			if (liefern > 0) {
				if (preis_gesamt > 0) {
					var url = "http://" + location.hostname + "/" + com.videotaxi.kunden.vtid + "/ajax_calc_teilsumme/index";
					
					var paramArr = new Array();
					paramArr.push(com.videotaxi.kunden.vtid);
					paramArr.push(plz);
					paramArr.push(preis_gesamt);
					var gesamtGebuehr = new Ajax.RPCRequest(url, {
						methodName: 'getLiefergebuehr',
						methodParams: paramArr,
						contentType: 'text/xml',
						
						onComplete: function(transport){
							self.mr_peterson.countDone('getGebuehr');
							var erg = gesamtGebuehr.responseObject;
							if (erg && erg.length > 0) {
								erg.each(function(child){
									if (child['bestellwert_gering'] && child['bestellwert_gering'] > 0) {
										alert("bestellwert zu niedrig")
									}
									if (!is_vorbestellung && child['gebuehr'] && child['gebuehr'] > 0) {
										if ($$('[name=gebuehr_summe]').length > 0) {
											$$('[name=gebuehr_summe]').each(function(cont){
												self.mr_peterson.countDone('getGebuehr');
												cont.remove();
												if (!self.mr_peterson.loopRunning('getGebuehr')) {
													self.mr_peterson.endLoop('getGebuehr');
													self.calcGesamtsumme();
												}
											});
										}
										var gebuehr = Math.abs(child['gebuehr']).toFixed(2).toString().sub(/\./, ',') + " €";
										var content = '<div style="" class="summe_con"></div><div style="" class="button_con"></div><div class="clear"></div>';
										var tmp_cont = new Element('div', {
											'class': 'teil_summe',
											'name': 'gebuehr_summe',
											'p': child['gebuehr']
										}).insert(content);
										
										var summe_cont = tmp_cont.select('[class=summe_con]');
										var preis_cont = tmp_cont.select('[class=button_con]');
										if (summe_cont.length > 0 && preis_cont.length > 0) {
											summe_cont.each(function(el){
												el.update("Liefergebühr (zuzüglich):");
												if (!el.visible()) {
													el.toggle();
												}
											});
											preis_cont.each(function(el){
												el.update(gebuehr);
												if (!el.visible()) {
													el.toggle();
												}
											});
											var formContainer = $$('[class=formular_rahmen]');
											if (formContainer.length > 0) {
												formContainer.last().insert({
													after: tmp_cont
												});
											}
										}
									}
								});
							}
							if (!self.mr_peterson.loopRunning('getGebuehr')) {
								self.mr_peterson.endLoop('getGebuehr');
								self.calcGesamtsumme();
							}
						},
						onException: function(transport, e){
							alert(e.message + "\n" + e.stack);
						}
					});
				}
			}else{
				if ($$('[name=gebuehr_summe]').length > 0) {
					$$('[name=gebuehr_summe]').each(function(cont){
						self.mr_peterson.countDone('getGebuehr');
						cont.remove();
						if (!self.mr_peterson.loopRunning('getGebuehr')) {
							self.mr_peterson.endLoop('getGebuehr');
							self.calcGesamtsumme();
						}
					});
				}
			}
		}catch(e){
			Utilities.bug_tracking(e, 'getGebuehr',2);
		}
	},
	calcGesamtsumme: function(){
//		Utilities.console_log("calcGesamtsumme  um "+new Date().getSeconds()+" "+new Date().getMilliseconds());
		try {
			var controller = this.getControllerName();
			var uhash = this.getUhash();
			var preis_gesamt = 0;
			var is_vorbestellung = this.isVorbestellung();
//			var gesamtContainer = $$('[class=sortiment_rahmen]');
//			if (gesamtContainer.length > 0) {
//				gesamtContainer.each(function(cont){
			if($('auftrag_inhalt')){
				cont = $('auftrag_inhalt');
					var day;
//					var head_con = cont.select('[class=sortiment_head]');
//					head_con.each(function(el){
//						day = el.getAttribute('day');
//						if (['vorbestellung_gebraucht'].include(el.getAttribute('sortiment'))) {
//							is_vorbestellung = true;
//						}else{
//							is_vorbestellung = false;
//						}
//					});
					var teil_summe = cont.select('[class=teil_summe]');
					if(teil_summe.length > 0){
						teil_summe.each(function(teil_cont){
							var summe_cont = teil_cont.select('[class=summe_con]');
							var preis_cont = teil_cont.select('[class=button_con]');
							if(!is_vorbestellung && summe_cont.length > 0 && preis_cont.length > 0){
								summe_cont.each(function(el){
									if(!el.visible()){
										el.toggle();
									}
								});
								preis_cont.each(function(el){
									if(!el.visible()){
										el.toggle();
									}
									preis_gesamt += Math.abs(el.innerHTML.sub(/\,/,'.').sub('€','').strip());
								});
							}else{
//								throw "Preisberechnung ist fehlgeschlagen.\nKeine Teilsummen gefunden.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.";
							}
						});
					} else {
						throw "Preisberechnung ist fehlgeschlagen.\nKeine Teilsummen gefunden.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.";
					}
//				});
			} else {
				throw "Die Preisberechnung ist fehlgeschlagen.\nWir haben keine Artikel in deiner Einkaufsliste gefunden.\n";
			}
			if(preis_gesamt > 0){
				var gesamtPreisContainer = $$('[class=gesamt_summe]');
				if(gesamtPreisContainer.length > 0){
					gesamtPreisContainer.each(function(gesamt_cont){
						var summe_cont = gesamt_cont.select('[class=summe_con]');
						var preis_cont = gesamt_cont.select('[class=button_con]');
						if(summe_cont.length > 0 && preis_cont.length > 0){
							summe_cont.each(function(el){
								if(!el.visible()){
									el.toggle();
								}
							});
							preis_cont.each(function(el){
								el.update(preis_gesamt.toFixed(2).toString().sub(/\./,',')+" €");
								el.writeAttribute('preis',preis_gesamt);								
								if(!el.visible()){
									el.toggle();
								}
							});
						}else{
							throw "Die Gesamtpreisberechnung ist auf Grund fehlender Felder fehlgeschlagen.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.";
						}
					});
				}else{
					throw "Die Gesamtpreisberechnung ist auf Grund fehlender Container fehlgeschlagen.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.";
				}
			}else{
				if(!$$(['sortiment=vorbestellung_gebraucht'])) throw "Die Gesamtpreisberechnung ist auf Grund fehlenden Preises fehlgeschlagen.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.";
			}
		} catch (e) {
			Utilities.bug_tracking(e, 'calcGesamtsumme',1);
		}
		
		
	},
	showAuftrag: function(content){
//		Utilities.console_log("showAuftrag  um "+new Date().getSeconds()+" "+new Date().getMilliseconds());
		try {
			$('auftrag_inhalt').update(content);

			var controller = this.getControllerName();
			var uhash = this.getUhash();
			var self = this;
			
			$('modal_closebutton').observe('click', function(){
				if (com.videotaxi.kunden.pe){
					com.videotaxi.kunden.pe.stop();
				}
				com.videotaxi.boxes.toggleModal(true);
			})
			if ($('button_back')) {
				$('button_back').observe('click', function(){
					if (confirm("Beim Schliesen des Fensters gehen eventuell vorgenommene \nEinstellung oder Eingabe in Textfeldern verloren.\nWillst Du fortfahren?")) {
						com.videotaxi.boxes.toggleModal(true);
					}
				})
			}

			if ($('auftrag_inhalt')) {
				var els = $('auftrag_inhalt').select('['+controller+'_laden=true]');
				if (els.length > 0) {
					els.each(function(el){
						el.observe('click', function(event){
							if(confirm("Beim neu laden der Kasse gehen eventuell vorgenommene \nEinstellung oder Eingabe in Textfeldern verloren.\nWillst Du die Kasse wirklich neu laden?")){
								Kasse.initAuftrag(el, 'vert', uhash);
							}
						});
					});
				}
				var els = $('auftrag_inhalt').select('[warenkorb=del]');
				els.each(function(el){
					el.observe('click', function(event){
						com.videotaxi.kunden.deleteWarenkorb(el, 'vert', el.readAttribute('q'));
					})
				});
				var els = $('auftrag_inhalt').select('img[warenkorb=alter]');
				els.each(function(el){
					el.observe('click', function(event){
						com.videotaxi.kunden.alterWarenkorb(el, 'vert', el.readAttribute('q'));
					})
				});

				this.registerCheckAuftrag();

				if (controller == 'reservierung') {
					var gesamtContainer = $$('[class=sortiment_rahmen]');
					if (gesamtContainer.length > 0) {
						this.mr_peterson.startLoop('calcTeilsumme',gesamtContainer.length);
						var day;
						gesamtContainer.each(function(cont){
							var head_con = cont.select('[class=sortiment_head]');
							head_con.each(function(el){
								day = el.getAttribute('day');
							});
							var formular = cont.select('[class=formular_rahmen]');
							formular.each(function(form){
								Utilities.showLoading(form);
								self.getKasseFormular(cont, day);
								self.calcTeilsumme(cont);
								self.checkKasseButton();
							});
						});
					}
				}
				else if (controller == 'warenkorb') {
					var gesamtContainer = $$('[class=sortiment_rahmen]');
					if(gesamtContainer.length > 0){
						this.mr_peterson.startLoop('calcTeilsumme',gesamtContainer.length);
						var day;
						day = Utilities.formatDate(new Date(),'yyyy-MM-dd');
						var formular = $$('[class=formular_rahmen]');
						formular.each(function(form){
							Utilities.showLoading(form);
							var auftragsdatum = form.select('select[name=auftragsdatum]')
							if (auftragsdatum) {
								auftragsdatum.each(function(box){
									day = box.value;
								});
							}
						});
						gesamtContainer.each(function(cont){
							self.calcTeilsumme(cont);
						});
						if(!self.isHustlerOnly()){
							self.getKasseFormular(gesamtContainer.first(), day);
						}		
						/**
						 * @todo: Hier ggf. PayPal-Zahlung aktivieren!
						 */				
						if(self.isPayPal()){
							self.getZahlungsartenForm();
						}
					}
					self.checkKasseButton();
				}
			}
		} 
		catch (e) {
			Utilities.bug_tracking(e, 'showAuftrag',1);
		}
		
	},
	addAuftrag: function(){
		try {
			var controller = this.getControllerName();
			var uhash = this.getUhash();
			if ($('button_forw')) 
				$('button_forw').stopObserving('click');
			var self = this;
			var positionenArrayAll = new Array();
			var vtid = com.videotaxi.kunden.vtid;
			if (vtid == 0) {
				throw "Keine Videothek verfügbar";
			}
			if ($('auftrag_inhalt')) {
				var gesamtContainer = $$('[class=sortiment_rahmen]');
				var dataArray = new Array();
				var total = 0;
				var days = 1;
				var prefix_orderId;
				var bezahlart = 0;
				if (controller == 'reservierung') {
					gesamtContainer.each(function(cont){
						var day;
						var days = 0;
						var zeit = '';
						var rueckgabe;
						var alt_adress = '';
						var rowHash = new Hash();
						var positionenArray = new Array();
						var aktion_text = '';
						
						rowHash.set('sortiment', 'verleih');
						var head_con = cont.select('[class=sortiment_head]');
						head_con.each(function(el){
							day = el.getAttribute('day');
							
							if ($('abhol_zeit_' + day) || $('liefer_zeit_' + day)) {
								if ($('abhol_zeit_' + day) && $('abhol_zeit_' + day).visible()) {
									zeit_select = $('abhol_zeit_' + day).select('select[name=abhol_zeit]');
									zeit_select.each(function(zeit_val){
										zeit = zeit_val.value;
									})
								}
								else 
									if ($('liefer_zeit_' + day) && $('liefer_zeit_' + day).visible()) {
										zeit_select = $('liefer_zeit_' + day).select('select[name=liefer_zeit]');
										zeit_select.each(function(zeit_val){
											zeit = zeit_val.value;
										})
									}
							}
							rowHash.set('ausfuehrungsdatum', day + " " + zeit);
						});
						var gebuehr_con = cont.select('span[name=gebuehr]');
						gebuehr_con.each(function(el){
							preis = el.readAttribute('p');
							if(preis > 0){
								rowHash.set('liefergebuehr',preis);
							}
						});
						var form = cont.select('form');
						if (form.length > 0) {
							isForm = true;
							form.each(function(el){
								var formAltLA = el.select('[class=alt_la_container]');
								formAltLA.each(function(alt_LA_cont){
									if ($('alt_liefer_adresse_' + day).visible()) {
										alt_LA_fields = alt_LA_cont.select('input', 'select', 'textarea');
										alt_LA_fields.each(function(alt_LA_field){
											alt_adress += alt_LA_field.value + "\n";
										});
									}
								});
								rowHash.set('alt_lieferadresse', alt_adress);
								var formFields = el.select('select', 'textarea');
								formFields.each(function(formField){
									if (['rueckgabedatum', 'auftragsart', 'bemerkung'].include(formField.getAttribute('name'))) {
										insert = '';
										if (formField.getAttribute('name') === 'bemerkung') {
											if (aktion_text) {
												insert = aktion_text.stripTags() + "\n\n";
												insert += formField.value.stripTags();
											}
											else {
												if(formField.getAttribute('name') === 'bemerkung'){
													insert = Utilities.killNewline(formField.value.stripTags());
												}else{
													insert = formField.value.stripTags();
												}
											}
										}
										if (formField.getAttribute('name') === 'rueckgabedatum') {
											rueckgabe = formField.value.stripTags();
											insert += formField.value.stripTags() + " " + zeit;
										}
										if (formField.getAttribute('name') === 'auftragsart') {
											if (alt_adress != '') {
												insert += 2;
											}
											else {
												insert += formField.value.stripTags();
											}
										}
										rowHash.set(formField.getAttribute('name'), insert);
										
										
									}
								});
							});
						}
						days = self.countPays(day, rueckgabe);
						
						var artikel_con = cont.select('[class=artikel_con]');
						artikel_con.each(function(el){
							var positionHash = new Hash();
							var katalogNr = el.readAttribute('artikelnr');
							var anzahl = el.readAttribute('anzahl');
							var preis = el.readAttribute('p');
							var art = el.readAttribute('art');
							prefix_orderId = art;
							/**
							 * @todo korrigieren der fehlerhaften Verarbeitung im Helper der schnittstelle
							 * bis dahin hotfix durch ersetzen
							 * siehe controller == warenkorb
							 */
							var titel = el.readAttribute('artikel_titel').gsub(/\%26/,'%2B');
							
							positionHash.set('artikelNr', katalogNr);
							positionHash.set('art', art);
							positionHash.set('anzahl', anzahl);
							if (days > 1) {
								positionHash.set('preis', preis * days);
								total += Math.abs(preis * days);
							}
							else {
								positionHash.set('preis', preis);
								total += Math.abs(preis);
							}
							positionHash.set('titel', titel);
							span = el.select('span[class=aktion_text]');
							span.each(function(inhalt){
								aktion_text += inhalt.innerHTML.stripTags() + "\n\n";
							})
							positionenArray.push(positionHash);
							if (el.readAttribute('ist_reservierung') == 1) {
								rowHash.set('bemerkung', 'Der Artikel \"'+titel+'\" wird für Dich reserviert.\n' + rowHash.get('bemerkung'));
							}else{
								rowHash.set('bemerkung', 'Der Artikel \"'+titel+'\" wird für Dich vorgemerkt.\n' + rowHash.get('bemerkung'));
							}
						});
						var aktions_inhalt = cont.select('[class=aktions_inhalt]');
						aktions_inhalt.each(function(div){
							span = div.select('span[class=aktion_text]');
							span.each(function(inhalt){
								aktion_text += inhalt.innerHTML.stripTags() + "\n\n";
							})
						});
						var cont_vars = cont.select('div#[id=cont_vars]');
						cont_vars.each(function(el){
							rowHash.set('id_kunde_wawi', el.readAttribute('id_kunde_wawi'));
						});
						
						if (document.location.hostname.include('baustelle.videotaxi')) {
							rowHash.set('bemerkung', '!! TESTBESTELLUNG !!\nBITTE NICHT AUSFÜHREN' + rowHash.get('bemerkung'));
						}
						rowHash.set('id_videothek', vtid);
						rowHash.set('id_gutschein', '');
						rowHash.set('position', positionenArray);
						
						dataArray.push(rowHash);
					});
				} else if (controller == 'warenkorb') {
					//					var vorb_incl = false;
					//					var neu_incl = false;
					//					var geb_incl = false;
					var prefix_arr = new Array();
					
					gesamtContainer.each(function(cont){
						var aktion_text = '';
						var alt_adress = '';
						var rowHash = new Hash();
						var positionenArray = new Array();
						var artikel_con = cont.select('[class=artikel_con]');
						var gesamtsumme=0;
						var head_con = cont.select('[class=sortiment_head]');
						head_con.each(function(el){
							rowHash.set('sortiment', el.readAttribute('sortiment'));
						});
						
						artikel_con.each(function(el){
							var positionHash = new Hash();
							var katalogNr = el.readAttribute('artikelnr');
							var anzahl = el.readAttribute('anzahl');
							var preis = el.readAttribute('p') * Math.abs(anzahl);
							gesamtsumme += preis;
							var art = el.readAttribute('art');
							//							prefix_orderId = art;
							if (!prefix_arr.include(art)) {
								prefix_arr.push(art);
							//								vorb_incl = true;
							}
							var titel = el.readAttribute('artikel_titel').gsub(/\%26/,'%2B');
							total += Math.abs(preis);
							if (art == 3) {
								rowHash.set('vorbestellung', true);
							} else if (art == 4) {
								rowHash.set('beschaffung', true);
							} else if (art == 5){
								rowHash.set('vorbestellung',true);
							} else if (art == 6){
								rowHash.set('hustler',true);
							}
							
							positionHash.set('artikelNr', katalogNr);
							positionHash.set('art', art);
							positionHash.set('anzahl', anzahl);
							positionHash.set('preis', preis);
							positionHash.set('titel', titel);
							
							positionenArray.push(positionHash);
							positionenArrayAll.push(positionHash);
							span = el.select('span[class=aktion_text]');
							span.each(function(inhalt){
								aktion_text += inhalt.innerHTML.stripTags() + "\n\n";
							})
						});
						
						var aktions_inhalt = cont.select('[class=aktions_inhalt]');
						aktions_inhalt.each(function(div){
							span = div.select('span[class=aktion_text]');
							span.each(function(inhalt){
								aktion_text += inhalt.innerHTML.stripTags() + "\n\n";
							})
						});
						
						var cont_vars = $('auftrag_inhalt').select('div#cont_vars');
						cont_vars.each(function(el){
							rowHash.set('id_kunde_wawi', el.readAttribute('id_kunde_wawi'));
						});
						var cont_gebuehr = $('auftrag_inhalt').select('div[name=gebuehr_summe]');
						cont_gebuehr.each(function(el){
							preis = el.readAttribute('p');
							if(preis > 0){
								rowHash.set('liefergebuehr',preis);
							}
						})
						var form = $('auftrag_inhalt').select('form');
						if (form.length > 0 && !rowHash.get('hustler')) {
							isForm = true;
							var selected_day;
							var zeit;
							form.each(function(el){
								var formAuftragsdatum = el.select('select[name=auftragsdatum]');
								formAuftragsdatum.each(function(auftragsdatum){
									selected_day = auftragsdatum.value;
									if ($('abhol_zeit_' + selected_day) || $('liefer_zeit_' + selected_day)) {
										if ($('abhol_zeit_' + selected_day) && $('abhol_zeit_' + selected_day).visible()) {
											zeit_select = $('abhol_zeit_' + selected_day).select('select[name=abhol_zeit]');
											zeit_select.each(function(zeit_val){
												zeit = zeit_val.value;
											})
										}
										else 
											if ($('liefer_zeit_' + selected_day) && $('liefer_zeit_' + selected_day).visible()) {
												zeit_select = $('liefer_zeit_' + selected_day).select('select[name=liefer_zeit]');
												zeit_select.each(function(zeit_val){
													zeit = zeit_val.value;
												})
											}
									}
									rowHash.set('ausfuehrungsdatum', auftragsdatum.value + " " + zeit);
								});
								var formAltLA = el.select('[class=alt_la_container]');
								formAltLA.each(function(alt_LA_cont){
									if ($('alt_liefer_adresse_'+selected_day).visible()) {
										alt_LA_fields = alt_LA_cont.select('input', 'select', 'textarea');
										alt_LA_fields.each(function(alt_LA_field){
											alt_adress += alt_LA_field.value + "\n";
										});
									}
								});
								var zeit = '';
								if ($('abhol_zeit') || $('liefer_zeit')) {
									if ($('abhol_zeit').visible()) {
										zeit_select = $('abhol_zeit').select('select[name=abhol_zeit]');
										zeit_select.each(function(zeit_val){
											zeit = zeit_val.value;
										})
									}
									else 
										if ($('liefer_zeit').visible()) {
											zeit_select = $('liefer_zeit').select('select[name=liefer_zeit]');
											zeit_select.each(function(zeit_val){
												zeit = zeit_val.value;
											})
										}
								}
								var formFields = el.select('select', 'textarea');
								formFields.each(function(formField){
									if (['auftragsart', 'bemerkung'].include(formField.getAttribute('name'))) {
										insert = '';
										if (formField.getAttribute('name') === 'bemerkung') {
											if (aktion_text) {
												insert = aktion_text.stripTags() + "\n\n";
												insert += formField.value.stripTags();
											} else {
												if(formField.getAttribute('name') === 'bemerkung'){
													insert = Utilities.killNewline(formField.value.stripTags());
												} else {
													insert = formField.value.stripTags();
												}
											}
										}
										if (formField.getAttribute('name') === 'auftragsart') {
											if (alt_adress != '') {
												insert += 2;
											}
											else {
												insert += formField.value.stripTags();
											}
										}
										rowHash.set(formField.getAttribute('name'), insert);
									}
								});
							});
						}
						
						if (document.location.hostname.include('baustelle.videotaxi') || document.location.hostname.include('test.videotaxi') || document.location.hostname.include('vt-testserver')) {
							rowHash.set('bemerkung', '!! TESTBESTELLUNG !!\nBITTE NICHT AUSFÜHREN' +  rowHash.get('bemerkung'));
						}
						rowHash.set('id_videothek', vtid);
						rowHash.set('id_gutschein', '');
						rowHash.set('alt_lieferadresse', alt_adress);
						rowHash.set('position', positionenArray);
						rowHash.set('bezahlart','0');											
						if($('paypal_radio')){
							var radioGrp = $$('.zahlungsart');
							for(i=0; i < radioGrp.length; i++){
								var radioValue = radioGrp[i].value;
								if (radioGrp[i].checked == true) {
									if (radioValue === "paypal" && $('gesamtpreis')) { // es liegt eine PayPal-Zahlung vor, und ein Preis ^^
										//alert("PayPal=1");
										rowHash.set('bezahlart', '1');
										bezahlart = 1;
									} else {
										//alert("PayPal=0");
									}
								}
							}
						}			
						//rowHash.set('gesamtsumme',gesamtsumme);			
						tmpData = new Array();
						tmpData.push(rowHash)
						dataArray.push(rowHash);
					});
				}

				
				/**
				 * neuer Aufruf Beginn
				 */
				
				var url = "http://" + location.hostname + "/" + vtid + "/ajax";
				var id_auftrag = 0;
				var id_vorbestellung = 0;
				var id_beschaffung = 0;
				var id_hustler = 0;
				var Inserts = false;
				var matchArray = new Hash();
				matchArray.set(1, 'Neu');
				matchArray.set(2, 'Gebraucht');
				matchArray.set(3, 'Vorbestellung');
				matchArray.set(4, 'Beschaffung');
				matchArray.set(5, 'Hustler');
				
				var fieldHash = new Hash();
				fieldHash.set('data', dataArray);
				
				if (document.domain.include('baustelle.videotaxi') || document.domain.include('vt-testserver')) {
					Utilities.console_log(fieldHash.inspect())
					alert("Das abschicken von Bestellungen ist im Testbetrieb leider nicht möglich!");
					return false;
				}
				if (document.domain.include('test.videotaxi')) {
					Utilities.console_log(fieldHash.inspect())
					alert("Das abschicken von Bestellungen ist im Testbetrieb leider nicht möglich!");
					return false;
				}
				
				var paramArr = new Array("videotaxi", "", "Auftrag", fieldHash);
				//alert("Starte AjaxCall...");
				var auftragCall = new Ajax.RPCRequest(url, {
					methodName: 'write',
					methodParams: paramArr,
					contentType: 'text/xml',
					onComplete: function(transport){
						var erg = auftragCall.responseObject;
						//alert("ERG: " + erg.inspect());
						if (erg && erg.length > 0) {
							erg.each(function(child){
//								for(key in child){
//									Utilities.console_log("Key: " + key + " Value: " + child[key]);
//								}
								//alert("CHILD: " + Object.inspect(child));
								if (child['Inserts'] && child['Inserts'] > 0) {
									Inserts = true;
								}
								if (child['Id_Auftrag']) {
									id_auftrag = child['Id_Auftrag'];
								}
								if (child['Id_Vorbestellung']) {
									id_vorbestellung = child['Id_Vorbestellung'];
								}
								if (child['Id_Beschaffung']) {
									id_beschaffung = child['Id_Beschaffung'];
								}
								if (child['Id_Hustler']) {
									id_hustler = child['Id_Hustler'];
								}
							});
						}
						/**
						 * @todo Rückgabe an Client anpassen je nach Inhalt des XMLRPC-Objects
						 */
						if (Inserts) {
							if (Object.isArray(prefix_arr) && prefix_arr.length > 0) {
								prefix_orderId = new Array();
								prefix_arr.each(function(id){
									if (id == 1 || id == 2) {
										prefix_orderId.push(matchArray.get(id) + '_' + id_auftrag);
									}
									else 
										if (id == 3) {
											prefix_orderId.push(matchArray.get(id) + '_' + id_vorbestellung);
										}
										else if (id == 4) {
											prefix_orderId.push(matchArray.get(id) + '_' + id_beschaffung);
										}
										else if (id == 6) {
											prefix_orderId.push(matchArray.get(id) + '_' + id_hustler);
										}
								});
							}
							Utilities.trackConversion(id_auftrag, vtid, total, dataArray, prefix_orderId);							
							var tabelle = '';
							var id_index = 0;
							var content = '';
							if (controller == 'reservierung') 
								content = "<b>Dein Reservierungs-Auftrag wurde ausgeführt.</b>";
							if (controller == 'warenkorb') {
								/********************************** PayPal-Zahlung *************************************/
								/**
								 * @see https://www.x.com/docs/DOC-1340
								 * Website Payment Standard, Third-Party Shopping Cart, Cart Upload Command
								 */
								if (bezahlart == 1) { // Kauf-Auftrag per Paypal
									// Art und entsprechende ID des Auftrags suchen
									if (id_auftrag > 0) {
										tabelle = "auftrag";
										id_index = id_auftrag;
									}else if (id_vorbestellung > 0) {
										tabelle = "vorbestellung";
										id_index = id_vorbestellung;
									}else if (id_beschaffung > 0) {
										tabelle = "beschaffung";
										id_index = id_beschaffung;
									}else if (id_hustler > 0) {
										tabelle = "hustlerauftrag";
										id_index = id_hustler;
									}
									// PayPal Api - Adresse (ggf. sandbox)
//									var paypalurl = "https://www.sandbox.paypal.com/cgi-bin/webscr";
									var paypalurl = "https://www.paypal.com/cgi-bin/webscr";
									// Unsere PayPal-Firmen-Email
									//var videotaxiemail = "techni_1277736065_biz@videotaxi.de";
									var videotaxiemail = "rechnung@videotaxi.de";
									// Die URL wird auf der PayPal - Seite unter "Zurück zu Videotaxi" angezeigt. Parameter mit # abtrennen, sonst zerhauts dem CI die URL
									var return_url = this.location.href;
									var teile = return_url.split('?');
									return_url = teile[0];
									var teile = return_url.split('#');									
									return_url = teile[0]  + "?zahlungsart=paypal";							
									// Hierhin schickt PayPal das Ergebnis der Zahlung
									var notify_url = "http://" + this.location.host + "/0/apitest_notify";
									// Verstecktes Formular ins Kassenfenster einblenden, und damit den Request an PayPal schicken								
									content = ''//'<b>Warte auf PayPal-Zahlung...</b>\n'
											+'<form id="ppform" action="' + paypalurl + '" target="_blank" method="post">\n' // Ziel des Formulars (PayPal-Adresse)
											+'<input type="hidden" name="cmd" value="_cart">\n' // Wir machen eine Einkaufswagen-Aktion...
											+'<input type="hidden" name="upload" value="1">\n' // ...und zwar Hochladen der Einkaufswagen-Daten zu Paypal
											+'<input type="hidden" name="business" value="' + videotaxiemail + '">\n'; // Über die Händler-E-Mail werden wir identifiziert
									var i = 1;
									// Jede Position einzeln hinzufügen, PayPal verwendet Einzelpreis, wir Gesamtpreis => unseren Preis durch Anzahl teilen
									positionenArrayAll.each(function(pos){
										var titel = decodeURIComponent(pos.get('titel')).replace(/\+/gi , ' '); // URLDecoden und alle + durch leerzeichen ersetzen										
										content += '<input type="hidden" name="amount_' + i + '" value="' + (pos.get('preis') / pos.get('anzahl')).toFixed(2) + '">\n' // Einzelpreis
										//content += '<input type="hidden" name="amount_' + i + '" value="0.01">\n' // Einzelpreis
												+'<input type="hidden" name="item_name_' + i + '" value="' + titel + '">\n' // Name des Artikels
												+'<input type="hidden" name="quantity_' + i + '" value="' + pos.get('anzahl') + '">\n'; // Anzahl
										i++;
									});
									content += '<input type="hidden" name="currency_code" value="EUR">\n' // Währungscode, Euro
											+'<input type="hidden" name="custom" value="' + tabelle + '_' + id_index + '">\n' // Eigener Wert zum Durchschleifen (Tabelle: auftrag, beschaffung, vorbestellung, hustler. id_index: jeweilige Nummer des Auftrags
											+'<input type="hidden" name="image_url" value="http://www.videotaxi.de/images/default/logo-header-614x60px.png">\n' // Logo das in der Paypal-Seite angezeigt wird
											+'<input type="hidden" name="return" value="' + return_url + '">\n' // Auf diese URL wird der Kunde nach erfolgreicher PayPal-Zahlung geleitet
											+'<input type="hidden" name="cpp_payflow_color" value="#FBD60F">' // Hintergrundfarbe der PayPal-Seite
											+'<input type="hidden" name="no_note" value="1">' // Kunde soll keinen Hinweis schreiben dürfen bei Paypal
											+'<input type="hidden" name="no_shipping" value="1">' // Adresse des Kunden nicht anzeigen
											+'<input type="hidden" name="lc" value="de">' // Sprache der PayPal-Seite
											+'<input type="hidden" name="rm" value="2">\n' // return method: 0=alles GET, 1=GET-Url, keine Variablen, 2=POST mit Variablen
											+'<input type="hidden" name="cbt" value="Zurück zu Videotaxi">\n' // Beschriftung des Buttons bei PayPal
											+'<input type="hidden" name="notify_url" value="' + notify_url +'">\n' // Skript, das die Nachricht über Bezahlung verarbeitet
											+'<input type="hidden" name="cancel_ return" value="' + notify_url + '">\n'; // URL die bei abgebrochener Bezahlung aufgerufen wird
									/**
									 * Statt des automatischen Form-Submit muss hie rnoch ein Zwischenschritt mit User-Aktion rein
									 * damit wir die Popup-Blocker umgehen
									 */
									content += '<b>Der Vorgang ist noch nicht abgeschlossen!</b><br /><br />\n'
										+'Vielen Dank, das du dich für die Zahlung per PayPal entschieden hast.<br />\n'
										+'Klicke bitte den untenstehenden Button, um zu PayPal weitergeleitet zu werden und schließe '
										+'die Bestellung ab.<br />\n'
										+'Die PayPal-Seite wird in einem neuen Fenster geöffnet.<br /><br />\n'
										+'<input type="submit" id="ppsubmit" value="weiter zu PayPal" />\n'
										+'</form>\n';
								}
								else {
									content = "<b>Dein Kauf-Auftrag wurde ausgeführt.</b>"
								}
							}
							$('auftrag_inhalt').update(content);
							if ($('ppform')) { // Das unsichtbare PayPal-Formular abschicken
//								$('ppform').submit();
								self.warte_auf_zahlung(id_index,tabelle);
							}
/********************************** ENDE PayPal-Zahlung *************************************/
							cookie = new Cookies;
							
							/**
							 * @todo coockie.clear
							 * für Testzwecke aukommentiert
							 */
							
							cookie.clear(controller);
							if (controller != 'reservierung' && cookie.get('reservierung') && cookie.get('reservierung').length > 0) {
								var content = '';
								content += "<div style='color:red;margin:15px 0px 10px 0px; font-weight:bold;'>";
								content += "Du hast noch weitere Artikel in deiner Reservierungsliste.<br />Möchtest Du diese jetzt bestellen?"
								content += "</div><b>Klicke auf \"ja bitte\" um dir diese Artikel anzeigen zu lassen.</b>";
								content += "<div id='button_back' class='button_back_small'>weiter stöbern</div>";
								content += "<div id='reservierung_laden' class='show_auftrag' q='"+uhash+"'>ja bitte</div>";
								content += "<div class='clear'></div>"
								$('auftrag_inhalt').insert(content);
								if ($('reservierung_laden')) {
									var el = $('reservierung_laden');
									el.observe('click', function(element){
										Kasse.initAuftrag(el, 'vert', el.readAttribute('q'));
									});
								}
								if ($('button_back')) {
									$('button_back').observe('click', function(){
										com.videotaxi.boxes.toggleModal(true);
									})
								}
							}
							if (controller != 'warenkorb' && cookie.get('warenkorb') && cookie.get('warenkorb').length > 0) {
								var content = '';
								content += "<div style='color:red;margin:15px 0px 10px 0px; font-weight:bold;'>";
								content += "Du hast noch weitere Artikel in deiner Einkaufsliste.<br />Möchtest Du diese jetzt bestellen?";
								content += "</div><b>Klicke auf \"ja bitte\" um dir diese Artikel anzeigen zu lassen.</b>";
								content += "<div id='button_back' class='button_back_small'>weiter stöbern</div>";
								content += "<div id='warenkorb_laden' class='show_auftrag' q='"+uhash+"'>ja bitte</div>";
								content += "<div class='clear'></div>"
								$('auftrag_inhalt').insert(content);
								if ($('warenkorb_laden')) {
									var el = $('warenkorb_laden');
									el.observe('click', function(event){
										Kasse.initAuftrag(el, 'vert', el.readAttribute('q'));
									});
								}
								if ($('button_back')) {
									$('button_back').observe('click', function(){
										com.videotaxi.boxes.toggleModal(true);
									})
								}
							}
						}
						else {
							$('auftrag_inhalt').update("<b>Leider konnte zur Zeit dein Auftrag nicht geschrieben werden.<br />Bitte wende dich telefonisch an deine Videothek oder versuche es zu einem späteren Zeitpunkt noch einmal.<br /><br />Vielen Dank für dein Verständnis.</b>");
						}
					},
					onException: function(transport, e){
						//alert("Beim Schreiben des Auftrags ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.\n");
						alert("Exception:"  + e.message + "\n" + e.stack);
					}
				});
				/**
				 * neuer Aufruf Ende
				 */
			}
		} catch (e) {
		   Utilities.bug_tracking(e, 'addAuftrag',1);
		}
	},
	warte_auf_zahlung : function(id,tabelle){ // Fragt die API, ob der Bezahlstatus eines Auftrags/Vorbestellung/Beschaffung/Hustler auf "Completed"
	//steht, und wenn das so ist, melde den Erfolg, und blende das Kassen-Overlay aus.
			var i=0;
			var pe = new PeriodicalExecuter(function()	{
				var url = "http://" + location.hostname + "/" + com.videotaxi.kunden.vtid + "/ajax";
				var whereHash = new Hash();
				whereHash.set("id_index" , id);
				whereHash.set("tabelle" , tabelle);
				whereHash.set("status" , "Completed");
				var fieldArr = new Array('status');
				var allHash = new Hash();
				allHash.set('where', whereHash);
				allHash.set('fields',fieldArr);
				var paramArr = new Array("bezahlen", "", "Paypal", allHash);
				var auftragCall = new Ajax.RPCRequest(url, {
					methodName: 'get',
					methodParams: paramArr,
					contentType: 'text/xml',
					onComplete: function(transport){
						var erg = auftragCall.responseObject;
//						console.log("Response erhalten");
						if (erg && erg.length > 0) {
							erg.each(function(child){
								for(key in child){
//									console.log(key + " => " + child[key]);
									if(key == "status" && child[key] == "Completed"){
										$('auftrag_inhalt').update("<b>Die PayPal-Bezahlung wurde erfolgreich abgeschlossen</b><br /><br />\n"
										+"Deine Bestellung wurde weitergeleitet und du bekommst in Kürze eine Bestätigung per E-Mail."
										);
//										com.videotaxi.boxes.toggleModal(true);
										pe.stop();
									}									
								}
							})
						}			
					},
					onException: function(transport, e){
						//alert("Beim Schreiben des Auftrags ist ein Fehler aufgetreten.\nBitte versuche es zu einem späteren Zeitpunkt noch einmal.\n");
						alert("Exception:"  + e.message + "\n" + e.stack);
					}
				});		
		},5)		
	}	
});
var Mr_Peterson = Class.create({
	initialize: function() {
		this.queue = new Hash();
		this.Ee = new Ee();
	},
	initQueue: function(arg){
		try {
			var constructor;
			if (typeof arg === 'function') {
				constructor = arg;
				for (var method in constructor) {
					if (typeof constructor[method] === 'function') {
//						Utilities.console_log(method);
					}
				}
			}
			else if (typeof arg === 'object') {
				constructor = arg;
				for (var method in constructor) {
					if (typeof constructor[method] === 'function') {
//						Utilities.console_log(method);
					}
				}
			}
			else if(Object.isArray(arg)){
//				arg.each(Utilities.console_log(method));
				return true;
			}
			else{
				throw "falscher Übergabe-Typ";
			}
		} catch (e) {
			Utilities.bug_tracking(e, 'initQueue',1);
		}
	},
	addLoop: function(method,count){
		try {
			if (this.queue.keys().include(method)) {
				var current = (count)?count:this.queue.get(method);
				current++;
	//			Utilities.console_log(method + " loop ++");
				this.queue.set(method, current);
				return true;
			}
		} catch (e) {
			Utilities.bug_tracking(e, 'addLoop',1);
		}
	},
	countDone: function(method){
		try{
			if (this.queue.keys().include(method)) {
				var current = this.queue.get(method);
				current--;
	//			Utilities.console_log(method + " loop --");
				this.queue.set(method, current);
			}
		} catch (e) {
			Utilities.bug_tracking(e, 'countDone',1);
		}
	},
	startLoop: function(method,count){
		try {
			if(!this.queue.keys().include(method)){
					this.queue.set(method,count);
//					Utilities.console_log(method + " queue ++");
					return true;
			}else{
				if(this.addLoop(method,count)){
					return true;
				}
			}
		} catch (e) {
			Utilities.bug_tracking(e, 'startLoop',1);
			return false;
		}
	},	
	endLoop: function(method){
		try {
			if(this.queue.keys().include(method)){
				this.queue.set(method,'0'); //sicherheitshalber auf 0 setzen falls unset fehlschlägt
				this.queue.unset(method);
//				Utilities.console_log(method + " queue --");
				if(!this.queue.keys().include(method)){
					return true;
				}else{
					return false;
				}
				
			}
		} catch (e) {
			Utilities.bug_tracking(e, 'endLoop',1);
			return false;
		}
	},
	loopRunning: function(method){
		try {
			if (this.queue.keys().include(method)) {
				if (this.queue.get(method) == 0) {
//					Utilities.console_log("not running " + this.queue.get(method) + "  um " + new Date().getSeconds() + " " + new Date().getMilliseconds());
					return false;
				} else if (this.queue.get(method) > 0) {
//					Utilities.console_log("running  um " + new Date().getSeconds() + " " + new Date().getMilliseconds());
					return true;
				}
			}else{
//				Utilities.console_log("not running  um "+new Date().getSeconds()+" "+new Date().getMilliseconds());
				return false;
			}
		} catch (e) {
			Utilities.bug_tracking(e, 'loopRunning',1);
			return false;
		}
	}
});
var Ee = Class.create({
	initialize:function(){
		if ( window.addEventListener ) {
			var kkeys = [], konami = "38,38,40,40,37,39,37,39,66,65";
			window.addEventListener("keydown", function(e){
				kkeys.push( e.keyCode );
				if ( kkeys.toString().indexOf( konami ) >= 0 ){
					alert("Bunte Eier");
					kkeys = [];
				}
//				window.location = "http://ejohn.org/apps/hero/";
			}, true);
		}
	}
	
})

