<%@ page isThreadSafe="false" %><%@ page import="java.awt.*" %><%@ page import="javax.swing.*" %><%@ page import="java.awt.image.*" %><%@ page import="com.mesart.site.logic.artworks.*" %><%@ include file="globalPaths.jsp" %><%@ include file="globalDefinitions.jsp" %><% String artist = request.getParameter("artist"); String sersID = request.getParameter("serUs"); String sersName = ""; if (artist == null || !isInteger(artist) || (sersID != null && !isInteger(sersID))) { session.setAttribute("404.errorDescription", "Incorrect parameter value"); response.sendError(response.SC_NOT_FOUND); return; } %><% Cookie[] cookies; cookies = request.getCookies(); String cookieArtist = ""; for (int icook = 0; cookies!=null && icook < cookies.length; icook++) { Cookie cookie = cookies[icook]; if ((cookie.getName()).equals("galleryArtistID")) { cookieArtist = cookie.getValue(); } } String remoteIP = "UndefinedIP"; if (request.getRemoteAddr() != null) { remoteIP = request.getRemoteAddr(); } %><% // Variables to access database Connection connection = null; Statement statement = null; ResultSet resultSet = null; String query = null; %><% // Variables to keep Artist's data String e1ImageUrl = "ima/e1.gif"; String artistFirstName = null; String artistName = null; String company = ""; String snapshot = null; String pack = null; String website = null; String timeStamp = "0"; boolean needCaching = true; String keywords = ""; String calendarOrder = ""; %><% // Determine artist's package and redirect to corresponding page for packages 0,2,3 // or to error page in case of inactive account, // otherwise load Artist's data. try { connection = openConnection(); statement = connection.createStatement(); query = "SELECT A.package, A.activeflag, A.portfolio, A.showStudio, A.ipLastLoggedFrom," + " A.id, A.firstName, A.lastName, A.company, A.snapshot, A.website, " + " A.timestamp, A.keywords, A.calendarReverse, W.id FROM galleryArtist A LEFT JOIN galleryArtwork W " + " ON A.id=W.artist WHERE (W.activeflag='Y' OR W.activeflag='L' OR " + " W.activeflag IS NULL) AND A.activeflag!='F' AND A.id=" + quoteString(artist); resultSet = statement.executeQuery(query); if (resultSet.next()) { String af = resultSet.getString("A.activeflag"); if (!"Y".equals(af)) { needCaching = false; } if (!artist.equals((String)session.getValue("loggedartist")) && !"admin".equals((String)session.getValue("admin.logged")) && !remoteIP.equals(resultSet.getString("ipLastLoggedFrom")) && !artist.equals(cookieArtist)) { if ("N".equals(af)) { throw new UserInputException("The pages you are trying to view belong" + " to an account that is not currently activated." + " If this is a new account, the artist needs to " + "complete the setup process before the artwork will be" + " available on the Internet"); } if ("P".equals(af)) { throw new UserInputException("The pages you are trying to view belong" + " to an account that has been closed. Please update " + "your bookmark"); } } pack = resultSet.getString("A.package"); if ("0".equals(pack)) { String wid = resultSet.getString("W.id"); if (wid != null) { sendRedirect(globalSite + "/artwork.jsp?artwork=" + URLEncoder.encode(wid)); return; } else throw new UserInputException("This Lobby artist has no artworks in their portfolio."); } if ("2".equals(pack) || "4".equals(pack)) { String personalLink = resultSet.getString("A.portfolio"); sendRedirect(personalLink); return; } if ("3".equals(pack)) { sendRedirect(globalSite + "/artworksps.jsp?artist=" + URLEncoder.encode(artist) + (sersID != null ? "&series=" + URLEncoder.encode(sersID) : "")); return; } if (! ("1".equals(pack) || "5".equals(pack))) { throw new Exception("Unknown package"); } if (resultSet.getString("A.snapshot") == null || "".equals(resultSet.getString("A.snapshot"))) { snapshot = e1ImageUrl; } else { snapshot = resultSet.getString("A.snapshot"); } website = resultSet.getString("A.website"); company = resultSet.getString("A.company"); if (company == null || "none".equals(company)) company = ""; String fn = resultSet.getString("A.firstName"); String ln = resultSet.getString("A.lastName"); if ("".equals(fn.trim())) { artistName = toUpperCaseFirstLetter(ln); artistFirstName = artistName; } else { artistName = toUpperCaseFirstLetter(fn) + " " + toUpperCaseFirstLetter(ln); artistFirstName = toUpperCaseFirstLetter(fn); } keywords = resultSet.getString("A.keywords"); if (keywords == null) keywords=""; try { if (resultSet.getTimestamp("A.timestamp") != null) { timeStamp = resultSet.getString("A.timestamp"); timeStamp = substituteTokens(timeStamp, ":", ""); timeStamp = substituteTokens(timeStamp, "-", ""); timeStamp = substituteTokens(timeStamp, " ", ""); } else { timeStamp = "00000000000000"; } } catch (Exception e) { timeStamp = "00000000000000"; } if("0".equals(resultSet.getString("calendarReverse"))) calendarOrder = "DESC"; } else { throw new UserInputException("Artist not found"); } resultSet.close(); %><%@ include file="cacheBegin.jsp" %><% long id = 0; String name = ""; String address = ""; String comment = ""; String zip = ""; String city = ""; String district = ""; String startDate = ""; String endDate = ""; String sd = ""; String ed = ""; String state = ""; String country = ""; String receptionDate = ""; // Get Open Studios and Art Fairs // and store their info into object's vectors for later usage. Vector opsRecords = new Vector(); Vector afRecords = new Vector(); query = "SELECT OPS.*, OPSA.address, OPSA.zip ,OPSA.comments " + "FROM galleryOpenStudio OPS LEFT JOIN galleryOpenStudioArtist OPA " + "ON OPA.openStudioId=OPS.id LEFT JOIN galleryOpenStudioAddress OPSA " + "ON OPSA.artist=OPA.artist AND OPSA.openStudioId=OPS.id " + "WHERE OPA.artist=" + quoteString(artist) + " GROUP BY OPS.id ORDER BY OPS.startdate " + calendarOrder; resultSet = statement.executeQuery(query); while (resultSet.next()) { id = resultSet.getLong("OPS.id"); name = resultSet.getString("OPS.name"); if (resultSet.getString("OPSA.address") == null || "".equals(resultSet.getString("OPSA.address"))) { address = resultSet.getString("OPS.placement"); } else { address = resultSet.getString("OPSA.address"); } if (resultSet.getString("OPSA.comments") == null || "".equals(resultSet.getString("OPSA.comments"))) { comment = resultSet.getString("OPS.comments"); } else { comment = resultSet.getString("OPSA.comments"); } if (resultSet.getString("OPSA.zip") == null || "".equals(resultSet.getString("OPSA.zip"))) { zip = resultSet.getString("OPS.zip"); } else { zip = resultSet.getString("OPSA.zip"); } city = resultSet.getString("OPS.city"); district = resultSet.getString("OPS.district"); if (resultSet.getString("OPS.startdate") == null) { startDate = "01/01/1970"; } else { sd = resultSet.getString("OPS.startdate"); startDate = sd.substring(5,7) + "/" + sd.substring(8,10) + "/" + sd.substring(0,4); } if (resultSet.getString("OPS.enddate") == null) { endDate = "01/01/1970"; } else { ed = resultSet.getString("OPS.enddate"); endDate = ed.substring(5,7) + "/" + ed.substring(8,10) + "/" + ed.substring(0,4); } state = resultSet.getString("OPS.state"); country = resultSet.getString("OPS.country"); if ("0".equals(resultSet.getString("OPS.artFair_openStudio"))) { opsRecords.addElement(new OPSAFRecord(id, name, startDate, endDate, address, comment, district, city, state, zip, country)); } else if ("1".equals(resultSet.getString("OPS.artFair_openStudio"))) { afRecords.addElement(new OPSAFRecord(id, name, startDate, endDate, address, comment, district, city, state, zip, country)); } } resultSet.close(); // Get Exhibitions and Workshops // and store their info into object's vectors for later usage. Vector exRecords = new Vector(); Vector woRecords = new Vector(); query = "SELECT GAE.* FROM galleryArtistExhibition GAE " + " LEFT JOIN galleryArtist A ON A.id=GAE.artist " + " WHERE GAE.artist=" + quoteString(artist) + " AND GAE.isArchive = 0" + " ORDER BY GAE.startdate " + calendarOrder; resultSet = statement.executeQuery(query); while (resultSet.next()) { id = resultSet.getLong("GAE.id"); name = resultSet.getString("GAE.name"); address = resultSet.getString("GAE.address"); city = resultSet.getString("GAE.city"); if (resultSet.getString("GAE.startdate") == null) { startDate = "01/01/1970"; } else { sd = resultSet.getString("GAE.startdate"); startDate = sd.substring(5,7) + "/" + sd.substring(8,10) + "/" + sd.substring(0,4); } if (resultSet.getString("GAE.enddate") == null) { endDate = "01/01/1970"; } else { ed = resultSet.getString("GAE.enddate"); endDate = ed.substring(5,7) + "/" + ed.substring(8,10) + "/" + ed.substring(0,4); } if (resultSet.getString("GAE.receptiondate")==null) { receptionDate = "01/01/1970"; } else { sd = resultSet.getString("GAE.receptiondate"); receptionDate = sd.substring(5,7) + "/" + sd.substring(8,10) + "/" + sd.substring(0,4); } state = resultSet.getString("GAE.state"); country = resultSet.getString("GAE.country"); zip = resultSet.getString("GAE.zip"); comment = resultSet.getString("GAE.comments"); district = resultSet.getString("GAE.addressComments"); if ("1".equals(resultSet.getString("GAE.flag"))) { exRecords.addElement(new ExhibitionWorkshopRecord(id, name, startDate, endDate, address, comment, district, city, state, zip, country, receptionDate)); } else if ("0".equals(resultSet.getString("GAE.flag"))) { woRecords.addElement(new ExhibitionWorkshopRecord(id, name, startDate, endDate, address, comment, district, city, state, zip, country, receptionDate)); } } resultSet.close(); %><% // Define basic variables for storing series' and artworks' information boolean pr = false; boolean next = false; boolean previous = false; String nextSeriesNumber = "0"; String previousSeriesNumber = "0"; Vector sers = new Vector(); Vector artworkIDs = new Vector(); Vector artworkNames = new Vector(); Vector artworkDates = new Vector(); Vector artworkSnapshots = new Vector(); Vector availables = new Vector(); Vector prices = new Vector(); Vector printPrices = new Vector(); Vector solds = new Vector(); Vector imageWidths = new Vector(); Vector imageHeights = new Vector(); Vector types = new Vector(); Vector techniques = new Vector(); Vector categories = new Vector(); Vector descriptions = new Vector(); Vector themes = new Vector(); Vector styles = new Vector(); Vector colors = new Vector(); %><% // Determine art types and categories // which happen for the current artist String wtype = null; String wcategory = null; Vector wtypes = new Vector(); Vector fineartCategories = new Vector(); Vector craftCategories = new Vector(); Vector commercialartCategories = new Vector(); query = "SELECT DISTINCT type, category FROM galleryArtwork " + " WHERE (activeflag='Y' OR activeflag='L') AND artist=" + quoteString(artist); resultSet = statement.executeQuery(query); while (resultSet.next()) { wtype=resultSet.getString("type"); wcategory=resultSet.getString("category"); wtypes.addElement(wtype); if (wtype.equals("fineart")) { fineartCategories.addElement(wcategory); } if (wtype.equals("craft")) { craftCategories.addElement(wcategory); } if (wtype.equals("commercialart")) { commercialartCategories.addElement(wcategory); } } resultSet.close(); %><% // Get Series Info boolean seriesFound = false; String curSerId = ""; query = "SELECT distinct S.name, S.id FROM gallerySeries S, galleryArtwork W " + " WHERE (W.activeflag='Y' OR W.activeflag='L')" + " AND S.id = W.series AND W.artist=" + quoteString(artist) + " ORDER BY S.sortid"; resultSet = statement.executeQuery(query); while (resultSet.next()) { curSerId = resultSet.getString("S.id"); if (sersID == null) { sersID = curSerId; setParameter("serUs", sersID); } if (sersID.equals(curSerId)) { seriesFound = true; //sersName = resultSet.getString("S.name"); sersName = String.valueOf(sers.size() + 1); if (sers.size() > 0) { previous = true; previousSeriesNumber = (String)sers.elementAt(sers.size() - 1); } } else if (sers.size() > 0 && sersID.equals(sers.elementAt(sers.size() - 1))) { next = true; nextSeriesNumber = curSerId; } sers.addElement(curSerId); } resultSet.close(); if (!seriesFound && sersID != null) { throw new UserInputException("Series not found"); } %><% // Get Artwork Info if (0 < sers.size()) { URL iiurl = null; float iiwidth = 0; float iiheight = 0; String preferredWidth = ""; String artworkSnapshot = ""; String tempdate = ""; query = "SELECT W.id, W.name, W.type, W.smallshot, W.snapshot," + " W.technique, W.description, W.theme, W.style, W.color," + " W.widthImage, W.heightImage, W.category, W.available, W.price," + " W.printPrice, W.sold, W.modifiedDate, S.httppath" + " FROM galleryArtwork W, galleryServer S" + " WHERE S.id=W.ftpserver AND" + " W.series=" + quoteString(sersID) + " AND W.forSale=1 AND (W.activeflag='Y' OR" + " W.activeflag='L') ORDER BY W.sortid"; resultSet = statement.executeQuery(query); while (resultSet.next()) { artworkSnapshot = null; artworkIDs.addElement(resultSet.getString("W.id")); artworkNames.addElement(resultSet.getString("W.name")); types.addElement(getArtTypeName(resultSet.getString("W.type"))); solds.addElement(resultSet.getString("W.sold")); techniques.addElement(toUpperCaseFirstLetter(resultSet.getString("W.technique"))); descriptions.addElement(resultSet.getString("W.description")); themes.addElement(toUpperCaseFirstLetter(resultSet.getString("W.theme"))); styles.addElement(toUpperCaseFirstLetter(resultSet.getString("W.style"))); colors.addElement(toUpperCaseFirstLetter(resultSet.getString("W.color"))); artworkDates.addElement(getTimestampDigits(resultSet, "W.modifiedDate")); categories.addElement(getArtCategoryName(resultSet.getString("W.category"))); availables.addElement(resultSet.getString("W.available")); prices.addElement(resultSet.getString("W.price")); printPrices.addElement(resultSet.getString("W.printPrice")); if (resultSet.getString("W.snapshot") == null || "".equals(resultSet.getString("W.snapshot"))) { artworkSnapshot = e1ImageUrl; } else { artworkSnapshot = resultSet.getString("S.httppath") + resultSet.getString("W.snapshot"); } artworkSnapshots.addElement(artworkSnapshot); imageWidths.addElement(resultSet.getString("W.widthImage")); imageHeights.addElement(resultSet.getString("W.heightImage")); } resultSet.close(); } %><% // Display artist's Open Studios String temp = null; boolean ind4 = false; query = "SELECT DISTINCT OS.name FROM galleryOpenStudio OS LEFT JOIN" + " galleryOpenStudioArtist OSA ON OSA.openStudioId = OS.id WHERE" + " OSA.artist = " + quoteString(artist) + " GROUP BY OS.name"; resultSet = statement.executeQuery(query); while (resultSet.next()) { String opsName=resultSet.getString("OS.name"); if ("Silicon Valley OPS".equals(opsName)) { temp = "" + "Silicon Valley Open Studios
"; } if ("East Bay Open Studios (Pro Arts)".equals(opsName)) { temp = "Pro Arts East Bay" + "
Open Studios

