// massnahmen_wirksamkeit.cpp : implementation file
//

#include "stdafx.h"
#include "Ecopay.h"
#include "EcopayDoc.h"
#include "ChildFrm.h"
#include "massnahmen_wirksamkeit.h"
#include "modell.h"
#include "visualisierung.h"
#include "visdireckt.h"
#include "kartendialog.h"
#include "zahlungssimulierung.h"
#include "savename.h"
#include <sstream> 
#include <list>
#include <time.h>

// massnahmen_wirksamkeit dialog

IMPLEMENT_DYNAMIC(massnahmen_wirksamkeit, CDialog)

massnahmen_wirksamkeit::massnahmen_wirksamkeit(CWnd* pParent /*=NULL*/)
: CDialog(massnahmen_wirksamkeit::IDD, pParent)
,m_brush(RGB(253,255,255))
{
    daten = new datenbank();
}

massnahmen_wirksamkeit::~massnahmen_wirksamkeit()
{
    delete daten;
	/*vector< vector< modell::masspixelergeb>>::iterator j;
	 for( j = massnahmenergebvector.begin(); j != massnahmenergebvector.end(); j++)
    {
        delete (*j);
    }*/

}

void massnahmen_wirksamkeit::DoDataExchange( CDataExchange* pDX)
{
	CDialog::DoDataExchange( pDX);
	DDX_Control( pDX, IDC_VIS, m_visualisieren);
	DDX_Control( pDX, IDC_Speichern, m_speichern);
	DDX_Control( pDX, IDC_LISTgewmassnahmen, m_liste_gmassnahme);
	DDX_Control( pDX, IDC_ausgeArt, m_gart);
	DDX_Control( pDX, IDC_minQart, m_qualitaet);
	DDX_Control( pDX, IDC_LISTgewarten, m_listegarten);
	DDX_Control( pDX, IDC_LISTqulitaetarten, m_liste_qualitaet);
	DDX_Control( pDX, IDC_LIST1, m_liste_ergebnis);
	DDX_Control( pDX, IDC_Massnahmenart, m_massnahmenart);
	DDX_Control( pDX, IDC_Massnahmenstart, m_massnahmenstart);
	DDX_Control( pDX, IDC_Massnahmenabstand, m_massnahmenabstand);
	DDX_Control( pDX, IDC_MassnahmenGV, m_massnahmeGV);
	DDX_Control( pDX, IDC_Combo_Art, m_massnahmetierart);
	DDX_Control( pDX, IDC_Duengungja, m_d_ja);
	DDX_Control( pDX, IDC_Duengungnein, m_d_nein);
	DDX_Control( pDX, IDC_COMBOartnamen, m_arten_name);
	DDX_Control( pDX, IDC_COMBOartnamenlatein, m_arten_namenlatein);
	DDX_Control( pDX, IDC_COMBOartsavetime, m_arten_savetime);
	DDX_Control( pDX, IDC_Bundesland, m_bundesland);
	DDX_Control( pDX, IDC_Mahd, m_alle_mahd);
	DDX_Control( pDX, IDC_Weide, m_alle_weide);
	DDX_Control( pDX, IDC_AlleMassnahmen, m_alle);
	DDX_Control( pDX, IDC_keine, hohe_ges);
	DDX_Control( pDX, IDC_Hoch, hoehe_hoch);
	DDX_Control( pDX, IDC_Tief, hoehe_tief);
	DDX_Control( pDX, IDC_TZahlung2, transaktionskosten);

	DDX_Control(pDX, IDC_Massnahmenabstand4, massnahmenabstand3);
}

BEGIN_MESSAGE_MAP(massnahmen_wirksamkeit, CDialog)
ON_CBN_SELCHANGE(IDC_Massnahmenart, &massnahmen_wirksamkeit::OnCbnSelchangeMassnahmenart)
ON_CBN_SELCHANGE(IDC_Massnahmenstart, &massnahmen_wirksamkeit::OnCbnSelchangeMassnahmenstart)
ON_CBN_SELCHANGE(IDC_Massnahmenabstand, &massnahmen_wirksamkeit::OnCbnSelchangeMassnahmenabstand)
ON_CBN_SELCHANGE(IDC_Combo_Art, &massnahmen_wirksamkeit::OnCbnSelchangeComboArt)
ON_CBN_SELCHANGE(IDC_MassnahmenGV, &massnahmen_wirksamkeit::OnCbnSelchangeMassnahmengv)
ON_CBN_SELCHANGE(IDC_COMBOartnamen, &massnahmen_wirksamkeit::OnCbnSelchangeComboartnamen)
ON_CBN_SELCHANGE(IDC_COMBOartnamenlatein, &massnahmen_wirksamkeit::OnCbnSelchangeComboartnamenlatein)
ON_CBN_SELCHANGE(IDC_COMBOartsavetime, &massnahmen_wirksamkeit::OnCbnSelchangeComboartsavetime)
ON_BN_CLICKED(IDC_BUTTON1, &massnahmen_wirksamkeit::OnBnClickedButton1)
ON_BN_CLICKED(IDC_VIS, &massnahmen_wirksamkeit::OnBnClickedVis)
ON_BN_CLICKED(IDC_Speichern, &massnahmen_wirksamkeit::OnBnClickedSpeichern)
ON_BN_CLICKED(IDC_BUTTONOptimierung, &massnahmen_wirksamkeit::OnBnClickedButtonoptimierung)
ON_BN_CLICKED(IDC_Einlesen, &massnahmen_wirksamkeit::OnBnClickedEinlesen)
ON_WM_VSCROLL()
ON_WM_SIZE()
ON_BN_CLICKED(IDC_Duengungja, &massnahmen_wirksamkeit::OnBnClickedDuengungja)
ON_BN_CLICKED(IDC_Duengungnein, &massnahmen_wirksamkeit::OnBnClickedDuengungnein)
ON_BN_CLICKED(IDOK, &massnahmen_wirksamkeit::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL2, &massnahmen_wirksamkeit::OnBnClickedCancel2)
ON_CBN_SELCHANGE(IDC_Bundesland, &massnahmen_wirksamkeit::OnCbnSelchangeBundesland)
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDC_Mahd, &massnahmen_wirksamkeit::OnBnClickedMahd)
ON_BN_CLICKED(IDC_Weide, &massnahmen_wirksamkeit::OnBnClickedWeide)
ON_LBN_DBLCLK(IDC_LISTgewmassnahmen, &massnahmen_wirksamkeit::OnLbnDblclkListgewmassnahmen)
ON_LBN_DBLCLK(IDC_LISTgewarten, &massnahmen_wirksamkeit::OnLbnDblclkListgewarten)
ON_BN_CLICKED(IDC_AlleMassnahmen, &massnahmen_wirksamkeit::OnBnClickedAllemassnahmen)
ON_CBN_SELCHANGE(IDC_Massnahmenabstand4, &massnahmen_wirksamkeit::OnCbnSelchangeMassnahmenabstand4)
ON_BN_CLICKED(IDC_BUTTONeraseMeasures, &massnahmen_wirksamkeit::OnBnClickedButtonerasemeasures)
END_MESSAGE_MAP()

BOOL massnahmen_wirksamkeit::OnInitDialog()
{

    CDialog::OnInitDialog();

    getdata();
    blandgew = false;
    hochgew = false;
    m_speichern.EnableWindow(0);

    m_visualisieren.EnableWindow(0);

    daten->delete_zwischenvis();
    daten->delete_graphic();

    GetWindowRect(m_rect);
    m_nScrollPos = 0;

    return TRUE;
}
void massnahmen_wirksamkeit::getdata()
{
    vector< CString> namen, namenlatein;
    vector< CString>::iterator i;
    vector< string>::iterator k;
    int massnahmenanzahl, j;
    string result;
    string monatsv;

    char ma[ 100];
    int mv;

    vector < string > mnamenliste;
    vector < CString > bnamen;
    mnamenliste = daten->returnmassnahmenname();
    bnamen = daten->returnbundeslandname();
    for( k = mnamenliste.begin(); k != mnamenliste.end(); k++)
    {
        lstrcpy( ma, (*k).c_str());
        m_massnahmenart.AddString( ma);
    }

    for( i = bnamen.begin(); i != bnamen.end(); i++)
    {
        m_bundesland.AddString( *i);
    }

    namen = daten->returnartname( "name");
    i = namen.begin();
    CString auswahl;
    while( i != namen.end())
    {
        auswahl = *(i);
        m_arten_name.AddString( auswahl);
        i++;
    }
    namenlatein = daten->returnartname( "name_latein");
    i = namenlatein.begin();
    while( i != namenlatein.end())
    {
        auswahl = *(i);
        m_arten_namenlatein.AddString( auswahl);
        i++;
    }

}
// massnahmen_wirksamkeit message handlers

