public void setup() {
		size(1300, 700, GLConstants.GLGRAPHICS);
		smooth();

		col1 = color(255, 247, 236);
		col2 = color(254, 232, 200);
		col3 = color(253, 212, 158);
		col4 = color(253, 212, 158);
		col5 = color(252, 141, 89);
		col6 = color(239, 101, 72);
		col7 = color(215, 48, 31);
		col8 = color(179, 0, 0);
		col9 = color(127, 0, 0);

		tempColor0 = color(247, 252, 253);
		tempColor1 = color(224, 236, 244);
		tempColor2 = color(191, 211, 230);
		tempColor3 = color(158, 188, 218);
		tempColor4 = color(140, 150, 198);
		tempColor5 = color(140, 107, 177);
		tempColor6 = color(136, 65, 157);
		tempColor7 = color(110, 1, 107);

		font = loadFont("Nilland-48.vlw");

		cp5 = new ControlP5(this);

		map = new UnfoldingMap(this, 0, 0, 900, height - 25);

		// Show map around the location in the given zoom level.
		map.zoomAndPanTo(new Location(38.951252f, -102.26932f), 4);
		map.setBackgroundColor(240);

		// Add mouse and keyboard interactions
		MapUtils.createDefaultEventDispatcher(this, map);

		states = GeoJSONReader.loadData(this, "states-20m.json");
		stateMarkers = MapUtils.createSimpleMarkers(states);

		map.addMarkers(stateMarkers);

		font = loadFont("Nilland-48.vlw");

		climateData = loadStrings("climate_by_states.csv");
		crimeData = loadStrings("CrimeStatebyState.csv");
		popData = loadStrings("pop.csv");
		latLonData = loadStrings("state_latlon.csv");

		climateArray = new Climate[climateData.length];
		crimeArray = new ArrayList<Crime>();
		// crimeArray = new Crime[crimeData.length - 1];
		popArray = new Population[popData.length - 1];
		latLonArray = new StateLatLon[latLonData.length];

		locationArray = new Location[latLonData.length];
		simplePointArray = new SimplePointMarker[latLonData.length];
		screenPositionArray = new ScreenPosition[latLonData.length];

		for (int i = 0; i < climateData.length; i++) {

			climateChunk = split(climateData[i], ",");
			climateArray[i] = new Climate(this, climateChunk[0],
					Float.valueOf(climateChunk[2]));

			// println("State: " + climateArray[i].getState());
			// println("Average temperature: " + climateArray[i].getTempC());
			// println();
		}

		for (int i = 1; i < crimeData.length - 1; i++) {
			crimeChunk = split(crimeData[i], ",");
			if (Integer.parseInt(crimeChunk[3]) >= 2000)
				crimeArray.add(new Crime(this, crimeChunk[0], crimeChunk[1],
						crimeChunk[2], Integer.parseInt(crimeChunk[3]), Integer
								.parseInt(crimeChunk[4])));
		}

		for (int i = 0; i < crimeArray.size(); i++) {
			// Crime crime = crimeArray.get(i);
			// println("State: " + crime.getState());
			// println("Type of Crime: " + crime.getCrimeType());
			// println("Crime: " + crime.getCrime());
			// println("Year: " + crime.getYear());
			// println("Count: " + crime.getCount());
			// println();
		}

		for (int i = 1; i < popData.length; i++) {

			popChunk = split(popData[i], ",");
			popArray[i - 1] = new Population(this, popChunk[4],
					Integer.parseInt(popChunk[6]),
					Integer.parseInt(popChunk[7]),
					Integer.parseInt(popChunk[8]),
					Integer.parseInt(popChunk[9]),
					Integer.parseInt(popChunk[10]),
					Integer.parseInt(popChunk[11]));

		}

		for (int i = 0; i < popArray.length; i++) {
			popArray[i].setAverage(popArray[i].averagePopulation());
		}

		for (int i = 0; i < latLonData.length; i++) {
			latLonChunk = split(latLonData[i], ",");
			latLonArray[i] = new StateLatLon(this, latLonChunk[0],
					Double.parseDouble(latLonChunk[1]),
					Double.parseDouble(latLonChunk[2]));
		}

		// for (int i = 0; i < latLonArray.length; i++) {
		// println("State: " + latLonArray[0].getState());
		// println("Latitude: " + latLonArray[1].getLat());
		// println("Longitude: " + latLonArray[2].getLon());
		// println();
		// }

		for (int i = 0; i < locationArray.length; i++) {
			locationArray[i] = new Location(latLonArray[i].getLat(),
					latLonArray[i].getLon());
			simplePointArray[i] = new SimplePointMarker(locationArray[i]);
		}

		// map.addMarkers(simplePointArray);

		// for (int i = 0; i < popArray.length; i++) {
		// println("State: " + popArray[i].getState());
		// println("00: " + popArray[i].getP0());
		// println("01: " + popArray[i].getP1());
		// println("02: " + popArray[i].getP2());
		// println("03: " + popArray[i].getP3());
		// println("04: " + popArray[i].getP4());
		// println("05: " + popArray[i].getP5());
		// println();
		// }

		crimeTypeBox = cp5.addCheckBox("Type of Crime", 1100, 120)
				.setSize(15, 15).addItem("Violent Crime", 0)
				.addItem("Property Crime", 1);

		crimeBox = cp5.addListBox("Crime", 1050, 220, 180, 120);
		crimeBox.addItem("Murder and nonnegligent Manslaughter", 0);
		crimeBox.addItem("Forcible rape", 1);
		crimeBox.addItem("Robbery", 2);
		crimeBox.addItem("Aggravated assault", 3);
		crimeBox.addItem("Burglary", 4);
		crimeBox.addItem("Larceny-theft", 5);
		crimeBox.addItem("Motor vehicle theft", 6);

		// yearBox = cp5.addListBox("Year", 1050, 420, 180, 120);
		// yearBox.addItem("2000", 0);
		// yearBox.addItem("2001", 1);
		// yearBox.addItem("2002", 2);
		// yearBox.addItem("2003", 3);
		// yearBox.addItem("2004", 4);
		// yearBox.addItem("2005", 5);
		//
		// tempSlider = cp5.addSlider("A.A. Temperature").setPosition(950, 620)
		// .setSize(150, 15).setRange(-10, 30);
	}