//vstup je java readxmldata inputfilename [options] [name]
//Options:
//-o vystup je txt vystup ve forme tag obsah, v tomto pripade je name jmeno vystupniho txt souboru, pokud neni zadano name, berem pro potreby vytvoreni nazvu vysrupniho souboru ze vstupniho filename vse pred teckou a prida se pripona .txt
//-d vystupem je volani programu do SQL, ktery provede sql dotaz do databaze zname systemu pod nazvem name (system dsn ve Windows), program vola externi class doSQL, ktery, v pripade, ze name neni systemu zname jmeno databaze, vyda SQLException >>>Database name not found:
//ver vytiskne cislo verze


import java.io.*;
import java.util.*;
import java.text.*;  //pro datum?


public class readxmldata
{

	public static void main(String args[]){
		String ver="1.0";
		String filename=null;
		String outfilename=null;
		String dbname=null;
		Boolean duno=false;//skonci s poravdenim programu, pokud duno=true
		//Musime pouzit DataOutputStream, kvuli vystupu v cestine
        DataOutputStream dos=null;//musi byt deklarovany tady, protoze je globalni
      	String ouputoption="";
        Boolean txtoutput=false;
        int counter=0;
        Boolean readtag=false;//blok 2
        Boolean stoptag=false;//blok 2
        String tag=new String();//blok 2
        String tagvalue=new String();//blok 2
        String outtagvalue=new String ();
        String outtag=new String ();
        String lastouttag=new String ();

        //blok 3 nasledujici promenne pro tvorby sql musi byt tady, pokud by byly za do, inicializovaly by se pri kazdem pruchodu
        String lastparam=new String("");
        int textfieldindex=0; //index poctu poli text v databazi publ. systemu
        int textfieldindexmax=9; //max index poctu poli text v databazi publ. systemu, ciselne odpovida  NUMOFPLUSTEXTFIELDS= ale ve skutecnosti je +1 (ta 1 navic je Text0) pro popisy
        int cenytextfieldindex=0; //totez pro blok ceny textfieldindexmax je tsejny jako pro popisy
        String sql_textfield[]=new String[textfieldindexmax]; //max velikost poctu poli text v databazi
        int nadpisindex=0;//index nadpisu radky v dtabazi publ. systemu  od do zacinaji od 1 a 2 a od 3 jsou pro ceny
        int nadpisindexmax=9;//max index nadpisu radky v databazi publ. systemu, ciselne odpovida  NUMOFHEADLINES= ale ve skutecnosti je +1 (ta 1 navic je pro NadpisRadky0)
        String sql_nadpisradky[]=new String[nadpisindexmax];//je matouci protoze nadpisradky0 v publikacnim systemu jenadpisradky a pak to jde od 1
        int sql_poradinum=0;//Poradi
        int popis_poradinum=0; //poradi pro POPIS
        String konstanta=new String("");//to co je napevno pri vytvareni nejake radkz sql
        String sql_tablename=null;
        String sql_lasttablename=null;
        String sql_lastnadpisradky=null;
        String lastsql_string=new String ("");
        String lastsql_column=new String ("");
        String transfersql_string=null;
        //int terminynextnadpisindex=0;//pro schovani si cislo posledniho NadpisRadky[nadpisindex] pro dopleni info z bloku CENA do stejne radky v databazi
  		//int terminylastsql_poradinum=0;// pro schovani si cislo posledniho Poradi
        //String terminy_listID="";// pro porovani s ceny_listID
        String ceny_listID="";// zatim nepouzito
        int sql_zajezdcislosekce=0;   //Cislo sekce pro blok HOTEL
        int sql_termincislosekce=0;   //Cislo sekce pro blok TERMIN
        int sql_hoteldesccislosekce=0;   //Cislo sekce pro blok HOTELDESC
        String booking_unit_description=new String("");
        String date_start=new String("");
        String date_exit=new String("");
        String nights=new String("");
        String unit_price_adult_from=new String("");
        String food_included =new String("");
        String transfer_included=new String("");
        
        
        //System.out.println("class main: txtoutput="+txtoutput);
        
        
   		//zde se ctou argumenty
		int maxargs;
		for (maxargs=0; maxargs<args.length; maxargs++) {
			if (args[maxargs]!=null){
				if (args.length==3){
    			    outfilename=new String(args[2]);
    			    ouputoption=new String(args[1]);
			    }else if (args.length==2){
    			    ouputoption=new String(args[1]);
			    }else if (args.length==1) {
					if (args[0].equals("ver")) {System.out.println(">>>Programme: readxmldata.class version="+ver);
					duno=true;
					}
				}

   				filename=new String(args[0]);


    			maxargs++;
			}

		}
		
		if (!duno) {
    		//output stream	
    		try {
     			
        		if (ouputoption.equals("-o")){
        			txtoutput=true;
        			if (outfilename==null) {
            			outfilename=filename.substring(0, filename.indexOf('.'))+".txt"; //neni zadano ouputfilename, berem ze vstupniho filename vse pred teckou
     				}
            		dos = new DataOutputStream(new FileOutputStream(outfilename) );
       			}else if (ouputoption.equals("-d")) {
       				txtoutput=false;
       				dbname=outfilename;
        		}else {
        			dos = new DataOutputStream(System.out);
        		}

                System.out.println("class main: dbname="+dbname);
        		//input stream
    		    try {


        			FileInputStream is = new FileInputStream(filename);
        			BufferedInputStream dis = new BufferedInputStream(is);
    				int b;
                   	char thischar; //DataOutputStream.writeBytes vyzaduje String
    			    //vnitroblok uvnitr input streamu

                    //volame cteni souboru - vraci int
                  	 while ((b = is.read()) != -1){//zacatek while pro cteni znaku
                  	 	thischar=(char)b;
            	       	counter++;
                       //System.out.println("class main: thischar="+thischar);
                       //dos.writeBytes(String.valueOf((char)b)); //DataOutputStream.writeBytes vyzaduje String


                       /*______________________blok 2__hledame xmxl tagy a jejich obsah__________________________________*/
                       //
                       //thischar
                       //tag
                       //tagvalue
                       //outtagvalue


                       //hledame prvni vyskyt zacatku tagu <
                       	if (thischar=='<') {
                       	    	readtag=true;
                       	    	stoptag=false;
                       	}
                       	//hledame prvni vyskyt konce tagu >
                       	if (thischar=='>') {
                  	    	readtag=false;
                  	    	stoptag=true;
                       	} else {stoptag=false;}
    					//dos.writeBytes("char="+thischar+" readtag="+readtag+" stoptag="+stoptag);
                       //	dos.writeChars("\n");
                       	
                       	//sestavujeme tagy a jejich obsah
                       if (readtag) {
                       	   if (tagvalue.length()>0) {
                       	    	outtagvalue=tagvalue.substring(1);
                       	    	if (txtoutput) {


                  	    		}
                           }
                       	   tag=tag+(char)thischar;
                       	   tagvalue="";
                       	}else {
                       		if (tag.length()>0) {
                       			outtag=tag.substring(1);
                       			
                      			}
                       		tag="";
                       		tagvalue=tagvalue+(char)thischar;
                       	}
                        if ((!(readtag))&&(stoptag)) {
                        	if (txtoutput) { //vystup do txt souboru pri -o
                       				dos.writeChars("\n"); //zapisuje 2 byty =nova radka ve vsyt. souboru typu txt (writeBytes=zapisuje jen spodnich 8 bitu z 16-ti bitoveho char)
                       				dos.writeBytes("tag="+lastouttag);//toto je vystup tagu
                       				dos.writeBytes(" tagvalue="+outtagvalue); //toto je vystup obsahu
                       				//System.out.println("tag="+lastouttag+" tagvalue="+outtagvalue);
                       				String param=new String(lastouttag);
                       				String contens=new String(outtagvalue);
                   				 	//System.out.println("param="+param+" contens="+contens);

                       		}else { //vystup pokud neni -o ... priprava tvorba sql _ZDE ODDELIT AZ BUDE HOTOVE
                       				//pokracuj dalsim zpracovanim
                       				//premapovani promenne tag na param, a tagvalue na contens, aby bylo pro dalsi zpracovani viz dale
                       				String param=new String(lastouttag);
                       				String contens=new String(outtagvalue);
                       				//System.out.println("param="+param+" contens="+contens);

            						/*_______________________blok 3____rozebirame data podle tagu a pripravujeme sql________*/
                                    Boolean putLineIntoOutput=false; //priznak pro vystup
                    				Boolean putHeadlineIntoOutput=false; //priznak pro vystup bloku
                    				String headline="";  //stejen jako param a contens jen pro hlavicku
                   					String hcontens="";
        							String sql_string="";//inicializace noveho blku vytvarejici sql_string
        							String country="";
        							String sql_column="";//Jen odkaz
        							String sql_type="insert";//udava, jaky typ sql se bude delat
        							
                                       	

            						 //Sport-S
                					String ckname=new String("sport-s");
                                    if (param.equals("koren"))  {
                                     	//System.out.println("0_Novy blok param="+param);
                                   	}
                                   	if (param.equals("DocumentElement"))  {
                                   		lastparam=new String(param);
                            		}

                            		//HOTEL
                            		//nutne premapovani rekurze hotel hotel  - jen jedna radka 2 vnoreni od DocumentElement
                            		if ((param.equals("hotel"))&&(lastparam.equals("DocumentElement")))  {
                                   		//System.out.println("HOTELDESC");//dela oznaceni radky
                                   		headline="headline";
                                   		hcontens="HOTELDESC";
                                   		putHeadlineIntoOutput=true;
                                        lastparam=new String("paramm");

                            		}
                                    if ((lastparam.equals("paramm"))&&(param.equals("tour_id")))  {
                                   		//System.out.println("Tu");
                                   		lastparam=new String("hoteldesc");
                                   		nadpisindex=1;
                                	}//konec nutne premapovani rekurze hotel hotel


                                      //TERMINY
                            		 //terminy prvni radka  -  2 vnoreni od DocumentElement
                            		if ((param.equals("termin"))&&(lastparam.equals("DocumentElement")))  {
                                   		//System.out.println("TERMIN");
                                   		headline="headline";
                                   		hcontens="TERMIN";
                                   		putHeadlineIntoOutput=true;
                                   		lastparam=new String("paramterm");
                                   		nadpisindex=1;//pro potrebu terminu pocita se az od NadpisRadky1
                                        //System.out.println("TERMIN-nadpisindex="+nadpisindex);
                            		}
                                	if ((lastparam.equals("paramterm"))&&(param.equals("list_id")))  {
                                   		//System.out.println("Tu");
                                   		lastparam=new String("terminy");

                            		}//konec terminy prvni objeveni se

                            		 //terminy dalsi radky  - 2 vnoreni od DocumentElement
                            		if ((param.equals("termin"))&&(lastparam.equals("terminy")))  {
                                   		//System.out.println("TERMIN-dalsi_radka");
                                   		headline="headline";
                                   		hcontens="TERMIN-dalsi_radka";
                                   		putHeadlineIntoOutput=true;
                                   		lastparam=new String("paramterm");
                            		    nadpisindex=1;//pro potrebu terminu pocita se az od NadpisRadky1
                                        //System.out.println("TERMIN-dalsi_radka-nadpisindex="+nadpisindex);
                                   		sql_poradinum++;  //Tady se nastavuje poradi pro radky v ceniku (Termin)

                            		}
                                	if ((lastparam.equals("paramterm"))&&(param.equals("list_id")))  {
                                   		//System.out.println("Tu");
                                   		lastparam=new String("terminy");

                            		}//konec terminy dalsi radky


                                     //CENY
                            		//ceny prvni radka - 2 vnoreni od DocumentElement
                            		if ((param.equals("cena"))&&(lastparam.equals("DocumentElement")))  {
                                   		//System.out.println("CENA");
                                   		headline="headline";
                                   		hcontens="CENA";
                                   		putHeadlineIntoOutput=true;
                                   		lastparam=new String("paramcen");
                                   		cenytextfieldindex=0;
                            		}
                                    if ((lastparam.equals("paramcen"))&&(param.equals("list_id")))  {
                                   		//System.out.println("Tu");
                                   		lastparam=new String("ceny");
                                   		sql_poradinum++;//pokracuje pocitani poradi spolecne pro Terminy a Ceny
                            		}//konec ceny prvni objeveni se

                                     //ceny dalsi radky - 2 vnoreni od DocumentElement
                            		if ((param.equals("cena"))&&(lastparam.equals("ceny")))  {
                                   		//System.out.println("CENA-dalsi_radka");
                                   		headline="headline";
                                   		hcontens="CENA-dalsi_radka";
                                   		putHeadlineIntoOutput=true;
                                   		lastparam=new String("paramcen");
                                   		cenytextfieldindex=0;
                            		}
                                	if ((lastparam.equals("paramcen"))&&(param.equals("list_id")))  {
                                   		//System.out.println("Tu");
                                   		lastparam=new String("ceny");
                                   		sql_poradinum++;//pokracuje pocitani poradi spolecne pro Terminy a Ceny
                            		}//konec ceny dalsi radky


                                    //POPISY
                            		//popisy prvni radka - 2 vnoreni od DocumentElement
                            		if ((param.equals("Popisy"))&&(lastparam.equals("DocumentElement")))  {
                                   		//System.out.println("POPISY");
                                   		headline="headline";
                                   		hcontens="POPISY";
                                   		putHeadlineIntoOutput=true;
                                   		lastparam=new String("parampop");
                            		}
                            		//POLOZKA hleda se na  indexOf (obsahuje), protoze tam je vic parametru
                            		if ((lastparam.equals("parampop"))&&((param.indexOf("polozka"))!=-1))  {
                            	          lastparam=new String("popiszajezdu");
                            		}//konec popisy prvni objeveni se

                                    //popisy dalsi radky
                            		if (((param.indexOf("polozka"))!=-1)&&(lastparam.equals("popiszajezdu")))  {
                                   		//System.out.println("POPISY-dalsi_radka");
                                   		headline="headline";
                                   		hcontens="POPISY-dalsi_radka";
                                   		putHeadlineIntoOutput=true;
                                   		lastparam=new String("parampop");
                            		}
                                	if ((lastparam.equals("parampop"))&&((param.indexOf("polozka"))!=-1))  {
                                   		lastparam=new String("popiszajezdu");
                            		}//konec popisy dalsi radky

                            		//OBR
                            		// Obr 1. radka - 2 vnoreni od DocumentElement
                            		if ((param.equals("obrazky"))&&(lastparam.equals("DocumentElement")))  {
                                   		//System.out.println("OBRAZKY");
                                   		headline="headline";
                                   		hcontens="OBRAZKY";
                                   		putHeadlineIntoOutput=true;
                                   		lastparam=new String("paramo");
                            		}

                            		if ((lastparam.equals("paramo"))&&(param.equals("filename")))  {
                                   		//System.out.println("Tu");
                                   		lastparam=new String("obr");
                            		}

                            		// Obr dalsi radka
                            		if ((param.equals("obrazky"))&&(lastparam.equals("obr")))  {
                                   		//System.out.println("Tu");
                                   		//System.out.println("OBRAZKY-dalsi_radka");
                                   		headline="headline";
                                   		hcontens="OBRAZKY-dalsi_radka";
                                   		putHeadlineIntoOutput=true;
                                   		lastparam=new String("paramo");

                                    }//konec

                                    if ((lastparam.equals("paramo"))&&(param.equals("filename")))  {
                                   		//System.out.println("Tuto");
                                   		lastparam=new String("obr");
                            		}


                                    //System.out.println("lastparam="+lastparam);
                                    //System.out.println("param="+param+" contens="+contens);




                                    //priprava SQL
                                    //System.out.println nahrazen dos.writeBytes kvuli cetsine (UTF)

                                    if (lastparam.equals("hoteldesc")) {
                                    	putLineIntoOutput=true;
                                    	sql_zajezdcislosekce=9; //nastaveno na pevno -zimni zajezdy

                                    	if (param.equals("tour_id")) {
                                    	    sql_hoteldesccislosekce=Integer.valueOf(contens).intValue() ;//Cislo sekce pro ceniky-bere se z tour_id
                                    	    //string prevadime na CisloSekce (int) pres objekt Int


                                    	}else if (param.equals("country")) {
                                    	    sql_nadpisradky[0]=contens;
                                    	    sql_tablename="";

                               		}else if (param.equals("location")) {
                               		    //pridani nove detsinace do zajezdu - nazev destinace
                               		    sql_tablename=contens;
                               		    sql_nadpisradky[0]=sql_tablename.toUpperCase()+", "+sql_nadpisradky[0];//do tabulky zajezdu destinace-velka pismena
                               		    sql_tablename=sql_tablename.replace('-','_');//pro jemno tabulky v databazi bez pomlcek
                               		    //Poradi=0 pro hlavni nadpis destinace v tabulce pro zajezdy
                               		    sql_poradinum=0;
                               		    sql_string="(CisloSekce,Poradi,NadpisRadky) VALUES ("+sql_zajezdcislosekce+", "+sql_poradinum+", '"+sql_nadpisradky[0]+"')";//nadpis pro stranku zajezdy
                               		    sql_lasttablename=sql_tablename; //schovame si nazev table, protoze budeme menit na ceniky, dale se k tomu vratime pro popis
                               		    sql_lastnadpisradky=sql_nadpisradky[0]; //schovame si Nadpisradky

                              		}else if (param.equals("hotel")) {
                               		    //pridani noveho hotelu do zajezdy - nadpis pro hotel
                               		    //zjistujeme pocet obsazenych radek pro ziskani cisla poradi pro novy hotel, je-li mensi nez 10, pouzije se 10
                               		    String this_sql_string="SELECT * FROM "+sql_tablename+" WHERE "+sql_tablename+".CisloSekce="+sql_zajezdcislosekce;
                              		    int lastvailablePoradi=doSQL.parse(this_sql_string,dbname);
                              		    if (lastvailablePoradi<10) {lastvailablePoradi=10;}
                              		    String hotelname=contens;
                              		    sql_nadpisradky[0]=sql_nadpisradky[0]+", "+contens; //pridani country do nadpisu
                              		    sql_string="(CisloSekce,Poradi,NadpisRadky) VALUES ("+sql_zajezdcislosekce+","+lastvailablePoradi+", '"+hotelname+"')";

                               		}else if (param.equals("category")) {
                               		    //zde se vytvari hlavicka pro ceniky, ale tvori se jiz pri behu <hotel>-berou data z prvni casti
                               		    sql_tablename="ceniky_zima";
                               		    transfersql_string=sql_nadpisradky[0];//schovame si NadpisRadky pro TERMIN
                               		    //Poradi=1 pro podnadpisy
                               		    sql_poradinum=1;
                               		

                                                //sql_string-1 radka ceniky
                                            sql_string="(CisloSekce,Poradi,NadpisRadky,NadpisRadky1,NadpisRadky2,NadpisRadky3,NadpisRadky4,NadpisRadky5,NadpisRadky6,NadpisRadky7) VALUES ("+sql_hoteldesccislosekce+","+sql_poradinum+",'"+sql_nadpisradky[0]+"',"+"'Od','do','Typ ubyt.','Noci','Cena','Stravovani','Doprava')";
                                            //nadpisindex=1;//nastaveni indexu nadpis radky pro dalsi blok
                                            sql_poradinum++;
                                        }
                                        if(!(sql_string.equals(""))){
                                          //Proved nasleduji SQL
                                            sql_string="INSERT INTO "+sql_tablename+" "+sql_string;
                       			}

                                   } else if (lastparam.equals("terminy")) {
                                       	putLineIntoOutput=true;
                                       	
                                       	

                			if (param.equals("list_id")) {  //sbirame informace pro potreby doplneni relevantni informaci z bloku CENA
                			    //terminy_listID=contens;
                			    //terminynextnadpisindex=nadpisindex;//schovame si cislo posledniho NadpisRadky[nadpisindex] pro dopleni info z bloku CENA do stejne radky v databazi
                			    //terminylastsql_poradinum=sql_poradinum;

                           		}else if (param.equals("tour_id")) {
                           		    sql_termincislosekce=Integer.valueOf(contens).intValue() ;//tour_id string prevadime na CisloSekce (int) pres objekt Int
                           		    //lastsql_string="";
                           		    //System.out.println("tour_id="+contens);
                           		    //System.out.println("sql_termincislosekce="+sql_termincislosekce);

                                        }else if (param.equals("booking_unit_description")) {
                                            //nadpisindex=nadpisindex+1;//posun, aby bylo se zobrazilo za datem, nelze udelat prehozenim bloku else if, protze to nemam vliv, jak to jde za sebou ve vstupnim stringu
                                            booking_unit_description=contens;
                                            //lastsql_string=sql_nadpisradky[nadpisindex+1];//pres lastsql_string se sem dostane NadpisRadky[0]
                                            //nadpisindex++; //musi se incrementovat az zde - vyuzivame jen nektera pole z XML pod tagem terminy

                                        }else if (param.equals("date_start")) {
                                            //nadpisindex=nadpisindex-3; //posun, aby bylo se zobrazilo pred booking_unit
                                            date_start=contens;
                                      		//DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
                                        	//Date myDate = df.parse(contens);
                                        	//String myString = DateFormat.getDateInstance().format(myDate);   //konverze data
                                        	//lastsql_string=lastsql_string+"','"+sql_nadpisradky[nadpisindex-3];
                                           // nadpisindex++;

                                   	}else if (param.equals("date_exit")) {
                                   	    //nadpisindex=nadpisindex; //posun, aby bylo se zobrazilo pred booking_unit
                                   	    date_exit=contens;
                                   	    //lastsql_string=lastsql_string+"','"+date_exit;
                                            //nadpisindex++;

                                   	}else if (param.equals("nights")) {
                                        	nights=contens;
                                        	lastsql_string=lastsql_string+"','"+sql_nadpisradky[nadpisindex];
                                           //nadpisindex++;

                                        /*}else if (param.equals("days")) {
                                        	sql_nadpisradky[nadpisindex]=sql_string+"','"+contens;
                                        	lastsql_string=lastsql_string+"','"+contens;
                                           nadpisindex++;
                                         */

                                   	}else if (param.equals("unit_price_adult_from")) {
                                   	    unit_price_adult_from=contens;
                                   	    //lastsql_string=lastsql_string+"','"+sql_nadpisradky[nadpisindex];
                                   	    //nadpisindex++;
                                   		
                                   	}else if (param.equals("food_included")) {
										food_included=contens;
                                   	   	//lastsql_string=lastsql_string+"','"+sql_nadpisradky[nadpisindex];
                                   		 //nadpisindex++;
                                   	
                                   	}else if (param.equals("transfer_included")) {
                                   	    transfer_included=contens;
                                   	    sql_string=date_start+"','"+date_exit+"','"+booking_unit_description+"','"+nights+"','"+unit_price_adult_from+"','"+food_included+"','"+transfer_included;

                                   	    

                                   	}
                                 
                                            
									if(!(sql_string.equals(""))){
                                          //Proved SQL ()
                                          sql_string="INSERT INTO "+sql_tablename+" (CisloSekce,Poradi,NadpisRadky,NadpisRadky1,NadpisRadky2,NadpisRadky3,NadpisRadky4,NadpisRadky5,NadpisRadky6,NadpisRadky7,Poznamka) VALUES ("+sql_termincislosekce+","+sql_poradinum+",'"+transfersql_string+"','"+sql_string+"','"+ckname+"')";
                                    }


							} else if (lastparam.equals("ceny")) {
                                      /*
                                    	putLineIntoOutput=true;
                                    		if (param.equals("list_id")) {
                                    		 	ceny_listID=contens;//sbirame pro porpvnani relevantni informaci z bloku CENA
                                  		 	}else if (param.equals("price_description")) {
                                  		 		sql_textfield[cenytextfieldindex]=contens;
                                        		sql_string=" Text"+cenytextfieldindex+"="+sql_textfield[cenytextfieldindex];
                                                cenytextfieldindex++; //musi se incrementovat az zde - vyuzivame jen nektera pole z XML pod tagem terminy
                                   			}else if (param.equals("price_per_booking_unit")) {
                                        		sql_textfield[cenytextfieldindex]=contens;
                                        		konstanta="Cena: ";
                                        		sql_string=" Text"+cenytextfieldindex+"= "+konstanta+sql_textfield[cenytextfieldindex];
                                                cenytextfieldindex++;
                                   			}else if (param.equals("price_persons_in_apartment")) {
                                        		sql_textfield[cenytextfieldindex]=contens;
                                        		konstanta="Cena plati pri obsazeni nejmene: ";
                                        		sql_string=" Text"+cenytextfieldindex+"="+konstanta+sql_textfield[cenytextfieldindex];
                                                cenytextfieldindex++;
                                 				}else if (param.equals("unit_price_currency")) {
                                        		sql_textfield[cenytextfieldindex]=contens;
                                        		sql_string=" Text"+cenytextfieldindex+"="+sql_textfield[cenytextfieldindex];
                                                cenytextfieldindex++;

                                   			}

                                            //System.out.println("lastparam-terminy-nadpisindex="+nadpisindex);
                                            //sql_string="Tablename="+sql_tablename+" Poradi="+sql_poradinum;

                                            if(!(sql_string.equals(""))){
                                            	sql_string="Tablename="+sql_tablename+" Poradi="+sql_poradinum+sql_string;
                                            }
    									
                                    */
                                   	}else if (lastparam.equals("popiszajezdu")) {
                                 		//Cislo sekce sql_zajezdcislosekce nastaveno na pevno -zimni zajezdy
                                   		
                                   		sql_tablename=sql_lasttablename;
                                   		konstanta=sql_lastnadpisradky;
                                   		//pokud by nestacilo pocet poli text, tak nastav dalsi poradi a textfieldindex pocitej znovu od 0
                                   		if (textfieldindex>=textfieldindexmax) {
                                   			popis_poradinum++;
                                  			textfieldindex=0;
          								}
                                        System.out.println("textfieldindex="+textfieldindex);
                                        //System.out.println("TUTO");
                                   		if ((param.indexOf("polozka"))!=-1) { //testuje se jen vyskyt slova polozka, protoze to je tag s dalsimi subparametry
                               				// v kazdem pripade se cte contens, jen pokud tam je nejaky popis, tak se pridava konstanta jako hlavni NadpisRadky (to je ten vlastne ten popis jen prepsanej)
                               				//System.out.println("contens="+contens);
                               				String subcontens=getsubparam(param, "jm");
    										//System.out.println("subcontens="+subcontens);
    										

                                       			//subheadlines
                                           		//popisy
                                           		
                                                //testovani metody getsubparam
                       							//String subparam=new String("bhj");
       											//String subcontens=getsubparam(param, subparam);
            									//System.out.println("subparam="+subparam+" subcontens="+subcontens);
       											
       											//katalog = poradi 0 popis_poradinum=0je nastaveno z pocatecni inicializace
       											
                                           		if (subcontens.equals("POPIS_KATALOG")) {
                                           			sql_textfield[textfieldindex]=contens;
              			 							if (!(sql_textfield[textfieldindex].equals(""))) {
                                           				lastsql_column=",Text"+textfieldindex;
                                           				lastsql_string="','"+sql_textfield[textfieldindex];
                                           				textfieldindex++;
                     								}
                                           			

                                    			}else if (subcontens.equals("zkraceny_text")) {
                                    				sql_textfield[textfieldindex]=contens;
                                    				if (!(sql_textfield[textfieldindex].equals(""))) {
                                           				lastsql_column=lastsql_column+",Text"+textfieldindex;
                                           				lastsql_string=lastsql_string+"','"+sql_textfield[textfieldindex];
                                           				textfieldindex++;
                     								}
                                           			

                                       			}else if (subcontens.equals("uvod_vykrik")) {
                                    				sql_textfield[textfieldindex]="<b>"+contens+"</b>";
                                    				if (!(sql_textfield[textfieldindex].equals(""))) {
                                   						lastsql_column=lastsql_column+",Text"+textfieldindex;
                                           				lastsql_string=lastsql_string+"','"+sql_textfield[textfieldindex];
                                           				textfieldindex++;
                     								}


                                   		  		}else if (subcontens.equals("uvod_plus")) {
                                   					sql_textfield[textfieldindex]="<b>"+contens+"</b>";
                                   					if (!(sql_textfield[textfieldindex].equals(""))) {
                                           				lastsql_column=lastsql_column+",Text"+textfieldindex;
                                           				lastsql_string=lastsql_string+"','"+sql_textfield[textfieldindex];
                                           				textfieldindex++;
                     								}

                                       
                                    			}else if (subcontens.equals("uvod_ceny od")) {
                                    				konstanta="Ceny od";
                                  					sql_textfield[textfieldindex]=contens;
                                    				if (!(sql_textfield[textfieldindex].equals(""))) {
                                           				lastsql_column=lastsql_column+",Text"+textfieldindex;
                                           				lastsql_string=lastsql_string+"','"+sql_textfield[textfieldindex];
                                           				textfieldindex++;
                     								}


                                    			}else if (subcontens.equals("misto_nazev")) {
                                    				sql_textfield[textfieldindex]=contens;
                                    				if (!(sql_textfield[textfieldindex].equals(""))) {
                                           				lastsql_column=lastsql_column+",Text"+textfieldindex;
                                           				lastsql_string=lastsql_string+"','"+sql_textfield[textfieldindex];
                                           				textfieldindex++;
                     								}
                                           			

                                    			}else if (subcontens.equals("misto_popis")) {
                                    				sql_textfield[textfieldindex]=contens;
                                    				if (!(sql_textfield[textfieldindex].equals(""))) {
                                           				lastsql_column=lastsql_column+",Text"+textfieldindex;
                                           				lastsql_string=lastsql_string+"','"+sql_textfield[textfieldindex];
                                           				
                     								}
                                    				//posledni v radce proved sql
                                    				sql_column=lastsql_column;
                                           			sql_string=lastsql_string;
                                           			putLineIntoOutput=true;


                                    			}else if (subcontens.equals("ubytovani_popis")) {
                                    				textfieldindex=0;
    	                                        	popis_poradinum++;
    	                                        	konstanta="Ubytovani";
    	                                        	sql_textfield[textfieldindex]=contens;     	                                        	
                                           			sql_column=",Text"+textfieldindex;
                                           			sql_string="','"+sql_textfield[textfieldindex];
                                           			putLineIntoOutput=true;

                                    			}else if (subcontens.equals("stravovani_popis")) {
                                    				//novy radek - nastaveni text. pole 0 a dalsi radek
                                    				textfieldindex=0;
    	                                        	popis_poradinum++;
                                   					konstanta="Stravovani";
                                   					sql_textfield[textfieldindex]=contens;
                                           			sql_column=",Text"+textfieldindex;
                                           			sql_string="','"+sql_textfield[textfieldindex];
                                           			putLineIntoOutput=true;

                                    			}else if (subcontens.equals("skipas_nazev1")) {
                                    				//novy radek - nastaveni text. pole 0 a dalsi radek
                                    				textfieldindex=0;
    	                                        	popis_poradinum++;
                                    				sql_textfield[textfieldindex]=contens;
                                    				if (!(sql_textfield[textfieldindex].equals(""))) {
                                           				lastsql_column=",Text"+textfieldindex;
                                           				lastsql_string="','"+sql_textfield[textfieldindex];
                                           				textfieldindex++;
                     								}
                                           			
                                           			

                                    			}else if (subcontens.equals("skipas_popis1")) {
                                    				sql_textfield[textfieldindex]=contens;
                                    				if (!(sql_textfield[textfieldindex].equals(""))) {
                                           				lastsql_column=lastsql_column+",Text"+textfieldindex;
                                           				lastsql_string=lastsql_string+"','"+sql_textfield[textfieldindex];
                                           				textfieldindex++;
                     								}
                                           			

                                    			}else if (subcontens.equals("skipas_nazev2")) {
                                    				sql_textfield[textfieldindex]=contens;
                                    				if (!(sql_textfield[textfieldindex].equals(""))) {
                                           				lastsql_column=lastsql_column+",Text"+textfieldindex;
                                           				lastsql_string=lastsql_string+"','"+sql_textfield[textfieldindex];
                                           				textfieldindex++;
                     								}
                                           			

                                    			}else if (subcontens.equals("skipas_popis2")) {
                                    				sql_textfield[textfieldindex]=contens;
                                    				if (!(sql_textfield[textfieldindex].equals(""))) {
                                           				lastsql_column=lastsql_column+",Text"+textfieldindex;
                                           				lastsql_string=lastsql_string+"','"+sql_textfield[textfieldindex];
                                           				textfieldindex++;
                     								}
                                           		

                                    			}else if (subcontens.equals("skipas_nazev3")) {
                                    				sql_textfield[textfieldindex]=contens;
                                    				if (!(sql_textfield[textfieldindex].equals(""))) {
                                           				lastsql_column=lastsql_column+",Text"+textfieldindex;
                                           				lastsql_string=lastsql_string+"','"+sql_textfield[textfieldindex];
                                           				textfieldindex++;
                     								}
                                           			

                                    			}else if (subcontens.equals("skipas_popis3")) {
                                    				sql_textfield[textfieldindex]=contens;
                                    				if (!(sql_textfield[textfieldindex].equals(""))) {
                                           				lastsql_column=lastsql_column+",Text"+textfieldindex;
                                           				lastsql_string=lastsql_string+"','"+sql_textfield[textfieldindex];
                                           				
                     								}
                                    				//posledni v radce proved sql
                                    				konstanta="Skipasy";
                                    				sql_column=lastsql_column;
                                           			sql_string=lastsql_string;
                                           			putLineIntoOutput=true;

                                    			/*}else if (subcontens.equals("freestyle")) {
                                    				//novy radek - nastaveni text. pole 0 a dalsi radek
                                    				textfieldindex=0;
    	                                        	popis_poradinum++;
   	                                        		sql_textfield[textfieldindex]=contens;
                                    				konstanta="Popis strediska";
                                           			lastsql_column="Text"+textfieldindex;
                                           			lastsql_string=sql_textfield[textfieldindex];
                                           			

                                    			}else if (subcontens.equals("apresski")) {
                                    				sql_textfield[textfieldindex]=contens;
                                    				lastsql_column=lastsql_column+",Text"+textfieldindex;
                                           			lastsql_string=lastsql_string+"','"+sql_textfield[textfieldindex];
                                           			textfieldindex++;

                                    			}else if (subcontens.equals("www")) {
                                    				sql_textfield[textfieldindex]=contens;
                                    				lastsql_column=lastsql_column+",Text"+textfieldindex;
                                           			lastsql_string=lastsql_string+"','"+sql_textfield[textfieldindex];
                                           			textfieldindex++;

                                    			}else if (subcontens.equals("bezva_sjezdovka")) {
                                    				sql_textfield[textfieldindex]=contens;
                                    				lastsql_column=lastsql_column+",Text"+textfieldindex;
                                           			lastsql_string=lastsql_string+"','"+sql_textfield[textfieldindex];
                                           			textfieldindex++;

                                    			}else if (subcontens.equals("poznamka")) {
                                    				sql_textfield[textfieldindex]=contens;
                                    				if (!(sql_string.equals(""))) {
                                           				lastsql_column=lastsql_column+",Text"+textfieldindex;
                                           				lastsql_string=lastsql_string+"','"+sql_textfield[textfieldindex];
                     								}
                                    				//posledni v radce proved sql
                                    				sql_column=lastsql_column;
                                           			sql_string=lastsql_string;
                                           			putLineIntoOutput=true;
                                                 */
                                                 
                                                 //ceniky
                                    			/*}else if (subcontens.equals("vcenc")) {
                                    				
                                           			lastsql_column="Text"+textfieldindex;
                                           			lastsql_string=sql_textfield[textfieldindex];
                                           			

                                    			}else if (subcontens.equals("povinny_priplatek")) {
                                    				konstanta="Povinny priplatek";
                                           			lastsql_column="Text"+textfieldindex;
                                           			lastsql_string=sql_textfield[textfieldindex];
                                           			

                                    			}else if (subcontens.equals("sluzby_priplatek")) {
                                    				konstanta="Sluzby za priplatek: ";
                                    				lastsql_column="Text"+textfieldindex;
                                           			lastsql_string=sql_textfield[textfieldindex];

                                    			}else if (subcontens.equals("slevy")) {
                                    				konstanta="Slevy";
                                           			lastsql_column="Text"+textfieldindex;
                                           			lastsql_string=sql_textfield[textfieldindex];
                                                */
                                    			



                                    			}else {
                                    				//novy radek - nastaveni text. pole 0 a dalsi radek
                                    				
                                   					sql_textfield[textfieldindex]=contens;
                                           			
                                           			if (!(sql_textfield[textfieldindex].equals(""))) {
                                           				textfieldindex=0;
    	                                        		popis_poradinum++;
                                   						konstanta=subcontens;
                                           				sql_column=",Text"+textfieldindex;
                                           				sql_string="','"+sql_textfield[textfieldindex];
                                           				putLineIntoOutput=true;
                                    				}
                                   				}

                                    			
            									 if (putLineIntoOutput==true){
                                                //if (!(sql_textfield[textfieldindex]).equals("")){ //prazdna polozka pokud je inicilaizovano
    	                                        	/*if (sql_type.equals("update")) {
    	                                        	   sql_string="UPDATE "+sql_tablename+" SET " +sql_column+"='"+sql_string+"' WHERE "+sql_tablename+".CisloSekce="+sql_zajezdcislosekce+" AND "+sql_tablename+".Poradi="+popis_poradinum;
                                   	  					textfieldindex++;
    	                                        	} else {
    	                                        		textfieldindex=0;
    	                                        	*/
    	                                        		sql_string="INSERT INTO "+sql_tablename+"(CisloSekce,Poradi,NadpisRadky"+sql_column+",Publikovat) VALUES ("+sql_zajezdcislosekce+","+popis_poradinum+",'"+konstanta+sql_string+"',true)";


                                                    //}
                                				}//prazdna polozka
                                				//if  ((textfieldindex)<textfieldindexmax-1) {textfieldindex++;}
                                				//else {System.out.println("Num of text fields exceeded textfieldindexmax="+textfieldindex);}
                                   				

                                    	}

                              		}else if (lastparam.equals("obr")) {
                              			putLineIntoOutput=true;
                                 	}


                                 	//Vystupy
                                 	//SQL
                                    if (!(sql_string.equals(""))) {
                                     		//System.out.println("sql_string="+sql_string);
                                     		//System.out.println("\n");
                                     		int sqlresult=doSQL.parse(sql_string,dbname);
  											System.out.println("sqlresult="+sqlresult);

                                    }

                    						
            						/*______________konec_blok 3____rozebirame data podle tagu a pripravujeme sql________*/
                       				
                       				
              				}//konec vystup pokud neni -o ... priprava tvorba sql
                            lastouttag=outtag;//nutne pro posunuti obsahu pred posledni oteviraci tag
                        }

                       //System.out.println("main: output="+output);
                       /*________________konec_blok 2__hledame xmxl tagy a jejich obsah__________________________________*/


                     } //konec while pro cteni znaku
                    //konec vnitroblok uvnitr input streamu
    				dis.close();
        			is.close();
    			}catch (IOException e){
        		System.out.println("Error reading "+filename);
        		System.out.println("Usage: java readxmldata inputfilename [-o] [ouputfilename] or java readxmldata inputfilename [-d] [dbname]");
    			} //konec try input stream
        		
        		System.out.println("readxmldata.main: Writing output to "+outfilename);
        		//System.out.println("main: txtoutput="+txtoutput);

         	 	System.out.println("readxmldata.main: characters read="+counter);

         	 	if (txtoutput==true) {
    				dos.close();
    			}
    		}catch (IOException e){System.out.println("Error writing "+outfilename);} //konec try input stream
		}//konec if duno
       
  	} //konec main
  	
  	
  	

  	//------------------dalsi metody------------------------------------------------------------
  	public static String getsubparam(String param, String subparam) {
  		String subcontens=new String();
        //rozdeleni param na casti oddelene mezerou a vyhledani konkretniho subparam a navraceni jeho hodnoty
  		int startpos=param.indexOf(subparam);
  		//System.out.println("getsubparam:param="+param);
  		if (startpos!=-1){
      		param=param.substring(startpos);
      		int endpos=param.indexOf('='); //hledame kombinaci ="
      		startpos=endpos+2;
      		param=param.substring(startpos);
      		endpos=param.indexOf('"'); //konec je pred uvozovkami
      		//System.out.println("getsubparam, startpos="+startpos+" endpos="+endpos);
      		if (endpos>startpos) {
          		subcontens=param.substring(0,endpos);
          		//System.out.println("subparam="+subcontens);
      		}else {System.out.println("readxmldata.getsubparam: subparam not found: "+subparam);}
  		}
  		return subcontens;
  	    
  	} //konec getsubparam

}//class readxmldata
