﻿/**
  Uwaga
  Kalkulator obsluguje KALKULATOR DEPOZYTOWY i KALKULATOR KREDYTOWY
  
  Bo różnice sa nie wielkie, nazwenictwo jednak w programie w większości
  przypadków mówi o lokacie - to trochę mylące bo dotyczy obu.
*/

    /// Zwraca wartosc zaznaczonego pola RADIO (input)	
		/// <grupaPolaRadio> Przekazujemy obiekt/pole, dla którego dokonujemy zmian.	
		function zaznaczoneInputRadio(grupaPolaRadio)
		{		
			if (grupaPolaRadio[0]) {
				for (var i=0, n=grupaPolaRadio.length; i < n; i++) {
					if (grupaPolaRadio[i].checked) {
						return grupaPolaRadio[i].value;
					}
				}
			} else {
				if (grupaPolaRadio.checked) {
					return grupaPolaRadio.value;
				} // if the one button is checked, return zero
			}
			
			// Jesni nic nie zaznaczono zwraca NULL
			return null;
		}
		
		/// Celem funkcji jest zablokowanie wybranych pól typu radio (wyłączenie ich - disabled)
		/// <polaDoZmiany> Przekazujemy tablice z nazwami (value="") pól które mają zostać zablokowane.
		/// <formularz> nazwa formularza
		/// <nazwapolaradio> element dla którego mają zostać zablokowane
		function blokadaWybranychInputRadio(polaDoZmiany, formularz, nazwapolaradio)
		{
			var grupaPolaRadio = document.forms[formularz].elements[nazwapolaradio];
			
			//grupaPolaRadio.lenght np. = 12 + 3 = 15 (1..12;24;36;60) 
			for(i=0; i<grupaPolaRadio.length; i++)
			{
				for(j=0; j<polaDoZmiany.length; j++)
				{
					if(grupaPolaRadio[i].value==polaDoZmiany[j]) 
						grupaPolaRadio[i].disabled = true;
				}
			}			
		}
		
		
		/// Odblokowuje wszytkie pola radio (enabled = true) dla danego typu pola
		/// oraz czyści wszystkie (reset)
		/// <formularz> nazwa formularza
		/// <nazwapolaradio> element dla którego mają zostać odlobowane
		function odblokowanieWszystkichElementowInputRadio(formularz,nazwapolaradio)
		{
			// zmienna
			var element = document.forms[formularz].elements[nazwapolaradio];
		
			for(i=0; i<element.length; i++)
			{
				for(j=0; j<element.length; j++)
				{
					element[i].disabled = false;
					element[i].checked = false;
				}
			}	
		}
		
		/// Funkcja blokuje odpowiednie pola "miesiące" zbędne dla wybranej lokaty
		/// <nazwaLokaty> Nazwa lokaty (switch->case), taka sama jak w polu value="" formularza przy danym radio
		function ustawienieMiesiecyDlaWybranejLokaty(nazwaLokaty)
		{
			// Zmienne lokalne
			var miesiaceDoZablokowania = new Array;
			var sForm = "kalkulatordepozytowy";
			var sGrupa = "mce"; //nazwa pola radio
			
			// Zawsze najpierw wywołując tą metodę odblokowuje wszystkie miesiące oraz odznacza wszystkie kiedys zaznaczone radio (reset)
			odblokowanieWszystkichElementowInputRadio("kalkulatordepozytowy","mce");
			
			// Odznaczenie wszystkich kiedys zaznaczonych radio (reset)
			document.forms["kalkulatordepozytowy"].elements["mce"].checked = false;
			
			// Switch (po nazwach lokat, są 4 aktualnie)
			switch(nazwaLokaty)
			{
				case "zyskna6":
					for(i=0;i<11;i++) {
						miesiaceDoZablokowania[i] = i+1;
					}
					miesiaceDoZablokowania[11] = 24;
					miesiaceDoZablokowania[12] = 36;
					miesiaceDoZablokowania[13] = 60;
					blokadaWybranychInputRadio(miesiaceDoZablokowania, sForm, sGrupa);
					break;
					
				case "bezpiczenajesien":
          miesiaceDoZablokowania[0] = 1;
          miesiaceDoZablokowania[1] = 2;
					for(i=3;i<12;i++) {
						miesiaceDoZablokowania[i] = i+1;
					}
					miesiaceDoZablokowania[12] = 24;
					miesiaceDoZablokowania[13] = 36;
					miesiaceDoZablokowania[14] = 60;
					blokadaWybranychInputRadio(miesiaceDoZablokowania, sForm, sGrupa);
					break; 
				case "standard":
					miesiaceDoZablokowania[0] = 4;
					miesiaceDoZablokowania[1] = 5;
					miesiaceDoZablokowania[2] = 7;
					miesiaceDoZablokowania[3] = 8;
					miesiaceDoZablokowania[4] = 10;
					miesiaceDoZablokowania[5] = 11;
					miesiaceDoZablokowania[6] = 60;
					blokadaWybranychInputRadio(miesiaceDoZablokowania, sForm, sGrupa);
					break; 
					
				case "progresja":
					miesiaceDoZablokowania[0] = 24;
					miesiaceDoZablokowania[1] = 36;
					miesiaceDoZablokowania[2] = 60;
					blokadaWybranychInputRadio(miesiaceDoZablokowania, sForm, sGrupa);
					break; 
          
        /* @@@@@@@@ Teraz kredyty @@@@@@@*/
        case "kredyt_wakacje_marzen":					
          miesiaceDoZablokowania[0] = 24;
					miesiaceDoZablokowania[1] = 36;
					miesiaceDoZablokowania[2] = 60;
					blokadaWybranychInputRadio(miesiaceDoZablokowania, sForm, sGrupa);
					break; 
        case "kredyt_szybka_gotowka":					
					// Dotyczy chyba wszsytkich więc nie blokowac
					blokadaWybranychInputRadio(miesiaceDoZablokowania, sForm, sGrupa);
					break; 
				case "kredyt_tecza":					
					miesiaceDoZablokowania[0] = 36;
					miesiaceDoZablokowania[1] = 60;
					blokadaWybranychInputRadio(miesiaceDoZablokowania, sForm, sGrupa);
					break; 
			}
		}
		
		/// Sprawdza czy wszytkie pola zostały podane.
		function sprawdzCzyWszystkoWypelniono()
		{
			var iErrors = 0;
			
			if(document.forms["kalkulatordepozytowy"].elements["kwotazdeponowana"].value <= 0 )
				iErrors++;
				
      /*
			if(document.forms["kalkulatordepozytowy"].elements["stopaprocentowa"].value <= 0)
				iErrors++;
      */
      
			var typyLokat = document.forms["kalkulatordepozytowy"].elements["typlokaty"];
			iErrors++;	// zakladam z góry ze jest blad, a jeśli nie ma to zostanie zdjety w petli
			for(i=0; i<typyLokat.length; i++)
			{
				if(typyLokat[i].checked)
					iErrors--;
			}
			
			var miesiac = document.forms["kalkulatordepozytowy"].elements["mce"];
			iErrors++;	// zakladam z góry ze jest blad, a jeśli nie ma to zostanie zdjety w petli
			for(i=0; i<miesiac.length; i++)
			{
				if(miesiac[i].checked)
					iErrors--;
			}
				
			// Zwracamy, 0 = brak błedów
			return iErrors;
		}
		
		/// Zwraca wartość z danej liczby wg podanego procentu;
		/// np. dla 10000 x 10% = 1000 zł. (wartosc = 10000, procent = 10, zwraca = 1000 zł.)
		function procentZliczby(wartosc, procent)
		{
			return (wartosc / 100 ) * procent; // np. (10000/100)*10 => 100*10 => 1000 (ok)
		}
		
    // kredyt
    function naliczoneOdsetkiWProcentachDlaKredytu(kwota, oprocentowanieRoczne, iloscMiesiecy)
		{
      var kwotaAktualna = kwota; // - tu startowa na poczatku np. 3000 zł.
      var rata = zaokraglenie(kwota / iloscMiesiecy); // np. 3000 / 24 = 125 zł.
      var sumaOdsetek = 0;  // Na poczatku odsetek nie ma.
      for(i=0;i<iloscMiesiecy;i++)
      {
        odsetkiWTymMiesiacu = (procentZliczby(kwotaAktualna,oprocentowanieRoczne)/365) * 30;
        sumaOdsetek += zaokraglenie(odsetkiWTymMiesiacu);
        kwotaAktualna -= rata; // Placi rate w danym miesiacu
      }
      
			return sumaOdsetek; //zawsz 30 dni
		}
    // lokata
		function naliczoneOdsetkiWProcentach(iloscMiesiecy, oprocentowanieRoczne)
		{
			return (oprocentowanieRoczne / 12) * iloscMiesiecy;
		}
		
		function obliczZysk(kwotaZdeponowana,nazwaLokaty,zaznaczonyMiesiac)
		{
			// Switch (po nazwach lokat, są 4 aktualnie)
			switch(nazwaLokaty)
			{
				case "zyskna6":
					// Stałe, dane lokaty
					var daneLokaty = new Array( 
											new Array(12,6.50)
											);
					// ustalamy na podstrawie danych lokaty jaki to ma być procent
					var oprocentowanieRoczne = -1;					
					for(i=0; i<daneLokaty.length; i++)
					{
						if(daneLokaty[i][0] == zaznaczonyMiesiac)
						{
							oprocentowanieRoczne = daneLokaty[i][1]; //np. 6.00 //[%]
						}	
					}
					
					// Jeśli nie znamy oprocentowania to nie można kontynuować. Przyczyna zaznaczono zły miesiąc.
					if(oprocentowanieRoczne == -1)
						return -1; // błąd
					else 
					{
						// ### GLOWNE OBLICZENIA DO ZWROCENIA ### 
						
						// Zwracamy NALICZONE ODSETKI
						var naliczoneOdsetkiWyrazoneWProcentach = naliczoneOdsetkiWProcentach(zaznaczonyMiesiac, oprocentowanieRoczne);
            document.forms["kalkulatordepozytowy"].elements["stopaprocentowa"].value = zaokraglenie(oprocentowanieRoczne);
						return procentZliczby(kwotaZdeponowana, naliczoneOdsetkiWyrazoneWProcentach);
					}
					break;
					// /zyskna6
					
				case "bezpiczenajesien":
					// Stałe, dane lokaty
					var daneLokaty = new Array(  
											new Array(3,5.5)
										);
					// ustalamy na podstrawie danych lokaty jaki to ma być procent
					var oprocentowanieRoczne = -1;					
					for(i=0; i<daneLokaty.length; i++)
					{
						if(daneLokaty[i][0] == zaznaczonyMiesiac)
						{
							oprocentowanieRoczne = daneLokaty[i][1]; //np. 6.00 //[%]
						}	
					}
					
					// Jeśli nie znamy oprocentowania to nie można kontynuować. Przyczyna zaznaczono zły miesiąc.
					if(oprocentowanieRoczne == -1)
						return -1; // błąd
					else 
					{
						// ### GLOWNE OBLICZENIA DO ZWROCENIA ###

						// Zwracamy NALICZONE ODSETKI
						var naliczoneOdsetkiWyrazoneWProcentach = naliczoneOdsetkiWProcentach(zaznaczonyMiesiac, oprocentowanieRoczne);
            document.forms["kalkulatordepozytowy"].elements["stopaprocentowa"].value = zaokraglenie(oprocentowanieRoczne);
						return procentZliczby(kwotaZdeponowana, naliczoneOdsetkiWyrazoneWProcentach);
					}
					break;
					// /bezpiczenajesien
					
				case "standard":
					// Stałe, dane lokaty
					var daneLokaty = new Array( 
											new Array(1,2.90), 
											new Array(2,3.10), 
											new Array(3,3.70), 
											new Array(6,4.20), 
											new Array(9,4.30), 
											new Array(12,5.20), 
											new Array(24,5.70), 
											new Array(36,5.90)
											/*new Array(1,3.20), 
											new Array(2,3.40), 
											new Array(3,4.00), 
											new Array(6,4.50), 
											new Array(9,4.60), 
											new Array(12,5.70), 
											new Array(24,6.20), 
											new Array(36,6.40)*/
										);
					// ustalamy na podstrawie danych lokaty jaki to ma być procent
					var oprocentowanieRoczne = -1;					
					for(i=0; i<daneLokaty.length; i++)
					{
						if(daneLokaty[i][0] == zaznaczonyMiesiac)
						{
							oprocentowanieRoczne = daneLokaty[i][1]; //np. 6.00 //[%]
						}	
					}
					
					// Jeśli nie znamy oprocentowania to nie można kontynuować. Przyczyna zaznaczono zły miesiąc.
					if(oprocentowanieRoczne == -1)
						return -1; // błąd
					else 
					{
						// ### GLOWNE OBLICZENIA DO ZWROCENIA ###
						
						// W przypadku lokaty "standard" oprocentowanie roczne może się zwiększyć:
						if( (kwotaZdeponowana > 9999) && (kwotaZdeponowana < 35000) ) 
							oprocentowanieRoczne += 0.20; // dodatkowe 0.20% gdy <10000,34999>
						else if( kwotaZdeponowana > 34999 ) // te oba przedziały są odrębne
							oprocentowanieRoczne += 0.30; 
						
						// Zwracamy NALICZONE ODSETKI
						var naliczoneOdsetkiWyrazoneWProcentach = naliczoneOdsetkiWProcentach(zaznaczonyMiesiac, oprocentowanieRoczne);
            document.forms["kalkulatordepozytowy"].elements["stopaprocentowa"].value = zaokraglenie(oprocentowanieRoczne);
						return procentZliczby(kwotaZdeponowana, naliczoneOdsetkiWyrazoneWProcentach);
					}
					break;
					// /standard
					
				case "progresja":
					// Stałe, dane lokaty
					var daneLokaty = new Array( 
											new Array(1,2.40), 
											new Array(2,2.50), 
											new Array(3,2.90), 
											new Array(4,3.10), 
											new Array(5,3.20), 
											new Array(6,3.40), 
											new Array(7,3.50), 
											new Array(8,3.70), 
											new Array(9,3.80), 
											new Array(10,4.00), 
											new Array(11,4.10), 
											new Array(12,4.30)
											/*new Array(1,2.70), 
											new Array(2,2.80), 
											new Array(3,3.30), 
											new Array(4,3.40), 
											new Array(5,3.50), 
											new Array(6,3.90), 
											new Array(7,4.00), 
											new Array(8,4.20), 
											new Array(9,4.30), 
											new Array(10,4.60), 
											new Array(11,4.70), 
											new Array(12,5.00)*/
										);
					// ustalamy na podstrawie danych lokaty jaki to ma być procent
					var oprocentowanieRoczne = -1;					
					for(i=0; i<daneLokaty.length; i++)
					{
						if(daneLokaty[i][0] == zaznaczonyMiesiac)
						{
							oprocentowanieRoczne = daneLokaty[i][1]; //np. 6.00 //[%]
						}	
					}
					
					// Jeśli nie znamy oprocentowania to nie można kontynuować. Przyczyna zaznaczono zły miesiąc.
					if(oprocentowanieRoczne == -1)
						return -1; // błąd
					else 
					{
						// ### GLOWNE OBLICZENIA DO ZWROCENIA ###
						
						// Zwracamy NALICZONE ODSETKI
						var naliczoneOdsetkiWyrazoneWProcentach = naliczoneOdsetkiWProcentach(zaznaczonyMiesiac, oprocentowanieRoczne);
            document.forms["kalkulatordepozytowy"].elements["stopaprocentowa"].value = zaokraglenie(oprocentowanieRoczne);
						return procentZliczby(kwotaZdeponowana, naliczoneOdsetkiWyrazoneWProcentach);
					}
					break;
					// /progresja
          
      /* Teraz kredyty ###################################333*/
        // KREDYT tęcza
          case "kredyt_tecza":	  
          					var daneLokaty = new Array( 
											new Array(1,12.50), 
											new Array(2,12.50), 
											new Array(3,12.50), 
											new Array(4,12.50), 
											new Array(5,12.50), 
											new Array(6,12.50), 
											new Array(7,12.50), 
											new Array(8,12.50), 
											new Array(9,12.50), 
											new Array(10,12.50), 
											new Array(11,12.50), 
											new Array(12,12.50), 
											new Array(13,13.50), 
											new Array(14,13.50), 
											new Array(15,13.50), 
											new Array(16,13.50), 
											new Array(17,13.50), 
											new Array(18,13.50), 
											new Array(19,13.50), 
											new Array(20,13.50), 
											new Array(21,13.50), 
											new Array(22,13.50), 
											new Array(23,13.50), 
											new Array(24,13.50)											
										);
          
					// ustalamy na podstrawie danych lokaty jaki to ma być procent
					var oprocentowanieRoczne = -1;					
					for(i=0; i<daneLokaty.length; i++)
					{
						if(daneLokaty[i][0] == zaznaczonyMiesiac)
						{
							oprocentowanieRoczne = daneLokaty[i][1]; //np. 6.00 //[%]
						}	
					}
					
					// Jeśli nie znamy oprocentowania to nie można kontynuować. Przyczyna zaznaczono zły miesiąc.
					if(oprocentowanieRoczne == -1)
						return -1; // błąd
					else 
					{
						// ### GLOWNE OBLICZENIA DO ZWROCENIA ###
						
						// Zwracamy NALICZONE ODSETKI - UWAGA - tu jest różnica między LOKATAMI A KREDYTAMI
						var naliczoneOdsetkiWyrazoneWProcentach = naliczoneOdsetkiWProcentachDlaKredytu(kwotaZdeponowana, oprocentowanieRoczne, zaznaczonyMiesiac);
            document.forms["kalkulatordepozytowy"].elements["stopaprocentowa"].value = zaokraglenie(oprocentowanieRoczne);     
            document.forms["kalkulatordepozytowy"].elements["rata"].value = zaokraglenie(kwotaZdeponowana / zaznaczonyMiesiac);            
						return naliczoneOdsetkiWyrazoneWProcentach;
					}
					break;
					// /KREDYT tęcza
          
          // KREDYT wakacje marzen
          case "kredyt_wakacje_marzen":	  
          					var daneLokaty = new Array( 
											new Array(1,9.99), 
											new Array(2,9.99), 
											new Array(3,9.99), 
											new Array(4,9.99), 
											new Array(5,9.99), 
											new Array(6,9.99), 
											new Array(7,9.99), 
											new Array(8,9.99), 
											new Array(9,9.99), 
											new Array(10,9.99), 
											new Array(11,9.99), 
											new Array(12,9.99), 
											new Array(13,9.99), 
											new Array(14,9.99), 
											new Array(15,9.99), 
											new Array(16,9.99), 
											new Array(17,9.99), 
											new Array(18,9.99), 
											new Array(19,9.99), 
											new Array(20,9.99), 
											new Array(21,9.99), 
											new Array(22,9.99), 
											new Array(23,9.99), 
											new Array(24,9.99),
											new Array(36,9.99),
											new Array(60,9.99)											
										);
          
					// ustalamy na podstrawie danych lokaty jaki to ma być procent
					var oprocentowanieRoczne = -1;					
					for(i=0; i<daneLokaty.length; i++)
					{
						if(daneLokaty[i][0] == zaznaczonyMiesiac)
						{
							oprocentowanieRoczne = daneLokaty[i][1]; //np. 6.00 //[%]
						}	
					}
					
					// Jeśli nie znamy oprocentowania to nie można kontynuować. Przyczyna zaznaczono zły miesiąc.
					if(oprocentowanieRoczne == -1)
						return -1; // błąd
					else 
					{
						// ### GLOWNE OBLICZENIA DO ZWROCENIA ###
						
						// Zwracamy NALICZONE ODSETKI - UWAGA - tu jest różnica między LOKATAMI A KREDYTAMI
						var naliczoneOdsetkiWyrazoneWProcentach = naliczoneOdsetkiWProcentachDlaKredytu(kwotaZdeponowana, oprocentowanieRoczne, zaznaczonyMiesiac);
            document.forms["kalkulatordepozytowy"].elements["stopaprocentowa"].value = zaokraglenie(oprocentowanieRoczne);   
            document.forms["kalkulatordepozytowy"].elements["rata"].value = zaokraglenie(kwotaZdeponowana / zaznaczonyMiesiac);                        
						return naliczoneOdsetkiWyrazoneWProcentach;
					}
					break;
					// /KREDYT wakacje marzen
          
          // KREDYT szybka gotówka
          case "kredyt_szybka_gotowka":	  
          					var daneLokaty = new Array( 
											new Array(1,10.50), 
											new Array(2,10.50), 
											new Array(3,10.50), 
											new Array(4,10.50), 
											new Array(5,10.50), 
											new Array(6,10.50), 
											new Array(7,10.50), 
											new Array(8,10.50), 
											new Array(9,10.50), 
											new Array(10,10.50), 
											new Array(11,14.20), 
											new Array(12,14.20), 
											new Array(13,14.20), 
											new Array(14,14.20), 
											new Array(15,14.20), 
											new Array(16,14.20), 
											new Array(17,14.20), 
											new Array(18,14.20), 
											new Array(19,14.20), 
											new Array(20,14.20), 
											new Array(21,14.20), 
											new Array(22,14.20), 
											new Array(23,14.20), 
											new Array(24,14.20),
											new Array(36,15.50),
											new Array(60,15.50)											
										);
          
					// ustalamy na podstrawie danych lokaty jaki to ma być procent
					var oprocentowanieRoczne = -1;					
					for(i=0; i<daneLokaty.length; i++)
					{
						if(daneLokaty[i][0] == zaznaczonyMiesiac)
						{
							oprocentowanieRoczne = daneLokaty[i][1]; //np. 6.00 //[%]
						}	
					}
					
					// Jeśli nie znamy oprocentowania to nie można kontynuować. Przyczyna zaznaczono zły miesiąc.
					if(oprocentowanieRoczne == -1)
						return -1; // błąd
					else 
					{
						// ### GLOWNE OBLICZENIA DO ZWROCENIA ###
						
						// Zwracamy NALICZONE ODSETKI - UWAGA - tu jest różnica między LOKATAMI A KREDYTAMI
						var naliczoneOdsetkiWyrazoneWProcentach = naliczoneOdsetkiWProcentachDlaKredytu(kwotaZdeponowana, oprocentowanieRoczne, zaznaczonyMiesiac);
            document.forms["kalkulatordepozytowy"].elements["stopaprocentowa"].value = zaokraglenie(oprocentowanieRoczne);            
            document.forms["kalkulatordepozytowy"].elements["rata"].value = zaokraglenie(kwotaZdeponowana / zaznaczonyMiesiac);            
						return naliczoneOdsetkiWyrazoneWProcentach;
					}
					break;
					// /KREDYT szybka gotówka
          
			} //switch
		}
		
    function zaokraglenie(liczba) {
      liczba = liczba * 100;
      return wynik = Math.round(liczba)/100;      
    }

		// Glowna funkcja kalkulatora (taki "main")
		function kalkulator()
		{		
			/**
			 * Etap I
			 * Sprawdzam czy podano wszsytkie wymagane pola
			 */ 
			if(sprawdzCzyWszystkoWypelniono() > 0) // x > 0 => jest błąd
			{
				document.forms["kalkulatordepozytowy"].elements["kpookresielokaty"].value = "Wypełnij wszytkie pola!";
				exit(); // koniec
			}
			
			/**
			 * Etap II
			 * Zapisuje sobie w zmiennych lokalnych zaznaczone/podane wartosci
			 */
			var kwotaZdeponowana = document.forms["kalkulatordepozytowy"].elements["kwotazdeponowana"].value;			
				var typLokaty = document.forms["kalkulatordepozytowy"].elements["typlokaty"];
				var typLokaty = zaznaczoneInputRadio(typLokaty);
					var zaznaczonyMiesiac = document.forms["kalkulatordepozytowy"].elements["mce"];
					var zaznaczonyMiesiac = zaznaczoneInputRadio(zaznaczonyMiesiac);				
			
			// Naliczone odsetki
			var naliczoneOdsetkiWartosc = obliczZysk(kwotaZdeponowana, typLokaty, zaznaczonyMiesiac);
			var kwotaPoOkresieLokaty = parseFloat(kwotaZdeponowana) + parseFloat(naliczoneOdsetkiWartosc);
			
			
			document.forms["kalkulatordepozytowy"].elements["kpookresielokaty"].value = zaokraglenie(kwotaPoOkresieLokaty);
			document.forms["kalkulatordepozytowy"].elements["naliczoneodsetki"].value = zaokraglenie(naliczoneOdsetkiWartosc);
		}     
