/**
 * Hsaab Budgetkalkylator 2.0 (www.hsaab.se)
 * Räknar ut användarens budget baserat på input och schablon.
 * @author: Daniel Djurfelter (daniel.djurfelter@atrox.se)
 * @version: 2.0
 **/
var calculator = {
	user : {
			lon : 0,
			semester : 0,
			ob : 0,
			lonekostnader_delsumma : 0,
			fodelsear : 0,
			arbetsgivaravgifter : 0,
			utbildningskostnad : 0,
			assistansomkostnad : 0,
			arbetsmiljoinsatser : 0,
			lonekostnader_total : 0,
			lonekostnader_avrundat : 0,
			schablonbelopp : 0,
			slutsumma : 0,
			ovrigakostnader_total : 0,
	},
	
	schablon : {},
	resultMessage : null,
	coinstack : null,
	coinstackText : null,
	trygghetsFonden : 0,
	
	init : function(){
		calculator.trygghetsfonden = $("#trygghetsfonden").toNumber();
		calculator.resultMessage = $("#resultMessage");
		
		calculator.user = {
			lon : $("#lon").numeric(","),
			semester : $("#semester").numeric(","),
			ob : $("#ob").numeric(","),
			lonekostnader_delsumma : $("#lonekostnader_delsumma"),
			fodelsear : $("#fodelsear").numeric(","),
			arbetsgivaravgifter : $("#arbetsgivaravgifter"),
			lonekostnader_total : $("#lonekostnader_total"),
			utbildningskostnad : $("#utbildningskostnad"),
			assistansomkostnad : $("#assistansomkostnad"),
			arbetsmiljoinsatser : $("#arbetsmiljoinsatser"),
			lonekostnader_avrundat : $("#lonekostnader_avrundat"),
			schablonbelopp : $("#schablonbelopp"),
			slutsumma : $("#slutsumma"),
			ovrigakostnader_total : $("#ovrigakostnader_total"),
			administration : $("#administration")
		};
		
		calculator.schablon = {
			lon : $("#lon_schablon").toNumber(),
			semester : $("#semester_schablon").toNumber(),
			ob : 0,
			lonekostnader_delsumma : $("#lonekostnader_delsumma_schablon").toNumber(),
			fodelsear : $("#fodelsear_schablon").toNumber(),
			arbetsgivaravgifter : $("#arbetsgivaravgifter_schablon").toNumber(),
			lonekostnader_total : $("#lonekostnader_total_schablon").toNumber(),
			utbildningskostnad : 0,
			assistansomkostnad : 0,
			arbetsmiljoinsatser : 0,
			lonekostnader_avrundat : $("#lonekostnader_avrundat_schablon").toNumber(),
			schablonbelopp : calculator.user.schablonbelopp.toNumber(),
			slutsumma : $("#slutsumma_schablon").toNumber(),
			ovrigakostnader_total : $("#ovrigakostnader_total_schablon").toNumber(),
			administration : $("#administration").toNumber()
		};
		
		calculator.coinstack = $("#coinstack");
		calculator.coinstackText = $("#coinstackText");
	},
	
	arbetsgivaravgifter : {
		'1985_-' : 18.44,                   
		'1984' : 27.19,                    
		'1945_-_1983' : 43.42,
		'1938_-_1944' : 10.21,
		'1937' : 0.00
	},
	
	semesterlon : 12,
	
	run : function(){
		$(calculator.resultMessage).hide();
		$(calculator.coinstackText).hide();
		
		var objNumbers = {};
		
		$.each(calculator.user,function(key,value){
			objNumbers[key] = value.toNumber(); 
		
			if(objNumbers[key] == 0 || objNumbers[key] == "NaN"){
				objNumbers[key] = calculator.schablon[key];
			}
		});
		
		if(objNumbers.fodelsear != 0){
			if(objNumbers.fodelsear <= 1937)
				objNumbers.arbetsgivaravgifter = calculator.arbetsgivaravgifter["1937"];
			else if(objNumbers.fodelsear >= 1938 && objNumbers.fodelsear <= 1944)
				objNumbers.arbetsgivaravgifter = calculator.arbetsgivaravgifter['1938_-_1944'];
			else if(objNumbers.fodelsear >= 1945 && objNumbers.fodelsear <= 1983)
				objNumbers.arbetsgivaravgifter = calculator.arbetsgivaravgifter['1945_-_1983'];
			else if(objNumbers.fodelsear == 1984)
				objNumbers.arbetsgivaravgifter = calculator.arbetsgivaravgifter['1984'];			
			else if(objNumbers.fodelsear >= 1985)
				objNumbers.arbetsgivaravgifter = calculator.arbetsgivaravgifter['1985_-'];
		}
		
		// Räkna ut semester
		objNumbers.semester = (Math.round(objNumbers.lon * calculator.semesterlon)/100).toFixed(2);
		
		// Räkna ut delsumma
		objNumbers.lonekostnader_delsumma = 0;
		
		var arrDelsumma = [
			objNumbers.lon,
			objNumbers.semester,
			objNumbers.ob
		];
				
		$.each(arrDelsumma,function(){
			objNumbers.lonekostnader_delsumma += Number(this);
		});
		
		objNumbers.arbetsgivaravgifter = (objNumbers.lonekostnader_delsumma * objNumbers.arbetsgivaravgifter)/100;
		
		// Löneomkostnader totalt
		objNumbers.lonekostnader_total = (objNumbers.lonekostnader_delsumma + objNumbers.arbetsgivaravgifter + calculator.trygghetsfonden).toFixed(2);
		
		// Räkna ut överiga kostnader
		var arrOvriga = [
			objNumbers.utbildningskostnad,
			objNumbers.assistansomkostnad,
			objNumbers.arbetsmiljoinsatser,
			objNumbers.administration
		];
		
		objNumbers.ovrigakostnader_total = 0;
		
		$.each(arrOvriga,function(){
			objNumbers.ovrigakostnader_total += Number(this);
		});
		
		
		objNumbers.lonekostnader_avrundat = Math.round(Number(objNumbers.ovrigakostnader_total) + Number(objNumbers.lonekostnader_total));
		
		objNumbers.slutsumma = (Number(objNumbers.schablonbelopp) - Number(objNumbers.lonekostnader_avrundat));
		
		// Skriv ut värden
		$.each(objNumbers, function(key,value){
			var elt = $(calculator.user[key]).get(0);
			
			if(elt.id == "fodelsear"){
				elt.value = value;
			} else {
				if(elt.tagName == "INPUT")
					elt.value = (Number(value).toFixed(2)).toString().replace(/\./ig,",");
				else
					calculator.user[key].html((Number(value).toFixed(2)).toString().replace(/\./ig,","));
			}
		});
		
		calculator.runCoinStack(objNumbers.slutsumma);
	},
	
	runCoinStack : function(int){
		// Visa i coinstack
		$(calculator.coinstackText).show().html((Number(int).toFixed(2)).toString() + ":-");
		
		// Visa grafiskt
		var used = Number(int); // Överskott/underskott var total = 522.22; // Schablon
		var total = Number(calculator.schablon.schablonbelopp);
		

		if(used < 0){
			used = Number((used).toString().replace(/\-/ig,""));
			$(calculator.coinstack).addClass("minus").height(0);
			$(calculator.resultMessage).fadeIn("fast");
			
			setTimeout(function(){
				$(calculator.resultMessage).fadeOut("fast");
			},10000);
		} else {
			$(calculator.coinstack).removeClass("minus").height(0);;
		}

		var percent = Math.round((used/total)*100);
		
		if(percent > 100)
			percent == 100;
		
		$(calculator.coinstack).animate({"height": percent+"%"}, "fast");
	}
};
	
$.fn.getValue = function(){
	return $(this).get(0).value;
}

$.fn.toNumber = function(){
	var elt = $(this).get(0);
	if(elt.tagName == "INPUT" || elt.tagName == "TEXTAREA")
		return Number(elt.value.replace(/\,/,"."));
	else
		return Number(elt.innerHTML.replace(/\,/,"."));
}