/*
 * Vytvoreno aplikací SharpDevelop.
 * Uživatel: Cudík
 * Datum: 16.2.2009
 * Cas: 19:30
 * 
 * Tento template mužete zmenit pomocí Nástroje | Možnosti | Psaní kódu | Upravit standardní hlavicky souboru.
 */

using System;
using System.Drawing;
using System.Windows.Forms;

namespace CistícíStancie
{
	// Dialog pouzivany pro zadani zadane hodnoty
	public class DialogZadanaHodnota : Form
	{
		
		private Button TlacitkoOK;
		private Button TlacitkoCANCEL;
		private TrackBar Posuvnik;
		private Label LabelHodnota;
			
		// Vlastnost pro nacteni hodnoty posuvniku
		public double HodnotaPosuvniku{
			get{ return this.Posuvnik.Value/ 100.0; }
			set{ this.Posuvnik.Value = Convert.ToInt32(value * 100);}
		}
		
		// Udalost tlacitka OK
		private void TlacitkoOkClick(object Sender, EventArgs e){
			
			this.DialogResult = DialogResult.OK;
			this.Close();
		}
		
		// Udalost tlacitka Cancel
		private void TlacitkoCanacelClick(object Sender, EventArgs e){
			
			this.DialogResult = DialogResult.Cancel;
			this.Close();
		}
		
		// Udalost volana pri zmene hodnoty
		private void ZmenaHodnotyPosuvniku(object Sender, EventArgs e){
			
			this.LabelHodnota.Text = Convert.ToString(this.Posuvnik.Value) + " %";
		}
		
		// Kostruktor
		public DialogZadanaHodnota(){
			
			// Inicializace Formulare
			this.Text = "Nastavení žádané hodtnoty";
			this.FormBorderStyle = FormBorderStyle.FixedDialog;
			//this.BackColor = System.Drawing.Color.White;
			this.ShowInTaskbar = false;
			this.ControlBox = false;
			this.StartPosition = FormStartPosition.CenterParent;
			this.MinimizeBox = false;
			this.MaximizeBox = false;	
			this.Size = new Size(300, 150);
			
			// Incializace ovladacich prvku
			this.TlacitkoOK = new Button();
			this.TlacitkoOK.Text = "OK";
			this.TlacitkoOK.Location = new Point(65, 80);
			this.TlacitkoOK.Click += new EventHandler(TlacitkoOkClick);
			this.Controls.Add(this.TlacitkoOK);
			
			
			this.TlacitkoCANCEL = new Button();
			this.TlacitkoCANCEL.Text = "Cancel";
			this.TlacitkoCANCEL.Location = new Point(155, 80);
			this.TlacitkoCANCEL.Click += new EventHandler(TlacitkoCanacelClick);
			this.Controls.Add(this.TlacitkoCANCEL);
			
			this.Posuvnik = new TrackBar();
			this.Posuvnik.Text = "Nastavte požadovaný výkon";
			this.Posuvnik.Location = new Point(30,35);
			this.Posuvnik.AutoSize = true;
			this.Posuvnik.Minimum = 0;
			this.Posuvnik.Maximum = 100;
			this.Posuvnik.TickFrequency = 10;
			this.Posuvnik.TickStyle = TickStyle.TopLeft;
			this.Posuvnik.Width = 240;
			this.Posuvnik.ValueChanged += new EventHandler(ZmenaHodnotyPosuvniku);
			this.Controls.Add(this.Posuvnik);
			
			// Nasaveni popisku
			this.LabelHodnota = new Label();
			this.LabelHodnota.Text = Convert.ToString(this.Posuvnik.Value) + " %";
			this.LabelHodnota.Size = new Size(8*Font.Height, Font.Height);
			this.LabelHodnota.Location = new Point(141, 15);
			this.LabelHodnota.Parent = this;
			this.LabelHodnota.Show();
				
		}
	}

	
	// Dialog pro nastaveni simulace
	public class DiagloNastaveniSimulace : Form{
		
		// Promenne pro ulozeni parametru
		public double SamplePeriod;
		public double DrawingPeriod;
		public double TeplotaOkoli;
		public double MKT;
		public double CasZrychleni;
		
		// Komponety formuláře
		private TextBox TextBoxPeriodaVykres;
		private TextBox TextBoxPeriodaVzorkovani;
		private TrackBar TrackBarZrychleni;
		private Label LabelPeriodaVykreslovani;
		private Label LabelPeriodaVzorkovani;
		private Label LabelCasoveMeritko;
		private Label LabelHodnotaCasovehoMeritka;
		
		private Label LabelTeplotaOkoli;
		private Label LabelMernaTepelnaKapacia;
		private TextBox TextBoxTeplotaOkoli;
		private TextBox TextBoxMernaTepelnaKapacia;
		
		private Button TlacitkoOK;
		private Button TlacitkoCancel;
		private GroupBox GroubBoxTime;
		private GroupBox GroubBoxOstatni;
		
		// Funkce pro event tlacitka Ok
		private void TlacikoOkClic(object Sender, EventArgs e){
			
			this.SamplePeriod = Convert.ToDouble(this.TextBoxPeriodaVzorkovani.Text)*0.001;
			this.DrawingPeriod = Convert.ToDouble(this.TextBoxPeriodaVykres.Text)*0.001;
			this.TeplotaOkoli = Convert.ToDouble(this.TextBoxTeplotaOkoli.Text);
			this.MKT = Convert.ToDouble(this.TextBoxMernaTepelnaKapacia.Text);
			this.CasZrychleni = this.TrackBarZrychleni.Value;
			
			if(this.TrackBarZrychleni.Value == -1)
				this.CasZrychleni = 0.5;
			if(this.TrackBarZrychleni.Value == 0)
				this.CasZrychleni = 1.0;
			if(this.TrackBarZrychleni.Value == 1)
				this.CasZrychleni = 2.0;
			if(this.TrackBarZrychleni.Value == 2)
				this.CasZrychleni = 5.0;
			if(this.TrackBarZrychleni.Value == 3)
				this.CasZrychleni = 10.0;
			
			this.DialogResult = DialogResult.OK;
			this.Close();
		}
		
		// Funkce pro event tlacitka cancel
		private void TlacikoCancelClick(object Sender, EventArgs e){
			
			this.DialogResult = DialogResult.Cancel;
			this.Close();
		}
			
		// Funkce volana pri zmene hodnoty trackbaru casoveho zrychlení
		private void TrackBarZrychleníChande(object Sender, EventArgs e){
			
			switch(this.TrackBarZrychleni.Value){
				case -1:
					this.LabelHodnotaCasovehoMeritka.Text = "Zpomalení 2x";
					break;
				case 0:
					this.LabelHodnotaCasovehoMeritka.Text = "  Žádné";
					break;
				case 1:
					this.LabelHodnotaCasovehoMeritka.Text = "Zrychlení 2x";
					break;
				case 2:
					this.LabelHodnotaCasovehoMeritka.Text = "Zrychlení 5x";
					break;
				case 3:
					this.LabelHodnotaCasovehoMeritka.Text = "Zrychlení 10x";
					break;
					
			}
		}
		
		// Funkce volaná při změně textu textboxu
		private void TextBoxTextChange(object Sender, EventArgs e){
			TextBox Odesilatel = (TextBox)Sender;
			
			// Pokusí se převést zadanou hodnotu na číslo
			try{
				
				// Pokusí se převést zadanou hodnotu na číslo
				
				double pom = 0.0;
					
					// Text box pro zadavani teploty okoli muze obsahovat zaporne znamenko
					if( Odesilatel != TextBoxTeplotaOkoli || Odesilatel.Text.Length != 1){
						
						// Pokusi se prevest hodnotu na cislo
						pom = Convert.ToDouble(Odesilatel.Text);
				
						// Pokud je nastavena nulová nebo 
						if(Odesilatel != TextBoxTeplotaOkoli &&  pom <= 0.0){
							MessageBox.Show("Zadaná hodnota musí být větší jak nula",
						                "Chybný rozsah zadané hodnoty", 
						                MessageBoxButtons.OK,
						                MessageBoxIcon.Error);
				
							if( Odesilatel == TextBoxPeriodaVzorkovani)
								Odesilatel.Text = Convert.ToString(this.SamplePeriod*1000.0);
					
							if( Odesilatel == TextBoxPeriodaVykres)			
								Odesilatel.Text = Convert.ToString(this.DrawingPeriod*1000.0);

							if( Odesilatel == TextBoxMernaTepelnaKapacia)	
								Odesilatel.Text = Convert.ToString(this.MKT);
						}
				}
			
			// Pokud se nepodaří tento text převést provede se následující kód	
			}catch (Exception){
				
				// Zobrazi se varovani
				MessageBox.Show("Zadaná hodnota nemůže být převedena na číslo",
				                "Chyba při zadávání čísla Zadaná", 
				                MessageBoxButtons.OK,
				                MessageBoxIcon.Error);
				
				// Navrátí se původní hodnota
				if( Odesilatel == TextBoxPeriodaVzorkovani)
						Odesilatel.Text = Convert.ToString(this.SamplePeriod*1000.0);
					
				if( Odesilatel == TextBoxPeriodaVykres)			
						Odesilatel.Text = Convert.ToString(this.DrawingPeriod*1000.0);
			
				if( Odesilatel == TextBoxTeplotaOkoli)	
						Odesilatel.Text = Convert.ToString(this.TeplotaOkoli);

				if( Odesilatel == TextBoxMernaTepelnaKapacia)	
						Odesilatel.Text = Convert.ToString(this.MKT);

				}
			
			
			
		}
			