void massnahmen_wirksamkeit::OnCbnSelchangeMassnahmenart()
{
    // TODO: Add your control notification handler code here
    m_massnahmenstart.SetEditSel( 0, -1);
    m_massnahmenstart.Clear();
    m_massnahmenstart.ResetContent();
    m_massnahmenabstand.SetEditSel( 0, -1);
    m_massnahmenabstand.Clear();
    m_massnahmenabstand.ResetContent();
	massnahmenabstand3.SetEditSel( 0, -1);
    massnahmenabstand3.Clear();
    massnahmenabstand3.ResetContent();
    m_massnahmeGV.SetEditSel( 0, -1);
    m_massnahmeGV.Clear();
    m_massnahmeGV.ResetContent();
    m_massnahmetierart.SetEditSel( 0, -1);
    m_massnahmetierart.Clear();
    m_massnahmetierart.ResetContent();
    CheckDlgButton( IDC_Duengungja, 0);
    CheckDlgButton( IDC_Duengungnein, 0);
    duengung_gewaehlt = false;
    tierartgewaehlt = false;
    gvgewaehlt = false;
    CString mvwahl;
    int nIndex = m_massnahmenart.GetCurSel();
    if( nIndex != CB_ERR)
    {
        m_massnahmenart.GetLBText( nIndex, mvwahl);
        namemassnahme = mvwahl;
        vector< int> mstart;
        vector< int>::iterator k;
        mstart = daten->returnmassnahmenstart( namemassnahme);

        CString monatsv;
        for( k = mstart.begin(); k != mstart.end(); k++)
        {
            int mv = (*k);
            switch( mv)
            {
                case 1:
                    monatsv = "1. MV Januar, 1.";
                    break;

                case 13:
                    monatsv = "1. MV April, 13.";
                    break;
                case 14:
                    monatsv = "2. MV April, 14.";
                    break;
                case 15:
                    monatsv = "3. MV April, 15.";
                    break;
                case 16:
                    monatsv = "4. MV April, 16.";
                    break;
                case 17:
                    monatsv = "1. MV Mai, 17.";
                    break;
                case 18:
                    monatsv = "2. MV Mai, 18.";
                    break;
                case 19:
                    monatsv = "3. MV Mai, 19.";
                    break;
                case 20:
                    monatsv = "4. MV Mai, 20.";
                    break;
                case 21:
                    monatsv = "1. MV Juni, 21.";
                    break;
                case 22:
                    monatsv = "2. MV Juni, 22.";
                    break;
                case 23:
                    monatsv = "3. MV Juni, 23.";
                    break;
                case 24:
                    monatsv = "4. MV Juni, 24.";
                    break;
                case 25:
                    monatsv = "1. MV Juli, 25.";
                    break;
                case 26:
                    monatsv = "2. MV Juli, 26.";
                    break;
                case 27:
                    monatsv = "3. MV Juli, 27.";
                    break;
                case 28:
                    monatsv = "4. MV Juli, 28.";
                    break;
                case 29:
                    monatsv = "1. MV August, 29.";
                    break;
                case 30:
                    monatsv = "2. MV August, 30.";
                    break;
                case 31:
                    monatsv = "3. MV August, 31.";
                    break;
                case 32:
                    monatsv = "4. MV August, 32.";
                    break;
                case 33:
                    monatsv = "1. MV September, 33.";
                    break;
                case 34:
                    monatsv = "2. MV September, 34.";
                    break;
                case 35:
                    monatsv = "3. MV September, 35.";
                    break;
                case 36:
                    monatsv = "4. MV September, 36.";
                    break;
                case 37:
                    monatsv = "1. MV Oktober, 37.";
                    break;
                case 38:
                    monatsv = "2. MV Oktober, 38.";
                    break;
                case 39:
                    monatsv = "3. MV Oktober, 39.";
                    break;
                case 40:
                    monatsv = "4. MV Oktober, 40.";
                    break;
                default:
                    break;
            }

            m_massnahmenstart.AddString( monatsv);
        }
    }
}

void massnahmen_wirksamkeit::OnCbnSelchangeMassnahmenstart()
{
    // TODO: Add your control notification handler code here
    m_massnahmenabstand.SetEditSel( 0, -1);
    m_massnahmenabstand.Clear();
    m_massnahmenabstand.ResetContent();
	massnahmenabstand3.SetEditSel( 0, -1);
	massnahmenabstand3.Clear();
	massnahmenabstand3.ResetContent();
    m_massnahmeGV.SetEditSel( 0, -1);
    m_massnahmeGV.Clear();
    m_massnahmeGV.ResetContent();
    m_massnahmetierart.SetEditSel( 0, -1);
    m_massnahmetierart.Clear();
    m_massnahmetierart.ResetContent();
    CheckDlgButton( IDC_Duengungja, 0);
    CheckDlgButton( IDC_Duengungnein, 0);

    duengung_gewaehlt = false;
    tierartgewaehlt = false;
    gvgewaehlt = false;
    CString mvwahl;
    int nIndex = m_massnahmenstart.GetCurSel();
    if( nIndex != CB_ERR)
    {
        m_massnahmenstart.GetLBText( nIndex, mvwahl);
        // aus dem string artauswahl muss der Name und die savetime ausgelesen werden.

        string::size_type posA, posB, posC;

        string line( mvwahl);

        // Find first , character.
        posA = line.find_first_of( ",", 0);

        // Find first whitespace after that (i.e. end of token).
        //posB = line.find_first_not_of( " /t", posA);
        posC = line.find_first_of( ".", posA + 1);

        // Extract the token.
        string num = line.substr( posA + 1, posC - (posA + 1));
        CString str;

        int j = atoi( num.c_str());
        mv1massnahme = j;
        str.Format( _T( "%d"), mv1massnahme);

        vector< int> abstand;
        vector< int>::iterator k;
        abstand = daten->returnmassnahmenabstand( namemassnahme, mv1massnahme);

        for( k = abstand.begin(); k != abstand.end(); k++)
        {
            str.Format( _T( "%d"), (*k));
            //AfxMessageBox(str);

            m_massnahmenabstand.AddString( str);
        }
    }
}

void massnahmen_wirksamkeit::OnCbnSelchangeMassnahmenabstand()
{
    // TODO: Add your control notification handler code here
    CString mvwahl;
    CheckDlgButton( IDC_Duengungja, 0);
    CheckDlgButton( IDC_Duengungnein, 0);

    duengung_gewaehlt = false;
    tierartgewaehlt = false;
    gvgewaehlt = false;

    int nIndex = m_massnahmenabstand.GetCurSel();
    CString str;
    char eintrag[ 1000];
    if( nIndex != CB_ERR)
    {
        m_massnahmenabstand.GetLBText( nIndex, mvwahl);
		massnahmenabstand3.SetEditSel( 0, -1);
        massnahmenabstand3.Clear();
        massnahmenabstand3.ResetContent();
        m_massnahmeGV.SetEditSel( 0, -1);
        m_massnahmeGV.Clear();
        m_massnahmeGV.ResetContent();
        m_massnahmetierart.SetEditSel( 0, -1);
        m_massnahmetierart.Clear();
        m_massnahmetierart.ResetContent();

        abstand2massnahme = atoi( mvwahl);
		vector< int> abstand;
        vector< int>::iterator k;
        abstand = daten->returnmassnahmenabstand2( namemassnahme, mv1massnahme,abstand2massnahme);

        for( k = abstand.begin(); k != abstand.end(); k++)
        {
            str.Format( _T( "%d"), (*k));
            //AfxMessageBox(str);

            massnahmenabstand3.AddString( str);
        }
    }
}

