<HTML> <HEAD> <TITLE>Web Review</TITLE> <SCRIPT LANGUAGE = "JavaScript"> <!-- var cookie = document.cookie + ''; var expdate = new Date(); expdate.setTime (expdate.getTime() + 31536000000); function getCookie(name){ var fname = name + "="; var dc = cookie; if (dc.length > 0) { offset = dc.indexOf(fname); if (offset != -1) { offset += fname.length; var end = dc.indexOf(";", offset); if (end == -1) end = dc.length; return unescape(dc.substring(offset, end)); } } return null; } function setCookie(name, value) { document.cookie = name + "=" + escape(value) + "; expires=" + expdate.toGMTString() + "; path=/"; } function getChip(name){ var cn = name + '='; var dc = getCookie(logName); if (dc != null) { var start = dc.indexOf(cn); if (start != -1) { start += cn.length; var end = dc.indexOf('|', start); if (end != -1) return unescape(dc.substring(start, end)); } } return null; } function setChip(name, value) { var dc = getCookie(logName); var cv = getChip(name); var cn = name + '='; if (cv != null) { var start = dc.indexOf(cn); if (start != -1) { var end = dc.indexOf('|', start); setCookie(logName, dc.substring(0, start) + cn + value + '|' + dc.substring(end + 1, dc.length)); } } else { if (dc != null) dc += cn + value + '|'; else dc = cn + value + '|'; setCookie(logName, dc); } } function delChip(name) { var dc = getCookie(logName); var cv = getChip(name); var cn = name + '='; if (cv != null) { var start = dc.indexOf(cn); var end = dc.indexOf('|', start); setCookie(logName, dc.substring(0, start) + dc.substring(end + 1, dc.length)); } } // get a channel value function getChannel(channel) { // get channels off cookie var channels = getCookie('wr_channels'); if (notEmpty(channels)) { // find the placement, and then value, of the channel's importance in the channel cookie var importance = parseInt(channels.substring(channel - 1, channel)); // if the importance is 0, then return null, otherwise return value return ((importance == 0) ? null : importance); } else return null; } // get the best channel function getBestChannel() { var channel = null; for (var j = 5; j > 0; j--) { for (var i = 1; i < 6; i++) { if (getChannel(i) == j) channel = i; } for (var i = 0; i < articles.length; i++) { if (articles[i].code == channel) return channel; } } return null; } // detect if something is not null or nothing; return true function notEmpty(value) { return (value != null && value.length != 0); } // mark article as read function makeArticleRead(logId) { setChip(logId, 'true'); } // is article read ? function isArticleRead(logId) { return (getChip(logId) == 'true'); } // get rid of old article logs, they take up space function purgeOldRead() { var tempLog = ''; for (var i = 0; i < articles.length; i++) { var tempArticleLog = getChip(articles[i].logId) tempLog += ((tempArticleLog == null) ? '' : articles[i].logId + '=' + tempArticleLog + '|'); } setCookie(logName, tempLog); } var logName = "wr_new_log"; // compile article function compileArticle(id) { var article = articles[id]; var articleString = '<P>'; if (article.code < 7) { if (getCookie('wr_new') == 'true' && !isArticleRead(article.logId)) articleString += '<IMG SRC = "/universal/images/new.gif" BORDER = "0">'; articleString += '<A HREF = "' + article.url + '" TARGET = "_parent" onClick = "makeArticleRead(' + article.logId + ')">' + '<B>' + article.title + '</B></A><BR>' + article.description; } else if (article.code == 7) articleString += '<A HREF = "' + article.url + '" TARGET = "_parent" onClick = "makeArticleRead(' + article.logId + ')">' + article.title + '</A><P><CENTER><FONT SIZE = "-1"><B>' + '<A HREF = "' + article.url + '" TARGET = "_parent" onClick = "makeArticleRead(' + article.logId + ')">' + article.description + '</A><BR></B></FONT></CENTER>'; return articleString; } function compileContent() { var bestChannel = getBestChannel(); var bestArticles = new Array(); var contentString = '<TABLE WIDTH="525" BORDER="0">' + '<TR>' + '<TD WIDTH="5" VALIGN="TOP">' + '<IMG SRC="/universal/images/blank.gif" ALT="" HEIGHT=7 WIDTH=7>' + '<TD WIDTH="200" VALIGN="TOP">'; for (var i = 0; i < articles.length; i++) { if (articles[i].code == 7) contentString += compileArticle(i); } contentString += '<TD WIDTH="20" VALIGN="TOP">' + '<IMG SRC="/universal/images/blank.gif" ALT="" HEIGHT=20 WIDTH=20>' + '<TD WIDTH="300" VALIGN="TOP">' + '<FONT SIZE = "-1"><B>' + date + '</B><P>'; if (notEmpty(getCookie('wr_channels'))) { var totalArticles = 0; // find new spotlight articles for (var i = 0; i < articles.length; i++) { if (articles[i].code == bestChannel && (!isArticleRead(articles[i].logId) || !notEmpty(getCookie('wr_new')) || getCookie('wr_new') == 'false')) { bestArticles[totalArticles++] = compileArticle(i); } } // compile new spotlight articles if (totalArticles > 0) { contentString += '<FONT SIZE = "-1"><B>' + (!notEmpty((getCookie('wr_name'))) ? 'Your' : getCookie('wr_name') + '\'s') + ' Spotlight:</B>'; for (var i = 0; i < bestArticles.length; i++) { contentString += bestArticles[i]; } contentString += '<P><B>Other Articles This Week:</B></FONT>'; } } // find and compile new non-spolite articles if (getCookie('wr_new') == 'true') { for (var i = 0; i < articles.length; i++) { if (articles[i].code != bestChannel && articles[i].code != 7 && !isArticleRead(articles[i].logId)) { contentString += compileArticle(i); } } } // compile the rest of the articles var totalArticles = 0; for (var i = 0; i < articles.length; i++) { if (((getCookie('wr_new') == 'true' && isArticleRead(articles[i].logId)) || ((!notEmpty(getCookie('wr_new')) || getCookie('wr_new') == 'false') && articles[i].code != bestChannel)) && articles[i].code != 7) { contentString += compileArticle(i); } } contentString += '</FONT></TABLE>'; return contentString } function makeArticle(ti, ur, de, co, da, id) { this.title = ti; // title of article, for feature it's a graphic this.url = ur; // url of article this.description = de; // description of article this.code = co; // channel code of article (see channel code comments) this.date = da; // date (yymmdd) of article this.id = id; // the id (or index) relative to total number of articles this.logId = da.toString() + id.toString(); // article id in log } function newArticle(ti, ur, de, co, da) { articles[index] = new makeArticle(ti, ur, de, co, da, index); index++; } var articles = new Array(); var index = 0; // Get the date var day = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); var mon = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); var now = new Date(); var date = day[now.getDay()] + ', ' + mon[now.getMonth()] + ' ' + now.getDate() + ', 19' + now.getYear(); // Channel Codes // Business : Code 1 // Design : Code 2 // Diversions : Code 3 // Programming : Code 4 // Technology : Code 5 // Universal : Code 6 // Feature : Code 7 // To put articles in "Database", use the following format: // // newArticle ( // '[Title Here]', // '[URL Here]', // '[Description Here]', // [Channel Code Here], // [Date in YYMMDD] // ); // // For feature, use image as title. newArticle ( '<IMG SRC="/97/04/18/graphics/cover-970418.gif" ALT="The Best of Push" HEIGHT=250 WIDTH=200 BORDER="0">', '/97/04/18/feature/index.html', 'Players come and go quickly, but these five Push vendors may have found promising niches in the marketplace.', 7, 970418); newArticle ( 'Push Theme', '/97/04/18/push/index.html', 'An index of Web Review articles on Push.', 6, 970418); newArticle ( 'Web Architect: Look Before You Push', '/97/04/18/arch/index.html', 'Consider the user before taking the plunge.', 2, 970418); newArticle ( 'Web Addict: Netscape\'s Netcaster', '/97/04/18/addict/index.html', 'Convert your Web site into an instant channel.', 5, 970418); newArticle ( 'Web Coder: Dynamic HTML', '/97/04/18/coder/index.html', 'Create objects that let you modify pages on the fly.', 4, 970418); newArticle ( 'UNIX Tips: Scripting with sed', '/97/04/18/programming/unix.html', 'Write a sed script for searching and replacing text.', 4, 970418); newArticle ( 'Win a Copy of Vibe', '/contest/visix/index.html', 'Tell us how you would use this Java development tool.', 4, 970418); newArticle ( 'Internet (Happy) Hour', '/97/04/18/hour/index.html', 'The best cocktail sites online.', 3, 970418); newArticle ( 'Unreal Sites Talkin\' \'bout My Generator', '/97/04/18/unreal/index.html', 'Never make up your own excuses again. ', 3, 970418); newArticle ( 'The B.A.D. Place', '/universal/previous/bad/index.html', 'A new way to look at our Boss Animations of the Day.', 6, 970418); // for good housekeeping, remove all old logs if article logging is on. if (getCookie('wr_new') == 'true') purgeOldRead(); //--> </SCRIPT> </HEAD> <BASE HREF = "http://www.webreview.com"> <BODY BGCOLOR="#FFFFFF" BACKGROUND="/universal/images/whiteshadow.gif"> <IMG SRC="/universal/images/header-week.gif" ALT="This Week in Web Review" HEIGHT=30 WIDTH=1500> <SCRIPT LANGUAGE = "JavaScript"> document.write(compileContent()); </SCRIPT> <BR> <HR ALIGN=LEFT NOSHADE SIZE="1" WIDTH="459"><BR> <TABLE WIDTH="479" BORDER="0" CELLSPACING="0" CELLPADDING="0" HEIGHT="24"> <TR> <TD WIDTH="10" VALIGN="TOP"> <TD WIDTH="200" HEIGHT="17" VALIGN="TOP"> <H3><FONT SIZE=+0>Elsewhere in Web Review:</FONT></H3> <FONT SIZE="-1"> <P> <A HREF="/97/04/11/feature/index.html" TARGET="_parent"> <IMG SRC="/universal/images/icon-siegel.gif" ALT="4/11 feature" BORDER="0" ALIGN="right" HEIGHT="80" WIDTH="60" HSPACE="8" VSPACE="5"><BR> <B>The Web Is Ruined and I Ruined It.</B></A><BR> Do killer Web sites subvert everything good and pure about the Web? <P> <A HREF="/97/04/11/edge/index.html" target="_parent"> <B>The Bleeding Edge</B><br></a> The battle for strong encryption rages on. <P> <A HREF="/97/04/04/trends/index.html" target="_parent"> <B>Trends.com<br></a></b> Half a Billion Dollars Worth of Push? <P> <A HREF="/97/04/04/addict/index.html" target="_parent"> <B>Web Addict: Mapping Chaos</B><br></a> Tools for Envisioning Information. <P> <A HREF="/97/04/04/business/track.html" target="_parent"> <B>Tracking Success<br></a></b> Defining Terms for Tracking Web Site Usage. <P> <b><font color="FF0000"><I>Beta Testbed Contest Results!</I></font></b><br> <A HREF="/97/04/04/testresp.html" target="_parent"> <B>Readers' Review of Backstage Internet Studio 2<BR></A></B> Read the review that caught our editor's attention. <P> Also... <ul> <LI> <A HREF="/97/04/11/studio/index.html" target="_parent"> <B>Studio: Getting Loopy with Shockwave<br></a></b> <LI> <A HREF="/97/04/04/arch/index.html" target="_parent"> <B>Web Architect: To Link or not to Link<br></a></b> <LI> <A HREF="/97/04/11/webtech/index.html" target="_parent"> <B>Programming Web Games in C<br></a></b> (from <i>Web Techniques</i>) <LI> <A HREF="/97/04/11/lanmag/index.html" target="_parent"> <B>The Distributed Object Primer</B></A><BR> (from <i>LAN Magazine</i>) </ul> </FONT> </TD> <TD WIDTH="10" VALIGN="TOP"></td> <TD WIDTH="13" VALIGN="TOP"> </TD> <TD WIDTH="246" VALIGN="TOP"><P> <FONT SIZE="-1"> <a href="/universal/resources/index.html" TARGET="_parent"> <IMG SRC="/universal/images/icon-resource.gif" ALT="Design Resources" HEIGHT="80" WIDTH="60" ALIGN="RIGHT" BORDER="0"></a> <A HREF="/universal/resources/index.html" target="_parent"> <B>Web Design Resources<br></b></a> Suzanne Stephens has gathered an exhaustive list of resources for Web designers, everything from ASCII art to Web stat programs. <p> <B><I>NEW BOOK!<BR> </I></B> <A HREF="http://webreview.com/books/welcome.html"> <IMG SRC="/universal/images/icon-shock.gif" ALT="Shockwave Studio" HEIGHT="80" WIDTH="60" ALIGN=right BORDER="0"></A> <B><A HREF="http://webreview.com/books/welcome.html">Shockwave Studio:<BR> Designing Multimedia for the Web</A></B><BR> by Bob Schmitt<BR> The latest book from Songline Studios takes users from creating simple time-based Shockwave animations through writing complex logical operations.</P> <P> <A HREF="/universal/previous/audit.html" TARGET="_parent"><B> Web Review Auditorials<BR> </B></A>Lynda Weinman on PhotoShop 4.0,<BR> plus animating type with rolling textures.</P> <P><A HREF="/universal/im.html"><B>Personalize Web Review</B></A><BR> <IMG SRC="/universal/images/im.gif" ALT="Intermind" HSPACE="5" ALIGN="right"> Download Intermind's Communicator and subscribe to the Web Review columns you like.</FONT></TD></TR> </TABLE> </BODY> </html>