// implementacja koszyka z rozbiciem na stawki vat


//-----------------------------------------------------------------
//prywatna
    function utworzKoszyk( od_netto )
    {
			this.liczba_pozycji = 0 ;
			this.netto          = 0 ;    // nadmiarowa informacja wprowadzona w celu szybszego dost�pu do tej danej
			this.vat            = 0 ;    // to samo co powy�ej
			this.brutto         = 0 ;    // to samo co powy�ej
			this.tablica_vat    = new utworzTabliceVat() ;
			this.od_netto       = od_netto ;
    }

//-------------------------------------------------------
// prywatna
    function utworzTabliceVat()
    {
			this.liczba_pozycji = 0 ;
    }
//--------------------------------------------------------------
function czyPustyKoszyk()
{
	return (koszyk.liczba_pozycji == 0) ;
}
//---------------------------------------------------------------
function usunZTablicyVat( vat )
{
	var nowa_tablica_vat = new utworzTabliceVat() ;
	var nowa_liczba_pozycji = koszyk.tablica_vat.liczba_pozycji ;
	var j = 0 ;

	for( var i = 0 ; i < koszyk.tablica_vat.liczba_pozycji ; i++ )
	{
		if( koszyk.tablica_vat[i].vat != vat )
		{
			nowa_tablica_vat[j] = koszyk.tablica_vat[i] ;
		}
		else
		{
			nowa_liczba_pozycji -- ;
		}

	}
	nowa_tablica_vat.liczba_pozycji = nowa_liczba_pozycji ;
	koszyk.tablica_vat = nowa_tablica_vat ;
}

//--------------------------------------------------------------
    function dodajPozycjeDoTablicyVat( vat , kwota  )
    {
			for( var i = 0 ; i < koszyk.tablica_vat.liczba_pozycji ; i++ )
			{
					if( koszyk.tablica_vat[i].vat == vat )
					{
						koszyk.tablica_vat[i].kwota += kwota ;
						if( koszyk.tablica_vat[i].kwota == 0 )
						usunZTablicyVat( vat ) ;

						przeliczNettoVatIBrutto() ;
						return ;
					}
			}

			// nie odnaleziono pozycji z tym vatem wi�c tworzymy now� pozycj�
			koszyk.tablica_vat[ koszyk.tablica_vat.liczba_pozycji ] =
			new utworzPozycjeWTablicyVat( vat , kwota ) ;
			koszyk.tablica_vat.liczba_pozycji ++ ;
			przeliczNettoVatIBrutto() ;
    }
//-----------------------------------------------------------------
function przeliczNettoVatIBrutto()
{
	var suma_netto   = 0 ;
	var suma_vat     = 0 ;
	var suma_brutto  = 0 ;
	var vat_posredni = 0 ;
	var vat              ;

	for( var i = 0 ; i < koszyk.tablica_vat.liczba_pozycji ; i++ )
	{
		if( koszyk.od_netto )
		{
			vat = koszyk.tablica_vat[i].vat / 100 ;
			vat_posredni = zaokraglij1( koszyk.tablica_vat[i].kwota * vat  , 4) ;
			suma_brutto += koszyk.tablica_vat[i].kwota + vat_posredni ;
			suma_netto  += koszyk.tablica_vat[i].kwota ;
		}
		else
		{
			vat = odwrotnyVAT( koszyk.tablica_vat[i].vat / 100 ) ;
			vat_posredni = zaokraglij1( koszyk.tablica_vat[i].kwota * vat , 4) ;
			suma_brutto += koszyk.tablica_vat[i].kwota ;
			suma_netto  += koszyk.tablica_vat[i].kwota - vat_posredni ;
		}
		suma_vat    += vat_posredni ;
	}

	koszyk.netto  = suma_netto  ;
	koszyk.vat    = suma_vat    ;
	koszyk.brutto = suma_brutto ;
	// uwaga - suma_vat i brutto mog� mie� do 4 liczb po przecinku
}
//-----------------------------------------------------------------
	function utworzPozycjeWTablicyVat( vat , kwota )
	{
		// kwota mo�e by� zar�wno netto jak i brutto w zel�no�ci od tego
		// jak liczymy vat
			this.vat   = vat   ;
//			this.netto = netto ;
			this.kwota = kwota ;
	}


//----------------------------------------------------------------
	function nowaPozycja( id , kod , nazwa , cena , ilosc , vat , jm , zapas)
	{
		this.id    = id    ;
		this.kod   = kod   ;
		this.nazwa = nazwa ;
		this.cena  = cena  ;
		this.ilosc = ilosc ;
		this.vat   = vat   ;
		this.jm    = jm    ;
		this.zapas = zapas ;
	}