void massnahmen_wirksamkeit::OnCbnSelchangeMassnahmenabstand4()
{
	CString mvwahl;
    CheckDlgButton( IDC_Duengungja, 0);
    CheckDlgButton( IDC_Duengungnein, 0);

    duengung_gewaehlt = false;
    tierartgewaehlt = false;
    gvgewaehlt = false;

    int nIndex = massnahmenabstand3.GetCurSel();
    CString str;
    char eintrag[ 1000];
    if( nIndex != CB_ERR)
    {
		massnahmenabstand3.GetLBText( nIndex, mvwahl);
        m_massnahmeGV.SetEditSel( 0, -1);
        m_massnahmeGV.Clear();
        m_massnahmeGV.ResetContent();
        m_massnahmetierart.SetEditSel( 0, -1);
        m_massnahmetierart.Clear();
        m_massnahmetierart.ResetContent();

        abstand3massnahme = atoi( mvwahl);
        vector < string > tierliste;
        vector< string>::iterator l;
        bool tiere;
        vector< bool> dung;

        dung = daten->returnmassnahmenduengung( namemassnahme, mv1massnahme,
                abstand2massnahme,abstand3massnahme);
        if( dung.size() == 1)
        {
            duengung = dung.front();
            duengung_gewaehlt = true;
            //Es gibt nur einen Wert für Duenger: einstellen und wahl verhindern
            if( duengung)
            {
                CheckDlgButton( IDC_Duengungja, 1);
                m_d_ja.EnableWindow( 0);

                CheckDlgButton( IDC_Duengungnein, 0);
                m_d_nein.EnableWindow( 0);
            } else
            {
                CheckDlgButton( IDC_Duengungja, 0);
                m_d_ja.EnableWindow( 0);

                CheckDlgButton( IDC_Duengungnein, 1);
                m_d_nein.EnableWindow( 0);
            }

        } else
        {
            duengung_gewaehlt = false;
            //Beide Wahlmöglichkeiten ermöglichen
            m_d_ja.EnableWindow( 1);
            m_d_nein.EnableWindow( 1);
        }

        tierliste = daten->returnmassnahmentierart( namemassnahme, mv1massnahme,
                abstand2massnahme,abstand3massnahme);

        l = tierliste.begin();
        if( (*l) != "Maßnahme ohne Vieh")
        {

            m_massnahmetierart.EnableWindow( 1);
            m_massnahmeGV.EnableWindow( 1);
            tiere = true;

            for( l = tierliste.begin(); l != tierliste.end(); l++)
            {
                lstrcpy( eintrag, (*l).c_str());

                m_massnahmetierart.AddString( eintrag);
            }

            vector< double> mGV;
            vector< double>::iterator k;
            mGV = daten->returnmassnahmenGV( namemassnahme, mv1massnahme,
                    abstand2massnahme,abstand3massnahme);

            CString monatsv;
            for( k = mGV.begin(); k != mGV.end(); k++)
            {
                if( (*k) != 99)
                {
                    str.Format( _T( "%.1f"), (*k));
                    m_massnahmeGV.AddString( str);
                } else
                {
                    m_massnahmeGV.AddString( "dem Standort angepasst");
                    grossvieheinheit = 99;
                    gvgewaehlt = true;
                }

            }
        } else
        {
            m_massnahmetierart.EnableWindow( 0);
            m_massnahmeGV.EnableWindow( 0);
            grossvieheinheit = 0;
            gvgewaehlt = true;
            tierartgewaehlt = true;
            tierart = 0;
            if( duengung_gewaehlt)
            {
                m = daten->returnmassnahme( namemassnahme, mv1massnahme,
                        abstand2massnahme,abstand3massnahme, duengung, 0, 0);
                m.zahlung = 0;
                char ma[ 1000];
                stringstream returnstring;
                returnstring << m.name << ", " << m.mv1massnahme << "/"
                        <<m.abstand2massnahme<<"/"<<m.abstand3massnahme<<",";
                //if((m.grossvieheinheit != 0) && (m.grossvieheinheit != 99))
                //returnstring<<m.grossvieheinheit<<" (GV), ";

                returnstring << m.duengung << " (D)";
                string result = returnstring.str();
                lstrcpy( ma, result.c_str());
                mliste.push_back( m);
                m_liste_gmassnahme.AddString( ma);
            }

        }

    }
}

void massnahmen_wirksamkeit::OnCbnSelchangeMassnahmengv()
{

    CString mvwahl;
    int nIndex = m_massnahmeGV.GetCurSel();
    CString str;
    char eintrag[ 1000];
    if( nIndex != CB_ERR)
    {
        m_massnahmeGV.GetLBText( nIndex, mvwahl);
        if( mvwahl != ("dem Standort angepasst"))
            grossvieheinheit = atof( mvwahl);
        else
            grossvieheinheit = 99;

        gvgewaehlt = true;
        if( duengung_gewaehlt && tierartgewaehlt)
        {
            m = daten->returnmassnahme( namemassnahme,mv1massnahme,abstand2massnahme,abstand3massnahme, duengung,grossvieheinheit,tierart);
            m.zahlung = 0;
            char ma[1000];
            stringstream returnstring;
            returnstring<<m.name<<", "<<m.mv1massnahme<<"/"<<m.abstand2massnahme<<"/"<<m.abstand3massnahme<<",";
            if((m.grossvieheinheit != 0) && (m.grossvieheinheit != 99))
            returnstring<<m.grossvieheinheit<<" (GV), ";

            returnstring<<m.duengung<< " (D)";
            string result = returnstring.str();
            lstrcpy(ma, result.c_str());
            mliste.push_back(m);
            m_liste_gmassnahme.AddString(ma);
        }
    }
}

void massnahmen_wirksamkeit::OnCbnSelchangeComboArt()
{
    // TODO: Add your control notification handler code here
    CString mvwahl;
    int nIndex = m_massnahmetierart.GetCurSel();
    CString str;
    char eintrag[ 1000];
    if( nIndex != CB_ERR)
    {
        m_massnahmetierart.GetLBText( nIndex, mvwahl);
        // aus dem string artauswahl muss der Name und die savetime ausgelesen werden.

        string::size_type posA, posB;

        string line( mvwahl);

        // Find first , character.
        posA = line.find_first_not_of( " /t", 0);

        // Find first whitespace after that (i.e. end of token).
        //posB = line.find_first_not_of( " /t", posA);
        posB = line.find_first_of( ",", posA);

        // Extract the token.
        string num = line.substr( posA, posB - posA);
        CString str;

        tierart = atoi( num.c_str());
        tierartgewaehlt = true;
        if( duengung_gewaehlt && gvgewaehlt)
        {
            m = daten->returnmassnahme( namemassnahme,mv1massnahme,abstand2massnahme,abstand3massnahme, duengung,grossvieheinheit,tierart);
            m.zahlung = 0;
            char ma[1000];
            stringstream returnstring;
            returnstring<<m.name<<", "<<m.mv1massnahme<<"/"<<m.abstand2massnahme<<"/"<<m.abstand3massnahme<<",";
            if((m.grossvieheinheit != 0) && (m.grossvieheinheit != 99))
            returnstring<<m.grossvieheinheit<<" (GV), ";

            returnstring<<m.duengung<< " (D)";
            string result = returnstring.str();
            lstrcpy(ma, result.c_str());
            mliste.push_back(m);
            m_liste_gmassnahme.AddString(ma);
        }
    }
}

