var Businessplan_Profitpreview = {
		
	form : '',
	autoFill : true,
		
	_inArray : function(needle, haystack) {

		for(var i = 0, len = haystack.length; i < len; ++i) {
			if(needle == haystack[i]) return true;
		}
		
		return false;

	},
	
	checkInput : function(event) {
		
		var chars = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, '.', ',');
		var value = '';
		
		for(var i = 0, len = Event.element(event).value.length; i < len; ++i) {
		
			if(Businessplan_Profitpreview._inArray(Event.element(event).value.substring(i, (i + 1)), chars)) {
				value+= Event.element(event).value.substring(i, (i + 1));
			}
			
		}
		
		Event.element(event).value = value;
		
		/* Jahreswerte automatisch ausfüllen */
		if(Businessplan_Profitpreview.autoFill == true) {
		
			var elementId = Event.element(event).id.split('-');
			var elementType = elementId[0].split('_');

			if(elementType[1] == 'month') {
			
				var monthSum = 0;
				var monthGrow = 0;
				
				for(var i = 1; i <= 6; i++) {
					
					monthSum+= parseInt($(elementId[0] + '-' + i).value);
					
					if(i > 1) monthGrow+= parseInt($(elementId[0] + '-' + i).value) / parseInt($(elementId[0] + '-' + (i - 1)).value);
					
				}
				
				if(!isNaN(monthGrow)) {
				
					monthGrow/= 5;
					
					/* Entwicklung für restliche 6 Monate berechnen */
					for(i = 6; i < 12; i++) monthSum+= Math.round(((monthSum / i * monthGrow) / 100)) * 100;
					
					/* Entwicklung für 3 Jahre berechnen */
					for(var i = 1; i <= 3; i++) {
						
						$(elementType[0] + '_year_' + elementType[2] + '_' + elementType[3] + '-' + i).value = monthSum;
						monthSum = Math.round((monthSum * monthGrow / 100)) * 100;
						
					}
					
				}
				
			}
			
		}
		
		Businessplan_Profitpreview.calculate(Businessplan_Profitpreview.form);

	},
	
	calculate : function() {
		
		var elements = $(Businessplan_Profitpreview.form).getElements();
		var values = new Object();
		var calculators = new Array();
		
		for(var i = 0, len = elements.length; i < len; ++i) {
		
			var element = elements[i];
			var elementId = element.id.split('_');
			var elementSubId = elementId[3].split('-');
			
			//nur float-values zulassen
			var tmp = parseFloat(element.value);
			element.value = (isNaN(tmp) || !isFinite(tmp)) ? 0 : tmp;
			
			if(element.title == undefined || !element.title) {
				
				if(values[elementId[1]] == undefined) {
					values[elementId[1]] = new Array();
				}
				if(values[elementId[1]][elementId[2]] == undefined) {
					values[elementId[1]][elementId[2]] = new Array();
				}
				if(values[elementId[1]][elementId[2]][elementSubId[1]] == undefined) {
					values[elementId[1]][elementId[2]][elementSubId[1]] = new Array();
				}
				
				values[elementId[1]][elementId[2]][elementSubId[1]][elementSubId[0]] = element.value;
				
			} else {
			
				calculators[calculators.length] = element.id;
				
			}
			
		}
		
		for(var i = 0, len = calculators.length; i < len; ++i) {
			
			var calculator = calculators[i];
			var calculatorId = calculator.split('_');
			var calculatorSubId = calculatorId[3].split('-');
			
			var calculatorType = $(calculator).title.split('_');
			
			var sum = 0;
			var calculatorTypeActive = '';
			var calculatorTypeNext = '';
			
			var calculatorCheckValue = false;
			
			calculatorTypeActive = calculatorType[0];
			
			for(var y = 1, ylen = calculatorType.length; y < ylen; null) {
				
				calculatorTypeNext = calculatorTypeActive;
				
				switch(calculatorTypeActive) {
				
					case "etax":
					case "etaxsum":
					case "gtax":
					case "gtaxsum":
					case "sum":
						var sumTmp = 0;
						var calculatorOperation = '';
						var nextCalculation = false;
						
						for(; y < ylen && !nextCalculation; ++y) {
						
							if(isNaN(calculatorType[y])) {
								
								calculatorTypeNext = calculatorType[y];
								nextCalculation = true;
								
							} else {
								
								if(calculatorType[y] < 0) {
									
									calculatorType[y] = calculatorType[y] * -1;
									calculatorOperation = '-';
									
								} else {
									calculatorOperation = '+';
								}
								
								if(values[calculatorId[1]][calculatorType[y]] != undefined && values[calculatorId[1]][calculatorType[y]][calculatorSubId[1]] != undefined) {
								
									for(var x = 0, xlen = values[calculatorId[1]][calculatorType[y]][calculatorSubId[1]].length; x < xlen; ++x) {
									
										value = parseFloat(values[calculatorId[1]][calculatorType[y]][calculatorSubId[1]][x]);
										if(!isNaN(value) && isFinite(value)) sumTmp+= value;
									
									}
									
								}
								
								if(calculatorOperation == '+') sum+= sumTmp;
								if(calculatorOperation == '-') sum-= sumTmp;
								
								sumTmp = 0;
								
							}
							
						}
							
						break;
						
					case "check":
						var nextCalculation = false;
						calculatorCheckValue = false;
						
						for(; y < ylen && !nextCalculation; ++y) {
							
							if(isNaN(calculatorType[y])) {
								
								calculatorTypeNext = calculatorType[y];
								nextCalculation = true;
								
							} else {
								
								if(values[calculatorId[1]][calculatorType[y]] != undefined && values[calculatorId[1]][calculatorType[y]][calculatorSubId[1]] != undefined) {
									
									for(var x = 0, xlen = values[calculatorId[1]][calculatorType[y]][calculatorSubId[1]].length; x < xlen; ++x) {
									
										value = parseFloat(values[calculatorId[1]][calculatorType[y]][calculatorSubId[1]][x]);
										if(!isNaN(value) && isFinite(value) && value != 0) calculatorCheckValue = true;
									
									}
									
								}
								
							}
							
						}
						break;
						
					default:
						alert('unknown calculation - ' + calculatorTypeActive);
						break;
				
				}
				
				/*Gewerbesteuerrücklage (Hebesatz 380%)*/
				if(calculatorTypeActive == "gtax" || calculatorTypeActive == "gtaxsum") {
					
					var sumTmp = 0;
					
					if(sum > 24500) sumTmp = Math.round(((Math.round(sum / 100) * 100) - 24500) * 0.035 * 3.8);
					
					if(calculatorTypeActive == "gtaxsum") sum-= sumTmp;
					else sum = sumTmp;
					
				}
				
				/*Einkommensteuer 2010*/
				if(calculatorTypeActive == "etax" || calculatorTypeActive == "etaxsum") {
					
					var sumTmp = 0;
					var sumCalc = sum;
					
					if(calculatorCheckValue) { 
						sumCalc = (sum / 2); /*Wenn Ehepartner Einkommen, dann Splitting*/
					}
					
					if(sumCalc >= 8005 && sumCalc <= 13469) {
						var tmp = (sumCalc - 8004) / 10000;
						sumTmp = (912.17 * tmp + 1400) * tmp;
					}
					if(sumCalc >= 13470 && sumCalc <= 52881) {
						var tmp = (sumCalc - 13469) / 10000;
						sumTmp = (228.74 * tmp + 2397) * tmp + 1038;
					}
					if(sumCalc >= 52882 && sumCalc <= 250730) sumTmp = 0.42 * sumCalc - 8172;
					if(sumCalc >= 250731) sumTmp = 0.45 * sumCalc - 15694;
					
					if(calculatorCheckValue) {
						sumTmp = (sumTmp * 2); /*Wenn Ehepartner Einkommen, dann Splitting*/
					}
					
					if(calculatorTypeActive == "etaxsum") {
						sum-= Math.round(sumTmp);
					} else {
						sum = Math.round(sumTmp);
					}
					
				}
				
				calculatorTypeActive = calculatorTypeNext;
				
			}
			
			$(calculator).value = sum;
			
		}	
	}
};