var jumperCalc = {

	version: '1.0',
	
	init: function() {
	
		this.options = {
			fields: ['adr_name','adr_street','adr_house_number','adr_zip_code','adr_city','adr_country_code']
		};
	},
	
	wrapper: function() {
	
		this.init();
		
		var container = new Element('iframe').setProperties({
			'src':'http://kunden.advanced-courier.com/ajax-jumpercalc.php', 'name':'jumperCalcInline', 'id':'jumperCalcInline', 'scrolling':'no', 'frameborder':'0'
		});
		
		var options = {buttons: 0, width: 540, height: 485};
		var prompt = new MooPrompt('Kalkulator', container, options);
		
		$(document.getElementsByTagName('h3')[0].parentNode.parentNode).setProperty('id','jCalc');
		$(document.getElementsByTagName('h3')[0]).setHTML(
			'<div class="box-title">'+document.getElementsByTagName('h3')[0].innerHTML+'</div>'+
			'<div class="box-close"><a id="buttonClose" href="javascript:void(0)" title="Fenster schließen">X</a></div>'+
			'<div class="clear"></div>'
		);
		$('buttonClose').addEvent('click', prompt.close.pass([], prompt));
		
		return false;
	},
	
	prepare: function(args) {
	
		var form = $('formJumperCalc');
		if (form) {
		
			form.elements['jcalc_distance'].value = 0;
			form.elements['jcalc_price'].value = 0;
			
			form.elements['confirm'].disabled = true;
			form.elements['confirm'].onclick = function(){
			
				var param = '?jcalc=1' + 
							'&jcalc_auth=1' + 
							'&jcalc_distance=' + form.elements['jcalc_distance'].value + 
							'&jcalc_price=' + form.elements['jcalc_price'].value + 
							'&jcalc_reference=' + form.elements['jcalc_reference'].value + 
							'&customer_id=' + form.elements['customer_id'].value + 
							'&customer_auth=' + form.elements['customer_auth'].value + 
							'&service_type_id=' + form.elements['service_type_id'].value + 
							'&courier_type_id=' + form.elements['courier_type_id'].value + 
							
							'&s_name=' + (form.elements['s_address'].value ? escape(form.elements['s_address'].value.split('||')[0]) : '') + 
							'&s_street=' + escape(form.elements['s_adr_street'].value) + 
							'&s_number=' + escape(form.elements['s_adr_house_number'].value) + 
							'&s_zip=' + escape(form.elements['s_adr_zip_code'].value) + 
							'&s_city=' + escape(form.elements['s_adr_city'].value) + 
							'&s_country=' + escape(form.elements['s_adr_country_code'].value) + 
							
							'&r_name=' + (form.elements['r_address'].value ? escape(form.elements['r_address'].value.split('||')[0]) : '') + 
							'&r_street=' + escape(form.elements['r_adr_street'].value) + 
							'&r_number=' + escape(form.elements['r_adr_house_number'].value) + 
							'&r_zip=' + escape(form.elements['r_adr_zip_code'].value) + 
							'&r_city=' + escape(form.elements['r_adr_city'].value) + 
							'&r_country=' + escape(form.elements['r_adr_country_code'].value) + 
							
							'&' + args.sess_name + '=' + args.sess_id;
				
				window.top.location = '/cams/shipping/route.html'+param;
				return false;
			}.bind(this);
			
			var elements = form.getElementsByTagName('input');
			for (var i=0; i<elements.length; i++) {
			
				if (elements[i].getAttribute('type')=='text') {
					elements[i].onkeyup = function(){
						form.elements[this.name.substr(0,2)+'address'].selectedIndex = 0;
						form.elements['jcalc_distance'].value = 0;
						form.elements['jcalc_price'].value = 0;
						form.elements['confirm'].disabled = true;
						
						$('tx_distance').setHTML('-');
						$('tx_price').setHTML('-');
					};
				}
			}
			this.update(form.elements['s_address']);
		}
	},
	
	update: function(field) {
	
		this.init();
		
		var form = $('formJumperCalc');
		var code = field.name.substr(0,2);
		
		var s_element = form.elements['s_address'];
		var r_element = form.elements['r_address'];
		
		if (s_element.value==r_element.value) {
			r_element.selectedIndex = 0;
			code = 'r_';
			var value = false;
		} else {
			var value = (field.value=='' ? false : field.value);
		}
		
		var stack = (value ? value.split("||") : []);
		
		for (var i=1; i<this.options.fields.length; i++) {
			form.elements[code+this.options.fields[i]].value = (value ? stack[i] : '');
		}
		
		form.elements['confirm'].disabled = true;
		this.calculate();
	},
	
	calculate: function() {
	
		$('tx_distance').setHTML('-');
		$('tx_price').setHTML('-');
		
		if (this.validate() && GBrowserIsCompatible()) {
		
			var form = $('formJumperCalc');
			var route = [
				form.elements['s_adr_street'].value+' '+
				form.elements['s_adr_house_number'].value+', '+
				form.elements['s_adr_zip_code'].value+' '+
				form.elements['s_adr_city'].value,
				
				form.elements['r_adr_street'].value+' '+
				form.elements['r_adr_house_number'].value+', '+
				form.elements['r_adr_zip_code'].value+' '+
				form.elements['r_adr_city'].value
			];
			
			var div = document.createElement('div');
			var gdir = new GDirections(null, div);
			GEvent.addListener(gdir, 'addoverlay', function(){
			
				if (gdir.getNumRoutes() == route.length-1) {
					var distance = Math.ceil(gdir.getRoute(0).getDistance().meters/1000);
				} else {
					var distance = 0;
				}
				this.display(distance,route);
			}.bind(this));
			
			gdir.loadFromWaypoints(route);
		}
	},
	
	validate: function() {
	
		var form = $('formJumperCalc');
		var valid = true;
		
		var prefix = ['s_','r_'];
		var fields = this.options.fields;
		
		for (var i=0; i<prefix.length; i++) {
			for (var j=1; j<fields.length; j++) {
				if (!form.elements[prefix[i]+fields[j]].value) {
					valid = false;
				}
			}
		}
		return valid;
	},
	
	display: function(d,r) {
	
		var form = $('formJumperCalc');
		var dist = (d || 0);
		
		new Element('form').setProperties({
			action: '/ajax/calculatePrice' + 
					'?serviceId=2' + 
					'&customer_id=' + form.elements['customer_id'].value + 
					'&service_type_id=' + form.elements['service_type_id'].value + 
					'&courier_type_id=' + form.elements['courier_type_id'].value + 
					'&s_address=' + (r[0] ? escape(r[0]) : '') + 
					'&r_address=' + (r[1] ? escape(r[1]) : '') + 
					'&distance=' + dist
		}).send({
			onComplete: function(request){
			
				var response =  eval('(' + request.substr(4) + ')');
				if (response.success) {
					var price = (parseFloat(response.price)/100).toFixed(2).replace(/\./, ',');
					
					$('tx_distance').setHTML(dist+' km');
					//if (form.elements['customer_id'].value=='992') window.status=response.debug;
					$('tx_price').setHTML('&euro; '+price);
					
					form.elements['jcalc_distance'].value = dist;
					form.elements['jcalc_price'].value = response.price;
					form.elements['jcalc_reference'].value = response.reference;
					
					form.elements['confirm'].disabled = false;
				}
			}.bind(this)
		});
	}
};