void massnahmen_wirksamkeit::OnCbnSelchangeComboartnamen()
{
    // TODO: Add your control notification handler code here
    int nIndex = m_arten_name.GetCurSel();
    CString str;
    vector < CString > savetimes;
    vector< CString>::iterator i;
    char eintrag[ 1000];
    if( nIndex != CB_ERR)
    {
        //m_arten_namenlatein.EnableWindow(0);
        m_arten_savetime.SetEditSel( 0, -1);
        m_arten_savetime.Clear();
        m_arten_savetime.ResetContent();

        artg = true;
        m_arten_name.GetLBText( nIndex, str);
        savetimes = daten->returnartspeicherdatum( str, "name");
        namenartlatein = daten->returnname( "name_latein", "name", str);
        int Index = m_arten_namenlatein.FindStringExact( -1, namenartlatein);
        m_arten_namenlatein.SetCurSel( Index);
        nameart = str;
        name = LPCTSTR( str);

        i = savetimes.begin();
        while( i != savetimes.end())
        {

            m_arten_savetime.AddString( *i);
            i++;
        }

        // aus dem string artauswahl muss der Name und
    }

}

void massnahmen_wirksamkeit::OnCbnSelchangeComboartnamenlatein()
{
    // TODO: Add your control notification handler code here
    int nIndex = m_arten_namenlatein.GetCurSel();
    CString str;
    vector < CString > savetimes;
    vector< CString>::iterator i;
    char eintrag[ 1000];
    if( nIndex != CB_ERR)
    {
        //m_arten_namenlatein.EnableWindow(0);
        m_arten_savetime.SetEditSel( 0, -1);
        m_arten_savetime.Clear();
        m_arten_savetime.ResetContent();
        artg = true;
        m_arten_namenlatein.GetLBText( nIndex, str);
        savetimes = daten->returnartspeicherdatum( str, "name_latein");
        CString artn = daten->returnname( "name", "name_latein", str);
        //AfxMessageBox(nameart);

        int Index = m_arten_name.FindStringExact( -1, artn);
        m_arten_name.SetCurSel( Index);
        nameart = artn;
        name = LPCTSTR( artn);

        i = savetimes.begin();
        while( i != savetimes.end())
        {

            m_arten_savetime.AddString( *i);
            i++;
        }

        // aus dem string artauswahl muss der Name und
    }

}

void massnahmen_wirksamkeit::OnCbnSelchangeComboartsavetime()
{
    // TODO: Add your control notification handler code here
    int nIndex = m_arten_savetime.GetCurSel();
    CString str;
    char eintrag[ 1000];
    if( nIndex != CB_ERR)
    {
        //m_arten_namenlatein.EnableWindow(0);

        m_arten_savetime.GetLBText( nIndex, str);

        savetime = LPCTSTR( str);

        if( artg)
        {
            m_gart.SetWindowTextA( nameart);
        }

        // aus dem string artauswahl muss der Name und
    }

}

void massnahmen_wirksamkeit::OnBnClickedButton1()
{
    // TODO: Add your control notification handler code here
    int anzahl;
    char ma[ 1000];
    massnahmenliste = daten->returnmassnahmen( anzahl);
    for( int i = 0; i < anzahl; i++)
    {
        mliste.push_back( *(massnahmenliste[ i]));
        stringstream returnstring;
        returnstring << (*(massnahmenliste[ i])).name << ", "
                << (*(massnahmenliste[ i])).mv1massnahme << "/"
                << (*(massnahmenliste[ i])).abstand2massnahme<< "/"
                << (*(massnahmenliste[ i])).abstand3massnahme << ",";
        if( ((*(massnahmenliste[ i])).grossvieheinheit != 0)
                && ((*(massnahmenliste[ i])).grossvieheinheit != 99))
            returnstring << (*(massnahmenliste[ i])).grossvieheinheit
                    << " (GV), ";
        returnstring << (*(massnahmenliste[ i])).duengung << " (D)";
        string result = returnstring.str();
        lstrcpy( ma, result.c_str());
        m_liste_gmassnahme.AddString( ma);
    }
}

void massnahmen_wirksamkeit::OnBnClickedVis()
{
    // TODO: Add your control notification handler code here
    vector< vector< modell::masspixelergeb>>::iterator e;
    vector< modell::masspixelergeb>::iterator mp;
    vector< modell::artenqualitaet>::iterator am;
    //AfxMessageBox("Nur noch ERgebnis speichern",MB_YESNO,0);
    bool saved;

    for( e = massnahmenergebvector.begin(); e != massnahmenergebvector.end();
            e++)
    {
        if( (*e).size() > 0)
        {
           // AfxMessageBox("Erste Schleife",MB_YESNO,0);

            for( mp = (*e).begin(); mp != (*e).end(); mp++)
            {
                if( (*mp).artenq.size() > 0)
                {
                    for( am = (*mp).artenq.begin(); am != (*mp).artenq.end();
                            am++)
                    {
                        //AfxMessageBox("zweite Schleife",MB_YESNO,0);
                        saved = daten->save_zwischenvis( (*mp).m.massnahmeID,
                                (*mp).m.name, (*am).art->get_artID(),
                                (*am).art->get_m_name(), (*am).qualitaet,
                                (*mp).pixelID, (*mp).matrix_i, (*mp).matrix_j,
                                (*mp).kosten, (*mp).m.zahlung,bundeslandID);
                                //(*mp).gq.front().gruenlandID, bundeslandID);

                    }
                    //AfxMessageBox(" nach zweite Schleife",MB_YESNO,0);
                }
            }
            //AfxMessageBox(" nach erster Schleife",MB_YESNO,0);
        }
    }

    AfxMessageBox(" nach allen Schleifen",MB_YESNO,0);

    CCreateContext pContext;
    CMultiDocTemplate* pDocTemplate = NULL;
    pDocTemplate = new CMultiDocTemplate( IDR_EcopayYPE,
            RUNTIME_CLASS( CEcopayDoc), RUNTIME_CLASS( CChildFrame), // Benutzerspezifischer MDI-Child-Rahmen
            RUNTIME_CLASS( visdireckt));

    AfxGetApp()->AddDocTemplate( pDocTemplate);
    m_pTemplateI = new CMultiDocTemplate( IDR_EcopayYPE,
            RUNTIME_CLASS( CEcopayDoc), RUNTIME_CLASS( CChildFrame), // Benutzerspezifischer MDI-Child-Rahmen
            RUNTIME_CLASS( visdireckt));

    CMDIChildWnd * pChild = ((CMDIFrameWnd*) (AfxGetApp()->m_pMainWnd))
            ->MDIGetActive();
    CDocument * pDoc = pChild->GetActiveDocument();
    CDocTemplate* pTemplate = m_pTemplateI;
    //pDocument = pTemplate->CreateNewDocument();
    CFrameWnd* pFrame = pTemplate->CreateNewFrame( pDoc, pChild);
    pTemplate->InitialUpdateFrame( pFrame, pDoc);

}

void massnahmen_wirksamkeit::OnBnClickedSpeichern()
{
    // TODO: Add your control notification handler code here
    time_t seconds;
    /*
     savename* savenameDlg;
     savenameDlg = new savename();
     //Check if new succeeded and we got a valid pointer to a dialog object
     //AfxMessageBox("Fenster erstellen",MB_YESNO,0);
     if(savenameDlg != NULL)
     {
     BOOL ret = savenameDlg->Create(IDD_savename,this);
     savenameDlg->ShowWindow(SW_SHOW);
     }*/

    savename Dlg;
    Dlg.DoModal();

    seconds = time( NULL);
    int konfiguration = int( seconds);
    int i = 0;

    vector< vector< modell::masspixelergeb>>::iterator e;
    vector< modell::masspixelergeb>::iterator mp;
    vector< modell::artenqualitaet>::iterator am;
    //AfxMessageBox("Nur noch ERgebnis speichern",MB_YESNO,0);
    bool saved;

    for( e = massnahmenergebvector.begin(); e != massnahmenergebvector.end();
            e++)
    {
        bool saved = daten->save_konfiguration( konfiguration,
                (*e).front().m.massnahmeID, (*e).front().m.zahlung, (*e).size(),
                ergebnissavename, bundeslandID);
        //AfxMessageBox("Nur noch Ergebnis speichern",MB_YESNO,0);

        for( mp = (*e).begin(); mp != (*e).end(); mp++)
        {

            bool saved = daten->save_ergebnis( (*mp).pixelID,
                    (*mp).m.massnahmeID, konfiguration, (*mp).gewinn,
                    (*mp).artenq);

        }
    }

}
bool sfunction( modell::masspixelergeb mp1, modell::masspixelergeb mp2)
{
    return (mp1.kosten > mp2.kosten);
}