"; } if ("San Francisco Open Studios".equals(opsName)) { temp = "" + "San Francisco Open Studios
"; } if (opsName.indexOf("Art Of Living")!=-1 && !ind4) { temp = "" + "The Art Of Living Black
"; ind4 = true; } } resultSet.close(); %><% keywords = replaceAll(keywords, sersName + ",", ""); // Remove artwork name from keyword string, so that it is not repeated. keywords = replaceAll(keywords, sersName, ""); String allTypes = arrayToString(types.toArray(), ", ", true); String allTechniques = arrayToString(techniques.toArray(), "/", true); String allCategories = arrayToString(categories.toArray(), " ", true); String uniqueCategories = arrayToString(categories.toArray(), "|", true); String allThemes = arrayToString(themes.toArray(), ", ", true); allThemes = allThemes.replace("/", " "); String allStyles = arrayToString(styles.toArray(), " ", true); String allColors = arrayToString(colors.toArray(), "/", true); String pageSeries = toUpperCaseFirstLetter(sersName); String pageTitle = artistName + "'s " + (uniqueCategories.indexOf("|") == -1 ? allCategories : allTypes); String pageKeywords = allThemes + " Theme, " + allStyles + " Style, " + allCategories + ", " + allColors + " Color" + (keywords.length() > 0 ? ", " + keywords : "") + ", " + allTypes; String pageDescription = artistName + "'s" + " " + allThemes + " " + allStyles + " Style" + " " + allTypes + " " + allCategories + " Series. " + allColors + " Color" + (keywords.length() > 0 ? " (" + keywords + ")" : "") + "."; pageDescription = replaceAll(pageDescription, "<", "["); pageDescription = replaceAll(pageDescription, ">", "]"); pageDescription = replaceAll(pageDescription, "\r\n", " "); pageDescription = replaceAll(pageDescription, "\n", " "); %><% if (needCaching) { %><%@ include file="cacheLaunch.jsp" %><% } %> <%= pageTitle %> <%@ include file="artworksTop.txt" %> <% boolean artistInfo = false; if (wtypes.contains("fineart")) { artistInfo = true; %>    
  FINE ART: 