		// Funkce volana pri zobrazeni formulare
		private void ShowStartEvnet(object Sender, EventArgs e){
			
			this.TextBoxPeriodaVzorkovani.Text = Convert.ToString(this.SamplePeriod*1000.0);
			this.TextBoxPeriodaVykres.Text =  Convert.ToString(this.DrawingPeriod*1000.0);
			this.TextBoxTeplotaOkoli.Text = Convert.ToString(this.TeplotaOkoli);
			this.TextBoxMernaTepelnaKapacia.Text = Convert.ToString(this.MKT);
		
			if( this.CasZrychleni == 0.5)
				this.TrackBarZrychleni.Value = -1;
			
			if( this.CasZrychleni == 1.0)
				this.TrackBarZrychleni.Value = 0;
			
			if( this.CasZrychleni == 2.0)
				this.TrackBarZrychleni.Value = 1;
			
			if( this.CasZrychleni == 5.0)
				this.TrackBarZrychleni.Value = 2;
			
			if( this.CasZrychleni == 10.0)
				this.TrackBarZrychleni.Value = 3;
			
		}
	
		// Prazdny konstruktor
		public DiagloNastaveniSimulace(){
			
			// Inicializace vlastniho dialogu
			this.Text = "Nastavení simulace";
			this.MinimizeBox = false;
			this.MaximizeBox = false;
			this.FormBorderStyle = FormBorderStyle.FixedDialog;
			this.ShowInTaskbar = false;
			this.ControlBox = false;
			this.StartPosition = FormStartPosition.CenterScreen;
			this.Size = new Size(350, 350);
			this.Shown += new EventHandler(ShowStartEvnet);
			
			
			this.TlacitkoOK = new Button();
			this.TlacitkoOK.Location = new Point(90,284);
			this.TlacitkoOK.Text = "OK";
			this.TlacitkoOK.Click += new EventHandler(TlacikoOkClic);
			this.Controls.Add(this.TlacitkoOK);
			
			this.TlacitkoCancel = new Button();
			this.TlacitkoCancel.Text = "Cancel";
			this.TlacitkoCancel.Location = new Point(190, 284);
			this.TlacitkoCancel.Click += new EventHandler(TlacikoCancelClick);
			this.Controls.Add(this.TlacitkoCancel);
			
			this.GroubBoxTime = new GroupBox();
			this.GroubBoxTime.Location = new Point(20,10);
			this.GroubBoxTime.Size = new Size(305, 150);
			this.GroubBoxTime.Text = "Nastavení period vzorkování ";
			this.Controls.Add(this.GroubBoxTime);
			
			this.TextBoxPeriodaVzorkovani = new TextBox();
			this.TextBoxPeriodaVzorkovani.Parent = GroubBoxTime;
			this.TextBoxPeriodaVzorkovani.Location = new Point( 180,30);
			this.TextBoxPeriodaVzorkovani.MaxLength = 18;
			this.TextBoxPeriodaVzorkovani.TextChanged += new EventHandler(TextBoxTextChange);

			this.TextBoxPeriodaVykres = new TextBox();
			this.TextBoxPeriodaVykres.Parent = GroubBoxTime;
			this.TextBoxPeriodaVykres.Location = new Point(180,60);
			this.TextBoxPeriodaVykres.MaxLength = 18;
			this.TextBoxPeriodaVykres.TextChanged += new EventHandler(TextBoxTextChange);
			
			this.LabelPeriodaVzorkovani = new Label();
			this.LabelPeriodaVzorkovani.Text = "Perioda přepočtu modelu [ms] :";
			this.LabelPeriodaVzorkovani.Parent = GroubBoxTime;
			this.LabelPeriodaVzorkovani.Location = new Point(15, 32);
			this.LabelPeriodaVzorkovani.Size = new Size(20 * Font.Height , Font.Height);
			
			this.LabelPeriodaVykreslovani = new Label();
			this.LabelPeriodaVykreslovani.Parent = GroubBoxTime;
			this.LabelPeriodaVykreslovani.Location = new Point(15, 62);
			this.LabelPeriodaVykreslovani.Text = "Perioda vykreslovnání   [ms]:";
			this.LabelPeriodaVykreslovani.Size = new Size(20*Font.Height, Font.Height);
			
			
			this.LabelCasoveMeritko = new Label();
			this.LabelCasoveMeritko.Parent = GroubBoxTime;
			this.LabelCasoveMeritko.Location = new Point(15, 102);
			this.LabelCasoveMeritko.Text = "Nastavení časového zrychlení:";
			this.LabelCasoveMeritko.Size = new Size(12*Font.Height, Font.Height);
			
			this.LabelHodnotaCasovehoMeritka = new Label();
			this.LabelHodnotaCasovehoMeritka.Parent = GroubBoxTime;
			this.LabelHodnotaCasovehoMeritka.Location = new Point(205, 127);
			this.LabelHodnotaCasovehoMeritka.Text = "  Žádné";
			this.LabelHodnotaCasovehoMeritka.Size = new Size(7*Font.Height, Font.Height);
			
			this.TrackBarZrychleni = new TrackBar();
			this.TrackBarZrychleni.Parent = GroubBoxTime;
			this.TrackBarZrychleni.Location = new Point(180, 85);
			this.TrackBarZrychleni.AutoSize = false;
			this.TrackBarZrychleni.Minimum = -1;
			this.TrackBarZrychleni.Maximum = 3;
			this.TrackBarZrychleni.TickFrequency = 1;
			this.TrackBarZrychleni.TickStyle = TickStyle.Both;
			this.TrackBarZrychleni.ValueChanged += new EventHandler(TrackBarZrychleníChande);
			
			// Group box pro ostatní parametry
			this.GroubBoxOstatni = new GroupBox();
			this.GroubBoxOstatni.Location = new Point(20,170);
			this.GroubBoxOstatni.Size = new Size(305, 100);
			this.GroubBoxOstatni.Text = "Ostatní parmetry simulace ";
			this.Controls.Add(this.GroubBoxOstatni);
				
			this.TextBoxTeplotaOkoli = new TextBox();
			this.TextBoxTeplotaOkoli.Parent = GroubBoxOstatni;
			this.TextBoxTeplotaOkoli.Location = new Point( 180,30);
			this.TextBoxTeplotaOkoli.MaxLength = 18;
			this.TextBoxTeplotaOkoli.TextChanged += new EventHandler(TextBoxTextChange);
			
			this.TextBoxMernaTepelnaKapacia = new TextBox();
			this.TextBoxMernaTepelnaKapacia.Parent = GroubBoxOstatni;
			this.TextBoxMernaTepelnaKapacia.Location = new Point( 180,60);
			this.TextBoxMernaTepelnaKapacia.MaxLength = 18;
			this.TextBoxMernaTepelnaKapacia.TextChanged += new EventHandler(TextBoxTextChange);

			
			this.LabelTeplotaOkoli = new Label();
			this.LabelTeplotaOkoli.Text = "Teplota okolního prostředí [°C] :";
			this.LabelTeplotaOkoli.Parent = GroubBoxOstatni;
			this.LabelTeplotaOkoli.Location = new Point(15, 32);
			this.LabelTeplotaOkoli.Size = new Size(20 * Font.Height , Font.Height);
			
			this.LabelMernaTepelnaKapacia = new Label();
			this.LabelMernaTepelnaKapacia.Text = "Měrná tepelná kapacita roztoku:";
			this.LabelMernaTepelnaKapacia.Parent = GroubBoxOstatni;
			this.LabelMernaTepelnaKapacia.Location = new Point(15, 62);
			this.LabelMernaTepelnaKapacia.Size = new Size(20 * Font.Height , Font.Height);
		
			// Promenne pro ulozeni parametru
			SamplePeriod = 0.0;
			DrawingPeriod = 0.0;
			TeplotaOkoli = 0.0;
			MKT = 0.0;
		}
		
		
	}



    // Dialog pro nastaveni parametru tanku
    public class DialogNastaveniTanku : Form{
    	
    	// Datove struktury
    	public DataTank DataTankHNO3;
    	public DataTank DataTankNaOH;
    	public DataTank DataTankCisVoda;
    	public DataTank DataTankVyplVoda;
    	
    	public DataTankKoncentrat DataTankKoncentratuNaOH;
    	public DataTankKoncentrat DataTankKoncentratuHNO3;
    	
    	// Prvky dialogu
    	private ListBox Nabidka;
    	private int OldPrvek = 0;
    	private GroupBox GroupBoxVyberTanku;
    	private GroupBox GroupBoxMechVlastn;
    	private GroupBox GroupBoxTepZtraty;
    	private GroupBox GroupBoxRezset;
    	private GroupBox GroupBoxKoncentrat;
    	
