/*
Aanzet tot een generieke winkel-class
Voorlopig alleen voor NBD Biblion
Opties:
-Voorraadbeheer
-Meerdere wagens per sessie (tbv beheer)
-Meerdere winkels per sessie (mall-concept)
-Meerdere winkels per wagen (eenvoudig eenmalig afrekenen)
-Class Gebruiker (voor gebruikersprofielen, winkelwagen wordt optioneel via klant gekoppeld aan winkel: Winkel.Klant, Winkelwagen.Eigenaar)

Opzetje definitieve structuur:
Server.Websites
Server.Eigenaar
Website.Bezoekers
Website.Winkels
Website.Eigenaar
Winkel.Klanten
Winkel.Orders
Winkel.Eigenaar
Gebruiker.Winkels (winkels waar de gebruiker eigenaar van is)
Gebruiker.Winkelwagen
Gebruiker.Orders
Gebruiker.Browser.Versie
Winkelwagen.Eigenaar
Winkelwagen.Afrekenen() //zet de inhoud van de winkelwagen om in orders bij de betreffende winkels
Order.Status
Order.Winkel
Order.Gebruiker
Order.Annuleren() //plaatst de inhoud van de order terug in de winkel, status=geannuleerd
*/

function Winkel(Voorraad)
{
	var winkel=this;
	winkel.Voorraad={};
	var regel;
	var Produkt=function(ID,Naam,Prijs,BTWpercentage,Bestelnummer)
	{
		var produkt=this;
		produkt.Winkel=winkel;
		produkt.ID=ID;
		produkt.Naam=Naam;
		produkt.Prijs=parseFloat(Prijs);
		produkt.BTWpercentage=parseFloat(BTWpercentage);
		produkt.Bestelnummer=Bestelnummer;
		produkt.BTW=function(){return produkt.Prijs*produkt.BTWpercentage/100}
		produkt.PrijsIn=function()
		{
			return produkt.Prijs+produkt.BTW();//nog formatten
		}
		produkt.In=function(Wagen,Aantal){}
		produkt.Uit=function(Wagen,Aantal){}
	}
	for (var key in Voorraad)
	{
		regel=Voorraad[key];
		winkel.Voorraad[key]={Produkt:new Produkt(key,regel[0],regel[1],regel[2],regel[3]),Aantal:regel[3]};
	}

	//winkel.Wagens={}; //verzameling van wagens die in deze winkel rondkarren

	winkel.Wagen=function(Inhoud)
	{
		var wagen=this;
		wagen.Winkel=winkel;

		//if (StandaardAantal) wagen.StandaardAantal=StandaardAantal;
		//else wagen.StandaardAantal=1;
		var Wagenregel=function(Produkt,Aantal)
		{
			var wagenregel=this;
			wagenregel.Wagen=wagen;
			wagenregel.Produkt=Produkt;
			wagenregel.Aantal=Aantal;
			wagenregel.Prijs=function(){return wagenregel.Produkt.Prijs*wagenregel.Aantal}
			wagenregel.PrijsIn=function(){return wagenregel.Produkt.PrijsIn()*wagenregel.Aantal}
			wagenregel.BTW=function(){return wagenregel.Produkt.BTW()*wagenregel.Aantal}
		}
		var inhoud=c.Lees('winkelwagen');
		if (inhoud)
		{
			wagen.Inhoud=eval(inhoud);
			for (var ProduktID in wagen.Inhoud)
			{
				if (winkel.Voorraad[ProduktID]==undefined) delete winkel.Voorraad[ProduktID];
				else wagen.Inhoud[ProduktID]=new Wagenregel(winkel.Voorraad[ProduktID].Produkt,wagen.Inhoud[ProduktID]);
			}
		}
		else wagen.Inhoud={};//Inhoud private maken?
		wagen.Plaats=function(ProduktID,Aantal)
		{
			if (winkel.Voorraad[ProduktID]!=undefined)
			{
				if (Aantal==undefined) Aantal=1;
				else {if (isNaN(Aantal)) Aantal=0};
				if (Aantal<1)
				{
					if (wagen.Inhoud[ProduktID]!=undefined) delete wagen.Inhoud[ProduktID];
				}
				else
				{
					if (wagen.Inhoud[ProduktID]==undefined) wagen.Inhoud[ProduktID]=new Wagenregel(winkel.Voorraad[ProduktID].Produkt,Aantal);//wagen.StandaardAantal of nog beter, Produkt.MinimaleAfname
					else wagen.Inhoud[ProduktID].Aantal=Aantal;
				}
			//if (document.addEventListener) MaakKoekje(wagen);//NS
			MaakKoekje(wagen); //altijd ivm back
			}
		}
		wagen.Leeg=function()
		{
			wagen.Inhoud={};
			//if (document.addEventListener) MaakKoekje(wagen);//NS
			MaakKoekje(wagen); //altijd ivm back
		}
		wagen.isLeeg=function()
		{
			for (var key in wagen.Inhoud){return false};
			return true;
		}
		wagen.BTW=function()
		{
			var tmp=0;
			for (var key in wagen.Inhoud){tmp+=wagen.Inhoud[key].BTW()}
			return tmp;
		}
		wagen.Prijs=function()
		{
			var tmp=0;
			for (var key in wagen.Inhoud){tmp+=wagen.Inhoud[key].Prijs()}
			return tmp;
		}
		wagen.PrijsIn=function()
		{
			var tmp=0;
			for (var key in wagen.Inhoud){tmp+=wagen.Inhoud[key].PrijsIn()}
			return tmp;
		}
		wagen.ProduktWeergave=function(){return this.Naam};
		wagen.BeginWeergave='';
		wagen.EindWeergave='';
		wagen.LeegWeergave='';
		wagen.toString=function()
		{
			var tmp='';
			if (isFunctie(wagen.ProduktWeergave))
			{
				if (!wagen.ProduktWeergave.apply)
				{
					for (var key in wagen.Inhoud)
					{
						var tmpProdukt=wagen.Inhoud[key].Produkt;
						tmpProdukt.applytmp=wagen.ProduktWeergave;
						tmp+=tmpProdukt.applytmp();
						delete tmpProdukt.applytmp;
					}
				}
				else
				{
					for (var key in wagen.Inhoud){tmp+=wagen.ProduktWeergave.apply(wagen.Inhoud[key].Produkt)};
				}
			}
			else
			{
				for (var key in wagen.Inhoud){tmp+=wagen.ProduktWeergave};
			}
			if (key==undefined)
			{
				if (isFunctie(wagen.LeegWeergave)) tmp=wagen.LeegWeergave();
				else tmp=wagen.LeegWeergave;
			}
			else
			{
				var begin,eind;
				if (isFunctie(wagen.BeginWeergave)) begin=wagen.BeginWeergave();
				else begin=wagen.BeginWeergave;
				if (isFunctie(wagen.EindWeergave)) eind=wagen.EindWeergave();
				else eind=wagen.EindWeergave;
				tmp=begin+tmp+eind;
			}
			return tmp;
		}
		var MaakKoekje=function(wagen)
		{
			var Koekje={};
			for (var ProduktID in wagen.Inhoud){Koekje[ProduktID]=wagen.Inhoud[ProduktID].Aantal}
			//document.cookie='winkelwagen='+escape(Deval(Koekje));
			c.Schrijf('winkelwagen',Deval(Koekje));
		}
		//if (!document.addEventListener) new Reactie(window,'beforeunload',MaakKoekje).Start(wagen); //IE
		//niet meer ivm back
	}
}

var c=new Cookie; //tijdelijke snelle methode