void massnahmen_wirksamkeit::OnBnClickedButtonoptimierung()
{
    // TODO: Add your control notification handler code here
    vector< vector< modell::masspixelergeb>>::iterator me; // Iterator für die Liste der Kostenlisten aller Massnahmen
    vector< modell::masspixelergeb>::iterator mp; //Iterator für die Kostenliste einer Massnahme
    vector< modell::artenqualitaet>::iterator am;
    string result;
    char ma[ 1000];
    double pixelqualitaet;
    CString str, str1, str2, str3, str4;
    stringstream returnstring;
    double qual_min, qual_max, qual_mittel, kosten_min, kosten_max,
            kosten_mittel;

	daten->delete_zwischenvis();
    daten->delete_graphic();
    int mn = mliste.size();
    vector< massnahme>::iterator miterator;
    CString transaktionszahlung;
    transaktionskosten.GetWindowTextA( transaktionszahlung);
    LPCTSTR csNumbers = _T( ")(0123456789.-");
    CString csTest = transaktionszahlung;
    if( !csTest.Trim( csNumbers).IsEmpty() || transaktionszahlung.IsEmpty())
    {
        AfxMessageBox( "Sie müssen bitte die Transaktionskosten eingeben!",
                MB_OK, 0);
        transaktionskosten.SetFocus();
    } else
    {
        int tzahlung = atoi( transaktionszahlung);
        for( miterator = mliste.begin(); miterator != mliste.end(); miterator++)
        {
            miterator->zahlung = miterator->zahlung - tzahlung;
        }

        if( mn == 0)
            AfxMessageBox( "Sie müssen bitte erst Maßnahmen auswählen!", MB_OK,
                    0);
        else
        {
            if( artliste.size() == 0)
                AfxMessageBox( "Sie müssen bitte erst Arten auswählen!", MB_OK,
                        0);
            else
            {
				if(!massnahmenergebvector.empty())
					{
						massnahmenergebvector.clear();
					}
                //vector<vector<modell::masspixelergeb>> massnahmenergebvector(mn);
                for( int i = 0; i < mn; i++)
                {
         	
					vector < modell::masspixelergeb > *vec1 =  new vector<modell::masspixelergeb>;
                    massnahmenergebvector.push_back( *vec1);
                }
                vector< art*>::iterator artit;
                modell mod;


                //die Modelierung erfolgt nun
                int min = minqualitaet.size();
                //massnahmenergebvector.clear();
                daten->delete_zwischenvis();
                UINT check;
                check = IsDlgButtonChecked( IDC_keine);
                if( check == 1)
                {
                    egal = true;
                    hochgew = true;
                } else
                {
                    check = IsDlgButtonChecked( IDC_Tief);
                    if( check == 1)
                    {
                        egal = false;
                        hoch = false;
                        hochgew = true;
                    } else
                    {
                        check = IsDlgButtonChecked( IDC_Hoch);
                        if( check == 1)
                        {
                            egal = false;
                            hoch = true;
                            hochgew = true;
                        }
                    }
                }
                if( hochgew)
                {
                    if( blandgew == true)
                    {
                        //AfxMessageBox("vor modellierung",MB_YESNO,0);
						
                        CWaitCursor wait;
                        mod.calculate_oekologiemodell( artliste, mliste,
                                minqualitaet, massnahmenergebvector,
                                bundeslandID, hoch, egal);
                        int anzahl = massnahmenergebvector.size();
                        //AfxMessageBox("nach modellierung",MB_YESNO,0);
                        wait.Restore();
                        int i = 0;
                        int zaehler = 0;
                        for( me = massnahmenergebvector.begin();
                                me != massnahmenergebvector.end(); me++)
                        {

                            if( (*me).size() > 0)
                            {
                                sort( (*me).begin(), (*me).end(), sfunction);

                                //AfxMessageBox("nach sortierung",MB_YESNO,0);
                                int an = (*me).size();
                                stringstream returnstring;
                                int min = int(
                                        (-1 * ((*(*me).begin()).kosten))
                                                + tzahlung);
                                str.Format( _T( "%d"), min);
                                kosten_min = (-1 * ((*me).front().kosten))
                                        + tzahlung;
                                kosten_max = (-1 * ((*me).back().kosten)
                                        + tzahlung);
                                int max = int(
                                        (-1 * ((*me).back().kosten))
                                                + tzahlung);
                                str2.Format( _T( "%d"), max);
                                str1.Format( _T( "%d"),
                                        (*(*me).begin()).m.mv1massnahme);
                                str3.Format( _T( "%d"),
                                        (*(*me).begin()).m.abstand2massnahme);
								str4.Format( _T( "%d"),
                                        (*(*me).begin()).m.abstand3massnahme);
                                //str4.Format(_T("%d"),(*(*me).begin()).pixelID);
                                //AfxMessageBox("nach sortierung2",MB_YESNO,0);
                                int k = 0;
                                vector < modell::artenqualitaet > qualitaeten;
                                vector< modell::artenqualitaet>::iterator qa;
                                vector< int> anzahlpixel;
                                vector< double> qual_minv, qual_maxv;
								int anzahlart = artliste.size();
                                for( artit = artliste.begin();
                                        artit != artliste.end(); artit++)
                                {
                                    modell::artenqualitaet aq;
                                    aq.art = (*artit);
                                    aq.qualitaet = 0;
                                    qualitaeten.push_back( aq);
                                    anzahlpixel.push_back( 0);
                                    qual_minv.push_back( 0);
                                    qual_maxv.push_back( 0);

                                }

                                returnstring << " Massnahme, ";
                                if( (*(*me).begin()).m.verfahren_nr == 1)
                                    returnstring << "Referenz, ";
                                else
                                    returnstring << (*(*me).begin()).m.name
                                            << ", ";
                                returnstring << (*(*me).begin()).m.mv1massnahme
                                        << "/"
                                        << (*(*me).begin()).m.abstand2massnahme
										<< "/"
                                        << (*(*me).begin()).m.abstand3massnahme
                                        << ",";
                                if( ((*(*me).begin()).m.grossvieheinheit != 0)
                                        && ((*(*me).begin()).m.grossvieheinheit
                                                != 99))
                                    returnstring
                                            << (*(*me).begin()).m
                                                    .grossvieheinheit
                                            << " (GV), ";
                                if( (*(*me).begin()).m.verfahren_nr == 1)
                                    returnstring << "/6,";
                                returnstring << (*(*me).begin()).m.duengung
                                        << " (D)";
                                result = returnstring.str();
                                lstrcpy( ma, result.c_str());

                                m_liste_ergebnis.AddString( ma);
                                returnstring.str( "");
                                returnstring.clear();
                                //fuer die Graphiken hier in die Datenbank schreiben
                                if( (*(*me).begin()).m.verfahren_nr == 1)
                                    returnstring << "Referenz, ";
                                else
                                    returnstring << (*(*me).begin()).m.name
                                            << ", ";
                                returnstring << (*(*me).begin()).m.mv1massnahme
                                        << "/"
                                        << (*(*me).begin()).m.abstand2massnahme
										<< "/"
                                        << (*(*me).begin()).m.abstand3massnahme
                                        << ",";
                                if( ((*(*me).begin()).m.grossvieheinheit != 0)
                                        && ((*(*me).begin()).m.grossvieheinheit
                                                != 99))
                                    returnstring
                                            << (*(*me).begin()).m
                                                    .grossvieheinheit
                                            << " (GV), ";
                                if( (*(*me).begin()).m.verfahren_nr == 1)
                                    returnstring << "/6,";
                                returnstring << (*(*me).begin()).m.duengung
                                        << " (D)";
                                result = returnstring.str();
                                lstrcpy( ma, result.c_str());

                                qual_max = 0;
                                qual_mittel = 0;
                                kosten_mittel = 0;

                                int artenpixel;
                                k = 0;
                                for( am = (*me).front().artenq.begin();
                                        am != (*me).front().artenq.end(); am++)
                                {
                                    if( (*am).qualitaet > 0)
                                        qual_minv[ k] = (*am).qualitaet;
                                    else
                                        qual_minv[ k] = minqualitaet[ k];
                                    k++;
                                }

                                for( mp = (*me).begin(); mp < (*me).end(); mp++)
                                {
                                    k = 0;
                                    artenpixel = 0;

                                    for( am = (*mp).artenq.begin();
                                            am != (*mp).artenq.end(); am++)
                                    {
                                        if( qualitaeten[ k].art->get_m_name()
                                                == (*am).art->get_m_name())
                                        {
                                            qualitaeten[ k].qualitaet =
                                                    qualitaeten[ k].qualitaet
                                                            + (*am).qualitaet;
                                            if( (*am).qualitaet > 0)
                                            {
                                                anzahlpixel[ k] =
                                                        anzahlpixel[ k] + 1;
                                                if( (*am).qualitaet
                                                        < qual_minv[ k])
                                                    qual_minv[ k] = (*am)
                                                            .qualitaet;
                                            }
                                            if( (*am).qualitaet > qual_maxv[ k])
                                                qual_maxv[ k] = (*am).qualitaet;

                                        }

                                        k++;
                                    }
                                    kosten_mittel = kosten_mittel
                                            + (-1 * (mp->kosten)) + tzahlung;
                                }
                                kosten_mittel = kosten_mittel / (*me).size();
                                k = 0;
								double qualallmin = 0;
								double qualallmax = 0;
								double qualallmittel = 0;
                                for( qa = qualitaeten.begin();
                                        qa < qualitaeten.end(); qa++)
                                {
                                    if( anzahlpixel[ k] > 0)
                                    {
                                        qual_mittel = (*qa).qualitaet
                                                / anzahlpixel[ k];
										  /*qualallmittel = qualallmittel +qual_mittel;
										qualallmin = qualallmin + qual_minv[ k];
										qualallmax = qualallmax + qual_maxv[ k];*/

                                      //  AfxMessageBox("vor Datenbank",MB_YESNO,0);
                                      daten->save_ergebnis_graphic(
                                                (*(*me).begin()).m.massnahmeID,
                                                (*qa).art->get_artID(), ma,
                                                (*qa).art->get_m_name(),
                                                qual_minv[ k], qual_maxv[ k],
                                                qual_mittel, kosten_min,
                                                kosten_max, kosten_mittel);
                                    } else
                                        daten->save_ergebnis_graphic(
                                                (*(*me).begin()).m.massnahmeID,
                                                (*qa).art->get_artID(), ma,
                                                (*qa).art->get_m_name(), 0, 0,
                                                0, kosten_min, kosten_max,
                                                kosten_mittel);
									
                                    k++;

                                }
/*
								qualallmittel = qualallmittel /anzahlart ;
								qualallmin = qualallmin /anzahlart;
								qualallmax = qualallmax /anzahlart;
								daten->save_ergebnis_graphic(
                                                (*(*me).begin()).m.massnahmeID,
                                                0, ma,
                                                artliste.front()->get_gruppe(), qualallmin, qualallmax,
                                                qualallmittel, 0, 0,
                                                0);
*/
								
                                //AfxMessageBox("nach Datenbank",MB_YESNO,0);

                                returnstring.str( "");
                                returnstring.clear();
                                returnstring << "Kostenspanne: " << str << " - "
                                        << str2 << "  Euro/ha";
                                result = returnstring.str();
                                lstrcpy( ma, result.c_str());
                                m_liste_ergebnis.AddString( ma);
                                returnstring.str( "");
                                returnstring.clear();
                                str.Format( _T( "%d"), an);
                                str1.Format( _T( "%.2f"), an * 6.25);
                                returnstring
                                        << "Pixelanzahl, die sich qualifiziert: "
                                        << str << " = " << str1 << " ha";
                                result = returnstring.str();
                                lstrcpy( ma, result.c_str());
                                m_liste_ergebnis.AddString( ma);
                                returnstring.str( "");
                                returnstring.clear();
                                returnstring
                                        << "Effektive Fläche für die Arten in ha: ";
                                result = returnstring.str();
                                lstrcpy( ma, result.c_str());
                                m_liste_ergebnis.AddString( ma);
                                /*for( mp = (*me).begin(); mp < (*me).end(); mp++)
                                 {
                                 k = 0;
                                 for(am = (*mp).artenq.begin(); am!= (*mp).artenq.end();am++)
                                 {
                                 if(qualitaeten[k].art->get_m_name()==(*am).art->get_m_name())
                                 {
                                 qualitaeten[k].qualitaet = qualitaeten[k].qualitaet + (*am).qualitaet;
                                 
                                 }
                                 k++;
                                 }
                                 }*/
                                for( qa = qualitaeten.begin();
                                        qa < qualitaeten.end(); qa++)
                                {
                                    returnstring.str( "");
                                    returnstring.clear();
                                    str.Format( _T( "%.2f"),
                                            ((*qa).qualitaet * 6.25));
                                    returnstring << (*qa).art->get_m_name()
                                            << ": " << str;
                                    result = returnstring.str();
                                    lstrcpy( ma, result.c_str());
                                    m_liste_ergebnis.AddString( ma);
                                }
                                zaehler++;
                            } else
                            {
                                stringstream returnstring;
                                str1.Format( _T( "%d"),
                                        mliste[ i].mv1massnahme);
                                str3.Format( _T( "%d"),
                                        mliste[ i].abstand2massnahme);

                                returnstring << " Massnahme, ";
                                if( mliste[ i].verfahren_nr == 1)
                                    returnstring << "Referenz, 19/6/6, "
                                            << mliste[ i].duengung << " (D)";
                                else
                                    returnstring << mliste[ i].name << ", "
                                            << str1 << "/" << str3 << "/" << str4 << ", "
                                            << mliste[ i].duengung << " (D)";

                                result = returnstring.str();
                                lstrcpy( ma, result.c_str());
                                m_liste_ergebnis.AddString( ma);
								/*
								daten->save_ergebnis_graphic(
                                                mliste[ i].massnahmeID,
                                                0, ma,
                                                artliste.front()->get_gruppe(), 0, 0,
                                                0, 0, 0,
                                                0);*/
								
                                for( artit = artliste.begin();
                                        artit != artliste.end(); artit++)
                                {

                                    daten->save_ergebnis_graphic(
                                            mliste[ i].massnahmeID,
                                            (*artit)->get_artID(), ma,
                                            (*artit)->get_m_name(), 0, 0, 0, 0,
                                            0, 0);

                                }

                                returnstring.str( "");
                                returnstring.clear();
                                returnstring
                                        << "Die Massnahme ist für alle ausgewaehlten Arten ungeeignet.";
                                result = returnstring.str();
                                lstrcpy( ma, result.c_str());
                                m_liste_ergebnis.AddString( ma);
                            }

                            i++;

                        }
                        //AfxMessageBox("Nach Sortierung",MB_YESNO,0);

                        //vector<modell::masspixelergeb>::iterator listenit;

                        //die initiale Lösung wird berechnet
                        //AfxMessageBox("Vor Gesammtkosten",MB_YESNO,0);

                        /*
                         returnstring<<ergebnisliste.size();
                         string r = returnstring.str();
                         lstrcpy(ma, r.c_str());
                         m_liste_ergebnis.AddString(ma);*/

                        //m_speichern.EnableWindow(1);

                        if( zaehler > 0 && zaehler < 11)
                            m_visualisieren.EnableWindow( 1);
                    } else
                        AfxMessageBox(
                                "Sie müssen bitte ein Bundesland auswählen!",
                                MB_OK, 0);
                } else
                    AfxMessageBox( "Sie müssen bitte die Höhenlage auswählen!",
                            MB_OK, 0);
            }
        }
    }
}

