implemented very simple ad rotation support, good enough for our rotating
quote banners - also included quote banners (20 from Webb, 4 new)
|
@ -405,6 +405,15 @@ CREATE TABLE postpublish (
|
||||||
INDEX display_order (on_date, postid)
|
INDEX display_order (on_date, postid)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
# Advertisement (actually quote, for now) banners
|
||||||
|
CREATE TABLE adverts (
|
||||||
|
adid INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
imagepath VARCHAR(255) NOT NULL,
|
||||||
|
pathstyle SMALLINT NOT NULL DEFAULT 0,
|
||||||
|
caption VARCHAR(255),
|
||||||
|
linkurl VARCHAR(255)
|
||||||
|
);
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Set table access rights
|
# Set table access rights
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
@ -1331,6 +1340,33 @@ INSERT INTO refsigftr (ftr_code, is_default, is_locked, is_hidden, require_read,
|
||||||
(2, 0, 1, 1, 0, 10000, 63000, 'SYSA', 'System Administration', 'sysadmin'),
|
(2, 0, 1, 1, 0, 10000, 63000, 'SYSA', 'System Administration', 'sysadmin'),
|
||||||
(3, 1, 0, 0, 1, 500, 0, 'CONF', 'Conferences', 'confops');
|
(3, 1, 0, 0, 1, 500, 0, 'CONF', 'Conferences', 'confops');
|
||||||
|
|
||||||
|
# Create the initial advertisements (quotes).
|
||||||
|
INSERT INTO adverts (imagepath) VALUES
|
||||||
|
('images/ads/Brown.gif'),
|
||||||
|
('images/ads/Caine.gif'),
|
||||||
|
('images/ads/Frost.gif'),
|
||||||
|
('images/ads/Keller.gif'),
|
||||||
|
('images/ads/Letterman.gif'),
|
||||||
|
('images/ads/Pooh.gif'),
|
||||||
|
('images/ads/Shakespeare.gif'),
|
||||||
|
('images/ads/Thomas.gif'),
|
||||||
|
('images/ads/WolinskiTeamwork.gif'),
|
||||||
|
('images/ads/Wonder.gif'),
|
||||||
|
('images/ads/bonaparte.gif'),
|
||||||
|
('images/ads/buscaglia.gif'),
|
||||||
|
('images/ads/dana.gif'),
|
||||||
|
('images/ads/deadpoets.gif'),
|
||||||
|
('images/ads/ford.gif'),
|
||||||
|
('images/ads/karen.gif'),
|
||||||
|
('images/ads/lynett.gif'),
|
||||||
|
('images/ads/mcauliffe.gif'),
|
||||||
|
('images/ads/midler.gif'),
|
||||||
|
('images/ads/sophocles.gif'),
|
||||||
|
('images/ads/talbert.gif'),
|
||||||
|
('images/ads/torvalds.gif'),
|
||||||
|
('images/ads/wonka.gif'),
|
||||||
|
('images/ads/worf.gif');
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Database Initialization
|
# Database Initialization
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
37
src/com/silverwrist/venice/core/Advertisement.java
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||||
|
* (the "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||||
|
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||||
|
* language governing rights and limitations under the License.
|
||||||
|
*
|
||||||
|
* The Original Code is the Venice Web Communities System.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.core;
|
||||||
|
|
||||||
|
public interface Advertisement
|
||||||
|
{
|
||||||
|
// Image path style values.
|
||||||
|
public static final short CONTEXT_RELATIVE = 0;
|
||||||
|
|
||||||
|
public abstract int getAdID();
|
||||||
|
|
||||||
|
public abstract String getImagePath();
|
||||||
|
|
||||||
|
public abstract short getImagePathStyle();
|
||||||
|
|
||||||
|
public abstract String getCaption();
|
||||||
|
|
||||||
|
public abstract String getLinkURL();
|
||||||
|
|
||||||
|
public abstract void hit(String remote_addr);
|
||||||
|
|
||||||
|
} // end interface Advertisement
|
|
@ -107,4 +107,6 @@ public interface UserContext extends SearchMode
|
||||||
|
|
||||||
public abstract boolean authenticateWithToken(String token) throws DataException;
|
public abstract boolean authenticateWithToken(String token) throws DataException;
|
||||||
|
|
||||||
|
public abstract Advertisement selectAd();
|
||||||
|
|
||||||
} // end interface UserContext
|
} // end interface UserContext
|
||||||
|
|
|
@ -77,4 +77,8 @@ public interface VeniceEngine extends SearchMode
|
||||||
|
|
||||||
public abstract int getNumAuditRecordsPerPage();
|
public abstract int getNumAuditRecordsPerPage();
|
||||||
|
|
||||||
|
public abstract Advertisement getAdByID(int id);
|
||||||
|
|
||||||
|
public abstract Advertisement selectAd();
|
||||||
|
|
||||||
} // end interface VeniceEngine
|
} // end interface VeniceEngine
|
||||||
|
|
195
src/com/silverwrist/venice/core/impl/AdvertisementImpl.java
Normal file
|
@ -0,0 +1,195 @@
|
||||||
|
/*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||||
|
* (the "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||||
|
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||||
|
* language governing rights and limitations under the License.
|
||||||
|
*
|
||||||
|
* The Original Code is the Venice Web Communities System.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.core.impl;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
import java.util.Random;
|
||||||
|
import com.silverwrist.util.cachemap.*;
|
||||||
|
import com.silverwrist.venice.core.*;
|
||||||
|
import com.silverwrist.venice.db.*;
|
||||||
|
|
||||||
|
class AdvertisementImpl implements Advertisement
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static data members
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static Random rng = new Random(System.currentTimeMillis());
|
||||||
|
private static CacheMap ad_cache = new CacheMap(500);
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private DataPool datapool;
|
||||||
|
private int adid;
|
||||||
|
private String imagepath;
|
||||||
|
private short style;
|
||||||
|
private String caption;
|
||||||
|
private String linkurl;
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructor
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
protected AdvertisementImpl(DataPool datapool, ResultSet rs) throws SQLException
|
||||||
|
{
|
||||||
|
this.datapool = datapool;
|
||||||
|
this.adid = rs.getInt("adid");
|
||||||
|
this.imagepath = rs.getString("imagepath");
|
||||||
|
this.style = rs.getShort("pathstyle");
|
||||||
|
this.caption = rs.getString("caption");
|
||||||
|
this.linkurl = rs.getString("linkurl");
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Internal functions
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static Advertisement getTheAd(DataPool datapool, Statement stmt, int ad_id) throws SQLException
|
||||||
|
{
|
||||||
|
Integer my_ad_id = new Integer(ad_id);
|
||||||
|
Advertisement rc = (Advertisement)(ad_cache.get(my_ad_id));
|
||||||
|
if (rc!=null)
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
ResultSet rs = stmt.executeQuery("SELECT * From adverts WHERE adid = " + ad_id + ";");
|
||||||
|
if (!(rs.next()))
|
||||||
|
return null;
|
||||||
|
rc = new AdvertisementImpl(datapool,rs);
|
||||||
|
ad_cache.put(my_ad_id,rc);
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
} // end getTheAd
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface Advertisement
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public int getAdID()
|
||||||
|
{
|
||||||
|
return adid;
|
||||||
|
|
||||||
|
} // end getAdID
|
||||||
|
|
||||||
|
public String getImagePath()
|
||||||
|
{
|
||||||
|
return imagepath;
|
||||||
|
|
||||||
|
} // end getImagePath
|
||||||
|
|
||||||
|
public short getImagePathStyle()
|
||||||
|
{
|
||||||
|
return style;
|
||||||
|
|
||||||
|
} // end getImagePathStyle
|
||||||
|
|
||||||
|
public String getCaption()
|
||||||
|
{
|
||||||
|
return caption;
|
||||||
|
|
||||||
|
} // end getCaption
|
||||||
|
|
||||||
|
public String getLinkURL()
|
||||||
|
{
|
||||||
|
return linkurl;
|
||||||
|
|
||||||
|
} // end getLinkURL
|
||||||
|
|
||||||
|
public void hit(String remote_addr)
|
||||||
|
{ // this does nothing right now
|
||||||
|
} // end hit
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static functions for use within package
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
static Advertisement getAdByID(DataPool datapool, int id)
|
||||||
|
{
|
||||||
|
Connection conn = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // get a database connection and call the internal function
|
||||||
|
conn = datapool.getConnection();
|
||||||
|
Statement stmt = conn.createStatement();
|
||||||
|
return getTheAd(datapool,stmt,id);
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (SQLException e)
|
||||||
|
{ // database error - no ad
|
||||||
|
return null;
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
finally
|
||||||
|
{ // make sure the connection is released before we go
|
||||||
|
if (conn!=null)
|
||||||
|
datapool.releaseConnection(conn);
|
||||||
|
|
||||||
|
} // end finally
|
||||||
|
|
||||||
|
} // end getAdByID
|
||||||
|
|
||||||
|
static Advertisement getRandomAd(DataPool datapool)
|
||||||
|
{
|
||||||
|
Connection conn = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // get a database connection and call the internal function
|
||||||
|
conn = datapool.getConnection();
|
||||||
|
Statement stmt = conn.createStatement();
|
||||||
|
ResultSet rs = stmt.executeQuery("SELECT MAX(adid) FROM adverts;");
|
||||||
|
if (!(rs.next()))
|
||||||
|
throw new InternalStateError("getRandomAd() must be able to find MAX(adid)!");
|
||||||
|
int maximum = rs.getInt(1);
|
||||||
|
|
||||||
|
for (int i=0; i<100; i++)
|
||||||
|
{ // select an ad ID
|
||||||
|
int ad_id = rng.nextInt(maximum) + 1;
|
||||||
|
Advertisement rc = getTheAd(datapool,stmt,ad_id);
|
||||||
|
if (rc!=null)
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
} // end for
|
||||||
|
|
||||||
|
// else just dump out and return null
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (SQLException e)
|
||||||
|
{ // database error - no ad
|
||||||
|
return null;
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
finally
|
||||||
|
{ // make sure the connection is released before we go
|
||||||
|
if (conn!=null)
|
||||||
|
datapool.releaseConnection(conn);
|
||||||
|
|
||||||
|
} // end finally
|
||||||
|
|
||||||
|
return null; // no ad
|
||||||
|
|
||||||
|
} // end getRandomAd
|
||||||
|
|
||||||
|
} // end class AdvertisementImpl
|
|
@ -1345,6 +1345,13 @@ class UserContextImpl implements UserContext, UserBackend
|
||||||
|
|
||||||
} // end authenticateWithToken
|
} // end authenticateWithToken
|
||||||
|
|
||||||
|
public Advertisement selectAd()
|
||||||
|
{
|
||||||
|
// just get a random ad for now
|
||||||
|
return AdvertisementImpl.getRandomAd(datapool);
|
||||||
|
|
||||||
|
} // end selectAd
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Implementations from interface UserBackend
|
* Implementations from interface UserBackend
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
|
|
@ -1567,6 +1567,19 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
} // end getNumAuditRecordsPerPage
|
} // end getNumAuditRecordsPerPage
|
||||||
|
|
||||||
|
public Advertisement getAdByID(int id)
|
||||||
|
{
|
||||||
|
return AdvertisementImpl.getAdByID(datapool,id);
|
||||||
|
|
||||||
|
} // end getAdByID
|
||||||
|
|
||||||
|
public Advertisement selectAd()
|
||||||
|
{
|
||||||
|
// just get a random ad for now
|
||||||
|
return AdvertisementImpl.getRandomAd(datapool);
|
||||||
|
|
||||||
|
} // end selectAd
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Implementations from interface EngineBackend
|
* Implementations from interface EngineBackend
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
|
|
@ -608,7 +608,7 @@ public abstract class VeniceServlet extends HttpServlet
|
||||||
Variables.flushCookies(request,response);
|
Variables.flushCookies(request,response);
|
||||||
if (content!=null)
|
if (content!=null)
|
||||||
{ // display the content!
|
{ // display the content!
|
||||||
BaseJSPData base = new BaseJSPData(getMyLocation(request,engine,user,rdat),content);
|
BaseJSPData base = new BaseJSPData(engine,user,getMyLocation(request,engine,user,rdat),content);
|
||||||
base.transfer(ctxt,rdat);
|
base.transfer(ctxt,rdat);
|
||||||
|
|
||||||
} // end if
|
} // end if
|
||||||
|
@ -663,7 +663,7 @@ public abstract class VeniceServlet extends HttpServlet
|
||||||
catch (ServletMultipartException e)
|
catch (ServletMultipartException e)
|
||||||
{ // this is an error message we need to generate and just bail out on
|
{ // this is an error message we need to generate and just bail out on
|
||||||
logger.error("ServletMultipartException caught in doVenicePost!",e);
|
logger.error("ServletMultipartException caught in doVenicePost!",e);
|
||||||
BaseJSPData base = new BaseJSPData(getMyLocation(request,engine,user,rdat),
|
BaseJSPData base = new BaseJSPData(engine,user,getMyLocation(request,engine,user,rdat),
|
||||||
new ErrorBox(null,"Internal Error: " + e.getMessage(),null));
|
new ErrorBox(null,"Internal Error: " + e.getMessage(),null));
|
||||||
base.transfer(ctxt,rdat);
|
base.transfer(ctxt,rdat);
|
||||||
return;
|
return;
|
||||||
|
@ -712,7 +712,7 @@ public abstract class VeniceServlet extends HttpServlet
|
||||||
Variables.flushCookies(request,response);
|
Variables.flushCookies(request,response);
|
||||||
if (content!=null)
|
if (content!=null)
|
||||||
{ // display the content!
|
{ // display the content!
|
||||||
BaseJSPData base = new BaseJSPData(getMyLocation(request,engine,user,rdat),content);
|
BaseJSPData base = new BaseJSPData(engine,user,getMyLocation(request,engine,user,rdat),content);
|
||||||
base.transfer(ctxt,rdat);
|
base.transfer(ctxt,rdat);
|
||||||
|
|
||||||
} // end if
|
} // end if
|
||||||
|
|
|
@ -22,6 +22,7 @@ import java.io.IOException;
|
||||||
import javax.servlet.*;
|
import javax.servlet.*;
|
||||||
import javax.servlet.http.*;
|
import javax.servlet.http.*;
|
||||||
import org.apache.log4j.*;
|
import org.apache.log4j.*;
|
||||||
|
import com.silverwrist.venice.core.*;
|
||||||
import com.silverwrist.venice.servlets.Variables;
|
import com.silverwrist.venice.servlets.Variables;
|
||||||
import com.silverwrist.venice.servlets.format.menus.LeftMenu;
|
import com.silverwrist.venice.servlets.format.menus.LeftMenu;
|
||||||
|
|
||||||
|
@ -40,6 +41,8 @@ public class BaseJSPData
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
private VeniceEngine engine; // the Venice engine
|
||||||
|
private UserContext user; // user context
|
||||||
private String location; // location string to use for this page
|
private String location; // location string to use for this page
|
||||||
private VeniceContent content; // the actual content
|
private VeniceContent content; // the actual content
|
||||||
private boolean login_links = true; // show login links up top?
|
private boolean login_links = true; // show login links up top?
|
||||||
|
@ -49,8 +52,10 @@ public class BaseJSPData
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public BaseJSPData(String location, VeniceContent content)
|
public BaseJSPData(VeniceEngine engine, UserContext user, String location, VeniceContent content)
|
||||||
{
|
{
|
||||||
|
this.engine = engine;
|
||||||
|
this.user = user;
|
||||||
this.location = location;
|
this.location = location;
|
||||||
this.content = content;
|
this.content = content;
|
||||||
|
|
||||||
|
@ -116,6 +121,47 @@ public class BaseJSPData
|
||||||
|
|
||||||
} // end transfer
|
} // end transfer
|
||||||
|
|
||||||
|
public void renderBannerAd(Writer out, RenderData rdat) throws IOException
|
||||||
|
{
|
||||||
|
Advertisement advert;
|
||||||
|
if (user.isLoggedIn())
|
||||||
|
advert = user.selectAd();
|
||||||
|
else
|
||||||
|
advert = engine.selectAd();
|
||||||
|
if (advert==null)
|
||||||
|
{ // no advert found - bail out now!
|
||||||
|
out.write(" ");
|
||||||
|
return;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
String full_image_path;
|
||||||
|
if (advert.getImagePathStyle()==Advertisement.CONTEXT_RELATIVE)
|
||||||
|
{ // return the full image path
|
||||||
|
full_image_path = rdat.getContextRelativePath(advert.getImagePath());
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else
|
||||||
|
{ // can't render the ad - just punt
|
||||||
|
out.write(" ");
|
||||||
|
return;
|
||||||
|
|
||||||
|
} // end else
|
||||||
|
|
||||||
|
// Write the banner ad.
|
||||||
|
String url = advert.getLinkURL();
|
||||||
|
String capt = advert.getCaption();
|
||||||
|
if (url!=null)
|
||||||
|
out.write("<A HREF=\"" + url + "\">");
|
||||||
|
out.write("<IMG SRC=\"" + full_image_path + "\" ALT=\"");
|
||||||
|
if (capt!=null)
|
||||||
|
out.write(capt);
|
||||||
|
out.write("\" ALIGN=RIGHT WIDTH=468 HEIGHT=60 HSPACE=2 VSPACE=2 BORDER=0>");
|
||||||
|
if (url!=null)
|
||||||
|
out.write("</A>");
|
||||||
|
|
||||||
|
} // end renderBannerAd
|
||||||
|
|
||||||
public void renderMenu(HttpSession session, Writer out, RenderData rdat) throws IOException
|
public void renderMenu(HttpSession session, Writer out, RenderData rdat) throws IOException
|
||||||
{
|
{
|
||||||
ComponentRender menu = Variables.getMenu(session);
|
ComponentRender menu = Variables.getMenu(session);
|
||||||
|
|
|
@ -190,6 +190,15 @@ public class RenderData
|
||||||
|
|
||||||
} // end getStaticIncludePath
|
} // end getStaticIncludePath
|
||||||
|
|
||||||
|
public String getContextRelativePath(String name)
|
||||||
|
{
|
||||||
|
StringBuffer buf = new StringBuffer(request.getContextPath());
|
||||||
|
if (name.charAt(0)!='/')
|
||||||
|
buf.append('/');
|
||||||
|
return buf.append(name).toString();
|
||||||
|
|
||||||
|
} // end getContextRelativePath
|
||||||
|
|
||||||
public String getStdFontTag(String color, int size)
|
public String getStdFontTag(String color, int size)
|
||||||
{
|
{
|
||||||
return rconf.getStdFontTag(color,size);
|
return rconf.getStdFontTag(color,size);
|
||||||
|
|
|
@ -55,10 +55,7 @@
|
||||||
|
|
||||||
<TD ALIGN=RIGHT WIDTH=150>
|
<TD ALIGN=RIGHT WIDTH=150>
|
||||||
<% if (rdat.useHTMLComments()) { %><!-- Banner Ad --><% } %>
|
<% if (rdat.useHTMLComments()) { %><!-- Banner Ad --><% } %>
|
||||||
<%-- BEGIN TEMP - Banner Ad code --%>
|
<% basedat.renderBannerAd(out,rdat); %>
|
||||||
<IMG SRC="/venice/images/sample-banner.gif" ALT="Banner Ad - 468x60" ALIGN=RIGHT
|
|
||||||
WIDTH=468 HEIGHT=60 HSPACE=2 VSPACE=2>
|
|
||||||
<%-- END TEMP - Banner Ad Code --%>
|
|
||||||
</TD>
|
</TD>
|
||||||
</TR>
|
</TR>
|
||||||
|
|
||||||
|
|
BIN
web/images/ads/Brown.gif
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
web/images/ads/Caine.gif
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
web/images/ads/Frost.gif
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
web/images/ads/Keller.gif
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
web/images/ads/Letterman.gif
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
web/images/ads/Pooh.gif
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
web/images/ads/Shakespeare.gif
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
web/images/ads/Thomas.gif
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
web/images/ads/WolinskiTeamwork.gif
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
web/images/ads/Wonder.gif
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
web/images/ads/bonaparte.gif
Normal file
After Width: | Height: | Size: 5.9 KiB |
BIN
web/images/ads/buscaglia.gif
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
web/images/ads/dana.gif
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
web/images/ads/deadpoets.gif
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
web/images/ads/ford.gif
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
web/images/ads/karen.gif
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
web/images/ads/lynett.gif
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
web/images/ads/mcauliffe.gif
Normal file
After Width: | Height: | Size: 4.9 KiB |
BIN
web/images/ads/midler.gif
Normal file
After Width: | Height: | Size: 7.2 KiB |
BIN
web/images/ads/sophocles.gif
Normal file
After Width: | Height: | Size: 5.5 KiB |
BIN
web/images/ads/talbert.gif
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
web/images/ads/torvalds.gif
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
web/images/ads/wonka.gif
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
web/images/ads/worf.gif
Normal file
After Width: | Height: | Size: 2.4 KiB |