#ifndef _CERROR_H_
#define _CERROR_H_

			// ukladani
#include <STRING>

//////////////////////////////////////////////////////////////////////////
// DEFINE ERRORS
//////////////////////////////////////////////////////////////////////////

const char ERROR_NONE			= 0;
const char ERROR_LOAD_IMAGE		= 1;
const char ERROR_LOAD_FILE		= 2;
const char ERROR_DIVIDE_ZERO	= 3;
const char ERROR_REGISTRED		= 4;
const char ERROR_SAVE			= 5;
const char ERROR_LOAD_FONT		= 6;
const char ERROR_NO_EXTENSIONS	= 7;

//////////////////////////////////////////////////////////////////////////

#define ERROR_NAME  "Error" 

//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
// C_ERROR_REPORT_0
//////////////////////////////////////////////////////////////////////////
class C_ERROR_REPORT_0
{
public :
	unsigned int report;
	bool end;
	char * textLista;
	char * text;
	bool _showMB;

public :
	C_ERROR_REPORT_0(unsigned int eReport,bool eEnd,bool eShowMB=true,char * eTextLista="Error",char * eText="Chyba v programu");
	~C_ERROR_REPORT_0();

public :


};

//////////////////////////////////////////////////////////////////////////
// C_ERROR_0
//////////////////////////////////////////////////////////////////////////
class C_ERROR_0
{
private :
	void delic(int k=1);
	void eCloseWindow(); 

public :
	C_ERROR_0();
	~C_ERROR_0();

public :
	void Error(C_ERROR_REPORT_0 &error);
	void ErrorMsg(unsigned int eReport,bool eEnd,bool eShowMB=true,std::string eTextLista="Error",std::string eText="Chyba v programu");
	void writeFile(const char *text);
};

extern C_ERROR_0 cError;

//////////////////////////////////////////////////////////////////////////

const bool ERROR_DZ_END = 1;			// 0 - tak se pri deleni nulou zapise do vysledku 0 a prog.pokracuje
template <class typDIV>

/* mozne pouziti DIV<int>(10,5); jako 10/5
   nebo taky DIV(10,5); taky 10/5 */
typDIV DIV(typDIV a,typDIV b)
{
	if(b == 0) // ERROR DIVIDE BY ZERO
	{
		if(ERROR_DZ_END == 0)
		{
			cError.writeFile("Divide by zero");
		}
		else
		if(ERROR_DZ_END == 1)
		{
			C_ERROR_REPORT_0 *r = new C_ERROR_REPORT_0(ERROR_DIVIDE_ZERO,true,true,ERROR_NAME,"Divide by zero");
			cError.Error(*r);
		}				
		return 0;
	}
	return (a/b);
}

#endif //_CERROR_H_