package eu.dnetlib.client.leftColumn;

import java.util.ArrayList;

import com.github.gwtbootstrap.client.ui.AccordionGroup;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.CheckBox;
import com.github.gwtbootstrap.client.ui.Form;
import com.github.gwtbootstrap.client.ui.Heading;
import com.github.gwtbootstrap.client.ui.ListBox;
import com.github.gwtbootstrap.client.ui.TextBox;
import com.github.gwtbootstrap.client.ui.constants.FormType;
import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.github.gwtbootstrap.client.ui.event.HideEvent;
import com.github.gwtbootstrap.client.ui.event.HideHandler;
import com.github.gwtbootstrap.client.ui.event.ShowEvent;
import com.github.gwtbootstrap.client.ui.event.ShowHandler;
import com.github.gwtbootstrap.client.ui.resources.ButtonSize;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;

import eu.dnetlib.client.Generate;
import eu.dnetlib.client.widgets.FormFieldSet;
import eu.dnetlib.shared.ValuesOfFields;

public class AppearancePanel implements IsWidget {

	private FlowPanel flowPanel = new FlowPanel();
	private boolean isFromLoad = false;
	
	
	private ArrayList<AccordionGroup> appearancePanels = new ArrayList<AccordionGroup>();
	
	public ArrayList<AccordionGroup> getAppearancePanels() {
		return appearancePanels;
	}


	public interface ChangingNameListener{
		public void onEvent(String name);
	}
	
	private ChangingNameListener changingNameListener;
	
	public void setChaningNameListenr(ChangingNameListener changingNameListener){
		this.changingNameListener = changingNameListener;
	}
	
	public AppearancePanel(boolean isFromLoad) {

		this.isFromLoad = isFromLoad;
		designAppearance();
		//designSpacing();
	}
	
