﻿

var Calculator = new Class({
	
	getOptions: function(){
		return {
			challengeUpdateController: '',
			missionUpdateController: 'update_mission',
			ajaxOptions: '',
			updater_controller: '',
			postData: {},
			ajaxOptions: {},
			postVar: 'value'
		};
	},

	initialize: function(json, options){
		
		this.setOptions(this.getOptions(), options);
		
		this.fontsArray = eval(json);
		
		pepe = 'Electricitat';
		
		//alert(this.fontsArray[pepe].factor);
		
		
		$$('.calculable').each(function(el) {
			el.onclick = this.openForm.pass(el, this);
		}, this);
		
		this.setUpForm();
		
		
	},
	
	openForm: function(element) {
		
		this.overlay = new Overlay({container: document.body, opacity:0.6});
		this.overlay.show();

		
		var formType = element.getProperty('calc');
		
		var fontName = element.getProperty('font');
		
		$('sourceTitle').innerHTML = this.fontsArray[fontName].font;
		
		if ( formType == 'one' ) {
			$('unitat').innerHTML = this.fontsArray[fontName].unitats;
			$('oneFieldset').style.display = '';
			$('twoFieldset').style.display = 'none';
		}
		else if ( formType == 'two' ) {
			$('twoFieldset').style.display = '';
			$('oneFieldset').style.display = 'none';
		}
		
		//$('unitat') = this.fontsArray
		
		this.setUpCalculators(fontName);
		
		$('sourceCalculator').style.display = '';

		
	},
	
	setUpForm: function() {
		
		$('calculatorClose').addEvent('click', function() {
			this.closeForm();
			return false;
		}.bind(this));
		
		$('sumarAlTotal').addEvent('click', function(e) {
			new Event(e).stop();
			this.addToTotal(); 
		}.bind(this));
		
	},
	
	restartForm: function() {
		$('resultatMobilitat').innerHTML = '0.0';
		
		$('kmRecorreguts').setProperty('value','');
		$('passatgers').setProperty('value','');
		$('trajectes').setProperty('value','');
		$('simpleCalculation').setProperty('value','');
		
		$('passatgers').removeProperty('disabled');
	},
	
	setUpCalculators: function(font) {
		
		$('simpleCalculation').removeEvents();
		$('kmRecorreguts').removeEvents();
		$('passatgers').removeEvents();
		$('trajectes').removeEvents();

		if ( font == 'CotxeDiesel' || font == 'CotxeBenzina' || font == 'Moto' ) {
			$('passatgers').setProperty('disabled','disabled');
			$('passatgers').setProperty('value','1');
		}
		
		if ( $('simpleCalculation') ) {
			$('simpleCalculation').addEvent('keyup',function() { this.simpleCalculation(font); }.bind(this));
		}
		
		if ( $('kmRecorreguts') ) {
			$('kmRecorreguts').addEvent('keyup',function() { this.complexCalculation(font); }.bind(this));
			$('passatgers').addEvent('keyup',function() { this.complexCalculation(font); }.bind(this));
			$('trajectes').addEvent('keyup',function() { this.complexCalculation(font); }.bind(this));
		}
		
	},
	
	simpleCalculation: function(font) {
		
		var inputId = 'simpleCalculation';
		
		var value = 0.0;
		
		if ( $(inputId).getProperty('value') != '' )
			value = parseFloat($(inputId).getProperty('value'))	;
													  
		if ( isNaN(value) ) {
			alert("S'ha d'introduïr dades numériques: " + value);
			$('resultatEnergia').innerHTML = '0.0';
			return false;
		}

		$('resultatMobilitat').innerHTML = (parseFloat($(inputId).getProperty('value')) * this.fontsArray[font].factor).toFixed(2);
	},
	
	complexCalculation: function(font) {
		
		var inputRecorregut = 'kmRecorreguts';
		var inputPassatgers = 'passatgers';
		var inputTrajectes = 'trajectes';
		
		var inputRecorregutsValue = $(inputRecorregut).getProperty('value');
		var inputPassatgersValue = $(inputPassatgers).getProperty('value');
		var inputTrajectesValue = $(inputTrajectes).getProperty('value');
		
		if ( font == 'Avio' ) {
			if ( inputRecorregutsValue > 3701)
				factor =  this.fontsArray[font].factor3;
			else if ( inputRecorregutsValue > 501 )
				factor =  this.fontsArray[font].factor2;
			else
				factor =  this.fontsArray[font].factor;
		} 
		else
			factor = this.fontsArray[font].factor;
					
		if ( inputRecorregutsValue != '' && inputPassatgersValue != '' && inputTrajectesValue != '' )
				var calcul = (parseFloat(inputRecorregutsValue) * parseInt(inputPassatgersValue) * parseFloat(inputTrajectesValue) * factor)
		else
			var calcul = 0.0;
		$('resultatMobilitat').innerHTML = calcul.toFixed(4);
	},
	
	addToTotal: function() {
		
		var newSumRow = $('filaBase').clone();
		var parcialSum = newSumRow.getElement('span');
		var parcialSource = newSumRow.getElement('td');
		parcialSum.innerHTML = $('resultatMobilitat').innerHTML;
		parcialSource.innerHTML = $('sourceTitle').innerHTML;
		newSumRow.inject('filaBase','before').style.display='';
		
		this.recalculateTotal();
		this.closeForm();
		
	},
	
	recalculateTotal: function() {
		var total = 0.0;
		$$('.sumaParcial').each(function(el) {
			total = parseFloat(total) + parseFloat(el.innerHTML);
		});
		
		$$('.deleteSumRow').each(function (el) {
			el.removeEvents();
			el.addEvent('click',function() {
				var row = el.getParent('tr');
				row.dispose();
				this.recalculateTotal();
				return false;
			}.bind(this,el));
		}.bind(this));
		
		$('sumaTotal').innerHTML = total.toFixed(4);
	},
	
	closeForm: function() {
		$('sourceCalculator').style.display = 'none';
		this.restartForm();
		this.overlay.hide();
	}
	
});

Calculator.implement(new Options);
Calculator.implement(new Events);