    	private TextBox TextBoxObjemTanku;
    	private TextBox TextBoxPrumerTanku;
    	private TextBox TextBoxTloustkaSteny;
    	private TextBox TextBoxTepelnaVodivost;
    	private TextBox TextBoxResetObjem;
    	private TextBox TextBoxResetKoncentrace;
    	private TextBox TextBoxObjemKoncentratu;
    	private TextBox TextBoxKoncentraceKoncent;
    	private TextBox TextBoxResetObjemKoncentrat;
    		
    	
    	private Label LabelObjemTanku;
    	private Label LabelPolomerTanku;
    	private Label LabelTloustkaSteny;
    	private Label LabelTepelnaVodivost;
    	private Label LabelResetObjem;
    	private Label LabelResetKoncentrace;
    	private Label LabelKoncentratObjem;
    	private Label LabelKoncentratKoncentrace;
    	private Label LabelKoncentratObjemReset;
    	private Label LabelKoncentratResetCerpadlo;
    	
    	private Button ButtonOK;
    	private Button ButtonCancel;
    	 
    	private RadioButton RadioButtonCerpadloFalse;
    	private RadioButton RadioButtonCerpadloTrue;
    	
    	// Funkce volana pri zmene vyberu v seznamu
    	private void ZmenaVyberuVseznamu(object Sender, EventArgs e){
    		
    		ListBox Odesilatel = (ListBox)Sender;
    		
    		// Pokud se změní hodnotata vybraného prvku
    		if(this.OldPrvek != Odesilatel.SelectedIndex ){
    			
    			// Uloží se hodnoty vyplněné v dialogu do datové proměnné příslušného tanku
    			try{
    				switch(this.OldPrvek){
    					case 0:
    						this.DataTankCisVoda = this.UlozDataTanku();
    						break; 
    					case 1:
    						 this.DataTankVyplVoda = this.UlozDataTanku();
    						break;
    					case 2:
    						this.DataTankNaOH =  this.UlozDataTanku();
    						break;
    					case 3:
    						this.DataTankHNO3 =  this.UlozDataTanku();
    						break;
    					case 4:
    						this.DataTankKoncentratuHNO3 = this.UlozDataTakuKoncentratu();
    						break;
    					case 5:
    						this.DataTankKoncentratuNaOH = this.UlozDataTakuKoncentratu();
    						break;	
    				}
    			
    				// Nastaví se nová hodnota proměnné OldPrvek
    				this.OldPrvek = Odesilatel.SelectedIndex;
    			}
    				
    			catch(InvalidOperationException){					// Pokud nastane chyba při převodu čísel z textových boxů
    				// Nedojde ke změně výběru tanku
    				Odesilatel.SelectedIndex = this.OldPrvek;
    			}
    			
    			// Zmena viditelnosti a pristupnosti jednotlivych komponent taku
    		
    			// Pokud neni vybran tank s koncentraty
    			if(Odesilatel.SelectedIndex <=3){
    			
    				GroupBoxMechVlastn.Visible = true;					
    				GroupBoxTepZtraty.Visible = true;
    				GroupBoxRezset.Visible = true;  
    				GroupBoxKoncentrat.Visible = false;
    			
    				// Pro tanky s vodou nemá smysl zadávat koncentraci
    				if(Odesilatel.SelectedIndex <=1){
    					LabelResetKoncentrace.Enabled = false;
    					TextBoxResetKoncentrace.Enabled = false;
    				} 
    				else {
    					LabelResetKoncentrace.Enabled = true;
    					TextBoxResetKoncentrace.Enabled = true;
    				}
    			}
    			// Pokud jsou vybrány tanky s koncentráty
    			else{
    				GroupBoxMechVlastn.Visible = false;
    				GroupBoxTepZtraty.Visible = false;
    				GroupBoxRezset.Visible = false;  	
    				GroupBoxKoncentrat.Visible = true;
    			}
    		
    			// Nahrání nových dat do formuláře
    			switch(Odesilatel.SelectedIndex){
    				case 0:
    					this.NahrajData(DataTankCisVoda);
    					break;
    				case 1:
    					this.NahrajData(this.DataTankVyplVoda);
    					break;
    				case 2:
    					this.NahrajData(this.DataTankNaOH);
    					break;
    				case 3:
    					this.NahrajData(this.DataTankHNO3);
    					break;
    				case 4:
    					this.NahrajData(this.DataTankKoncentratuHNO3);
    					break;
    				case 5:
    					this.NahrajData(this.DataTankKoncentratuNaOH);
    					break;				
    			}
    		
    		}
    	}
    	
    	// Funkce volaná při stisku tlacitka Cancel
    	private void TlacikoCancelClick(object Sender, EventArgs e){
    		
    		this.DialogResult = DialogResult.Cancel;
    		this.Close();
    	}
    	
    	// Funkce volaná při stisku tlacitka OK
    	private void TlacikoOKClick(object Sender, EventArgs e){
    		
    		// Uloží se hodnoty vyplněné v dialogu do datové proměnné příslušného tanku
    			try{
    				switch(this.OldPrvek){
    					case 0:
    						this.DataTankCisVoda = this.UlozDataTanku();
    						break; 
    					case 1:
    						 this.DataTankVyplVoda = this.UlozDataTanku();
    						break;
    					case 2:
    						this.DataTankNaOH =  this.UlozDataTanku();
    						break;
    					case 3:
    						this.DataTankHNO3 =  this.UlozDataTanku();
    						break;
    					case 4:
    						this.DataTankKoncentratuHNO3 = this.UlozDataTakuKoncentratu();
    						break;
    					case 5:
    						this.DataTankKoncentratuNaOH = this.UlozDataTakuKoncentratu();
    						break;	
    				}
    				
    				this.DialogResult = DialogResult.OK;
    				this.Close();
    			}
    				
    			catch(InvalidOperationException){					// Pokud nastane chyba při převodu čísel z textových boxů
    			
    				this.Nabidka.SelectedIndex = this.OldPrvek;
    			}
  
    	}
    	
    	// Funkce volana pri zobrazeni dialogu
    	private void Zobrazeni(object Sender, EventArgs e){
    		
    		this.NahrajData(DataTankCisVoda);
    	
    	}
    			
    	// Funkce kopirujici hodnoty z datovych struktur do textboxů
    	private void NahrajData(object Data){
    		
    		//pokud se jedná o tank s roztoky 
    		if (Data.GetType() == DataTankHNO3.GetType()){
    			
    			DataTank PretypovanaData = (DataTank)Data;
    			this.TextBoxObjemTanku.Text = Convert.ToString(PretypovanaData.Objem);
    			this.TextBoxPrumerTanku.Text = Convert.ToString(PretypovanaData.Prumer);
    			this.TextBoxTloustkaSteny.Text = Convert.ToString(PretypovanaData.TloustkaSteny * 100);
    			this.TextBoxTepelnaVodivost.Text = Convert.ToString(PretypovanaData.TeplotniVodivost);
    			this.TextBoxResetObjem.Text = Convert.ToString(PretypovanaData.ResetHladina*100.0);
    			this.TextBoxResetKoncentrace.Text = Convert.ToString(PretypovanaData.ResetKoncentrace*100.0);
    		}
    		
    		// Pokud se jedná o tank s koncentrátem
    		if(Data.GetType() == DataTankKoncentratuHNO3.GetType()){
    			
    			DataTankKoncentrat PretypovanaData = (DataTankKoncentrat)Data;
    			this.TextBoxObjemKoncentratu.Text = Convert.ToString(PretypovanaData.Objem);
    			this.TextBoxKoncentraceKoncent.Text = Convert.ToString(PretypovanaData.Koncentrace*100.0);
    			this.TextBoxResetObjemKoncentrat.Text = Convert.ToString(PretypovanaData.ResetrObjem*100.0);
    			this.RadioButtonCerpadloTrue.Checked = PretypovanaData.ResetCerpadlo;
    			this.RadioButtonCerpadloFalse.Checked = !PretypovanaData.ResetCerpadlo;
    		}
    	}
    
    	// Funkce pro prevod na textu na cislo
    	private double PrevodNaCislo(string Text, double Interval_A, double Interval_B){
    	
    		double Pom = Convert.ToDouble(Text);
    		
    		// Pokud je hodnota mimo rozsah, dojde k vyvolaní vyjímky
    		if (Pom < Interval_A || Pom > Interval_B)
    			throw new ArgumentOutOfRangeException();

    		return Pom;  // Pokud je promenna v rozsahu, je navrácena
    	}
    	private double PrevodNaCislo(string Text, double Interval_A){
    	
    		double Pom = Convert.ToDouble(Text);
    		
    		// Pokud je hodnota mimo rozsah, dojde k vyvolaní vyjímky
    		if (Pom < Interval_A)
    			throw new ArgumentOutOfRangeException();

    			return Pom;  // Pokud je promenna v rozsahu, je navrácena
    	}
    	