	public void designAppearance(){
		

		ValuesOfFields.getInstance().setColorXaxis("000000");
		ValuesOfFields.getInstance().setColorYaxis("000000");
		flowPanel.addStyleName("appearance-general-tab");
		designFontsDiv();
		designTitlesDiv();
		designSeriesColorDiv();
		designChartAreaOptions();
		designGridOptions();
		designLegendOptions();
		designTooltipOptions();
		
	}

	
	
	
	public void designFontsDiv(){
		
		Form fontsForm = new Form();
		
		FlowPanel fontsPanel = new FlowPanel();
		fontsPanel.addStyleName("appearance-option-panel");
		
		Heading fonts_heading = new Heading(3);
		
		fonts_heading.setText("Fonts");	
		fonts_heading.addStyleName("headings-appearance");
		
		   final ListBox fontFamily = new ListBox();
	        fontFamily.addItem("Courier");
	        fontFamily.addItem("Arial");
	        fontFamily.addItem("Verdana");
	        fontFamily.addItem("Georgia");
	        fontFamily.addItem("Palatino Linotype");
	        fontFamily.addItem("Times New Roman");
	        fontFamily.addItem("Comic Sans MS");
	        fontFamily.addItem("Impact");
	        fontFamily.addItem("Lucida Sans Unicode");
	        fontFamily.addItem("Tahoma");
	        fontFamily.addItem("Lucida Console");
	        fontFamily.addItem("Courier New");
	        fontFamily.addItem("Monaco");
	        
	        fontFamily.addChangeHandler(new ChangeHandler() {
				
				@Override
				public void onChange(ChangeEvent event) {
					// TODO Auto-generated method stub
					ValuesOfFields.getInstance().setFontFamily(fontFamily.getSelectedItemText());
					Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
				}
			});
	        if(isFromLoad){
	        	fontFamily.setSelectedValue(ValuesOfFields.getInstance().getFontFamily());
	        }else{
		        ValuesOfFields.getInstance().setFontFamily("Courier");
	        }

	        
	        fontsPanel.add(fonts_heading);
	        fontsForm.add(new FormFieldSet("Font family", fontFamily));
	        fontsPanel.add(fontsForm);
	        
	        flowPanel.add(fontsPanel);
	      
	}
	
	
	public void designTitlesDiv(){
	
		Form titlesForm = new Form();
	
		FlowPanel titlesPanel = new FlowPanel();
		titlesPanel.addStyleName("appearance-option-panel");
		
		Heading	titles_heading = new Heading(3);
		titles_heading.setText("Titles");	
		titles_heading.addStyleName("headings-appearance");
		
		
		FlowPanel optionsForTitle = new FlowPanel();
		
		Button boldButtonTitle = new Button();
		boldButtonTitle.setIcon(IconType.BOLD);
		boldButtonTitle.setSize(ButtonSize.SMALL);
		boldButtonTitle.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				if(ValuesOfFields.getInstance().isFontBoldTitle()){
					ValuesOfFields.getInstance().setFontBoldTitle(false);
				}else{
					ValuesOfFields.getInstance().setFontBoldTitle(true);
					ValuesOfFields.getInstance().setFontItalicTitle(false);
				}
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		Button italicButtonTitle = new Button();
		italicButtonTitle.setIcon(IconType.ITALIC);
		italicButtonTitle.setSize(ButtonSize.SMALL);
		italicButtonTitle.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				if(ValuesOfFields.getInstance().isFontItalicTitle()){
					ValuesOfFields.getInstance().setFontItalicTitle(false);
				}else{
					ValuesOfFields.getInstance().setFontItalicTitle(true);
					ValuesOfFields.getInstance().setFontBoldTitle(false);
				}
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox fontSizeTitle = new TextBox();
		fontSizeTitle.addStyleName("font-size-textbox");
		fontSizeTitle.getElement().setAttribute("type", "number");
		  if(isFromLoad){
	        	fontSizeTitle.setText(ValuesOfFields.getInstance().getSizeTitle());
	        }else{
	        	fontSizeTitle.setText("18");
	    		ValuesOfFields.getInstance().setSizeTitle("18");
	        }
		
		fontSizeTitle.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().setSizeTitle(fontSizeTitle.getText());
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox colorButtonTitle = new TextBox();
		colorButtonTitle.getElement().getStyle().setWidth(20.0, Unit.PX);
//		colorButtonTitle.getElement().setAttribute("type", "color");
		colorButtonTitle.setStyleName("basic");
		
		colorButtonTitle.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().setColorTitle(colorButtonTitle.getValue());
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		if(isFromLoad && !ValuesOfFields.getInstance().getColorTitle().equals("")){
        	colorButtonTitle.setValue(ValuesOfFields.getInstance().getColorTitle());
        }else{
        	colorButtonTitle.setValue("rgba(0, 0, 0, 1)");
        }
		
		optionsForTitle.add(boldButtonTitle);
		optionsForTitle.add(italicButtonTitle);
		optionsForTitle.add(fontSizeTitle);
		optionsForTitle.add(colorButtonTitle);
		
		FlowPanel optionsForSubTitle = new FlowPanel();
		
		Button boldButtonSubTitle = new Button();
		boldButtonSubTitle.setIcon(IconType.BOLD);
		boldButtonSubTitle.setSize(ButtonSize.SMALL);
		boldButtonSubTitle.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				if(ValuesOfFields.getInstance().isFontBoldSubtitle()){
					ValuesOfFields.getInstance().setFontBoldSubtitle(false);
				}else{
					ValuesOfFields.getInstance().setFontBoldSubtitle(true);
					ValuesOfFields.getInstance().setFontItalicSubtitle(false);
				}
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		Button italicButtonSubTitle = new Button();
		italicButtonSubTitle.setIcon(IconType.ITALIC);
		italicButtonSubTitle.setSize(ButtonSize.SMALL);
		italicButtonSubTitle.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				if(ValuesOfFields.getInstance().isFontItalicSubtitle()){
					ValuesOfFields.getInstance().setFontItalicSubtitle(false);
				}else{
					ValuesOfFields.getInstance().setFontItalicSubtitle(true);
					ValuesOfFields.getInstance().setFontBoldSubtitle(false);
				}
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox fontSizeSubTitle = new TextBox();
		fontSizeSubTitle.addStyleName("font-size-textbox");
		fontSizeSubTitle.getElement().setAttribute("type", "number");
		 if(isFromLoad){
	        	fontSizeSubTitle.setText(ValuesOfFields.getInstance().getSizeSubtitle());
	        	
	        }else{
	        	fontSizeSubTitle.setText("18");
	    		ValuesOfFields.getInstance().setSizeSubtitle("18");
	        }
		
		fontSizeSubTitle.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().setSizeSubtitle(fontSizeSubTitle.getText());
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox colorButtonSubTitle = new TextBox();
		colorButtonSubTitle.getElement().getStyle().setWidth(20.0, Unit.PX);
		colorButtonSubTitle.setStyleName("basic");
//		colorButtonSubTitle.getElement().setAttribute("type", "color");
		if(isFromLoad && !ValuesOfFields.getInstance().getColorSubtitle().equals("")){
        	colorButtonSubTitle.setValue(ValuesOfFields.getInstance().getColorSubtitle());
        }else{
        	
        	colorButtonSubTitle.setValue("rgba(0, 0, 0, 1)");
        }
		
		colorButtonSubTitle.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().setColorSubtitle(colorButtonSubTitle.getValue());
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		
		optionsForSubTitle.add(boldButtonSubTitle);
		optionsForSubTitle.add(italicButtonSubTitle);
		optionsForSubTitle.add(fontSizeSubTitle);
		optionsForSubTitle.add(colorButtonSubTitle);
		
		titlesPanel.add(titles_heading);
		titlesForm.add(new FormFieldSet("Main title ", optionsForTitle));
		titlesForm.add(new FormFieldSet("Sub title",optionsForSubTitle));
		titlesPanel.add(titlesForm);
	        
	    flowPanel.add(titlesPanel);
	      
	}
	
	
	
	
	public void designSeriesColorDiv(){
	
		Form seriesColorForm = new Form();
		
		FlowPanel seriesColorPanel = new FlowPanel();
		seriesColorPanel.addStyleName("appearance-option-panel");
		
		Heading series_color_heading = new Heading(3);
		series_color_heading.setText("Colors");	
		series_color_heading.addStyleName("headings-appearance");
		
		final TextBox tempButton1 = new TextBox();
		tempButton1.getElement().getStyle().setWidth(20.0, Unit.PX);
//		tempButton1.getElement().setAttribute("type", "color");
		tempButton1.setStyleName("basic");
	
		tempButton1.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().getColors()[0] = tempButton1.getText().replace("#", "");
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox tempButton2 = new TextBox();
		tempButton2.getElement().getStyle().setWidth(20.0, Unit.PX);
//		tempButton2.getElement().setAttribute("type", "color");
		tempButton2.setStyleName("basic");
	
		tempButton2.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().getColors()[1] = tempButton2.getValue();
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox tempButton3 = new TextBox();
		tempButton3.getElement().getStyle().setWidth(20.0, Unit.PX);
//		tempButton3.getElement().setAttribute("type", "color");
		tempButton3.setStyleName("basic");

		tempButton3.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().getColors()[2] = tempButton3.getText().replace("#", "");
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox tempButton4 = new TextBox();
		tempButton4.getElement().getStyle().setWidth(20.0, Unit.PX);
//		tempButton4.getElement().setAttribute("type", "color");
		tempButton4.setStyleName("basic");

		tempButton4.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().getColors()[3] = tempButton4.getValue();
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox tempButton5 = new TextBox();
		tempButton5.getElement().getStyle().setWidth(20.0, Unit.PX);
//		tempButton5.getElement().setAttribute("type", "color");
		tempButton5.setStyleName("basic");

		tempButton5.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().getColors()[4] = tempButton5.getValue();
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox tempButton6 = new TextBox();
		tempButton6.getElement().getStyle().setWidth(20.0, Unit.PX);
//		tempButton6.getElement().setAttribute("type", "color");
		tempButton6.setStyleName("basic");

		tempButton6.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().getColors()[5] = tempButton6.getValue();
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox tempButton7 = new TextBox();
		tempButton7.getElement().getStyle().setWidth(20.0, Unit.PX);
//		tempButton7.getElement().setAttribute("type", "color");
		tempButton7.setStyleName("basic");

		tempButton7.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().getColors()[6] = tempButton7.getValue();
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox tempButton8 = new TextBox();
		tempButton8.getElement().getStyle().setWidth(20.0, Unit.PX);
//		tempButton8.getElement().setAttribute("type", "color");
		tempButton8.setStyleName("basic");
	
		tempButton8.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().getColors()[7] = tempButton8.getValue();
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox tempButton9 = new TextBox();
		tempButton9.getElement().getStyle().setWidth(20.0, Unit.PX);
//		tempButton9.getElement().setAttribute("type", "color");
		tempButton9.setStyleName("basic");
		
		tempButton9.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().getColors()[8] = tempButton9.getValue();
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox tempButton10 = new TextBox();
		tempButton10.getElement().getStyle().setWidth(20.0, Unit.PX);
//		tempButton10.getElement().setAttribute("type", "color");
		tempButton10.setStyleName("basic");
		
		tempButton10.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().getColors()[9] = tempButton10.getValue();
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		if(isFromLoad){
			tempButton1.setValue(ValuesOfFields.getInstance().getColors()[0]);
			tempButton2.setValue(ValuesOfFields.getInstance().getColors()[1]);
			tempButton3.setValue(ValuesOfFields.getInstance().getColors()[2]);
			tempButton4.setValue(ValuesOfFields.getInstance().getColors()[3]);
			tempButton5.setValue(ValuesOfFields.getInstance().getColors()[4]);
			tempButton6.setValue(ValuesOfFields.getInstance().getColors()[5]);
			tempButton7.setValue(ValuesOfFields.getInstance().getColors()[6]);
			tempButton8.setValue(ValuesOfFields.getInstance().getColors()[7]);
			tempButton9.setValue(ValuesOfFields.getInstance().getColors()[8]);
			tempButton10.setValue(ValuesOfFields.getInstance().getColors()[9]);
		}else{
			tempButton1.setValue("rgba(124, 181, 236, 1)");
			ValuesOfFields.getInstance().getColors()[0] = "rgba(124, 181, 236, 1)";
			tempButton2.setValue("rgba(67, 67, 72, 1)");
			ValuesOfFields.getInstance().getColors()[1] = "rgba(67, 67, 72, 1)";
			tempButton3.setValue("rgba(144, 237, 125, 1)");
			ValuesOfFields.getInstance().getColors()[2] = "rgba(144, 237, 125, 1)";
			tempButton4.setValue("rgba(247, 163, 92, 1)");
			ValuesOfFields.getInstance().getColors()[3] = "rgba(247, 163, 92, 1)";
			tempButton5.setValue("rgba(128, 133, 233, 1)");
			ValuesOfFields.getInstance().getColors()[4] = "rgba(128, 133, 233, 1)";
			tempButton6.setValue("rgba(241, 92, 128, 1)");
			ValuesOfFields.getInstance().getColors()[5] = "rgba(241, 92, 128, 1)";
			tempButton7.setValue("rgba(228, 211, 84, 1)");
			ValuesOfFields.getInstance().getColors()[6] = "rgba(228, 211, 84, 1)";
			tempButton8.setValue("rgba(43, 144, 143, 1)");
			ValuesOfFields.getInstance().getColors()[7] = "rgba(43, 144, 143, 1)";
			tempButton9.setValue("rgba(244, 91, 91, 1)");
			ValuesOfFields.getInstance().getColors()[8] = "rgba(244, 91, 91, 1)";
			tempButton10.setValue("rgba(145, 232, 225, 1)");
			ValuesOfFields.getInstance().getColors()[9] = "rgba(145, 232, 225, 1)";
		}
		
	    FlowPanel listOfColors = new FlowPanel();
	    listOfColors.add(tempButton1);
	    listOfColors.add(tempButton2);
	    listOfColors.add(tempButton3);
	    listOfColors.add(tempButton4);
	    listOfColors.add(tempButton5);
	    listOfColors.add(tempButton6);
	    listOfColors.add(tempButton7);
	    listOfColors.add(tempButton8);
	    listOfColors.add(tempButton9);
	    listOfColors.add(tempButton10);
	    
	    seriesColorPanel.add(series_color_heading);
	    seriesColorForm.add(new FormFieldSet("Series color", listOfColors));
	    seriesColorPanel.add(seriesColorForm);
	        
	    flowPanel.add(seriesColorPanel);
      
	}
	
	
	public void designChartAreaOptions(){
		

		Form chartAreaForm = new Form();
		
		FlowPanel chartAreaPanel = new FlowPanel();
		chartAreaPanel.addStyleName("appearance-option-panel");
		
		Heading chatArea_heading = new Heading(3);
		
		chatArea_heading.setText("Chart area");	
		chatArea_heading.addStyleName("headings-appearance");
		
		final TextBox tempButton2 = new TextBox();
		tempButton2.getElement().getStyle().setWidth(20.0, Unit.PX);
		tempButton2.setStyleName("basic");
		if(isFromLoad){
			tempButton2.setValue(ValuesOfFields.getInstance().getChartBackgroundColor());
		}else{
			tempButton2.setValue("rgba(255,255,255,1)");
		}
		tempButton2.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().setChartBackgroundColor(tempButton2.getValue());
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		FlowPanel optionsPanel = new FlowPanel();
		optionsPanel.add(tempButton2);

		
	    chartAreaPanel.add(chatArea_heading);
	    chartAreaForm.add(new FormFieldSet("Background color", optionsPanel ));
	    chartAreaPanel.add(chartAreaForm);
	        
	    flowPanel.add(chartAreaPanel);
		
	}
	