<% String FAtext = ""; if (fineartCategories.contains("painting")) FAtext += ",  Painting"; if (fineartCategories.contains("graphics")) FAtext += ",  Graphics"; if (fineartCategories.contains("printmaking")) FAtext += ",  Printmaking"; if (fineartCategories.contains("photography")) FAtext += ",  Photography"; if (fineartCategories.contains("sculpture")) FAtext += ",  Sculpture"; if (fineartCategories.contains("mixedmedia")) FAtext += ",  Mixed Media"; if (fineartCategories.contains("newmedia")) FAtext += ",  New Media"; if (fineartCategories.contains("installationart")) FAtext += ",  Installation Art"; if (fineartCategories.contains("artbooks")) FAtext += ",  Art Books"; if (FAtext.length() > 7) FAtext = FAtext.substring(7); out.print(FAtext); %>
<% } if (wtypes.contains("craft")) { %>    
  CRAFT: 
<% String CRtext = ""; if (craftCategories.contains("ceramics")) CRtext += ",  Ceramics"; if (craftCategories.contains("glass")) CRtext += ",  Glass"; if (craftCategories.contains("jewelry")) CRtext += ",  Jewelry"; if (craftCategories.contains("furniture")) CRtext += ",  Furniture"; if (craftCategories.contains("metalart")) CRtext += ",  Fiber Art"; if (craftCategories.contains("wood")) CRtext += ",  Wood"; if (craftCategories.contains("textile")) CRtext += ",  Fiber Art"; if (CRtext.length() > 7) CRtext = CRtext.substring(7); out.print(CRtext); %>
<% } if (wtypes.contains("commercialart")) { %>    
  GRAPHIC DESIGN: 
<% String CAtext = ""; if (commercialartCategories.contains("booksart")) CAtext += ",  Book Art"; if (commercialartCategories.contains("illustration")) CAtext += ",  Illustration"; if (commercialartCategories.contains("calligraphy")) CAtext += ",  Calligraphy"; if (commercialartCategories.contains("printdesign")) CAtext += ",  Print Design"; if (commercialartCategories.contains("typography")) CAtext += ",  Typography"; if (commercialartCategories.contains("webdesign")) CAtext += ",  Web Design"; if (CAtext.length() > 7) CAtext = CAtext.substring(7); out.print(CAtext); %>
<% } %>
 