//-----------------------------------------------------------------
	function dodajWpis( id , kod , nazwa , cena , ilosc , vat , jm)
	{
		dodajWpis( id , kod , nazwa , cena , ilosc , vat , jm , '') ;
	}

//-----------------------------------------------------------------
	function dodajWpis( id , kod , nazwa , cena , ilosc , vat , jm , zapas)
	{

		// usuwamy pozycj� je�li jej ilo�� = 0
		if( ilosc == 0 )
		{
			usunWpis( id ) ;
			return         ;
		}

		// szukam czy ju� nie ma tej pozycji
		for( var i = 0 ; i < koszyk.liczba_pozycji ; i++ )
		{
			if( koszyk[i].id == id )
			{       // je�li jest to zmieniam tylko ilo��

			    dodajPozycjeDoTablicyVat( koszyk[i].vat , 0 - zaokraglij(
			         koszyk[i].ilosc * koszyk[i].cena) ) ; // usuwamy stare wyliczenia dla tej pozycji

			    koszyk[i].ilosc = ilosc ;

			    dodajPozycjeDoTablicyVat( koszyk[i].vat , zaokraglij(
			        koszyk[i].ilosc * koszyk[i].cena)) ;

			    return ;
			}
		}

		var lp = koszyk.liczba_pozycji ;
		koszyk[lp] = new nowaPozycja(id,kod,nazwa,cena,ilosc,vat,jm,zapas) ;
		dodajPozycjeDoTablicyVat( vat , zaokraglij( koszyk[lp].ilosc * koszyk[lp].cena )) ;
		koszyk.liczba_pozycji++ ;
	}
//------------------------------------------------------------------------

	function usunWpis( id )
	{
		var nowy_koszyk = new utworzKoszyk( koszyk.od_netto ) ;

		// na wypadek, gdyby nie by�o w koszyku takiej pozycji to nic si� nie zmieni

  		nowy_koszyk.liczba_pozycji = koszyk.liczba_pozycji ;

		var j = -1 ;

		for( var i = 0 ; i < koszyk.liczba_pozycji ; i++ )
		{
			if( koszyk[i].id == id )
 			{                           // natrafili�my na pozycj�, kt�r� usuwamy
			    dodajPozycjeDoTablicyVat( koszyk[i].vat , 0 -      // tak naprawd� to pozycja z tablicy vat zostanie odj�ta bo przekazujemy liczb� ujemn�
			        zaokraglij( koszyk[i].cena * koszyk[i].ilosc )) ;

			    nowy_koszyk.liczba_pozycji = koszyk.liczba_pozycji - 1 ;
			}
			else
			{
				j++ ;
				nowy_koszyk[j] = new nowaPozycja( koszyk[i].id , koszyk[i].kod , koszyk[i].nazwa , koszyk[i].cena , koszyk[i].ilosc , koszyk[i].vat , koszyk[i].jm , koszyk[i].zapas) ;
			}
		}

		nowy_koszyk.netto          = koszyk.netto          ;
		nowy_koszyk.vat            = koszyk.vat            ;
		nowy_koszyk.brutto         = koszyk.brutto         ;
		nowy_koszyk.tablica_vat    = koszyk.tablica_vat    ;

		koszyk = nowy_koszyk ;
	}
//-------------------------------------------------------------------------
	function sprawdzWKoszyku( id )
	{

		for( var i = 0 ; i < koszyk.liczba_pozycji ; i++ )
		{
			if( koszyk[i].id == id )
			{
				return koszyk[i].ilosc ;
			}
		}

		// nie odnaleziono w koszyku pozycji
		return 0 ;
	}
//-----------------------------------------------------------------------
	function sumujIDodaj( pole , ilosc , kod , nazwa , cena , vat , jm)
	{
		// mamy zagwarantowan� sytuacj�, �e w polu jest poprawny int

		pole.value = parseInt( pole.value , 10 ) + ilosc ;

 		dodajWpis( pole.name , kod , nazwa , cena , parseInt( pole.value , 10 ) , vat , jm) ;

	}
//---------------------------------------------------------------------
	function sprawdzIDodaj( pole , kod , nazwa , cena , vat , jm)
	{
		var ilosc = parseInt( pole.value ) ;
		if( isNaN(ilosc) || ilosc < 0)         // je�li nie jest to liczba ca�kowita
			ilosc = 0 ;
		pole.value = ilosc + "";
		dodajWpis( pole.name , kod , nazwa , cena , ilosc , vat , jm) ;
	}
//---------------------------
	function sprawdzIDodaj1( pole )
	{
		// do u�ytku, gdy wiemy, �e dany towar jest napewno w koszyku
		sprawdzIDodaj( pole , '' , '' , 0 , 0 , '') ;
	}

//---------------------------------------------------------------------
	function pustyKoszyk()
	{
		koszyk = new utworzKoszyk( koszyk.od_netto ) ;
	}