    	// Funkce pro ulozeni dat do datových struktur
    	private DataTank UlozDataTanku(){
    				
    		DataTank Data = new DataTank();
    			
    				// Prevedeni objemu tanku
    				try{
    					Data.Objem = this.PrevodNaCislo(this.TextBoxObjemTanku.Text, 0.001);
    				}	
    				catch(ArgumentOutOfRangeException){
    					MessageBox.Show("Objem tanku musí být větší jan nula", "Hodnota mimo rozsah", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    				catch(Exception){
    					MessageBox.Show("Textové pole s objemem tanku neobsahuje číslo", "Chyba při zadávaní hodnoty", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    				
    				// Prevedeni prumeru tanku
    				try{
    					Data.Prumer = this.PrevodNaCislo(this.TextBoxPrumerTanku.Text, 0.001);
    				}
    				catch(ArgumentOutOfRangeException){
    					MessageBox.Show("Průměr tanku musí být větší jan nula", "Hodnota mimo rozsah", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    				catch(Exception){
    					MessageBox.Show("Textové pole s průměrem tanku neobsahuje číslo", "Chyba při zadávaní hodnoty", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    				
    				// Prevedeni tloustky steny tanku
    				try{
    					Data.TloustkaSteny = this.PrevodNaCislo(this.TextBoxTloustkaSteny.Text, 0.001)/100;
    				} 				
    				catch(ArgumentOutOfRangeException){
    					MessageBox.Show("Tloušťka stěny tanku musí být větší jan nula", "Hodnota mimo rozsah", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    				catch(Exception){
    					MessageBox.Show("Textové pole s tloušťkou stěny tanku neobsahuje číslo", "Chyba při zadávaní hodnoty", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    				
    				// Prevedeni teplotni vodivosti stěny tanku
    				try{
    					Data.TeplotniVodivost = this.PrevodNaCislo(this.TextBoxTepelnaVodivost.Text, 0.001);
    				}
    				catch(ArgumentOutOfRangeException){
    					MessageBox.Show("Teplotní vodivost stěny tanku musí být větší jan nula", "Hodnota mimo rozsah", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    				catch(Exception){
    					MessageBox.Show("Textové pole s teplotní vodivostí stěny tanku neobsahuje číslo", "Chyba při zadávaní hodnoty", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    				
    				// Prevedeni resetovací hodnoty objemu  tanku
    				try{
    					Data.ResetHladina = this.PrevodNaCislo(this.TextBoxResetObjem.Text, 0.0, 100.0)/100.0;
    				}
    				catch(ArgumentOutOfRangeException){
    					MessageBox.Show("Resetovací hodnota objemu tanku musí být v rozsahu 0 až 100 %", "Hodnota mimo rozsah", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    					catch(Exception){
    					MessageBox.Show("Textové pole s resetovací hodnotou objemu tanku neobsahuje číslo", "Chyba při zadávaní hodnoty", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    				
    				// Prevedeni resetovací hodnoty koncentrace  tanku
    				try{
    					Data.ResetKoncentrace = this.PrevodNaCislo(this.TextBoxResetKoncentrace.Text, 0.0, 100.0)/100.0;
    				}
    				catch(ArgumentOutOfRangeException){
    					MessageBox.Show("Resetovací hodnota koncetrace tanku musí být v rozsahu 0 až 100 %", "Hodnota mimo rozsah", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    				catch(Exception){
    					MessageBox.Show("Textové pole s resetovací hodnotou koncentrace tanku neobsahuje číslo", "Chyba při zadávaní hodnoty", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    				
    			return Data;
    		}
		private DataTankKoncentrat UlozDataTakuKoncentratu(){
    			
    		DataTankKoncentrat Data = new DataTankKoncentrat();
    			
    			// Prevedeni objemu tanku
    				try{
    				Data.Objem = this.PrevodNaCislo(this.TextBoxObjemKoncentratu.Text, 0.001);
    				}
    				catch(ArgumentOutOfRangeException){
    					MessageBox.Show("Hodnota objemu tanku musí být větší jan nula", "Hodnota mimo rozsah", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    				catch(Exception){
    					MessageBox.Show("Textové pole s hodnotou objemu tanku neobsahuje číslo", "Chyba při zadávaní hodnoty", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    			

    			// Prevedeni hodnoty koncentrace tanku
    				try{
    					Data.Koncentrace = this.PrevodNaCislo(this.TextBoxKoncentraceKoncent.Text, 0.0, 100.0)/100.0;
    				}
    				catch(ArgumentOutOfRangeException){
    					MessageBox.Show("Hodnota koncentrace musí být v rozsahu 0 až 100 %", "Hodnota mimo rozsah", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    				catch(Exception){
    					MessageBox.Show("Textové pole s hodnotou koncentrace neobsahuje číslo", "Chyba při zadávaní hodnoty", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    			
    			// Prevedeni resetovaci hodnoty objemu tanku
    			
    			try{
    					Data.ResetrObjem = this.PrevodNaCislo(this.TextBoxResetObjemKoncentrat.Text, 0.0, 100.0)/100.0;
    				}
    				catch(ArgumentOutOfRangeException){
    					MessageBox.Show("Hodnota pro reset objemu musí být v rozsahu 0 až 100 %", "Hodnota mimo rozsah", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    				catch(Exception){
    					MessageBox.Show("Textové pole s hodnotou koncentrace neobsahuje číslo", "Chyba při zadávaní hodnoty", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    			
    				// Ulozeni resetrovaciho stavu cerpadla koncentratu
    				Data.ResetCerpadlo = this.RadioButtonCerpadloTrue.Checked;
    				
    				return Data;
    		}
    	
    	// Konstruktor dialogu
    	public DialogNastaveniTanku(){
    		
    		this.Text = "Nastavení parametrů tanků";
    		this.MinimizeBox = false;
    		this.MaximizeBox = false;
    		this.FormBorderStyle = FormBorderStyle.FixedDialog;
    		this.ShowInTaskbar = false;
    		this.ControlBox = false;
    		this.Size = new Size(570, 382);
    		this.StartPosition = FormStartPosition.CenterScreen;
    		this.Shown += new EventHandler(Zobrazeni);
    	
    		this.Nabidka = new ListBox();
    		this.Nabidka.Location = new Point(20, 30);
    		this.Nabidka.Size = new Size(150, this.ClientSize.Height - 50);
    		this.Nabidka.Parent = this;
    		this.Nabidka.Items.Clear();
    		this.Nabidka.Sorted = false;
    		this.Nabidka.Items.Add("Tank s čistou voudou");
    		this.Nabidka.Items.Add("Tank s proplachovou vodou");
    		this.Nabidka.Items.Add("Tank s roztokem NaOH");
    		this.Nabidka.Items.Add("Tank s roztokem HNO3");
    		this.Nabidka.Items.Add("Tank s koncentrátem HNO3");
    		this.Nabidka.Items.Add("Tank s koncentrátem NaOH");
    		this.Nabidka.SelectedIndex = 0;
    		this.Nabidka.SelectedIndexChanged += new EventHandler(ZmenaVyberuVseznamu);
    		
    		this.GroupBoxVyberTanku = new GroupBox();
    		this.GroupBoxVyberTanku.Parent = this;
    		this.GroupBoxVyberTanku.Text = "Výběr tanku: ";
    		this.GroupBoxVyberTanku.Location = new Point(10, 13);
    		this.GroupBoxVyberTanku.Size= new Size(this.Nabidka.Size.Width + 20, this.Nabidka.Height + 20);
    		
    		this.GroupBoxMechVlastn = new GroupBox();
    		this.GroupBoxMechVlastn.Parent = this;
    		this.GroupBoxMechVlastn.Text = "Mechanické vlastnosti: ";
    		this.GroupBoxMechVlastn.Location = new Point(this.GroupBoxVyberTanku.Location.X + this.GroupBoxVyberTanku.Size.Width + 10, this.GroupBoxVyberTanku.Location.Y);
    		this.GroupBoxMechVlastn.Size = new Size(260, 100);
    		
    		this.TextBoxObjemTanku = new TextBox();
    		this.TextBoxObjemTanku.Parent = GroupBoxMechVlastn;
    		this.TextBoxObjemTanku.Location = new Point(GroupBoxMechVlastn.Size.Width - TextBoxObjemTanku.Size.Width -10 , 30);
    		
    		this.LabelObjemTanku = new Label();
    		this.LabelObjemTanku.Parent = GroupBoxMechVlastn;
    		this.LabelObjemTanku.Text = "Objem tanku [litry]: ";
    		this.LabelObjemTanku.Location = new Point(10, 32);
    		
    		this.TextBoxPrumerTanku = new TextBox();
    		this.TextBoxPrumerTanku.Parent = GroupBoxMechVlastn;
    		this.TextBoxPrumerTanku.Location = new Point(this.TextBoxObjemTanku.Location.X , 60);
    		
    		this.LabelPolomerTanku = new Label();
    		this.LabelPolomerTanku.Parent = GroupBoxMechVlastn;
    		this.LabelPolomerTanku.Text = "Průměr tanku [metry]: ";
    		this.LabelPolomerTanku.Size = new Size(10 * Font.Height , Font.Height);
    		this.LabelPolomerTanku.Location = new Point(10, 63);
    		
    		this.GroupBoxTepZtraty = new GroupBox();
    		this.GroupBoxTepZtraty.Parent = this;
    		this.GroupBoxTepZtraty.Text = "Parametry tepelných ztrát: ";
    		this.GroupBoxTepZtraty.Location = new Point(this.GroupBoxMechVlastn.Location.X, this.GroupBoxMechVlastn.Location.Y + GroupBoxMechVlastn.Size.Height + 10 );
    		this.GroupBoxTepZtraty.Size= GroupBoxMechVlastn.Size;
    		
    		this.TextBoxTloustkaSteny = new TextBox();
    		this.TextBoxTloustkaSteny.Parent = GroupBoxTepZtraty;
    		this.TextBoxTloustkaSteny.Location = new Point(GroupBoxTepZtraty.Size.Width - TextBoxTloustkaSteny.Size.Width -10 , 30);
    		
    		this.LabelTloustkaSteny = new Label();
    		this.LabelTloustkaSteny.Parent = GroupBoxTepZtraty;
    		this.LabelTloustkaSteny.Text = "Tloušťka stěny tanku [cm]: ";
    		this.LabelTloustkaSteny.Location = new Point(10, 32);
    		this.LabelTloustkaSteny.Size = new Size(12 * Font.Height , Font.Height);  
    		
    		this.TextBoxTepelnaVodivost = new TextBox();
    		this.TextBoxTepelnaVodivost.Parent = GroupBoxTepZtraty;
    		this.TextBoxTepelnaVodivost.Location = new Point(this.TextBoxTloustkaSteny.Location.X , 60);
    		
    		this.LabelTepelnaVodivost = new Label();
    		this.LabelTepelnaVodivost.Parent = GroupBoxTepZtraty;
    		this.LabelTepelnaVodivost.Text = "Tepelná vodivost stěny: ";
    		this.LabelTepelnaVodivost.Size = new Size(10 * Font.Height , Font.Height);
    		this.LabelTepelnaVodivost.Location = new Point(10, 63);
    		
    		this.GroupBoxRezset = new GroupBox();
    		this.GroupBoxRezset.Parent = this;
    		this.GroupBoxRezset.Text = "Hodnoty nastavené po resetu: ";
    		this.GroupBoxRezset.Location = new Point(this.GroupBoxTepZtraty.Location.X, this.GroupBoxTepZtraty.Location.Y + GroupBoxTepZtraty.Size.Height + 10 );
    		this.GroupBoxRezset.Size= GroupBoxMechVlastn.Size;
    		
    		this.TextBoxResetObjem = new TextBox();
    		this.TextBoxResetObjem.Parent = GroupBoxRezset;
    		this.TextBoxResetObjem.Location = new Point(GroupBoxRezset.Size.Width - TextBoxResetObjem.Size.Width -10 , 30);
    		
    		this.LabelResetObjem = new Label();
    		this.LabelResetObjem.Parent = GroupBoxRezset;
    		this.LabelResetObjem.Text = "Objem tanku  [%]: ";
    		this.LabelResetObjem.Location = new Point(10, 32);
    		this.LabelResetObjem.Size = new Size(12 * Font.Height , Font.Height);  
    		
    		this.TextBoxResetKoncentrace = new TextBox();
    		this.TextBoxResetKoncentrace.Parent = GroupBoxRezset;
    		this.TextBoxResetKoncentrace.Location = new Point(this.TextBoxResetObjem.Location.X , 60);
    		this.TextBoxResetKoncentrace.Enabled = false;
    		
    		this.LabelResetKoncentrace = new Label();
    		this.LabelResetKoncentrace.Parent = GroupBoxRezset;
    		this.LabelResetKoncentrace.Text = "Koncentrace [%]: ";
    		this.LabelResetKoncentrace.Size = new Size(10 * Font.Height , Font.Height);
    		this.LabelResetKoncentrace.Location = new Point(10, 63);
    		this.LabelResetKoncentrace.Enabled = false;
    		
    		this.ButtonOK = new Button();
    		this.ButtonOK.Location = new Point(this.GroupBoxMechVlastn.Location.X + this.GroupBoxMechVlastn.Size.Width + 20, 275);
    		this.ButtonOK.Text = "OK";
    		this.ButtonOK.Click += new EventHandler(this.TlacikoOKClick);
    		this.Controls.Add(ButtonOK);
    		
    		this.ButtonCancel = new Button();
    		this.ButtonCancel.Location = new Point(this.ButtonOK.Location.X, this.ButtonOK.Location.Y + this.ButtonOK.Size.Height + 10);
    		this.ButtonCancel.Text = "Cancel";
    		this.ButtonCancel.Click += new EventHandler(this.TlacikoCancelClick);
    		this.Controls.Add(ButtonCancel);
    		
    		this.GroupBoxKoncentrat = new GroupBox();
    		this.GroupBoxKoncentrat.Parent = this;
    		this.GroupBoxKoncentrat.Text = "Parametry tanku:";
    		this.GroupBoxKoncentrat.Location = this.GroupBoxMechVlastn.Location;
    		this.GroupBoxKoncentrat.Size = new Size(GroupBoxMechVlastn.Size.Width, 170);
    		this.GroupBoxKoncentrat.Visible = false;
    		
    		this.TextBoxObjemKoncentratu = new TextBox();
    		this.TextBoxObjemKoncentratu.Parent = GroupBoxKoncentrat;
    		this.TextBoxObjemKoncentratu.Location = new Point(GroupBoxKoncentrat.Size.Width - TextBoxObjemKoncentratu.Size.Width -10 , 30);
    		
    		this.TextBoxKoncentraceKoncent = new TextBox();
    		this.TextBoxKoncentraceKoncent.Parent = GroupBoxKoncentrat;
    		this.TextBoxKoncentraceKoncent.Location = new Point(this.TextBoxObjemKoncentratu.Location.X , 60);
			
    		this.TextBoxResetObjemKoncentrat = new TextBox();
    		this.TextBoxResetObjemKoncentrat.Parent = GroupBoxKoncentrat;
    		this.TextBoxResetObjemKoncentrat.Location = new Point(this.TextBoxObjemKoncentratu.Location.X , 90);
    		
    		this.RadioButtonCerpadloFalse = new RadioButton();
    		this.RadioButtonCerpadloFalse.Parent = GroupBoxKoncentrat;
    		this.RadioButtonCerpadloFalse.Text = "Vypnuto";
    		this.RadioButtonCerpadloFalse.Location = new Point(this.TextBoxResetObjemKoncentrat.Location.X, 120);
    		this.RadioButtonCerpadloFalse.Checked = true;
    		
    		                       
    		this.RadioButtonCerpadloTrue = new RadioButton();
    		this.RadioButtonCerpadloTrue.Parent = GroupBoxKoncentrat;
    		this.RadioButtonCerpadloTrue.Text = "Zapnuto";
    		this.RadioButtonCerpadloTrue.Location = new Point(this.TextBoxResetObjemKoncentrat.Location.X, this.RadioButtonCerpadloFalse.Location.Y + 19);
    		this.RadioButtonCerpadloTrue.Checked = false;
    		
    		LabelKoncentratObjem = new Label();
    		this.LabelKoncentratObjem.Parent =  GroupBoxKoncentrat;
    		this.LabelKoncentratObjem.Location = new Point(10, 32);
    		this.LabelKoncentratObjem.Text = "Objem tanku  [litry]: ";
    		this.LabelKoncentratObjem.Size = new Size(this.Font.Height*12, this.Font.Height);

    		LabelKoncentratKoncentrace = new Label();
    		this.LabelKoncentratKoncentrace.Parent =  GroupBoxKoncentrat;
    		this.LabelKoncentratKoncentrace.Location = new Point(10, 63);
    		this.LabelKoncentratKoncentrace.Text = "Koncentrace roztoku [%]: ";
    		this.LabelKoncentratKoncentrace.Size = new Size(this.Font.Height*12, this.Font.Height);
    		
    		LabelKoncentratObjemReset = new Label();
    		this.LabelKoncentratObjemReset.Parent =  GroupBoxKoncentrat;
    		this.LabelKoncentratObjemReset.Location = new Point(10, 94);
    		this.LabelKoncentratObjemReset.Text = "Objem tanku po resetu [%]: ";
    		this.LabelKoncentratObjemReset.Size = new Size(this.Font.Height*12, this.Font.Height);

    		this.LabelKoncentratResetCerpadlo = new Label();
    		this.LabelKoncentratResetCerpadlo.Parent =  GroupBoxKoncentrat;
    		this.LabelKoncentratResetCerpadlo.Location = new Point(10, 135);
    		this.LabelKoncentratResetCerpadlo.Text = "Stav čerpadla po resetu: ";
    		this.LabelKoncentratResetCerpadlo.Size = new Size(this.Font.Height*12, this.Font.Height);
    		
//    		Inicializace datovych struktur
    		DataTankHNO3 = new DataTank();
    		DataTankNaOH = new DataTank();
    		DataTankCisVoda = new DataTank();
    		DataTankVyplVoda = new DataTank();
    		DataTankKoncentratuNaOH = new DataTankKoncentrat();
    		DataTankKoncentratuHNO3 = new DataTankKoncentrat();
    	
    	}
    }

    
    //Dialog pro nastaveni klapek a ventilu
    public class DialogNastaveniKlapek : Form{
    	
    	// Datove promenne
    	public DataKlapky BV104_03;
		public DataKlapky BV103_03;
		public DataKlapky BV102_05;
		public DataKlapky BV100_01;
		public DataKlapky BV101_03;
		public DataKlapky BV101_01;
		public DataKlapky BV102_01;
		public DataKlapky BV103_01;
		public DataKlapky BV104_01;
		public DataKlapky SSV109_01;
    	
    	// Prvky dialogu
    	private int OldVyber;
    	private Button TlacitkoOK;
    	private Button TlacitkoCancel;
    	private ListBox Seznam;  	
    	private GroupBox GroupBoxSeznamu;
    	private GroupBox GroupBoxParametry;  	
    	private TextBox TextBoxCasovaKonstanta;
    	private Label LabelCasovaKonstanta;
    	private Label LabelResetStav;
    	private RadioButton RadioButtonResetTrue;
    	private RadioButton RadioButtonResetFalse;
    	    	
    	// Funkce volana pri zobrazeni dialogu
    	private void PriZobrazeni(object Sender, EventArgs e){
    		
    		this.NactiData(BV100_01);
    	}
    	
    	// Funkce pro prevod stringu na cilo
    	private double PrevedNaCislo(string text, double IntervalA){
    		
    		double pom = Convert.ToDouble(text);
    		
    		if( pom < IntervalA )
    			throw new ArgumentOutOfRangeException();
    		else 
    			return pom;
    	}
    	
    	// Funkce pro načtení dat do dialogu
    	private void NactiData( DataKlapky Data){
    		
    		this.TextBoxCasovaKonstanta.Text = Convert.ToString(Data.CasovaKonstanta);
    		
    		this.RadioButtonResetTrue.Checked = Data.StavPoResetu;
    		this.RadioButtonResetFalse.Checked = ! Data.StavPoResetu;
    	}
    	
    	// Funkce pro ulozeni dat z dialogu do datovych struktur
    	private void UlozData( ref DataKlapky Data){
    		
    		try{
    			Data.CasovaKonstanta = this.PrevedNaCislo(TextBoxCasovaKonstanta.Text, 0.0001);
    		}
    		catch(ArgumentOutOfRangeException){
    					MessageBox.Show("Časová konstatna musí být větší jan nula", "Hodnota mimo rozsah", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    				catch(Exception){
    					MessageBox.Show("Textové pole časové konstany neobsahuje číslo", "Chyba při zadávaní hodnoty", MessageBoxButtons.OK, MessageBoxIcon.Error);
    					throw new InvalidOperationException();
    				}
    	
    		Data.StavPoResetu = this.RadioButtonResetTrue.Checked;
    	}
    		 	
    	// Funkce tlacitka OK
    	private void TlacitkoOkClick(object Sender, EventArgs e){
    		
    		// Ulozi aktualni obsah okna
    		try{
    				switch(this.OldVyber){
    					case 0:
    						this.UlozData(ref this.BV100_01);
    						break;
    					case 1:
    						this.UlozData(ref this.BV101_03);
    						break;
						case 2:
    						this.UlozData(ref this.BV102_05);
    						break;
    					case 3:
    						this.UlozData(ref this.BV103_03);
    						break;
    					case 4:
    						this.UlozData(ref this.BV104_03);
    						break;
    					case 5:
    						this.UlozData(ref this.BV101_01);
    						break;
    					case 6:
    						this.UlozData(ref this.BV102_01);
    						break;
    					case 7:
    						this.UlozData(ref this.BV103_01);
    						break;
    					case 8:
    						this.UlozData(ref this.BV104_01);
    						break;
    					case 9:
    						this.UlozData(ref this.SSV109_01);
    						break;
    				} // end switch
    		
    			this.DialogResult = DialogResult.OK;	
    			this.Close();
    			}
    				// Pokud nastane chyba v prevodu nepovoli se prechod na jiný prvek seznamu
    				catch(InvalidOperationException){
    				
    					this.Seznam.SelectedIndex = this.OldVyber;
    			}
    	}

    	// Funkce tlacitka cancel
    	private void TlacitkoCancelClick(object Sender, EventArgs o){
    		this.DialogResult = DialogResult.Cancel;
    		
    		this.Close();
    	}
    	
    	// Funkce volana pri zmene vybraného prvku
    	private void ZmenaVyberu(object Sender, EventArgs e){
    		
    		// Ulozeni aktualne nastavenych hodnot
    		
    		if(this.OldVyber != this.Seznam.SelectedIndex){ 	// Pokud doslo ke zmene indexu vyberu
    			
    			try{
    				switch(this.OldVyber){
    					case 0:
    						this.UlozData(ref this.BV100_01);
    						break;
    					case 1:
    						this.UlozData(ref this.BV101_03);
    						break;
						case 2:
    						this.UlozData(ref this.BV102_05);
    						break;
    					case 3:
    						this.UlozData(ref this.BV103_03);
    						break;
    					case 4:
    						this.UlozData(ref this.BV104_03);
    						break;
    					case 5:
    						this.UlozData(ref this.BV101_01);
    						break;
    					case 6:
    						this.UlozData(ref this.BV102_01);
    						break;
    					case 7:
    						this.UlozData(ref this.BV103_01);
    						break;
    					case 8:
    						this.UlozData(ref this.BV104_01);
    						break;
    					case 9:
    						this.UlozData(ref this.SSV109_01);
    						break;
    				} // end switch
    			
    				this.OldVyber = this.Seznam.SelectedIndex;
    			}
    			// Pokud nastane chyba v prevodu nepovoli se prechod na jiný prvek seznamu
    			catch(InvalidOperationException){
    				this.Seznam.SelectedIndex = this.OldVyber;
    			}
    		
    		} //end if
    	
    		// Po ulozeni dat je nutne nastavit nova data;
    		switch(this.Seznam.SelectedIndex){
    					case 0:
    						this.NactiData(this.BV100_01);
    						break;
    					case 1:
    						this.NactiData(this.BV101_03);
    						break;
						case 2:
    						this.NactiData(this.BV102_05);
    						break;
    					case 3:
    						this.NactiData(this.BV103_03);
    						break;
    					case 4:
    						this.NactiData(this.BV104_03);
    						break;
    					case 5:
    						this.NactiData(this.BV101_01);
    						break;
    					case 6:
    						this.NactiData(this.BV102_01);
    						break;
    					case 7:
    						this.NactiData(this.BV103_01);
    						break;
    					case 8:
    						this.NactiData(this.BV104_01);
    						break;
    					case 9:
    						this.NactiData(this.SSV109_01);
    						break;
    		}
    		
    	}
    	
    	// Konstruktor
    	public DialogNastaveniKlapek(){
    		
    		this.FormBorderStyle = FormBorderStyle.FixedDialog;
    		this.ShowInTaskbar = false;
    		this.MinimizeBox = false;
    		this.MaximizeBox = false;
    		this.ControlBox = false;
    		this.Text = "Nastavení klapek a ventilů";
    		this.Size = new Size(457, 230);
    		this.OldVyber = 0;
    		this.Shown += new EventHandler( this.PriZobrazeni );
    		
    		this.TlacitkoOK = new Button();
    		this.TlacitkoOK.Parent = this;
    		this.TlacitkoOK.Text = "OK";
    		this.TlacitkoOK.Location = new Point(240, 160);
    		this.TlacitkoOK.Visible = true;
    		this.TlacitkoOK.Click += new EventHandler(this.TlacitkoOkClick);
    		this.Controls.Add(TlacitkoOK);
    		
    		this.TlacitkoCancel = new Button();
    		this.TlacitkoCancel.Parent = this;
    		this.TlacitkoCancel.Text = "Cancel";
    		this.TlacitkoCancel.Location = new Point(this.TlacitkoOK.Location.X + this.TlacitkoOK.Size.Width + 10, this.TlacitkoOK.Location.Y);
    		this.TlacitkoCancel.Visible = true;
    		this.TlacitkoCancel.Click += new EventHandler(this.TlacitkoCancelClick);
    		this.Controls.Add(TlacitkoCancel);
    		  		
    		this.Seznam = new ListBox();
    		this.Seznam.Items.Add("BV100-01");
    		this.Seznam.Items.Add("BV101-03");
    		this.Seznam.Items.Add("BV102-05");
    		this.Seznam.Items.Add("BV103-03");
    		this.Seznam.Items.Add("BV104-03");
    		this.Seznam.Items.Add("BV101-01");
    		this.Seznam.Items.Add("BV102-01");
    		this.Seznam.Items.Add("BV103-01");
    		this.Seznam.Items.Add("BV104-01");
    		this.Seznam.Items.Add("SSV109-01");
    		this.Seznam.SelectedIndex = 0;
    		this.Seznam.Parent = this;
    		this.Seznam.Location = new Point(15, 27);
    		this.Seznam.Size = new Size(160, 155 );
    		this.Seznam.SelectedIndex = 0;
    		this.Seznam.SelectedIndexChanged += new EventHandler( this.ZmenaVyberu );
    		
    		this.GroupBoxSeznamu = new GroupBox();
    		this.GroupBoxSeznamu.Parent = this;
    		this.GroupBoxSeznamu.Text = "Vyberte klapku: ";
    		this.GroupBoxSeznamu.Location = new Point(10, 10);
    		this.GroupBoxSeznamu.Size = new Size(170, this.ClientSize.Height -27);
    		
    		
    		this.GroupBoxParametry = new GroupBox();
    		this.GroupBoxParametry.Parent = this;
    		this.GroupBoxParametry.Text = "Parametry klapky: ";
    		this.GroupBoxParametry.Location = new Point(GroupBoxSeznamu.Location.X + GroupBoxSeznamu.Size.Width + 10, GroupBoxSeznamu.Location.Y );
    		this.GroupBoxParametry.Size = new Size(250, 130);
    		
    		this.TextBoxCasovaKonstanta = new TextBox();
    		this.TextBoxCasovaKonstanta.Parent = GroupBoxParametry;
    		this.TextBoxCasovaKonstanta.Location = new Point(this.GroupBoxParametry.Size.Width - this.TextBoxCasovaKonstanta.Size.Width - 10, 30);
 
    		this.LabelCasovaKonstanta = new Label();
    		this.LabelCasovaKonstanta.Parent = GroupBoxParametry;
    		this.LabelCasovaKonstanta.Text = "Časová konstanta [s]:";
    		this.LabelCasovaKonstanta.Size = new Size(this.Font.Height * 10, this.Font.Height);
    		this.LabelCasovaKonstanta.Location = new Point(10, 33);
    		
    		this.LabelResetStav = new Label();
    		this.LabelResetStav.Parent = GroupBoxParametry;
    		this.LabelResetStav.Text = "Stav po resetu modelu:";
    		this.LabelResetStav.Size = new Size(this.Font.Height * 10, this.Font.Height);
    		this.LabelResetStav.Location = new Point(10, 79);
    		
    		this.RadioButtonResetTrue = new RadioButton();
    		this.RadioButtonResetTrue.Parent = GroupBoxParametry;
    		this.RadioButtonResetTrue.Text = "Otevřeno";
    		this.RadioButtonResetTrue.Checked = true;
    		this.RadioButtonResetTrue.Location = new Point(this.TextBoxCasovaKonstanta.Location.X, 65);
    		
    		this.RadioButtonResetFalse = new RadioButton();
    		this.RadioButtonResetFalse.Parent = GroupBoxParametry;
    		this.RadioButtonResetFalse.Text = "Zavřeno";
    		this.RadioButtonResetFalse.Checked = false;
    		this.RadioButtonResetFalse.Location = new Point(this.TextBoxCasovaKonstanta.Location.X, 85);
    		
    		BV104_03 = new DataKlapky();
			BV103_03 = new DataKlapky();
			BV102_05 = new DataKlapky();
			BV100_01 = new DataKlapky();
			BV101_03 = new DataKlapky();
			BV101_01 = new DataKlapky();
			BV102_01 = new DataKlapky();
			BV103_01 = new DataKlapky();
			BV104_01 = new DataKlapky();
			SSV109_01 = new DataKlapky();

    	}
    }
    
    // Dialog nastaveni snimacu
    
    public class DialogNastaveniSnimacu : Form{
    	
    	private Button TlacitkoOK;
    	private Button TlacitkoCancel;
    	private ListBox Seznam;
    	private GroupBox GroupBoxSeznam;
    	private GroupBox GroupBoxParametry;
    	private TextBox TextBoxCasKonstanta;
    	private TextBox TextBoxMinimum;
    	private TextBox TextBoxMaximum;
    	private Label LabelCacKonstata;
    	private Label LabelMinimum;
    	private Label LabelMaximum;
    	
    	// Datove struktury
    	public DataSnimace TIC109_02;
    	public DataSnimace TIC102_03;
    	public DataSnimace TIC103_03;
    	public DataSnimace TIC105_02;
    	public DataSnimace TIC106_02;
    	public DataSnimace QIC109_03;
    	public DataSnimace QIC105_01;
    	public DataSnimace QIC106_01;
    	public DataSnimace FIC109_01;
    	
    	// Ostatni
    	private int OldIndex = 0;
    	
    	// Udalost tlacitka OK
    	private void TlaciktkoOKClick(object Sender, EventArgs e){
    		
    	try{
    				switch(this.OldIndex){
    					case 0:
    						this.UlozHodnoty(ref TIC109_02);
    						break;
    					case 1:
    						this.UlozHodnoty(ref TIC102_03);
    						break;
    					case 2:
    						this.UlozHodnoty(ref TIC103_03);
    						break;
    					case 3:
    						this.UlozHodnoty(ref TIC105_02);
    						break;
    					case 4:
    						this.UlozHodnoty(ref TIC106_02);
    						break;
    					case 5:
    						this.UlozHodnoty(ref QIC109_03);
    						break;
    					case 6:
    						this.UlozHodnoty(ref QIC105_01);
    						break;
    					case 7:
    						this.UlozHodnoty(ref QIC106_01);
    						break;
    					case 8:
    						this.UlozHodnoty(ref FIC109_01);
    						break;
    				}
    			 	
    			this.DialogResult = DialogResult.OK;
    			this.Close();
    			
    		}
    			catch(InvalidOperationException){
    				this.Seznam.SelectedIndex = this.OldIndex;
    		}
    		}

    	// Udalost tlacitka Cancel
    	private void TlacitkoCancelClick(object Sender, EventArgs e){
        
    	this.DialogResult = DialogResult.Cancel;
    	this.Close();
    	
    	}
    	   	
    	// Funkce pro prevod retezce 
    	private double PrevedNaCislo(string retezec, double a, double b)
    	{
    		double pom = Convert.ToDouble(retezec);
    		if(pom < a || pom > b)
    			throw new ArgumentOutOfRangeException();
    		
    		return pom;
    		
    	}
    	private double PrevedNaCislo(string retezec, double a)
    	{
    		double pom = Convert.ToDouble(retezec);
    		if(pom < a )
    			throw new ArgumentOutOfRangeException();  
    		
    		return pom;
    	}
    	
    	// Funkce volana po zobrazeni dialogu
    	private void PriZobrazeni(object Sender, EventArgs e){
    		
    		this.Seznam.SelectedIndex = 0;
    		this.NactiHodnoty(ref TIC109_02);
    	}
    	
    	// Funkce volana pri zmene vyberu
    	private void EventVyveruSeznamu(object Sender, EventArgs e){
    		
    		if (this.OldIndex != this.Seznam.SelectedIndex){
    			try{
    				switch(this.OldIndex){
    					case 0:
    						this.UlozHodnoty(ref TIC109_02);
    						break;
    					case 1:
    						this.UlozHodnoty(ref TIC102_03);
    						break;
    					case 2:
    						this.UlozHodnoty(ref TIC103_03);
    						break;
    					case 3:
    						this.UlozHodnoty(ref TIC105_02);
    						break;
    					case 4:
    						this.UlozHodnoty(ref TIC106_02);
    						break;
    					case 5:
    						this.UlozHodnoty(ref QIC109_03);
    						break;
    					case 6:
    						this.UlozHodnoty(ref QIC105_01);
    						break;
    					case 7:
    						this.UlozHodnoty(ref QIC106_01);
    						break;
    					case 8:
    						this.UlozHodnoty(ref QIC106_01);
    						break;
    				}
    			}
    			catch(InvalidOperationException){
    				this.Seznam.SelectedIndex = this.OldIndex;
    			}
    		}
    		
    		switch(this.Seznam.SelectedIndex){
    					case 0:
    						this.NactiHodnoty(ref TIC109_02);
    						break;
    					case 1:
    						this.NactiHodnoty(ref TIC102_03);
    						break;
    					case 2:
    						this.NactiHodnoty(ref TIC103_03);
    						break;
    					case 3:
    						this.NactiHodnoty(ref TIC105_02);
    						break;
    					case 4:
    						this.NactiHodnoty(ref TIC106_02);
    						break;
    					case 5:
    						this.NactiHodnoty(ref QIC109_03);
    						break;
    					case 6:
    						this.NactiHodnoty(ref QIC105_01);
    						break;
    					case 7:
    						this.NactiHodnoty(ref QIC106_01);
    						break;
    					case 8:
    						this.NactiHodnoty(ref FIC109_01);
    						break;
    				}
    		
    		this.OldIndex = this.Seznam.SelectedIndex;
    	}
    	
    	// Funkce pro nacteni hodnot do dialogu
    	private void NactiHodnoty(ref DataSnimace Data){
    		this.TextBoxCasKonstanta.Text = Data.CasovaKonstanta.ToString();
    		this.TextBoxMinimum.Text = Data.MinimalniHodnota.ToString();
    		this.TextBoxMaximum.Text = Data.MaximalniHodnota.ToString();
    	}
    	
    	// Funkce pro ulozeni hodnot z dialogu
    	private void UlozHodnoty(ref DataSnimace Data){
    		
    		try{
    			Data.CasovaKonstanta = this.PrevedNaCislo(this.TextBoxCasKonstanta.Text, 0.000001);
    		}
    		catch(ArgumentOutOfRangeException){
    			MessageBox.Show("Časova konstanta musí být větší jak nula", "Hodnota mimi rozsah", MessageBoxButtons.OK, MessageBoxIcon.Error);
    		throw new InvalidOperationException();
    		}
    		catch(Exception){
    		MessageBox.Show("V poly časové konstanty není číslo", "Chyba při zadávání čísla", MessageBoxButtons.OK, MessageBoxIcon.Error);
    		throw new InvalidOperationException();
    		}
    		
    		try{
    			Data.MinimalniHodnota = this.PrevedNaCislo(this.TextBoxMinimum.Text, -99999999999.0);
    		}
    		catch(ArgumentOutOfRangeException){
    			MessageBox.Show("Minimální hodnota mimo rozsat", "Hodnota mimi rozsah", MessageBoxButtons.OK, MessageBoxIcon.Error);
    		throw new InvalidOperationException();
    		}
    		catch(Exception){
    		MessageBox.Show("V poly minimální hodnoty není číslo", "Chyba při zadávání čísla", MessageBoxButtons.OK, MessageBoxIcon.Error);
    		throw new InvalidOperationException();
    		}
    		
    		try{
    			Data.MaximalniHodnota = this.PrevedNaCislo(this.TextBoxMaximum.Text, Data.MinimalniHodnota);
    		}
    		catch(ArgumentOutOfRangeException){
    			MessageBox.Show("Maximální hodnota je menší jak minimální", "Hodnota mimi rozsah", MessageBoxButtons.OK, MessageBoxIcon.Error);
    		throw new InvalidOperationException();
    		}
    		catch(Exception){
    		MessageBox.Show("V poly minimální hodnoty není číslo", "Chyba při zadávání čísla", MessageBoxButtons.OK, MessageBoxIcon.Error);
    		throw new InvalidOperationException();
    		}
    			
    	}
    	
    	// Konstruktor
    	public DialogNastaveniSnimacu(){
    		
    		this.MinimizeBox = false;
    		this.MaximizeBox = false;
    		this.FormBorderStyle = FormBorderStyle.FixedDialog;
    		this.ShowInTaskbar = false;
    		this.ControlBox = false;
    		this.Shown += new EventHandler(this.PriZobrazeni);
    		
    		this.Width = 410;
    		this.Height= 230;
    		this.Text = "Nastavní snímačů";
    		
    		// Talcitko OK
    		this.TlacitkoOK = new Button();
    		this.TlacitkoOK.Text = "OK";
    		this.TlacitkoOK.Location = new Point(120, 165);
    		this.TlacitkoOK.Click += new EventHandler(this.TlaciktkoOKClick);
    		this.Controls.Add(this.TlacitkoOK);
    		
    		// Tlacitko Cancel
    		this.TlacitkoCancel = new Button();
    		this.TlacitkoCancel.Text = "Cancel";
    		this.TlacitkoCancel.Location = new Point(this.TlacitkoOK.Location.X + this.TlacitkoOK.Size.Width + 20, this.TlacitkoOK.Location.Y);
    		this.TlacitkoCancel.Click += new EventHandler(this.TlacitkoCancelClick);
    		this.Controls.Add(this.TlacitkoCancel);
    		
    		// Seznam
    		this.Seznam = new ListBox();
    		this.Seznam.Parent = this;
    		this.Seznam.Location = new Point(20, 30);
    		this.Seznam.Size = new Size(100, 120);
    		this.Seznam.AutoSize = false;
    		this.Seznam.Sorted = false;
    		
    		this.Seznam.SelectedIndexChanged += new EventHandler(this.EventVyveruSeznamu);
    		this.Seznam.Items.Add("TIC109-02");
    		this.Seznam.Items.Add("TIC102-03");
    		this.Seznam.Items.Add("TIC103-03");
    		this.Seznam.Items.Add("TIC105-02");
    		this.Seznam.Items.Add("TIC106-02");
    		this.Seznam.Items.Add("QIC109-03");
    		this.Seznam.Items.Add("QIC105-01");
    		this.Seznam.Items.Add("QIC106-01");
    		this.Seznam.Items.Add("FIC109-01");
    		
    		// GroupBox seznamu
    		this.GroupBoxSeznam = new GroupBox();
    		this.GroupBoxSeznam.Parent = this;
    		this.GroupBoxSeznam.Text = "Výběr snímače: ";
    		this.GroupBoxSeznam.Location = new Point(10, 10);
    		this.GroupBoxSeznam.Size = new Size(120, 140);
    		
    		// GroupBox parametry
    		this.GroupBoxParametry = new GroupBox();
    		this.GroupBoxParametry.Parent = this;
    		this.GroupBoxParametry.Text = "Natavení parametrů: ";
    		this.GroupBoxParametry.Location = new Point(this.GroupBoxSeznam.Location.X + this.GroupBoxSeznam.Width + 10, this.GroupBoxSeznam.Location.Y);
    		this.GroupBoxParametry.Size = new Size(250, this.GroupBoxSeznam.Height);
    		
    		// TextBox casove konstanty
    		this.TextBoxCasKonstanta = new TextBox();
    		this.TextBoxCasKonstanta.Parent = this.GroupBoxParametry;
    		this.TextBoxCasKonstanta.MaxLength = 18;
    		this.TextBoxCasKonstanta.Location = new Point(this.GroupBoxParametry.Width - this.TextBoxCasKonstanta.Width - 10, 35);
    		
    		// TextBox Minimalni hodnoty
    		this.TextBoxMinimum = new TextBox();
    		this.TextBoxMinimum.Parent = this.GroupBoxParametry;
    		this.TextBoxMinimum.MaxLength = 18;
    		this.TextBoxMinimum.Location = new Point(this.TextBoxCasKonstanta.Location.X, 65);
    		
    		// TextBox Minimalni hodnoty
    		this.TextBoxMaximum = new TextBox();
    		this.TextBoxMaximum.Parent = this.GroupBoxParametry;
    		this.TextBoxMaximum.MaxLength = 18;
    		this.TextBoxMaximum.Location = new Point(this.TextBoxCasKonstanta.Location.X, 95);
    		
    		// Label casove konstanty
    		this.LabelCacKonstata = new Label();
    		this.LabelCacKonstata.Parent = this.GroupBoxParametry;
    		this.LabelCacKonstata.Text = "Časová konstanta:";
    		this.LabelCacKonstata.Size = new Size(10*this.Font.Height, this.Font.Height);
    		this.LabelCacKonstata.Location = new Point(10, 37);
    		
    		// Label Minimalni hodnoty
    		this.LabelMinimum = new Label();
    		this.LabelMinimum.Parent = this.GroupBoxParametry;
    		this.LabelMinimum.Text = "Minimální hodnota:";
    		this.LabelMinimum.Size = this.LabelCacKonstata.Size;
    		this.LabelMinimum.Location = new Point(10, 67);
    		
    		// Label Maximalni hodnoty
    		this.LabelMaximum = new Label();
    		this.LabelMaximum.Parent = this.GroupBoxParametry;
    		this.LabelMaximum.Text = "Maximální hodnota:";
    		this.LabelMaximum.Size = this.LabelCacKonstata.Size;
    		this.LabelMaximum.Location = new Point(10, 97);
    		
    		TIC109_02 = new DataSnimace();
    		TIC102_03 = new DataSnimace();
    		TIC103_03 = new DataSnimace();
    		TIC105_02 = new DataSnimace();
    		TIC106_02 = new DataSnimace();
    		QIC109_03 = new DataSnimace();
    		QIC105_01 = new DataSnimace();
    		QIC106_01 = new DataSnimace();
    		FIC109_01 = new DataSnimace();
    			
    	}
    }
    
    /**************************************************************************************************
     * 						Datové struktury používané v dialozích									  *
     * ***********************************************************************************************/
    
    	// Datová "struktura" pro tanky s roztoky a vodou
    	public class DataTank{
    		public double Objem;
    		public double Prumer;
    		public double TeplotniVodivost;
    		public double TloustkaSteny;
    		public double ResetHladina;
    		public double ResetKoncentrace;
    		public double ResetTeplota;
    	}
    
    	 public	class DataTankKoncentrat{
    		public double Objem;
    		public double Koncentrace;
    		public double ResetrObjem;
    		public bool   ResetCerpadlo;
    	}
    	
    	// Datová stuktura pro klapky a ventily
    	public class DataKlapky{
    		public double CasovaKonstanta;
    		public bool StavPoResetu;
    	}
    	
    	// Datová stuktura pro snimace
    	public class DataSnimace{
    		public double CasovaKonstanta;
    		public double MaximalniHodnota;
    		public double MinimalniHodnota;
    	}
    
} // End Namespace
