/**
 * 
 * 
 * @author Kay Petzold <kay.petzold@mindbox.de> 
 * @version 1.0
 * @copyright Copyright &copy; 2001-2008, Mindbox OHG
 * 
 * @package 
 * @subpackage 
 */
// namespace für Mindbox (de.mbx)
if(!de){var de={};}
if(!de.mbx){de.mbx={};}

/**
 * TODO: logger anbinden von log4moo.getLogger('mbx');
 * @see http://getfirebug.com/logging.html
 * @package de.mbx
 * @class 
 */
de.mbx.Logger = {
	
	log: function(message, level){
		if(console){		
			if(!level){
				level = 'info';
			}
			var now = new Date();
			now = now.toLocaleString();
			var func = "log";
			//console.debug, console.info, console.warn, and console.error.
			if(console[level]){
				func = level;
			}
			console[func](now + "\t[" + level + "]\t" + message);
		}
		
	},
	debug: function(message){
		//var arguments = (arguments)? arguments : debug.arguments;
		this.log(message, 'debug');
	},
	info: function(message){this.log(message, 'info')},
	warn: function(message){this.log(message, 'warn')},
	error: function(message){this.log(message, 'error')}
};

// namespace
if(!de.mbx.ticketsystem){ de.mbx.ticketsystem = {};}

/**
 * Diese Klasse ist für den Zugiff auf den orderprozess
 * sie dient als Manager 
 * @package de.mbx.ticketsystem
 * @class
 */