	public void addAppearanceForDataserie(final int numberOfColumn){
		
		final AccordionGroup appearanceGroupPanel = new AccordionGroup();
		appearancePanels.add(appearanceGroupPanel);
		
		Form appearanceForm = new Form();
		
		
		final TextBox nameOfDataseries = new TextBox();	
		FormFieldSet nameOf = new FormFieldSet("Name of dataseries", nameOfDataseries);
		nameOfDataseries.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				if(changingNameListener!=null){
					changingNameListener.onEvent(nameOfDataseries.getText());
				}
				if(!nameOfDataseries.getText().equals("")){
					appearanceGroupPanel.setHeading("APPEARANCE FOR " + "\""+nameOfDataseries.getText()+"\"");
					
				}else{
					appearanceGroupPanel.setHeading("APPEARANCE FOR DATASERIES \"untitled\"" );
				}
				ValuesOfFields.getInstance().getColumnsDataList().get(numberOfColumn).setXaxisTitle(nameOfDataseries.getText());
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		
		appearanceForm.add(nameOf);
		
		 
			 appearanceGroupPanel.addStyleName("accordionPanel");
			 appearanceGroupPanel.setHeading("APPEARANCE FOR DATASERIES \"untitled\"");
			 appearanceGroupPanel.getHeading().addStyleName("accordionHeading");
			 appearanceGroupPanel.add(appearanceForm);
			 appearanceGroupPanel.setIcon(IconType.PLUS);
			 appearanceGroupPanel.setDefaultOpen(false);
			 appearanceGroupPanel.addShowHandler(new ShowHandler() {
	            @Override
	            public void onShow(ShowEvent showEvent) {
	            	appearanceGroupPanel.setIcon(IconType.MINUS);
	            }
	         });
			 
			 appearanceGroupPanel.addHideHandler(new HideHandler() {
	            @Override
	            public void onHide(HideEvent hideEvent) {
	            	appearanceGroupPanel.setIcon(IconType.PLUS);
	            }
	         });
			 
		//flowPanel.add(appearanceGroupPanel);	 
	}
	
