/* update 2009.10.14: using calculations from: 20091009 premie garant schenen deel 5 met variabele provisie.xls, Pieter K. */
/* works like premie garant schoenen deel 4_ 1 keuze voor geld.xls, uit mail 2009.08.25 5:05PM, Ronald H. */
var GarantSchuhCalc = new Class({
	initialize:function() {
		this.premies = {
			"avb_premie"			: 0.16
			,"geld"					: 19.50
			,"ongevallen_premie"	: 19.50
			,"ongevallen_premie_min": 97.50
			,"opstallen_premie" 	: 0.65
			,"transport_premie"		: 78.00
			,"glas_premie" 			: 58.50
			,"lichtreclame_premie" 	: 11.70
			,"winkel_premie" 		: 50.00 
			,"inventaris"			: {
				"a" 	: {	"omzet":250000.00, 		"premie":0.95	}
				,"b"	: {	"omzet":500000.00, 		"premie":0.95	}
				,"c"	: {	"omzet":750000.00, 		"premie":0.82	}
				,"d"	: {	"omzet":1000000.00, 	"premie":0.74	}
				,"e"	: {	"omzet":1250000.00, 	"premie":0.70	}
				,"f"	: {	"omzet":1500000.00, 	"premie":0.65	}
			}
			,"inventaris_premie"	: {
				"a"		: { "netto": 150, "premie" : 0.66 }
				,"b"	: { "netto": 400, "premie" : 0.66 }
			}
		}
		
	}
	,calc: function(oOpt) {
		if (!oOpt.omzet || isNaN(oOpt.omzet) || oOpt.omzet <= 0) {
			return {"totaal":0, "total_round":0};
		}
	
		var num_shops = $('num_shops').get('value') || 1;
		if (isNaN(num_shops)) 
			num_shops = 1;
		
		var values = new Object();
		
		// AVB
		/* from: 20091009 premie garant schoenen deel 5 met variabele provisie.xls
		$F$7 == omzet
		$rekenblad.c3 = 0.16
		$rekenblad.e3 = 39.00
		=ALS(
			C7="ja"
			;MAX($F$7*$rekenblad.$C$3/1000;$rekenblad.$E$3)
			;0
		)
		*/
		if (oOpt.avb) {
			values['avb'] = Math.max(
				 oOpt.omzet * this.premies.avb_premie/1000
				,39.00
			);
		}
		
		// GELD
		/*
		=ALS(
			C9="ja"
			;$rekenblad.$D$5
			;0)
		*/
		if (oOpt.geld) {
			values['geld'] = this.premies.geld * num_shops;
		}
		
		// ONGEVALLEN
		/*
		f11 = aantal personen
		$rekenblad.d7 = 19.50
		$rekenblad.e7 = 97.50
		
		=ALS(
			C11="ja"
			;MAX(F11*$rekenblad.$D$7;$rekenblad.$E$7)
			;0
		)
		*/
		if(oOpt.ongevallen) {
			values["ongevallen"] = Math.max(
				oOpt['personen'] * this.premies.ongevallen_premie
				,this.premies.ongevallen_premie_min
			);
			/* 2009.10.14 - based on the new excell document, we do need to use the max ;-)
			/* see mail 2009.08.25 5:05 from Ronald, this model doesnt have this max anymore) */
			/*
			values['ongevallen'] = Math.max(
				oOpt['personen'] * this.premies.ongevallen_premie
				,97.50
			);
			*/
		}
		
		// OPSTALLEN
		/*
		f15 = herbouwwaarde
		$rekenblad.d11 = 0.65
		=ALS(
			C15="ja"
			;$F$15*$rekenblad.$D$11/1000;0
		)
		*/
		if (oOpt.opstallen && oOpt.herbouwwaarde) {
			values['opstallen'] = oOpt.herbouwwaarde * this.premies.opstallen_premie/1000;
		}
		
		// TRANSPORT
		/*
		$rekenblad.$D$9 = 78.00
		=ALS(
			C13="ja"
			;$rekenblad.$D$9
			;0)
		*/
		if (oOpt.transport) {
			values['transport'] = this.premies.transport_premie;
		}
		
		// GLAS
		/* 
		$rekenblad.d15 = 58.50
		=ALS(C17="ja"
			;$rekenblad.$D$15
			;0
		)
		*/
		if (oOpt.glas) {
			values['glas'] = this.premies.glas_premie * num_shops;
		}
		
		// LICHTRECLAME
		/*
		$rekenblad.d16 = 11.70
		=ALS(C18="ja"
			;$rekenblad.$D$16
			;0)
		*/
		if (oOpt.lichtreclame) {
			values['lichtreclame'] = this.premies.lichtreclame_premie * num_shops;
			///values['lichtreclame'] = this.premies.lichtreclame_premie - this.premies.glas_premie;
			//values['lichtreclame'] *= num_shops;
		}
		
		// INVENTRARIS
		/*
		c15 = opstallen
		$f$7 = omzet
		$f$20 = oppervlakte
		$rekenblad.d26 = 150
		$rekenblad.d25 = 400
		$rekenblad.c25 = 0.66
		$rekenblad.c26 = 0.66
		$rekenblad.b18 = 250.0000
		$rekenblad.c18 = 0.95 
		=ALS(
			$F$7<=$rekenblad.$B$18
			;$F$7*$rekenblad.$C$18/1000
			;ALS(
				$F$7<=$rekenblad.$B$19
				;$F$7*$rekenblad.$C$19/1000
				;ALS(
					$F$7<=$rekenblad.$B$20
					;$F$7*$rekenblad.$C$20/1000
					;ALS(
							$F$7<=$rekenblad.$B$21
							;$F$7*$rekenblad.$C$21/1000
							;ALS(
								$F$7<=$rekenblad.$B$22
								;$F$7*$rekenblad.$C$22/1000
								;$F$7*$rekenblad.$C$23/1000
							)
						)
				))
			)
			+ALS(
				C15="ja"
				;$F$20*$rekenblad.$D$26*$rekenblad.$C$26/1000
				;$F$20*$rekenblad.$D$25*$rekenblad.$C$25/1000
			)
		*/
		if (oOpt.omzet) {
			var inv = this.premies.inventaris;
			var inv_index = null;
			
			if (oOpt.omzet <= inv.a.omzet)
				inv_index = 'a';
			else if (oOpt.omzet <= inv.b.omzet)
				inv_index = 'b';
			else if (oOpt.omzet <= inv.c.omzet)
				inv_index = 'c';
			else if (oOpt.omzet <= inv.d.omzet)
				inv_index = 'd';
			else if (oOpt.omzet <= inv.e.omzet)
				inv_index = 'e';
			else
				inv_index = 'f';
				
			if (inv_index) {
				values["inventaris"] = oOpt.omzet * inv[inv_index].premie / 1000;
				if (oOpt.oppervlakte) {
					var opstal_index = (oOpt.opstallen) ? 'a' : 'b';
					var opstal_premie = this.premies.inventaris_premie[opstal_index];
					values["inventaris"] += oOpt.oppervlakte * opstal_premie.netto * opstal_premie.premie/1000;
				}
			}
		}
		
		// PREMIE WINKEL
		values['winkel'] = this.premies.winkel_premie;
		
		// SUBTOTAL (NETTO)
		// =================
		/*
		G9 = geld premie
		G17 = glas premie
		G18 = glas lichtreclame
		=(G21+G15+G13+G11+G5+G7)+C3*(G9+G17+G18)
		*/
		var totaal = 0;
		for(var key in values) {
			totaal += values[key];
		}
		values['totaal'] = totaal;
		
		// PROVISIE PREMIE
		/*
		E22 = netto premie
		E25 = provisie percentage (0.75)
		=MAX(((E22/(1-E25))-E22);300)
		*/
		values['totaal'] += Math.max(
			(totaal/0.75) - totaal
			,300
		);
		values['totaal_round'] = new Number(values['totaal']).round();
		return values;
	}
});