de.mbx.ticketsystem.Ordering = new Class({
	Implements: Options,
	//Extends: Base
	version: '0.1',
	form: null,
	options: {
		steps:[]
	},
	Step: {
		TICKET:   1,
		PAYMENT:  2,
		CUSTOMER: 3,
		VALIDATE: 4,
		CONFIRM:  5
	},
	steps: [],
	current: {pk:'',pay:''},
	ajaxPageLoader: {},
	/**
	 * @param {Element} form
	 * @param {Object} options
	 * @constuctor
	 */
	initialize: function(form, options){
		//de.mbx.Logger.debug('{Ordering} init object');
		this.setOptions(options);
		this.form = form;
		
		//init 
		this.initTicket();
		this.initPayment();
		
		
		//lade die zusätzlichen masken
		this.load(this.Step.PAYMENT);
		this.load(this.Step.CUSTOMER);
		// ändere den Button auf step2
		
		var btn = $('submitBtn');
		if(btn)
		{
			/*
			if(this.current.pay != 'card'){
				btn.set('class', 'submit');
				btn.set('value', 'Abschicken');
			}
			*/
			btn.setProperty('name', 'step2');
			btn.addEvent('click', this.submit.bind(this));			
		}
		
		this.ajaxPageLoader = new Overlay(); 
	},
	initTicket: function(){		
		$$('.priceCategory').each(function(el){
			if(el.setProperty('checked') == true){
				pk = el.setProperty('id').toString().trim().toLowerCase();
			}
			el.addEvent('click', this.clickPriceCategory.bind(this));
		}.bind(this));
	},
	initPayment: function(){
		//var btn = $('submitBtn');
		if($('payment_type_depit').getProperty('checked')){
			this.current.pay = 'depit';
			/*
			if(btn){
				btn.set('class', 'submit');
				btn.set('value', 'Abschicken');
			}
			*/
		}else if($('payment_type_card')){ 
			if($('payment_type_card').getProperty('checked')){
				this.current.pay = 'card';		
				/*	
				if(btn){
					btn.set('class', 'next');
					btn.set('value', 'Weiter');
				}
				*/
			}
		}
		
		//events
		$('payment_type_depit').addEvent('click', function(e){
			if(this.current.pay != 'depit'){
				this.load(this.Step.PAYMENT);
			}
		}.bind(this));
		if($('payment_type_card')){
			$('payment_type_card').addEvent('click', function(e){
				if(this.current.pay != 'card'){
					this.load(this.Step.PAYMENT);
				}
			}.bind(this));
		}
	},
	initCustomer: function(){
		
	},
	initConfirm: function(){

		if(this.current.pay != 'card'){
			var btn = box.contentContainer.getElement('input[type=submit]');
			if(btn){
				btn.addEvent('click', function(e){
					new Event(e).stop();
					var a = this.form.get('action');
					a = a.replace('templateID=5', 'templateID=6');
					s = new Element('input', {'value': 1, 'name': 'step3', 'type': 'hidden'});
					s.inject(this.form);
					this.form.set('action', a);
					this.form.submit();
				}.bindWithEvent(this));
			}
		}	
	},
	/**
	 * Lädt die Masken mithilfe ihres Steps
	 * @param {interger} step
	 * 
	 */
	load: function(step, target, call){
		//de.mbx.Logger.debug('{Ordering} load step: ' + step);
		
		var url = '/ticketsystem/frontend/includeindex.php' + window.location.search + '&ajaxStep=' + step;
		if(step == this.Step.TICKET){
			var r = new Request.HTML({
				url: url,
				method: 'post',
				encoding: 'ISO-8859-1',
				data: this.form.toQueryString(),
				onComplete: function(rTree, rEl, rHtml, rJs){
					/*
					var el= new Element('div', {'html': rHtml}).getFirst('fieldset');
					if($('ticket')){
						el.replaces($(''));
					}else{
						el.inject($('ticket'), 'after');
					}
					this.initTicket();
					*/
				}.bind(this)
			});
			r.send();
		}else if(step == this.Step.PAYMENT){			
			var r = new Request.HTML({
				url: url,
				method: 'post',
				encoding: 'ISO-8859-1',
				data: this.form.toQueryString(),
				onComplete: function(rTree, rEl, rHtml, rJs){
					var el= new Element('div', {'html': rHtml}).getFirst('fieldset');
					if($('payment')){
						el.replaces($('payment'));
					}else{
						el.inject($('ticket'), 'after');
					}
					this.initPayment();
				}.bind(this)
			});
			r.send();
			
		}else if(step == this.Step.CUSTOMER){
			var r = new Request.HTML({
				url: url,
				method: 'post',
				encoding: 'ISO-8859-1',
				data: this.form.toQueryString(),
				onComplete: function(rTree, rEl, rHtml, rJs){
					var el = new Element('div', {'html': rHtml}).getFirst('fieldset');
					if($('customer')){
						el.replaces($('customer'));
					}else{
						el.inject($('payment'), 'after');
					}
					this.initCustomer();
				}.bind(this)
			});
			r.send({step:this.Step.CUSTOMER});
		}		
	},
	/**
	 * sende das
	 * @param {Event} e
	 */
	submit: function(e){
		var e = new Event(e);
		e.stop();
		//this.ajaxPageLoader.show();
		var r = new Request.HTML({
			url: '/ticketsystem/frontend/includeindex.php' + window.location.search + '&ajaxStep=' + this.Step.VALIDATE,
			encoding: 'ISO-8859-1',
			data: this.form.toQueryString(),
			metode: 'post',
			onComplete: function(rTree, rEl, rHtml, rJs){
				//check for error
				//de.mbx.Logger.debug(r.getHeader('X-Valid'));
				var valid = (r.getHeader('X-Valid') ? r.getHeader('X-Valid').toLowerCase() : 'false')
				var fC = $('formContainer');
				var fHtml = rHtml;
				rHtml = '';
				if(!$empty(fHtml)){
					var fC = $('formContainer');
					if(fC){
						fC.set('html', fHtml);
						// init events
						this.initTicket();
						this.initPayment();
						this.initCustomer();
					}
				}
				
				if(valid == 'true'){
					//check vor payment
					// get the confirm dialog
					var url = '/ticketsystem/frontend/includeindex.php' + window.location.search + '&ajaxStep=' + this.Step.CONFIRM;
					var rConfirm = new Request.HTML({
						url: url,
						method: 'post',
						encoding: 'ISO-8859-1',
						data: this.form.toQueryString(),
						onComplete: function(rTree, rEl, rHtml, rJs){
							var cB = $('confirm');
							var cBC = $('confirmElement');
							if(!cB){
								var cB = new Element('a', {
									'id': 'confirm',
									'class': 'mb',
									'title': 'Confirm',
									'rel': 'type:element',
									'styles': {'visibility': 'hidden'}
								});
								cB.inject($('submitBtn'), 'before');
							}
							cB.content = new Element('div', {
								'id': 'confirmElement', 
								'styles': {'background-color': '#262523', 'display': 'block', 'position': 'absolute'},
								'html': rHtml
							});
							if(cBC){
								cB.content.replaces(cBC);
							}else{
								//cB.content.inject(cB, 'after');
								cB.content.inject(document.body);
							}
							box.content[box.content.length] = cB;
							box.removeEvents('complete');
							box.addEvent('complete', this.initConfirm.bindWithEvent(this));
							box.open(cB);
						}.bind(this)
					});
					rConfirm.send();
					
					/*
					var pCard = $('payment_type_card');
					if(pCard.getProperty('checked') == true){
						var url = '/ticketsystem/frontend/includeindex.php' + window.location.search + '&ajaxStep=' + this.Step.PAYMENT + '&3dsecure=1';
						var rPayment = new Request.HTML({
							url: url,
							method: 'post',
							encoding: 'ISO-8859-1',
							data: this.form.toQueryString(),
							onComplete: function(rTree, rEl, rHtml, rJs){								
								var fC = $('payment_card_form')
								if(fC){
									fC = fC.getParent('div');
								}
								if(fC){
									fC.set('html', rHtml);
								}else{
									var el= new Element('div', {'html': rHtml });//, 'styles': {'display': 'none'}
									el.inject(this.form,'after');
								}
								var f = $('payment_card_form'); //.getChildren('input [type=submit]');
								if(f){
									f.submit();
									//f.fireEvent('click');
								}
							}.bind(this)
						});
						rPayment.send();
					}else{
						var a = this.form.get('action');
						a = a.replace('templateID=5', 'templateID=6');
						s = new Element('input', {'value': 1, 'name': 'step2', 'type': 'hidden'});
						s.inject(this.form);
						this.form.set('action', a);
						//this.form.fireEvent('submit');
						this.form.submit();
					}
					*/
				}
				//this.ajaxPageLoader.hide();				
			}.bind(this),
			onFailure: function(instance){
				//this.ajaxPageLoader.hide();	
			}.bind(this)		
		}).send();
	},
	/**
	 * Gibt die aktuell ausgewählte Preiskategorie zurück 
	 * @return {String}
	 */
	getPriceCategory: function(){
		var pk = "";
		$$('.priceCategory').each(function(el){			
			if(el.getProperty('checked') == true){
				pk = el.getProperty('id').toString().trim().toLowerCase();
			}
		});
		//ersetzte PG -> pk
		pk = pk.replace('pg', 'pk');
		//de.mbx.Logger.debug('{Ordering} getPriceCategory ' + pk);
		return pk;
	},
	/**
	 * Setzt die Preiskategorie auf die übergebene
	 * @param {String} pk
	 */
	setPriceCategory: function(pk){
		pk = pk.toString();
		pk = pk.replace('pk', 'pg').toUpperCase();
		//de.mbx.Logger.debug('{Ordering} setPriceCategory ' + pk);
		if($(pk)){
			$(pk).setProperty('checked', true);
		}
		/*
		$$('.priceCategory').each(function(el){
			if(el.getProperty('id') == pCat){
				el.setProperty('checked', true);
			}else{
				//el.setProperty('checked', false);
			}			
		});
		*/
	},
	clickPriceCategory: function(e){
		var e = new Event(e);
		var el = e.target;
		//el.getProperty('id').toString();
		// prüfe ob die gewählte preiscategory verfügbar is
		//if(this.steps[this.Step.TICKET].r){this.steps[this.Step.TICKET].r.cancel()};
		var url = '/ticketsystem/frontend/includeindex.php' + window.location.search + '&ajaxStep=' + this.Step.PAYMENT;
		var r = new Request.HTML({
			url: url,
			data: '',
			onComplete: function(rTree, rEl, rHtml, rJs){
				
			}
		});
		
	}
	
});
/**
 * @class
 */