	public void deleteAppearanceOfDataseries(int deletedColumn){
		flowPanel.remove(appearancePanels.get(deletedColumn));
		appearancePanels.remove(deletedColumn);
	}
	
	public void designSpacing(){
		
		Form borderOptionsForm = new Form();
		
		final TextBox spaceTopTextBox = new TextBox();
		FormFieldSet spaceTopFieldSet = new FormFieldSet("Space from top", spaceTopTextBox);
		spaceTopTextBox.getElement().setAttribute("type", "number");
		spaceTopTextBox.setText("5");
		spaceTopTextBox.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				ValuesOfFields.getInstance().setSpacingTop(Integer.parseInt(spaceTopTextBox.getText()));
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(),1);
			}
		});
		
		final TextBox spaceBottomTextBox = new TextBox();
		FormFieldSet spaceBottomFieldSet = new FormFieldSet("Space from bottom", spaceBottomTextBox);
		spaceBottomTextBox.getElement().setAttribute("type", "number");
		spaceBottomTextBox.setText("0");
		spaceBottomTextBox.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				ValuesOfFields.getInstance().setSpacingBottom(Integer.parseInt(spaceBottomTextBox.getText()));
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(),1);
			}
		});
		
		final TextBox spaceLeftTextBox = new TextBox();
		FormFieldSet spaceLeftFieldSet = new FormFieldSet("Space from left", spaceLeftTextBox);
		spaceLeftTextBox.getElement().setAttribute("type", "number");
		spaceLeftTextBox.setText("0");
		spaceLeftTextBox.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				ValuesOfFields.getInstance().setSpacingLeft(Integer.parseInt(spaceLeftTextBox.getText()));
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(),1);
			}
		});
		
		final TextBox spaceRightTextBox = new TextBox();
		FormFieldSet spaceRightFieldSet = new FormFieldSet("Space from right", spaceRightTextBox);
		spaceRightTextBox.getElement().setAttribute("type", "number");
		spaceRightTextBox.setText("0");
		spaceRightTextBox.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				ValuesOfFields.getInstance().setSpacingRight(Integer.parseInt(spaceRightTextBox.getText()));
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(),1);
			}
		});
		borderOptionsForm.add(spaceTopFieldSet);
		borderOptionsForm.add(spaceBottomFieldSet);
		borderOptionsForm.add(spaceRightFieldSet);
		borderOptionsForm.add(spaceLeftFieldSet);
		
		
		final AccordionGroup borderOptionsGroupPanel = new AccordionGroup();
        borderOptionsGroupPanel.addStyleName("accordionPanel");
        borderOptionsGroupPanel.setHeading("SPACING");
        borderOptionsGroupPanel.getHeading().addStyleName("accordionHeading");
        borderOptionsGroupPanel.add(borderOptionsForm);
        borderOptionsGroupPanel.setIcon(IconType.PLUS);
        borderOptionsGroupPanel.addShowHandler(new ShowHandler() {
            @Override
            public void onShow(ShowEvent showEvent) {
                borderOptionsGroupPanel.setIcon(IconType.MINUS);
            }
        });
        
        borderOptionsGroupPanel.addHideHandler(new HideHandler() {
            @Override
            public void onHide(HideEvent hideEvent) {
                borderOptionsGroupPanel.setIcon(IconType.PLUS);
            }
        });
		
        
        flowPanel.add(borderOptionsGroupPanel);
	}
	
	public void designAppearanceForTitle(){
		Form appearanceOptionsForm = new Form();
		
		final TextBox textColorTextBox = new TextBox();
		FormFieldSet textColorFieldSet = new FormFieldSet("Text color", textColorTextBox);
		textColorTextBox.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				ValuesOfFields.getInstance().setColorTitle(textColorTextBox.getText());
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox fontSizeTextBox = new TextBox();
		fontSizeTextBox.getElement().setAttribute("type", "number");
		fontSizeTextBox.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				ValuesOfFields.getInstance().setSizeTitle(fontSizeTextBox.getText());
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		FormFieldSet fontSizeFieldSet = new FormFieldSet("Font size", fontSizeTextBox);
		

		
		appearanceOptionsForm.add(textColorFieldSet);
		appearanceOptionsForm.add(fontSizeFieldSet);
		
		
		final AccordionGroup appearanceOptionsGroupPanel = new AccordionGroup();
        appearanceOptionsGroupPanel.addStyleName("accordionPanel");
        appearanceOptionsGroupPanel.setHeading("TITLE");
        appearanceOptionsGroupPanel.getHeading().addStyleName("accordionHeading");
        appearanceOptionsGroupPanel.add(appearanceOptionsForm);
        appearanceOptionsGroupPanel.setIcon(IconType.MINUS);
        appearanceOptionsGroupPanel.setDefaultOpen(true);
        appearanceOptionsGroupPanel.addShowHandler(new ShowHandler() {
            @Override
            public void onShow(ShowEvent showEvent) {
                appearanceOptionsGroupPanel.setIcon(IconType.MINUS);
            }
        });
        appearanceOptionsGroupPanel.addHideHandler(new HideHandler() {
            @Override
            public void onHide(HideEvent hideEvent) {
                appearanceOptionsGroupPanel.setIcon(IconType.PLUS);
            }
        });
		
        
        flowPanel.add(appearanceOptionsGroupPanel);
	}
	
	public void designAppearanceForSubtitle(){
		Form appearanceOptionsForm = new Form();
		
		final TextBox textColorTextBox = new TextBox();
		FormFieldSet textColorFieldSet = new FormFieldSet("Text color", textColorTextBox);
		textColorTextBox.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				ValuesOfFields.getInstance().setColorSubtitle(textColorTextBox.getText());
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox fontSizeTextBox = new TextBox();
		fontSizeTextBox.getElement().setAttribute("type", "number");
		fontSizeTextBox.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				ValuesOfFields.getInstance().setSizeSubtitle(fontSizeTextBox.getText());
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		FormFieldSet fontSizeFieldSet = new FormFieldSet("Font size", fontSizeTextBox);
		
		
		appearanceOptionsForm.add(textColorFieldSet);
		appearanceOptionsForm.add(fontSizeFieldSet);
		
		
		final AccordionGroup appearanceOptionsGroupPanel = new AccordionGroup();
        appearanceOptionsGroupPanel.addStyleName("accordionPanel");
        appearanceOptionsGroupPanel.setHeading("SUBTITLE");
        appearanceOptionsGroupPanel.getHeading().addStyleName("accordionHeading");
        appearanceOptionsGroupPanel.add(appearanceOptionsForm);
        appearanceOptionsGroupPanel.setIcon(IconType.MINUS);
        appearanceOptionsGroupPanel.setDefaultOpen(true);
        appearanceOptionsGroupPanel.addShowHandler(new ShowHandler() {
            @Override
            public void onShow(ShowEvent showEvent) {
                appearanceOptionsGroupPanel.setIcon(IconType.MINUS);
            }
        });
        appearanceOptionsGroupPanel.addHideHandler(new HideHandler() {
            @Override
            public void onHide(HideEvent hideEvent) {
                appearanceOptionsGroupPanel.setIcon(IconType.PLUS);
            }
        });
		
        
        flowPanel.add(appearanceOptionsGroupPanel);
	}
	
	public void designAppearanceForXaxis(){
		Form appearanceOptionsForm = new Form();
		
		final TextBox textColorTextBox = new TextBox();
		FormFieldSet textColorFieldSet = new FormFieldSet("Text color", textColorTextBox);
		textColorTextBox.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				ValuesOfFields.getInstance().setColorXaxis(textColorTextBox.getText());
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox fontSizeTextBox = new TextBox();
		fontSizeTextBox.getElement().setAttribute("type", "number");
		fontSizeTextBox.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				ValuesOfFields.getInstance().setSizeXaxis(fontSizeTextBox.getText());
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		FormFieldSet fontSizeFieldSet = new FormFieldSet("Font size", fontSizeTextBox);
		
		
		appearanceOptionsForm.add(textColorFieldSet);
		appearanceOptionsForm.add(fontSizeFieldSet);
		
		
		final AccordionGroup appearanceOptionsGroupPanel = new AccordionGroup();
        appearanceOptionsGroupPanel.addStyleName("accordionPanel");
        appearanceOptionsGroupPanel.setHeading("X-AXIS");
        appearanceOptionsGroupPanel.getHeading().addStyleName("accordionHeading");
        appearanceOptionsGroupPanel.add(appearanceOptionsForm);
        appearanceOptionsGroupPanel.setIcon(IconType.PLUS);
        appearanceOptionsGroupPanel.setDefaultOpen(false);
        appearanceOptionsGroupPanel.addShowHandler(new ShowHandler() {
            @Override
            public void onShow(ShowEvent showEvent) {
                appearanceOptionsGroupPanel.setIcon(IconType.MINUS);
            }
        });
        appearanceOptionsGroupPanel.addHideHandler(new HideHandler() {
            @Override
            public void onHide(HideEvent hideEvent) {
                appearanceOptionsGroupPanel.setIcon(IconType.PLUS);
            }
        });
		
        
        flowPanel.add(appearanceOptionsGroupPanel);
	}
	
	public void designAppearanceForYaxis(){
		Form appearanceOptionsForm = new Form();
		
		final TextBox textColorTextBox = new TextBox();
		FormFieldSet textColorFieldSet = new FormFieldSet("Text color", textColorTextBox);
		textColorTextBox.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				ValuesOfFields.getInstance().setColorYaxis(textColorTextBox.getText());
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		final TextBox fontSizeTextBox = new TextBox();
		fontSizeTextBox.getElement().setAttribute("type", "number");
		fontSizeTextBox.addChangeHandler(new ChangeHandler() {
			
			@Override
			public void onChange(ChangeEvent event) {
				ValuesOfFields.getInstance().setSizeYaxis(fontSizeTextBox.getText());
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
		
		FormFieldSet fontSizeFieldSet = new FormFieldSet("Font size", fontSizeTextBox);
		
		
		
		appearanceOptionsForm.add(textColorFieldSet);
		appearanceOptionsForm.add(fontSizeFieldSet);
		
		final AccordionGroup appearanceOptionsGroupPanel = new AccordionGroup();
        appearanceOptionsGroupPanel.addStyleName("accordionPanel");
        appearanceOptionsGroupPanel.setHeading("Y-AXIS");
        appearanceOptionsGroupPanel.getHeading().addStyleName("accordionHeading");
        appearanceOptionsGroupPanel.add(appearanceOptionsForm);
        appearanceOptionsGroupPanel.setIcon(IconType.PLUS);
        appearanceOptionsGroupPanel.setDefaultOpen(false);
        appearanceOptionsGroupPanel.addShowHandler(new ShowHandler() {
            @Override
            public void onShow(ShowEvent showEvent) {
                appearanceOptionsGroupPanel.setIcon(IconType.MINUS);
            }
        });
        appearanceOptionsGroupPanel.addHideHandler(new HideHandler() {
            @Override
            public void onHide(HideEvent hideEvent) {
                appearanceOptionsGroupPanel.setIcon(IconType.PLUS);
            }
        });
		
        
        flowPanel.add(appearanceOptionsGroupPanel);
	}
	
	public void designGridOptions(){
				Form gridOptionsForm = new Form();
				
				FlowPanel gridOptionsPanel = new FlowPanel();
				gridOptionsPanel.addStyleName("appearance-option-panel");
				
				Heading	gridOptionsHeading = new Heading(3);
				gridOptionsHeading.setText("Grid options");	
				gridOptionsHeading.addStyleName("headings-appearance");
				
				final TextBox x_axisGrid = new TextBox();
				x_axisGrid.addStyleName("font-size-textbox");
				x_axisGrid.getElement().setAttribute("type", "number");
				
				  if(isFromLoad){
			        	x_axisGrid.setText(ValuesOfFields.getInstance().getxLineWidth());
			        }else{
			        	x_axisGrid.setText("0");
			    		ValuesOfFields.getInstance().setxLineWidth("0");
			        }
				
				x_axisGrid.addChangeHandler(new ChangeHandler() {
					
					@Override
					public void onChange(ChangeEvent event) {
						// TODO Auto-generated method stub
						ValuesOfFields.getInstance().setxLineWidth(x_axisGrid.getText());
						Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
					}
				});
				
				final TextBox y_axisGrid = new TextBox();
				y_axisGrid.addStyleName("font-size-textbox");
				y_axisGrid.getElement().setAttribute("type", "number");
				
				  if(isFromLoad){
			        	y_axisGrid.setText(ValuesOfFields.getInstance().getyLineWidth());
			        }else{
			        	y_axisGrid.setText("1");
			    		ValuesOfFields.getInstance().setyLineWidth("1");
			        }
				
				y_axisGrid.addChangeHandler(new ChangeHandler() {
					
					@Override
					public void onChange(ChangeEvent event) {
						// TODO Auto-generated method stub
						ValuesOfFields.getInstance().setyLineWidth(y_axisGrid.getText());
						Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
					}
				});
				
		        gridOptionsPanel.add(gridOptionsHeading);
		        gridOptionsForm.add(new FormFieldSet("X-axis grid line width", x_axisGrid));
		        gridOptionsForm.add(new FormFieldSet("Y-axis grid line width", y_axisGrid));
		        gridOptionsPanel.add(gridOptionsForm);
		        
		        flowPanel.add(gridOptionsPanel);
	}
	
	
	public void designLegendOptions(){
				Form legendOptionsForm = new Form();
				legendOptionsForm.setType(FormType.HORIZONTAL);
				
				FlowPanel legendOptionsPanel = new FlowPanel();
				legendOptionsPanel.addStyleName("appearance-option-panel");
				
				Heading	legendOptionsHeading = new Heading(3);
				legendOptionsHeading.setText("Legend options");	
				legendOptionsHeading.addStyleName("headings-appearance");
				
				final CheckBox enableDisable = new CheckBox();
				
				enableDisable.setValue(true);
				
				enableDisable.addClickHandler(new ClickHandler() {
					
					@Override public void onClick(ClickEvent event) {
						// TODO Auto-generated method stub
						ValuesOfFields.getInstance().setLegends(enableDisable.getValue());
						Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
					}
				});
			
		        legendOptionsPanel.add(legendOptionsHeading);
		        legendOptionsForm.add(new FormFieldSet("Enable legend", enableDisable));
		       
		        legendOptionsPanel.add(legendOptionsForm);
		        
		        flowPanel.add(legendOptionsPanel);
	}
	
	
	public void designTooltipOptions(){
		Form tooltipOptionsForm = new Form();
		tooltipOptionsForm.setType(FormType.HORIZONTAL);
		
		FlowPanel tooltipOptionsPanel = new FlowPanel();
		tooltipOptionsPanel.addStyleName("appearance-option-panel");
		
		Heading	tooltipOptionsHeading = new Heading(3);
		tooltipOptionsHeading.setText("Tooltip options");	
		tooltipOptionsHeading.addStyleName("headings-appearance");
		
		final CheckBox enableDisable = new CheckBox();
		
		enableDisable.setValue(true);
		
		enableDisable.addClickHandler(new ClickHandler() {
			
			@Override public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				ValuesOfFields.getInstance().setTooltip(enableDisable.getValue());
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
			}
		});
	
        tooltipOptionsPanel.add(tooltipOptionsHeading);
        tooltipOptionsForm.add(new FormFieldSet("Enable tooltip", enableDisable));
       
        tooltipOptionsPanel.add(tooltipOptionsForm);
        
        flowPanel.add(tooltipOptionsPanel);
}
	
	@Override
	public Widget asWidget() {
		// TODO Auto-generated method stub
		return flowPanel;
	}

}
