
var calcx;

var Calc = new Class({

	initialize: function(cart) {
		var that = this;
		this.cars = {};
		this.versions = varustelutasot;  // varustelutaso defined in db component
		this.cart = cart;
		this.weights = [[2501, 2550, 6.8], [2551, 2600, 8.5], [2601, 2650, 9.8], [2651, 2700, 10.8],
			[2701, 2750, 11.7], [2751, 2800, 12.4], [2801, 2850, 13.1], [2851, 2900, 13.7],
			[2901, 2950, 14.2], [2951, 3000, 14.8], [3001, 3050, 15.3], [3051, 3100, 15.7],
			[3101, 3150, 16.1], [3151, 3200, 16.6], [3201, 3250, 16.9], [3251, 3300, 17.3],
			[3301, 3350, 17.7], [3351, 3400, 18.0], [3401, 3450, 18.4], [3451, 3500, 18.7]];
			
			
	},

	load_models: function() {
		var that = this;
		
		var select = $('sel-malli').set('disabled', true);
		$('sel-malli').empty();
		var default_opt = new Element('option', {
			'value': '',
			'html': ' – Valitse – '
		}).inject(select);

		var sarja = $('sel-mallisarja').get('value');
		if (sarja == '') return false;
		
		//var varustetaso = $('sel-varustetaso').get('value');
		//if (varustetaso == '') return false;

		var req = new Request.JSON({
			url: '/autot/esittely/hinnat_ja_varusteet/mallit-ajax',
			method: 'get',
			//data: 'sarja=' + encodeURIComponent(sarja) + '&varustetaso=' + encodeURIComponent(varustetaso)
			data: 'sarja=' + encodeURIComponent(sarja)
		}).addEvent('success', function(json, text) {
			var cart_model = that.cart.models[that.cart.current_model];
			if (cart_model) var exact_model = cart_model.exact_model;
			that.cars[sarja] = new Hash();
			json.result.each(function(model) {
				that.cars[sarja].set(model.mallinimi, model);
				var opt = new Element('option', {
					'value': model.mallinimi,
					'html': model.mallinimi,
					'selected': exact_model == model.mallinimi });
				opt.inject(select);
			});
			select.set('disabled', false).fireEvent('change');
		}).send();
	},
	
	add_item: function(id, title, price) {
		var subtitle = title;
		if(title.length>30) {
			subtitle = subtitle.substr(0,30).replace(/^\s+|\s+$/g, '') + '...';
		}
		var item = new Element('li', {
			'html': '<a href="#remove" class="icon icon-del">Poista</a>' + 
				'<span class="value">' + price + ' €</span>' + subtitle
		})
		.inject($$('#calc .items')[0])
		.addEvent('click', function() {
			if (confirm('Poistetaanko varuste?')) {
				calcx.cart.remove_item($('sel-mallisarja').get('value'), id);
				calcx.calculate();
			}
		}).set('title', title + ' - Poista varuste');
	},
	
	empty_items: function() {
		$$('#calc .items')[0].empty();	
	},
	
	reset: function() {
		//this.empty_items();
		//$('sel-mallisarja').set('selectedIndex', 0).fireEvent('change');
		//$('sel-mallisarja').set('value', '').fireEvent('change');
		cartx.empty();
		calcx.load_models();
	},
	
	tax: function(price_car, price_extras, co2, mass) {
		var price_common = Math.floor(price_car <= 1720 ? (price_car * 0.8) : (price_car * 0.945 - 250));
		var tax_percent = co2 <= 60 ? 12.2 : (co2 <= 360 ? (Math.round((co2 / 10 + 4) * 1.22 * 10) / 10) : 48.8);
		if (mass) {
			for (var i = 0; i < this.weights.length; i++) {
				var min = this.weights[i][0];
				var max = this.weights[i][1];
				if (mass >= min && mass <= max)
					tax_percent -= this.weights[i][2];
			}
		}
		var price_common_with_extras = price_common + price_extras * 0.945;
		var tax_value = Math.round(price_common_with_extras / (1 - tax_percent / 100) * 100) / 100;
		var tax_sum = Math.floor(tax_value * tax_percent) / 100;
		return tax_sum;
	},
	
	calculate: function() {
		var sarja = $('sel-mallisarja').get('value');
		if (sarja == '') return false;

		var model = this.cars[sarja].get($('sel-malli').get('value'));
		if (! model) return false;

		this.empty_items();

		// Add extras, i.e. items
		var m = this.cart.models[sarja];
		if (m && m.version == this.versions[model.varustetasot] && m.items) {
			new Hash(m.items).each(function(item, id) {
				if (item != null) {
					calcx.add_item(id, item.name, item.price);
				}
			});
		}
		//$$('#calc .items li:nth-child(odd)').addClass('odd');
		$$('#calc .result .no-items').setStyle('display', $$('#calc .result .items LI').length > 0 ? 'none' : 'block');
	
		// Calculate total sum of extras
		var extras_price = 0;
		$$('#calc .items .value').each(function(elem) {
			extras_price += parseInt(elem.get('text'));
		});
		$$('#calc .price-extras > .value')[0].set('text', extras_price + ' €');
		
		// Add car data, calcxulate tax
		var car_price = parseInt(model.mallin_hinta);
		var tax = this.tax(car_price, extras_price, parseInt(model.co2_gkm), parseInt(model.massa));
		var total = Math.round((car_price + extras_price + tax) * 100) / 100;
		$$('#calc .price-car .car-model').set('text', model.mallinimi);
		$$('#calc .price-car .value').set('text', car_price + ' €');
		$$('#calc .co2 .value').set('text', model.co2_gkm + ' g/km');
		$$('#calc .tax .value').set('text', tax + ' €');
		$$('#calc .total .value').set('text', total + ' €');
		$$('#calc .help').setStyle('display', 'none');
		$$('#calc .result').setStyle('display', 'block');
	},
	
	mail: function() {
		
	},
	
	load_extras: function(sarja, sarja_name, exact_model) {
		if (! sarja || ! exact_model) return false;
		var extras = $$('#calc.generic #extras');
		var varustetaso_pid = calcx.cars[sarja][exact_model]['varustetasot'];
		if (extras.length > 0) {
			var req = new Request.HTML({
				url: '/myynti_ja_palvelut/laskuri/varusteet-ajax',
				method: 'get',
				data: 'real_malli=' + encodeURIComponent(sarja_name) + '&varustetaso=' + encodeURIComponent(varustetaso_pid)
			}).addEvent('success', function(responseTree, responseElements, responseHTML, responseJavaScript) {
				extras[0].set('html', responseHTML);
				zebra($$('#extras .zebra')[0]);
				var version = $$('#extras TR:first-child TH:last-child')[0].get('text');
				//cartx.models[cartx.current_model].version = version;
				cartx.init_model(version, false);
				cartx.bind_prices();
				cartx.refresh();
			}).send();
		}
	}

});