de.mbx.ticketsystem.Ticket = new Class({
	/**
	 * @param {Element} el
	 * @constuctor
	 */
	initialize: function(el){
		this.el = new Element(el);
		// add Events
		$$('.priceCategory').each(function(el){
			if(el.setProperty('checked') == true){
				pk = el.setProperty('id').toString().trim().toLowerCase();
			}
			el.addEvent('click', this.clickPriceCategory.bind(this));
		}.bind(this));
	},
	/**
	 * Gibt die aktuell ausgewählte Preiskategorie zurück 
	 * @return {String}
	 */
	getPriceCategory: function(){
		var pk = "";
		$$('.priceCategory').each(function(el){			
			if(el.getProperty('checked') == true){
				pk = el.getProperty('id').toString().trim().toLowerCase();
			}
		});
		//ersetzte PG -> pk
		pk = pk.replace('pg', 'pk');
		//de.mbx.Logger.debug('{Ordering} getPriceCategory ' + pk);
		return pk;
	},
	/**
	 * Setzt die Preiskategorie auf die übergebene
	 * @param {String} pk
	 */
	setPriceCategory: function(pk){
		pk = pk.toString();
		pk = pk.replace('pk', 'pg').toUpperCase();
		//de.mbx.Logger.debug('{Ordering} setPriceCategory ' + pk);
		if($(pk)){
			$(pk).setProperty('checked', true);
		}
		/*
		$$('.priceCategory').each(function(el){
			if(el.getProperty('id') == pCat){
				el.setProperty('checked', true);
			}else{
				//el.setProperty('checked', false);
			}			
		});
		*/
	},
	clickPriceCategory: function(e){
		var e = new Event(e);
		var el = e.target;
		//el.getProperty('id').toString();
		// prüfe ob die gewählte preiscategory verfügbar is
		//if(this.steps[this.Step.TICKET].r){this.steps[this.Step.TICKET].r.cancel()};
		var url = '/ticketsystem/frontend/includeindex.php' + window.location.search + '&ajaxStep=' + this.Step.PAYMENT;
		var r = new Request.HTML({
			url: url,
			data: '',
			onComplete: function(rTree, rEl, rHtml, rJs){
				
			}
		});		
	}
});
/**
 * @class
 */
de.mbx.ticketsystem.Payment = new Class({
	/**
	 * @param {Element} el
	 * @constuctor
	 */
	initialize: function(el){
		this.el = new Element(el);
	}
});
/**
 * @class
 */
de.mbx.ticketsystem.Customer = new Class({
	/**
	 * @param {Element} el
	 * @constuctor
	 */
	initialize: function(el){
		this.el = new Element(el);
	}
});

de.mbx.ticketsystem.Card = null;