void massnahmen_wirksamkeit::OnBnClickedEinlesen()
{
    // TODO: Add your control notification handler code here

    CString f, a;
    m_gart.GetWindowTextA( a);
    if( a.IsEmpty())
        AfxMessageBox( "Sie müssen bitte erst eine Art auswählen!", MB_OK, 0);
    else
    {
        m_qualitaet.GetWindowTextA( f);
        LPCTSTR csNumbers = _T( ")(0123456789.-");
        CString csTest = f;
        if( !csTest.Trim( csNumbers).IsEmpty())
        {
            AfxMessageBox(
                    "Sie müssen bitte eine Zahl für die minimale Qualitaet eingeben!",
                    MB_OK, 0);
            m_qualitaet.SetFocus();
        } else
        {

            double qual = atof( f);

            if( qual > 1 || qual < 0)
            {
                AfxMessageBox( "Die Qualitaet muß zwischen 0 und 1 liegen!"
                        "\n\n Bitte überarbeiten Sie Ihre Eingabe!", MB_OK, 0);
                m_qualitaet.SetFocus();

            } else
            {
                art* nart;
                nart = new art;
                nart = nart->get_art_from_database( name, savetime);
                artliste.push_back( nart);

                m_qualitaet.GetWindowTextA( f);
                m_liste_qualitaet.AddString( f);
                m_listegarten.AddString( (*nart).get_m_name_latein());
                double qual = atof( f);
                minqualitaet.push_back( qual);
                m_qualitaet.SetWindowTextA( "");
                m_gart.SetWindowTextA( "");
            }
        }
    }
}