?<%=timeStamp%> border=0 alt="<%=artistName%>" width="139">
  <%=artistName%> <% if (!"".equals(company.trim())) { %>

   <%=company%> <% } %>
 
          Artworks              
          Biography
          Guest Book
          Contact Info
<% if (next) { %> <% } %>
             Pages  
<% // Top series' navigator String currentSeries; String link = ""; for (int i = 0; i < sers.size(); i++) { currentSeries = (String)sers.elementAt(i); link = "artworks.jsp?serUs=" + currentSeries + "&artist=" + artist; %> <% } %> <% if (sers.size() == 0) { %> <% } if (next) { link = "artworks.jsp?serUs=" + nextSeriesNumber + "&artist=" + artist; %> <% } %>
 |  ><%=i + 1%>  |   
 next
  <% // Bottom series' navigator if (previous || next) { %> <% } else { %> <% } // Calendar // OPS, ArtFairs, Exhibitions, Workshops if (("5".equals(pack) || "1".equals(pack)) && (afRecords.size() > 0 || opsRecords.size() > 0 || woRecords.size() > 0 || exRecords.size() > 0)) { %> <% } if (!website.equals("")) { %> <% } %><%@ include file="artworksDown.txt" %>
<% if (temp != null) out.print("
" + temp); %>
<% // Clean up sers.removeAllElements(); artworkIDs.removeAllElements(); artworkNames.removeAllElements(); artworkDates.removeAllElements(); artworkSnapshots.removeAllElements(); prices.removeAllElements(); printPrices.removeAllElements(); availables.removeAllElements(); solds.removeAllElements(); imageWidths.removeAllElements(); imageHeights.removeAllElements(); types.removeAllElements(); techniques.removeAllElements(); categories.removeAllElements(); descriptions.removeAllElements(); themes.removeAllElements(); styles.removeAllElements(); colors.removeAllElements(); %><% if (needCaching) { %><%@ include file="cacheEnd.jsp" %><% } %><% } catch (UserInputException uie) { // Do not log some errors due to their abundance. // AP 030309 Do not log these errors since they clutter logs/missing.log boolean noLog = uie.getMessage() != null && (uie.getMessage().indexOf("not found") != -1 || uie.getMessage().indexOf("has no artworks") != -1 ); if (noLog) { session.setAttribute("404.log", "0"); } session.setAttribute("404.errorDescription", uie.getMessage()); response.sendError(response.SC_NOT_FOUND); return; } catch (Exception e) { errorLog(e, query); sendRedirect(globalErrorPage + "?errorDescription=" + URLEncoder.encode(e.getMessage() + ".")); return; } finally { if (resultSet != null) resultSet.close(); if (connection != null && !connection.isClosed()) connection.close(); } %><%@ include file="globalFinally.jsp" %>
Click on the picture for a larger image and a description
 
<% int artwidth; int artheight; String date; Double price; Double printprice; boolean available; boolean sold; for (int m = 0; m < artworkIDs.size(); m += 3) { %>
<% // Main cycle by artworks for (int k = m; k < m + 3; k++) { if (k < artworkIDs.size()) { id = Integer.parseInt((String)artworkIDs.elementAt(k)); try { artwidth = Integer.valueOf((String)imageWidths.elementAt(k)).intValue(); artheight = Integer.valueOf((String)imageHeights.elementAt(k)).intValue(); } catch (Exception e) { artwidth = 150; artheight = 150; } snapshot = (String)artworkSnapshots.elementAt(k); date = (String)artworkDates.elementAt(k); name = (String)artworkNames.elementAt(k); try { price = new Double((String)prices.elementAt(k)); } catch (Exception e) { price = null; } try { printprice = new Double((String)printPrices.elementAt(k)); } catch (Exception e) { printprice = null; } available = "1".equals((String)availables.elementAt(k)); sold = "1".equals((String)solds.elementAt(k)); %> <% } else { %> <% } } %>
<%=name%> 0) && ((float)artheight / artwidth) > 1.15; boolean horizontallyElongated = (artheight > 0) && ((float)artwidth / artheight) > 1.15; out.print(verticallyElongated ? "height=186" : horizontallyElongated ? "width=166" : "width=150"); %>>
<%=name%> <% if (!(price == null || price.doubleValue() <= 1.5) && !(printprice == null || printprice.doubleValue() <= 1.5)) { %>
Original: <% if (available && price.doubleValue() >= 1.5) { pr = true; out.print(formatPrice(price.toString(), true)); } else { if (sold) { out.print("
Sold"); } } if (!(printprice == null || printprice.doubleValue() <= 1.5)) { pr = true; out.print("
Giclee Print: " + formatPrice(printprice.toString(), true)); } } else { if (!(price == null || price.doubleValue() <= 1.5)) { %>
Original: <% } if (available && price.doubleValue() >= 1.5) { pr = true; out.print(formatPrice(price.toString(), true)); } else { if (sold) { out.print("
Sold"); } } if (!(printprice == null || printprice.doubleValue() <= 1.5)) { pr = true; out.print("
Giclee Print: " + formatPrice(printprice.toString(), true)); } } if (pr) { %>
Buy <% } pr = false; %>
 
<% } %>
<% if (previous) { %> <% } for (int i = 0; i < sers.size(); i++) { currentSeries = (String)sers.elementAt(i); link = "artworks.jsp?serUs=" + currentSeries + "&artist=" + artist; %> <% } %> <% if (next) { %> <% } if (!next) { %> <% } %>
previous  < |  ><% out.print(i + 1); %> |  > next | 
  
<% if (opsRecords.size() > 0) { %> <% for (int i = 0; i < opsRecords.size(); i ++) { if (i > 0) { %> <% } %> <% if (((OPSAFRecord)opsRecords.elementAt(i)).comment != null && !"".equals(((OPSAFRecord)opsRecords.elementAt(i)).comment)) { %> <% } %> <% } } if (afRecords.size() > 0) { %> <% for (int i = 0; i < afRecords.size(); i ++) { if (i > 0) { %> <% } %> <% if (((OPSAFRecord)afRecords.elementAt(i)).comment != null && !"".equals(((OPSAFRecord)afRecords.elementAt(i)).comment)) { %> <% } %> <% } } if (exRecords.size() > 0) { %> <% for (int i = 0; i < exRecords.size(); i ++) { if (i > 0) { %> <% } %> <% if ((String)((ExhibitionWorkshopRecord)exRecords.elementAt(i)).comment != null && !"".equals((String)((ExhibitionWorkshopRecord) exRecords.elementAt(i)).comment)) { %> <% } } } if (woRecords.size() > 0) { %> <% for (int i = 0; i < woRecords.size(); i ++) { if (i > 0) { %> <% } %> <% if (((ExhibitionWorkshopRecord)woRecords.elementAt(i)).comment != null && !"".equals(((ExhibitionWorkshopRecord)woRecords.elementAt(i)).comment)) { %> <% } %> <% } } %>
    <%=artistName%>'s Calendar of Art Events
 Open Studios    Day & Time   Studio Address Map
   
 
<% if ("East Bay Open Studios (Pro Arts)".equals(((OPSAFRecord) opsRecords.elementAt(i)).name)) { out.print("Pro Arts
East Bay
Open Studios"); } else { out.print(((OPSAFRecord)opsRecords.elementAt(i)).name); } if (!"".equals(((OPSAFRecord)opsRecords.elementAt(i)).district)) { out.print("
" + ((OPSAFRecord)opsRecords.elementAt(i)).district + "
"); } %>
 
   <% if (!"01/01/1970".equals(((OPSAFRecord)opsRecords.elementAt(i)).endDate)) { out.print(((OPSAFRecord)opsRecords.elementAt(i)).getDateString()); } %>
<% url = ((OPSAFRecord)opsRecords.elementAt(i)).getURL(artistName); out.print(((OPSAFRecord)opsRecords.elementAt(i)).getAddressString()); %>
<% if ("US".equals(((OPSAFRecord)opsRecords.elementAt(i)).country) || "Canada".equals(((OPSAFRecord)opsRecords.elementAt(i)).country)) { if (((OPSAFRecord)opsRecords.elementAt(i)).address != null && url != null) { %>[ Map]<% } } %>
 
 
   <%=convertHTMLSymbolsToPlainNew(((OPSAFRecord)opsRecords.elementAt(i)).comment)%>
 
 
 Art Fairs    Day & Time   Art Fair Address Map
   
 
<% if ("East Bay Open Studios (Pro Arts)".equals( ((OPSAFRecord)afRecords.elementAt(i)).name)) { out.print("Pro Arts
East Bay
Open Studios"); } else { out.print(((OPSAFRecord)afRecords.elementAt(i)).name); } if (!"".equals(((OPSAFRecord)afRecords.elementAt(i)).district)) { out.print("
" + ((OPSAFRecord)afRecords.elementAt(i)).district + "
"); } %>
 
   <% if (!"01/01/1970".equals(((OPSAFRecord)afRecords.elementAt(i)).endDate)) { out.print(((OPSAFRecord)afRecords.elementAt(i)).getDateString()); } %>
<% url = ((OPSAFRecord)afRecords.elementAt(i)).getURL(artistName); out.print(((OPSAFRecord)afRecords.elementAt(i)).getAddressString()); %>
<% if ("US".equals(((OPSAFRecord)afRecords.elementAt(i)).country) || "Canada".equals(((OPSAFRecord)afRecords.elementAt(i)).country)) { if (((OPSAFRecord)afRecords.elementAt(i)).address != null && url != null) { %> [ Map] <% } } %>
 
 
   <%=convertHTMLSymbolsToPlainNew(((OPSAFRecord)afRecords.elementAt(i)).comment)%>
 
 
 
 Exhibitions      
   
 
<%=((ExhibitionWorkshopRecord)exRecords.elementAt(i)).name%>  
   <% if (!"01/01/1970".equals(((ExhibitionWorkshopRecord) exRecords.elementAt(i)).endDate)) { out.print(((ExhibitionWorkshopRecord) exRecords.elementAt(i)).getDateString()); } %>
<% url = ((ExhibitionWorkshopRecord)exRecords.elementAt(i)).getURL(artistName); out.print(((ExhibitionWorkshopRecord) exRecords.elementAt(i)).getAddressString()); %>
<% if ("US".equals(((ExhibitionWorkshopRecord)exRecords.elementAt(i)).country) || "Canada".equals(((ExhibitionWorkshopRecord) exRecords.elementAt(i)).country)) { if (((ExhibitionWorkshopRecord)exRecords.elementAt(i)).address != null && !"".equals((String)((ExhibitionWorkshopRecord) exRecords.elementAt(i)).address)) { %>[ Map]<% } } %>
 
 
   <%=convertHTMLSymbolsToPlainNew(((ExhibitionWorkshopRecord)exRecords.elementAt(i)).comment)%>
 
 
 Workshops      
   
 
<%=((ExhibitionWorkshopRecord)woRecords.elementAt(i)).name%>  
   <% if (!"01/01/1970".equals(((ExhibitionWorkshopRecord) woRecords.elementAt(i)).endDate)) { out.print(((ExhibitionWorkshopRecord) woRecords.elementAt(i)).getDateString()); } %>
<% url = ((ExhibitionWorkshopRecord)woRecords.elementAt(i)).getURL(artistName); out.print(((ExhibitionWorkshopRecord) woRecords.elementAt(i)).getAddressString()); %>
<% if ("US".equals(((ExhibitionWorkshopRecord)woRecords.elementAt(i)).country) || "Canada".equals(((ExhibitionWorkshopRecord) woRecords.elementAt(i)).country)) { if (((ExhibitionWorkshopRecord)woRecords.elementAt(i)).address!=null && !"".equals((String)((ExhibitionWorkshopRecord) woRecords.elementAt(i)).address)) { %>[ Map] <% } } %>
 
 
   <%=convertHTMLSymbolsToPlainNew((String)((ExhibitionWorkshopRecord)woRecords.elementAt(i)).comment)%>
 
 
 
<%= artistFirstName %>'s Website      ><%=website%>