window.addEvent('domready', function() {

	calcx = new Calc(cartx);	

	var sarja = $('sel-mallisarja')
		.addEvent('change', function() {
			sarja = $(this).get('value');
			var model_info = $('model-info');
			if (sarja) {
				cartx.current_model = sarja;
				cartx.save();
				calcx.load_models();
				if (model_info) {
					var href = model_info.get('href');
					model_info.set('href', href.replace(/malli=[^&]*/, 'malli=' + sarja));
					model_info.fade('show');
				}
			} else {
				$('sel-malli')
					.set('value', '')
					.set('disabled', true)
					.fireEvent('change');
				$$('#calc .help').setStyle('display', 'block');
				$$('#calc .result').setStyle('display', 'none');
				if (model_info) model_info.fade('hide');
			}
			var extras = $('extras');
			if (extras) extras.set('html', '');
		})
		.get('value');
		
	$('sel-varustetaso').addEvent('change', function() {
		calcx.load_models();
	});

	$('sel-malli').addEvent('change', function() {
		var cart_model = cartx.models[cartx.current_model];
		if (cart_model) {
			cartx.models[cartx.current_model].exact_model = $(this).get('value');
			cartx.save();
		}
		calcx.calculate();
		var sarja_name = $$('#sel-mallisarja [selected]')[0].get('text');
		calcx.load_extras(sarja, sarja_name, $(this).get('value'));
	});
	
	$$('#calc .reset')[0].addEvent('click', function(e) {
		if (window.confirm('Tyhjennys poistaa valitsemasi varusteet. Haluatko jatkaa?')) {
			cartx.empty();
			window.location.reload();
		}
		return false;
	});

	$$('#calc .print')[0].addEvent('click', function(e) {
		window.print();
		return false;
	});
		
	var cart_model = cartx.current_model;
	if (cart_model && cart_model == sarja) {
		var m = cartx.models[cart_model];
		if (m && m.version) {
			$$('#sel-varustetaso OPTION').each(function(option) {
				if ($(option).get('text') == m.version) {
					$(option).set('selected', true);
					var text = $(option).get('text');
					$(option).set('text', text + ' (valittu keräilykoriin)');
				}
			});
		}
	}
	
	$('sel-mallisarja').fireEvent('change');
	
	if (cartx.models[cartx.current_model] && ! window.enable_model_selection) {
		$$('#calc .model')[0].removeClass('hidden');
		$$('#calc .model .name').set('text', cartx.models[cartx.current_model].exact_model);
	} else {
		$$('#calc .help')[0].removeClass('hidden');
	}
			
});