void massnahmen_wirksamkeit::OnVScroll(
        UINT nSBCode,
        UINT nPos,
        CScrollBar* pScrollBar)
{
    // TODO: Add your message handler code here and/or call default
    int nDelta;
    int nMaxPos = m_rect.Height() - m_nCurHeight;

    switch( nSBCode)
    {
        case SB_LINEDOWN:
            if( m_nScrollPos >= nMaxPos)
                return;
            nDelta = min( nMaxPos / 100, nMaxPos - m_nScrollPos);
            break;

        case SB_LINEUP:
            if( m_nScrollPos <= 0)
                return;
            nDelta = -min( nMaxPos / 100, m_nScrollPos);
            break;

        case SB_PAGEDOWN:
            if( m_nScrollPos >= nMaxPos)
                return;
            nDelta = min( nMaxPos / 10, nMaxPos - m_nScrollPos);
            break;

        case SB_THUMBPOSITION:
            nDelta = (int) nPos - m_nScrollPos;
            break;

        case SB_PAGEUP:
            if( m_nScrollPos <= 0)
                return;
            nDelta = -min( nMaxPos / 10, m_nScrollPos);
            break;

        default:
            return;
    }
    m_nScrollPos += nDelta;
    SetScrollPos( SB_VERT, m_nScrollPos, TRUE);
    ScrollWindow( 0, -nDelta);

    CDialog::OnVScroll( nSBCode, nPos, pScrollBar);

}

void massnahmen_wirksamkeit::OnSize( UINT nType, int cx, int cy)
{
    CDialog::OnSize( nType, cx, cy);

    // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein.
    m_nCurHeight = cy;
    int nScrollMax;
    if( cy < m_rect.Height())
    {
        nScrollMax = m_rect.Height() - cy;
    } else
        nScrollMax = 0;

    SCROLLINFO si;
    si.cbSize = sizeof(SCROLLINFO);
    si.fMask = SIF_ALL; // SIF_ALL = SIF_PAGE | SIF_RANGE | SIF_POS;
    si.nMin = 0;
    si.nMax = nScrollMax;
    si.nPage = si.nMax / 10;
    si.nPos = 0;
    SetScrollInfo( SB_VERT, &si, TRUE);

    // TODO: Add your message handler code here
}

void massnahmen_wirksamkeit::OnBnClickedDuengungja()
{
    // TODO: Add your control notification handler code here
    UINT check;
    duengung_gewaehlt = true;
    check = IsDlgButtonChecked( IDC_Duengungja);
    if( check == 1)
    {
        duengung = true;
        CheckDlgButton( IDC_Duengungnein, 0);
    } else
    {
        duengung = false;
        CheckDlgButton( IDC_Duengungnein, 1);
    }

    if( tierartgewaehlt && gvgewaehlt)
    {
        m = daten->returnmassnahme( namemassnahme,mv1massnahme,abstand2massnahme,abstand3massnahme, duengung,grossvieheinheit,tierart);
        char ma[1000];
        stringstream returnstring;
        returnstring<<m.name<<", "<<m.mv1massnahme<<"/"<<m.abstand2massnahme<<"/"<<m.abstand3massnahme<<",";
        if((m.grossvieheinheit != 0) && (m.grossvieheinheit != 99))
        returnstring<<m.grossvieheinheit<<" (GV), ";

        returnstring<<m.duengung<< " (D)";
        string result = returnstring.str();
        lstrcpy(ma, result.c_str());
        mliste.push_back(m);
        m_liste_gmassnahme.AddString(ma);
    }

}

void massnahmen_wirksamkeit::OnBnClickedDuengungnein()
{
    // TODO: Add your control notification handler code here
    UINT check;
    duengung_gewaehlt = true;
    check = IsDlgButtonChecked( IDC_Duengungnein);
    if( check == 1)
    {
        duengung = false;
        CheckDlgButton( IDC_Duengungja, 0);
    } else
    {
        duengung = true;
        CheckDlgButton( IDC_Duengungja, 1);
    }

    if( tierartgewaehlt && gvgewaehlt)
    {
        m = daten->returnmassnahme( namemassnahme,mv1massnahme,abstand2massnahme,abstand3massnahme, duengung,grossvieheinheit,tierart);
        char ma[1000];
        stringstream returnstring;
        returnstring<<m.name<<", "<<m.mv1massnahme<<"/"<<m.abstand2massnahme<<"/"<<m.abstand3massnahme<<",";
        if((m.grossvieheinheit != 0) && (m.grossvieheinheit != 99))
        returnstring<<m.grossvieheinheit<<" (GV), ";

        returnstring<<m.duengung<< " (D)";
        string result = returnstring.str();
        lstrcpy(ma, result.c_str());
        mliste.push_back(m);
        m_liste_gmassnahme.AddString(ma);
    }
}

void massnahmen_wirksamkeit::OnBnClickedOk()
{
    // TODO: Add your control notification handler code here
    daten->delete_zwischenvis();
    delete daten;

    OnOK();
}

void massnahmen_wirksamkeit::OnBnClickedCancel2()
{
    // TODO: Add your control notification handler code here
    daten->delete_zwischenvis();
    delete daten;

    OnOK();
}

void massnahmen_wirksamkeit::OnCbnSelchangeBundesland()
{
    // TODO: Add your control notification handler code here
    CString bland;
    int nIndex = m_bundesland.GetCurSel();
    if( nIndex != CB_ERR)
    {
        m_bundesland.GetLBText( nIndex, bland);
        bundeslandID = daten->returnbundeslandID( bland);
        blandgew = true;
    } else
        blandgew = false;
}

HBRUSH massnahmen_wirksamkeit::OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor( pDC, pWnd, nCtlColor);

    int ID = pWnd->GetDlgCtrlID();

    if( ID == IDD_Wirksamkeit)
    {
        HBRUSH hBrush = CreateSolidBrush( RGB( 253, 255, 255));
        return hBrush;
    }

    if( (ID == IDC_STATIC_1) || (ID == IDC_STATIC_2))
    {
        pDC->SetTextColor( RGB( 153, 0, 153)); // Setzt die Textfarbe 
        pDC->SetBkMode( TRANSPARENT);

        // Return handle to our CBrush object
        //hbr = m_brush;
    }

    // TODO:  Ändern Sie hier alle Attribute für den DC.

    if( ID == IDC_STATIC || ID == IDC_Duengungja || ID == IDC_Duengungnein
            || ID == IDC_Hoch || ID == IDC_Tief || ID == IDC_keine
            || ID == IDC_ausgeArt)
    {
        pDC->SetTextColor( RGB( 72, 61, 139)); // Setzt die Textfarbe auf 
        pDC->SetBkMode( TRANSPARENT);
        //HBRUSH hBrush = CreateSolidBrush(RGB(255,0,0)); //Setzt die Hintergrundfarbe auf rot
        // return (HBRUSH) hBrush;
    }

    // TODO:  Gib einen anderen Pinsel zurück, wenn der Standard nicht erwünscht ist.
    hbr = m_brush;
    return hbr;
}

void massnahmen_wirksamkeit::OnBnClickedMahd()
{
    // TODO: Add your control notification handler code here
    int anzahl;
    char ma[ 1000];
    daten->returnmassnahmen_gruppe( mliste, "Mahd");
    daten->returnmassnahmen_gruppe( mliste, "Streifenmahd");
    anzahl = mliste.size();
    for( int i = 0; i < anzahl; i++)
    {
        stringstream returnstring;
        if( mliste[ i].verfahren_nr == 1)
            returnstring << "Referenz, ";
        else
            returnstring << mliste[ i].name << ", ";
        returnstring << mliste[ i].mv1massnahme << "/"
                << mliste[ i].abstand2massnahme << "/"
                << mliste[ i].abstand3massnahme;
        if( mliste[ i].verfahren_nr == 1)
            returnstring << "/6 ";
        returnstring << ", " << mliste[ i].duengung << " (D)";
        string result = returnstring.str();
        lstrcpy( ma, result.c_str());
        m_liste_gmassnahme.AddString( ma);
    }
}

void massnahmen_wirksamkeit::OnBnClickedWeide()
{
    // TODO: Add your control notification handler code here
    int anzahl;
    char ma[ 1000];
    //daten->returnmassnahmen_gruppe( mliste, "Umtriebsweide");
  daten->returnmassnahmen_gruppe( mliste, "Saisonale_Standweide");
 // daten->returnmassnahmen_gruppe( mliste, "Maehweide");
  // daten->returnmassnahmen_gruppe( mliste, "Ganzjahresweide");
    anzahl = mliste.size();
	CString str;
	str.Format(_T("%d"),(anzahl));
    //AfxMessageBox(str,MB_YESNO,0);
    for( int i = 0; i < anzahl; i++)
    {
        stringstream returnstring;
        returnstring << mliste[ i].name << ", " << mliste[ i].mv1massnahme
                << "/" << mliste[ i].abstand2massnahme << "/" << mliste[ i].abstand3massnahme << ",";
        if( (mliste[ i].grossvieheinheit != 0)
                && (mliste[ i].grossvieheinheit != 99))
            returnstring << mliste[ i].grossvieheinheit << " (GV), ";

        returnstring << mliste[ i].duengung << " (D)";
        string result = returnstring.str();
        lstrcpy( ma, result.c_str());
        m_liste_gmassnahme.AddString( ma);
    }
}

void massnahmen_wirksamkeit::OnLbnDblclkListgewmassnahmen()
{
    // TODO: Add your control notification handler code here
    CString mvwahl;
    int nIndex = m_liste_gmassnahme.GetCurSel();
    if( nIndex != CB_ERR)
    {

        m_liste_gmassnahme.GetText( nIndex, mvwahl);
        m_liste_gmassnahme.DeleteString( nIndex);

        vector< massnahme>::iterator it;
        it = mliste.begin();
        for( int i = 0; i < mliste.size(); i++)
        {
            if( i == nIndex)
            {
                mliste.erase( it);
                break;
            } else
                it++;
        }

    }

}

void massnahmen_wirksamkeit::OnLbnDblclkListgewarten()
{
    // TODO: Add your control notification handler code here
    CString mvwahl;
    int nIndex = m_listegarten.GetCurSel();
    if( nIndex != CB_ERR)
    {

        m_listegarten.GetText( nIndex, mvwahl);
        m_listegarten.DeleteString( nIndex);
        m_liste_qualitaet.GetText( nIndex, mvwahl);
        m_liste_qualitaet.DeleteString( nIndex);
        vector< art*>::iterator it;
        it = artliste.begin();
        name = artliste[ nIndex]->get_m_name();
        savetime = artliste[ nIndex]->savet;
        for( int i = 0; i < artliste.size(); i++)
        {
            if( i == nIndex)
            {
                artliste.erase( it);
                break;
            } else
                it++;
        }
        vector< double>::iterator pt;
        pt = minqualitaet.begin();
        for( int i = 0; i < minqualitaet.size(); i++)
        {
            if( i == nIndex)
            {
                minqualitaet.erase( pt);
                ;
                break;
            } else
                pt++;
        }

    }

}

void massnahmen_wirksamkeit::OnBnClickedAllemassnahmen()
{
    // TODO: Add your control notification handler code here
    int anzahl;
    char ma[ 1000];
    //daten->returnmassnahmen_gruppe(mliste);	
    daten->returnmassnahmen_gruppe( mliste, "Mahd");
    daten->returnmassnahmen_gruppe( mliste, "Streifenmahd");
    daten->returnmassnahmen_gruppe( mliste, "Umtriebsweide");
    daten->returnmassnahmen_gruppe( mliste, "Saisonale_Standweide");
    daten->returnmassnahmen_gruppe( mliste, "Maehweide");
    daten->returnmassnahmen_gruppe( mliste, "Ganzjahresweide");
    anzahl = mliste.size();
    for( int i = 0; i < anzahl; i++)
    {
        stringstream returnstring;
        if( mliste[ i].verfahren_nr == 1)
            returnstring << "Referenz, ";
        else
            returnstring << mliste[ i].name << ", ";
        returnstring << mliste[ i].mv1massnahme << "/"
                << mliste[ i].abstand2massnahme << "/"
                << mliste[ i].abstand3massnahme;
        if( (mliste[ i].grossvieheinheit != 0)
                && (mliste[ i].grossvieheinheit != 99))
            returnstring << ", " << mliste[ i].grossvieheinheit << " (GV) ";
        if( mliste[ i].verfahren_nr == 1)
            returnstring << "/6 ";
        returnstring << ", " << mliste[ i].duengung << " (D)";
        string result = returnstring.str();
        lstrcpy( ma, result.c_str());
        m_liste_gmassnahme.AddString( ma);
    }
}



void massnahmen_wirksamkeit::OnBnClickedButtonerasemeasures()
{
	CString mvwahl, str;
    int nIndex = m_liste_gmassnahme.GetCurSel();
    if( nIndex != CB_ERR)
    {

		int iNumSel = m_liste_gmassnahme.GetSelCount(); // get number of selected items
		//str.Format(_T("%d"),iNumSel);
        //AfxMessageBox(str,MB_YESNO,0);
		LPINT lpiSelItems = new int[iNumSel]; // allocate memory for all of them
		m_liste_gmassnahme.GetSelItems(iNumSel, lpiSelItems);
		for (int nCount = (iNumSel-1); nCount >= 0; nCount--)
		{
			m_liste_gmassnahme.DeleteString(lpiSelItems[nCount]); // loop over every selected item and process it
			//str.Format(_T("%d"),lpiSelItems[nCount]);
			//AfxMessageBox(str,MB_YESNO,0);
			vector< massnahme>::iterator it;
			it = mliste.begin();
			for( int i = 0; i < mliste.size(); i++)
			{
				if( i == lpiSelItems[nCount])
				{
					mliste.erase( it);
					break;
				} else
					it++;
			}

		}
		delete [] lpiSelItems; // don't forget to clean up!
	}
}
