///////////////////text for rhs of screen

function upperhelp(noteval) {
	var	notetable=fontvalue+'<b>';
	notetable=notetable+'<table cellspacing=0 cellpadding=0 width='+available_width*0.6+' height='+available_height*0.3+'><tr><td valign=top>'+fontvalue+'<b>';

if (noteval==10) {
	notetable=notetable+'<ul>Your Personal Space.<ul><br>Type your text and code into the field below and use the links to process your entry:-<ul>'+jlink+'=\'test this?\'; return true;" onclick="testreminder=true;subform(); return false;">1. Click here or [submit] at any time to test your entry?</a><ul>'+jlink+'=\'select contents?\'; return true;" onclick="reminderform.boxone.select();return false;">2. Select the form\'s contents?</a><ul>'+jlink+'=\'clear the form?\'; return true;" onclick="notabene=\'\';localreminder=true;reminder(); return false;">3. Clear the form?</a><ul>'+jlink+'=\'a basic template?\'; return true;" onclick="notabene=templatereminder;localreminder=true;reminder(); return false;">4. Select a simple template? [1]</a>, '+jlink+'=\'a basic template?\'; return true;" onclick="notabene=template1reminder;localreminder=true;reminder();return false;">[2]</a> or '+jlink+'=\'a basic template?\'; return true;" onclick="notabene=template2reminder;localreminder=true;reminder();return false;">[3]</a><ul>'+(usrname!='anonymous'?jlink+'=\'delete the entry?\'; return true;" onclick="FIELD1=\'\';top10(16); return false;">5. Delete your present entry? [caution! - this is irreversible]</a><ul>'+jlink+'=\'click to submit the form\';return true;" onclick="FIELD1=notabene;top10(16);return false;">6. Click [here] to save your entry on the server.</a></b>':'');}

if (noteval==11) {notetable=notetable+'<ul><ul><BLOCKQUOTE><BLOCKQUOTE><br><br><center><font color=white size=+1><b>REMINDER for OPERA USERS<BR>Please remember that you must use<br><font color=gold>CTRL + ENTER</font> TOGETHER when you submit a form, otherwise the entire Web Bank will reload.<br>Alternatively, you can use the buttons and links provided.';}

if (noteval==14) {notetable=notetable+'<ul><ul><ul><center><font color=gold><b>FOR SECURITY REASONS, PLEASE RE-SUBMIT THE EMAIL ADDRESS THAT YOU PREVIOUSLY REGISTERED ON THE WEB BANK.</b><BR><BR>If you do not submit the same address we have recorded on our database, we will be unable to return your user ID.';}

if (noteval==15) {notetable=notetable+'<b>Help is available for the following:</a><ul><UL>'+jlink+'=\'Saving screen settings.\'; return true;" onclick="lowerhelp(22); return false;">'+quezzie+'  Saving screen settings.</a><br>'+jlink+'=\'Show&nbsp;the&nbsp;colourtable\'; return true;" onclick="colourtable(); return false;">'+quezzie+'  Available web colours.</a><br>'+jlink+'=\'Background&nbsp;control?\'; return true;" onclick="lowerhelp(23); return false;">'+quezzie+'  Controlling the background?</a><br>'+jlink+'=\'Screen setting control.\'; return true;" onclick="lowerhelp(17); upperhelp(25); return false;">'+quezzie+' Back to screen setting control.</a>';}

if (noteval==16) {notetable=notetable+'<ul><ul><ul>You must enter a URL into the Edit Link field.<ul>If you wish to remove a link, select the appropriate Link Bay, then click on "delete this link?"';}

if (noteval==17) {notetable=notetable+'<ul><ul><ul>You have not selected a Link Bay.</b><br><br>Click on any of the five Link Bays from within the '+jlink+'=\'link bank documentation\'; return true;" onclick="mainwriter(26); return false;"><b>Link Cache</b></a> and then either update the URL or delete the entry from the cache.';}

if (noteval==18 || noteval==19) {
	getlinkinfo();
	notetable=notetable+'<ul><ul><ul>Link Bay: '+linklocation+'.<ul>You cannot ' +(noteval==18?'update':'delete')+ ' empty bays in the '+jlink+'=\'link bank documentation\'; return true;" onclick="mainwriter(26); return false;"><b>Link Cache.</b></a>';}

if (noteval==20) {notetable=notetable+'<ul><ul><ul>http://'+usrurl+'<ul>You already have this link stored within the '+jlink+'=\'link bank documentation\'; return true;" onclick="mainwriter(26); return false;"><b>Link Cache.</b></a><ul>You cannot duplicate links.<ul>Please enter an alternative URL.';}

if (noteval==21 && usrname!='anonymous') {

if (!linksactive) {notetable=notetable+'Click on the "frozen" button to restore the links to their "active" state.</B><ul><ul>To submit, update or delete a link, follow the instructions below using this standard HTML link structure:<center><I><b>www.domainname.domaintype / [subdirectories] / [filename.extension]<b></i>'; }
else
{notetable=notetable+'Click on the "active" button to add, remove or edit your entries in the Link Cache.<ul><ul><ul>';}
}

if (noteval==23) {
	getlinkinfo();
	notetable=notetable+'<ul><ul>You have selected Link Bay: '+url_num+'.';
		if (usrurl=="[empty]") {notetable=notetable+'<ul>At present, this location is empty.';}
		else {notetable=notetable+'<ul>The URL currently stored in this location is:<ul><i>http://'+usrurl+'</i>';}

	notetable=notetable+'<ul>Enter a URL in the Edit Link field, or select a URL from the <b>Top 10</b> or '+jlink+'=\'show the combined link cache?\'; return true;" onclick="textdestination=output1Lyr;  top10(11); return false;"><b>Combined Link Cache</b></a>, then press '+jlink+'=\'submit\'; return true;" onclick="sub_linkform(); return false;">\'submit\'.</a>';}

if (noteval==24) {notetable=notetable+'<ul><ul><ul>There is no URL associated with this Link Bay.'; 
	if (usrname!="anon" && usrname!="anonymous") {notetable=notetable+'<ul> To add an URL to the Link Bank, first click on the "active" button.';}
}

if (noteval==25) {notetable=notetable+'Screen Setting Control. <sup>'+jlink+'=\'Click for help with colour settings.\'; return true;" onclick="upperhelp(15); return false;">'+quezzie+'</a></sup><ul><BLOCKQUOTE>Use the form below to make changes to your screen setup. Select a colour, press return or click on '+jlink+'=\'show changes?\'; return true;" onclick="show_changes(); return false;">"show changes"</a> to see any changes.'+((document.layers)?'':' A small selection of alternative fonts is also available.')+((usrname=="anonymous") ? '':' To <u>permanently</u> save your setup for later use, click on '+jlink+'=\'archive the changes you have made?\'; return true;" onclick="get_formcolours();textdestination=hidenfrmLyr; top10(6);return false;">"archive?"</a>'); }

if (noteval==26) {notetable=notetable+'<ul><blockquote><br>The Top 10 is a compendium of the most popular URLs collected from all of our members\' individual Web Banks. Like the Link Cache itself, all the links in the Top 10 have both "active" and "frozen" states - after selecting the required bay in the cache, you can re-populate the edit field using a link from the Top 10.'; }

if (noteval==27) {notetable=notetable+'<ul><blockquote><p align=justify>The Combined Link Cache contains all the links stored on our database. Use the small arrows that appear next to the list to scroll the links up and down the page. As with the links in the Top 10, these links can be used in both "active" and "frozen" states.<center><br>'+jlink+'=\'show the personal link cache?\'; return true;" onclick="linkbank=true; link_form(); upperhelp(21); return false;">Back to '+(usrname=="anonymous" ? 'General': usrname.substr(0,1).toUpperCase()+usrname.substr(1)+'\'s')+' Link Cache?</a>';}

if (noteval==29) {notetable=notetable+'<Ul><blockquote><br><br>The <b>Web Bank</b> was initially created to draw attention to new, versatile aspects of webpage design, with an emphasis on employing a dynamic user interface, simple-to-use interactivity and reduced network response times, all prepared for cross-browser compatibility. To achieve this, the <b>Web Bank</b> employs PHP, Cookies, JavaScript, ASP, DHTML and CSS, working in combination with SQL and an Access database.<br><br>For an example of how such developments can greatly enhance the "browsability" of a webpage, many elements contributing to the appearance and content of this website can be modified and saved by the user so that, on their subsequent return to the site, independent of location or browser choice, the page appears just as they left it. Just as multiple users on a shared workstation (or roaming users on a network) have their personal settings follow them around, the <b>Web Bank</b> provides equivalent security, functionality and performance for all users of the Internet.';

	if (quickchecker=='firsttime'||usrname=='anonymous') {
		quickchecker='';notetable=notetable+'<p align=right>'+jlink+'=\'control centre?\'; return true;" onclick="mainwriter(1); return false;">Now, check out the Control Centre.</a>';}
}

if (noteval==30) {notetable=notetable+'<ul>Navigation:<ul><br>Rule One: Forget about the "Back" button - using it makes the whole site reload.<br>Rule Two: Resizing the page will also result in reloading the site.<br>Rule Three: To return to the "home" section of the <b>Web Bank,</b> just click on '+jlink+'=\'control centre?\'; return true;" onclick="mainwriter(1); return false;">"control centre?"</a><br>Rule Four: If you "refresh" (F5) the page, you will be returned to the login page.<br>Rule Five: Honestly, forget about the "Back" button - it\'s a nightmare.<br><br>You can use either the button panel in the centre of the page or text links to navigate around the <b>Web Bank:</b><blockquote>'+(document.layers?'<br>':'')+'The main areas and functions of the <b>Web Bank</b> represented by the buttons within the control panel appear and disappear depending on selection and availability of the facilities they represent.<br><br>These main functions (and many other components of the <b>Web Bank</b>) are further represented by text links which appear throughout the site, and are also distributed around the base of the control panel.';}

if (noteval==31) {notetable=notetable+'<ul>Appearance Issues:<ul><br>The <b>Web Bank</b> is comprised of a number of "layers" or objects, each with a precise location in the browser window. By using a "font sizing" process, the text in each layer is scaled relative to the dimensions of this window.<BR><BR>Despite the above, if you do not employ a full-size window, some layers occasionally overlap others, and hence make the site harder to view and navigate.'+((document.layers) ?'' :' Furthermore, certain fonts in combination with a restricted window size can also cause the layers to overlap.')+'<blockquote>'+(document.layers?'<br>':'')+'If you encounter such difficulties, it is advisable to maximise the browser window'+((document.layers) ?'' :' and use the <a href=# onclick="settings(); return false;">default font setting')+'.</a><br><br></b><font class=lesser>'+(document.layers?'<font class=least>':'')+'(see '+jlink+'=\'Structure and design\'; return true;" onclick="mainwriter(16); return false;">Structure, Design and Layout</a> for detailed information regarding this matter)</font><b>';}

if (noteval==32) {notetable=notetable+'<ul>Performance Issues:<ul><br>The most significant drain on your browser\'s and computer\'s resources to be found on the <b>Web Bank</b> is the small clock located in the top right-hand corner of the screen ('+jlink+'=\'timeouts and on-screen clocks\'; return true;" onclick="upperhelp(87); return false;">not applicable for Netscape 4 users</a>). When combined with the scrolling feature found in the '+jlink+'=\'link bank documentation\'; return true;" onclick="mainwriter(26); return false;">Combined Link Cache,</a> some browsers are prone to behaving erratically (both features use timeouts which can get confusing for your more humble browser).<br><br>'+ ((document.layers) ?'':'If you experience such problems, turn off the clock <a href=# onclick="nustoptime(); clock=false; timerLyr.visibility=\'hidden\'; controls(); return false;">here.</a><br><br>')+'Most other performance issues are a matter of "Client-Server Delays", and are due to either the limiting speed of your connection to the Internet, the overall speed of the Internet itself, or because the <b>Web Bank</b> is itself experiencing a lot of traffic. In such cases, we can only apologise for being victims of our own success, and suggest that perhaps you could use a faster Internet connection.<br><br>One final note: if you choose to use your own '+jlink+'=\'customise your backdrop\'; return true;" onclick="startbackdrop(); return false;">backdrop</a>, remember that the larger the size of the file you use, the more memory it takes up, and consequently, the more it affects the overall performance of the <b>Web Bank.</b>';}

if (noteval==33) {notetable=notetable+'<ul><ul><b>Link Submission Error:<ul><br><i>unusual character contained in the address:</i><ul><b>'+usrurl+'</b><i><ul>Please try again.</i>';}

if (noteval==34) {notetable=notetable+'<ul>Documentation Overview</b><ul><br>The majority of the material relating to the structure and design of the <b>Web Bank</b> assumes that the reader has a basic working knowledge of HTML, Forms, DHTML, CSS, Javascript, ASP, Access and SQL. Without this knowledge base, things will get pretty confusing.<br><br>Some simple conventions:<ul><b>IE</b> refers to Microsoft\'s Internet Explorer<br><b>NS4.x</b> refers to all versions of Netscape/Mozilla upto ver 4.8.<br><b>NS6+</b> refers to all versions of Netscape/Mozilla/Firefox from Mozilla ver. 5.0 upwards.';}

if (noteval==35) {notetable=notetable+'<ul><ul>User Registration:<br><BR>Please try and restrict your user name and personal ID to six characters or less.';}

if (noteval==40) {
	notetable=notetable+'<ul><ul>'+usrname.substr(0,1).toUpperCase()+usrname.substr(1)+'\'s Host Information:<br><BR><ul>';
	if (ip=='') {notetable=notetable+'Unfortunately, we are unable to provide you with any host information at present. To rectify this situation, we suggest that your reload the <b>Web Bank</b> and then check this page again.';
	}
	else {
	notetable=notetable+'<table border=0 cellspacing=0 width='+available_width*0.33+' cols=2><tr><td>'+fontvalue+'<font size=+1><b>IP Address: <br><br>Country Name: <br><br>Country Code: </td><td>'+fontvalue+'<font size=+1><b>'+ip+'<br><br>'+countryname+'<br><br>'+country+'</td></tr></table><p align=right>'+jlink+'=\'Control Centre\'; return true;" onclick="mainwriter(1); return false;">Clear this screen?</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';}
}

if (noteval==42) {notetable=notetable+'<br><ul>Refer your account to a friend:<blockquote><p align=justify>Just fill in and submit the form below and you can share your account with any number of friends. As well as notifying your friends, we will send an email to your registered address confirming that the relevant information has been successfully dispatched.';}

if (noteval==45) {notetable=notetable+'<ul>The Flash Colour Wheel:<UL><BR>Use the colour wheel below to change the background colour of the page. Run your mouse over each segment to shift up and down through the colour values. To reset the page\'s colour, click on the image.';}

if (noteval==51) {notetable=notetable+'<ul><ul></b><br>To prevent blocks of text from spreading uncontrollably over the page, text is embedded within TABLES before being written to layers on the page, so whenever the page\'s dimensions change, both text and tables resize themselves to fill the given space.<br><br>The width of any particular table is determined both by the relative dimensions of the page, and the location of the target layer on the page. For example, if the control panel is placed two fifths of the available width of the page away from the left margin of the page, then the width of the table containing the text to the left of the control panel (opposite) must be two fifths of the available width (minus 10 pixels to act as a buffer between the text and the control panel). If the width was any greater than this then the text would spill over onto the control panel.<br><br>Each layer has its own specific location on the page - the text that you are reading resides in a layer situated to the right side of the control panel, starting about 200 pixels above the centre of the screen. The control panel itself is located in a layer centred in the middle of the page, and then pushed a little to the left. As with the size of the fonts, the position of each layer is also determined relative to the screen\'s dimensions - when the screen is resized, or different browser window sizes are employed, all the layers are repositioned relative to the new size.';}

if (noteval==52) {notetable=notetable+'<ul><ul></b><br>There are a handful of different ways in which a user can interact with a web page. The first is via LINKS. Click on a HTML link saying '+jlink+'=\'i want to go to togo\'; return true;" onclick="temp_url=\'www.lonelyplanet.com/destinations/africa/togo/get.htm\'; linkresponse(); return false;">"I want to go to Togo"</a> and the page reference relating to "Togo" (if available) will load into the browser, supplying new content - simple!<br><br>Click on a '+jlink+'=\'javascript links\'; return true;" onclick="upperhelp(56); return false;">Javascript Link</a> (copiously used throughout this site) and any number of different processes as defined within a Javascript FUNCTION can occur - a new page is loaded, or '+jlink+'=\'writing to layers - 1 - text strings\'; return true;" onclick="upperhelp(84); return false;">new text loads</a> into a layer, layers appear and disappear, or move around the page. Furthermore, forms can be processed, and many of the properties of individual components of the page can be modified eg images swapped, '+jlink+'=\'font faces\'; return true;" onclick="upperhelp(60); return false;">font faces</a> changed, '+jlink+'=\'font colours\'; return true;" onclick="upperhelp(61); return false;">font</a> and '+jlink+'=\'background colours\'; return true;" onclick="upperhelp(62); return false;">background colours</a> altered.<br><BR>If you properly coordinate these functions, it is possible to develop a delay-free website that constantly adapts to user input. By saving these modifications on a central database, when the user returns, they still see the alterations they previously made.<br><br>Although the controlled selection of Javascript-enabled links offers the user a wide range of choices, to collect more sophisticated and detailed information from the user, it is best to use a combination of '+jlink+'=\'Form processing\'; return true;" onclick="mainwriter(18); return false;">FORMS, Javascript and .ASP.</a>';}

if (noteval==53) {notetable=notetable+'<ul><ul></b><br>Javascript can collect the contents of forms '+jlink+'=\'capturing user interaction\'; return true;" onclick="upperhelp(64); return false;">WITHOUT SUBMISSION</a> and then use the data to dynamically alter the visible page (local settings). Javascript can also post this data to .ASP pages, which in turn can make requests to an ACCESS database (server settings). This produces the same effect as posting the form directly to .ASP, but without ever submitting the form itself - removing many security issues, as you cannot refresh a page of posted data from a form without prior submission.<br><br>Furthermore, to reduce '+jlink+'=\'structure and design 2\'; return true;" onclick="mainwriter(17); return false;">delay problems,</a> rather than loading fresh .ASP server-based content directly into the browser window, Javascript imports only the relevant changes into a HIDDEN layer of the pre-loaded page (see '+jlink+'=\'layer writing\'; return true;" onclick="upperhelp(84); return false;">Writing Text to Layers)</a>. This small imported page generates new Javascript code depending on the SERVER responses to the original requests. These in turn modify the properties and content of the parent page.<br><br>In summary, Javascript collects data from a form and makes changes to the present page. Simultaneously, the script also imports an .ASP request/response page using a string constructed from the FORM data. This hidden .ASP page can '+jlink+'=\'external messaging\'; return true;" onclick="upperhelp(65); return false;">generate text</A> to be written onto the page or collect and update data on the database, and it can generate Javascript function calls which can further modify the parent page.';}

if (noteval==54) {notetable=notetable+'<ul><ul>The Solution:</b><br>When a request is made from the site (or parent page), Javascript makes certain local changes, and then calls a function that imports an external page of .ASP into a hidden layer of the site, using data from the site to submit a request to a server-based access database via .ASP. Depending on the server\'s responses to this request (either an update or a query), the hidden .ASP response creates different Javascripts to modify various aspects of the parent page, and then sets a flag stating what type of response was made.<br><br>All the while, the original Javascript function running in the parent page has been quietly searching for this flag. On discovery, it stops the search, calls a new batch of functions depending on the flag\'s contents (employing the new values, these are the server-based changes), resets the flag and finally imports a blank page into the hidden layer to clear up any latent variables.<blockquote><p align=justify><b>As complicated as this sounds, this proves to be an effective way of using a single interface to seamlessly exchange a volume of information between Access, Javascript and the end user while dynamically adjusting the interface in response to both the user\'s interactions captured by Javascript and the server-based data.</b>';}

if (noteval==55) {notetable=notetable+'<ul>Degradation of Form Management in Netscape versions 4.x</b><ul><br>Unlike more recent browser releases, earlier versions of Netscape remember the contents of forms during a SESSION and refill the form\'s fields automatically each time the form is displayed. As a consequence, if an authorised user does not close their browser window after visiting the <b>Web Bank</b> (and hence end the session), another user on the same workstation can use the previous user\'s login details to gain access to the site.<br><br>To prevent this security breach, whenever the site loads in earlier versions of Netscape, the login form is RESET to remove all previous values. As a consquence, these browsers take a moment longer to load the initial login page.';}

if (noteval==56) {notetable=notetable+'<ul>Javascript Links.</b><ul><br>Unlike normal '+jlink+'=\'web page interaction\'; return true;" onclick="upperhelp(52); return false;">HTML links</a> which replace the page in the browser or other appropriate target, Javascript-enhanced links can call scripted functions to execute any number of different actions as defined within the parent page, without the necessity of loading new content from the server. Javascript Links have the format:<center><br><b>&lt;A HREF=# onClick="dothisfunction(); return false;"&gt;click here&lt;/A&gt;</b></center><br>As well as appearing embedded within the text of the page, the links can also be found behind the buttons in the control panel.<br><br>As the user travels through the site, their present location defines not only the availability of certain links and buttons, but also their respective behaviours. When the user enters a particular area of the site, the now-superfluous links that lead to the area are removed from the visible page. As soon as the user moves away from this area, these links are restored to the page. Javascript Links can be further enhanced to become '+jlink+'=\'dynamic links\'; return true;" onclick="upperhelp(67); return false;">Dynamic Links.';}

if (noteval==57) {notetable=notetable+'<ul>Restricted Layouts vs Scrolling.</b><ul><br>In the beginning, man first recorded his thoughts by spraying pigment onto cave walls. As the years rolled by, he learnt how to use clay, then slates and finally papyrus scrolls to write down his shopping lists, love letters and hate mail, before eventually creating a more portable, less cumbersome process of handling information - books. Now he could leaf backwards and forwards between information at ease. And then came the computer.<br><br>While modern computer interfaces offer sophisticated methods of presenting information, much of the Internet still appears to be stuck in the "golden" age of papyrus. It is often the case that what we seek is not on the <u>visible</u> page - we are required to scroll left and right, up and down, frantically searching through reams of text for our particular item.<br><br>However, if we write page content so as to always restrict it to the browser\'s window, then we can entirely dispense with the necessity of having to scroll around the page. In the <b>Web Bank</b> this is achieved by breaking down and scaling all information into blocks small enough to fit into the visible page. With adequate links between related sections of text, and the ability to dynamically re-write the individual components of the page, all relevant information is just a click or two away.';}

if (noteval==58) {notetable=notetable+'<ul>Forms: Database Structure.</b><ul><br>All user information submitted to the <b>Web Bank</b> is stored on the server within an Access database (*.mdb file). This database is subdivided into three separate tables:<br><br>The main table contains all information relating to each individual user: name and personal details, colour settings, links, flags and recent login details.<br><br>The second table contains a list of all users that have requested an email update as a result of forgetting their user ID.<br><br>The third table contains the constantly updated list of all links submitted to the <b>Web Bank,</b> together with details of the total number of nominations they have received.';}

if (noteval==59) {notetable=notetable+'<ul>Forms: Error Messaging.</b><ul><br>Error handling is a two-tier process in the <b>Web Bank.</b><br><br>The first level of management is <b>form field verification</b> - when the user fills in a form and starts the process of sending the information to the server, the form\'s fields are initially checked for errors - all fields must be completed, some fields must not permit duplication of certain user details, and the user\'s email address must adhere to the standard conventions used by internet addresses. If any of these criteria are not met, then the appropriate error message is displayed, and the process is interrupted. These error messages can be described as being local, or client-based, errors.<br><BR>The second level of error processing involves the responses made by the server to the various user or client-based requests. When data is sent to the server for processing (particularly update, entry and registration requests), if there is no correlation between the server-based data and the request data, then the appropriate error message again appears. In such cases, server-based .ASP creates Javascript which in turn sets a particular flag within the parent page. Once the flag is detected, the error message is displayed. These are server-based errors.';}

if (noteval==60) {notetable=notetable+'<ul>Font Faces.</b><ul><br>Only font faces known to be freely distributed and installed on most workstations attached to the Internet are available for use in the <b>Web Bank.</b> They are:<ul><br><font face="arial">Arial</font><br><font face="courier">Courier</font><br><font face="garamond">Garamond</font><br><font face="impact">Impact</font><br><font face="tahoma">Tahoma</font><br><font face="times">Times</font><br>and <font face="verdana">Verdana</font></ul><br>Although some of these fonts may not be freely available on all operating systems, Arial, Courier and Times are all standard fonts. You may find that Impact is illegible - if so, then please use another font face.<br><br>The ability to change font faces is '+jlink+'=\'option fields and ns4.x\'; return true;" onclick="upperhelp(78); return false;">disabled for Netscape 4.x users.</a>';}

if (noteval==61) {notetable=notetable+'<ul>Font and Link Colours.</b><ul><br>Any registered Web Colour can be applied to text or links. As these colour features only have "read-only" properties in '+jlink+'=\'read only in NS4.x\'; return true;" onclick="upperhelp(80); return false;">many browsers</a>, all text on the page must be re-written after the changes have been made.<br><br>Changing the colour values of on-screen elements is a three-stage process. Firstly, the font string that appears at the front of every block of text is amended so that is reflects the new colour value for the font colour. Next the relevant Javascript object property is changed, either fgColor for the text colour, or linkcolor, alinkcolor and vlinkcolor for all the links. Finally, all the visible text on the page is re-written with the new colour settings.<br><br>It is necessary to change both the font string and the fgColor value as (a) Netscape versions 4.x do not respond to the fgColor property change, and (b) imported .ASP needs to be able to read the parent.document.fgColor value before it writes text to the page.<br><br>Avoid making the text colours the same as the '+jlink+'=\'background colour\'; return true;" onclick="upperhelp(62); return false;">background colour</a>, as the content then becomes unreadable.';}

if (noteval==62) {notetable=notetable+'<ul>Background Colours.</b><ul><br>The only screen property with "read-write" attributes across all browsers is the background colour, which can be altered without re-writing the screen\'s contents. All other properties have "read-only" attributes in at least '+jlink+'=\'read only in NS4.x\'; return true;" onclick="upperhelp(80); return false;">some browsers</a> and hence necessitate re-writing the on-screen elements to the page. As with the '+jlink+'=\'text colours\'; return true;" onclick="upperhelp(61); return false;">screen font colours</A>, any registered Web Colour can be applied to the bgColor property of the <b>Web Bank.</b> It is prudent to not make the text colours the same as the background colour, as all content will then promptly disappear.<br><br>The background colour property works in partnership with the '+jlink+'=\'backdrop feature\'; return true;" onclick="upperhelp(63); return false;">backdrop feature</a> - only when the background colour is set to default or "none" does the backdrop become visible. As soon as you apply a background colour, the backdrop disappears.';}

if (noteval==63) {notetable=notetable+'<ul>Backdrop Feature - 1 - Default Backdrops.</b><ul><br>The <b>Web Bank\'s</b> default backdrop is contained within its own separate layer that lies beneath the rest of the page. The visibility of this layer is dependent on whether a '+jlink+'=\'background colour\'; return true;" onclick="upperhelp(62); return false;">background colour</a> has been selected or not.<br><br>The backdrop itself is comprised of a single table with the '+jlink+'=\'relative screen dimensions\'; return true;" onclick="upperhelp(71); return false;">same dimensions of the visible screen.</a> The background image of this table is one of a selection of thin slices of coloured gradients repeated until they fill the table. Everytime the user selects a new backdrop, the table is re-written to the screen, with a different coloured slice substituted into the table\'s background.<br><br>The obvious advantage of repeating a small slice of an image within a table as opposed to using a larger image is that it can create a considerable amount of on-screen variety without the potential delays associated with downloading more sizeable images. This permits more efficient "hot-swapping" between the different background images.<center><br>You can try this out '+jlink+'=\'rotate backdrops?\'; return true;" onclick=\'(bvar>8?bvar=1:bvar=bvar);siscolour="none"; dobackdrop(); coloursettings(); return false;\'>here?</a><p align=right>'+jlink+'=\'default backdrops\'; return true;" onclick="upperhelp(101); return false;">Custom Backdrops?';}

if (noteval==64) {notetable=notetable+'<ul>Keyboard Control and Form Submission.</b><ul><br>Although the various forms in the <b>Web Bank</b> relate to separate functions, they are all submitted via the same process, initiated by clicking on "submit" or "archive", or by pressing "return". As every form has its own identity, when the submission process starts, different functions are called depending on this identity - data collection, verification processes, local updates or server updates.<br><br>A keyboard '+jlink+'=\'capture events\'; return true;" onclick="upperhelp(81); return false;">capture event</a> is used to call this submission process when the user presses "return". As <b>Web Bank</b> forms are not actually submitted, as described in '+jlink+'=\'form processing\'; return true;" onclick="mainwriter(18); return false;">Form Processing,</a> it is beneficial that most browsers do not automatically permit a carriage return to submit a form. Unfortunately, '+jlink+'=\'single field form submission\'; return true;" onclick="upperhelp(83); return false;">Netscape Versions 6 and above</a> submit single-field forms automatically on a "return" when the field has focus. As most forms in the <b>Web Bank</b> have multiple fields, this is not a problem. But the basic '+jlink+'=\'link cache management\'; return true;" onclick="mainwriter(26); return false;">Link Cache</a> form has only one field - a carriage return submits this form, which, with no definable target, causes the whole <b>Web Bank</b> site to reload back to the login page. To avoid such unpleasantness, a second, redundant field is added to the Link Cache form for these browser versions.';}

if (noteval==65) {notetable=notetable+'<ul>Special Messages and User Alerts.</b><ul><br>As well as '+jlink+'=\'capturing user interaction\'; return true;" onclick="upperhelp(53); return false;">importing .ASP-generated Javascript into hidden layers,</a> external .ASP-generated text can also be imported directly into visible layers. Employed here to import the two Links lists, this process is also used for sending users one-off update details, important news and special alerts.<br><br>Saved alongside their settings and '+jlink+'=\'link bank documentation\'; return true;" onclick="mainwriter(26); return false;">link cache</a> data in the server database, all users have a small selection of "flags". If a particular flag is showing when a user logs into the site, the site loads an extra page of .ASP, importing its contents into the main entry page for the user to read, and clearing the flag on the database. On subsequent visits to the site, as the flag is now no longer showing, the external .ASP page remains unloaded and the login process appears as standard. This continues until the database manager sets up the flag again.<br><br>Similar in principle to the methods used with .ASP !#include files, this external .ASP file can be easily modified with any text editor, and effectively mimics the behaviour of a login alert, much favoured by network administrators.';}

if (noteval==66) {notetable=notetable+'<ul><ul>Anonymous User Entry.<center><br>"They can see but they cannot touch."</center></b><br>The principle of anonymous entry is to allow the casual surfer the opportunity to investigate the various features of the site while prohibiting them from making any permanent alterations on the server, and hence updating the anonymous user\'s fixed, default settings.<br><br>The simplest way of achieving this is by identifying and independently controlling all the links and buttons which potentially allow the user to send changes to the server. By removing them from the page whenever an anonymous user logs in, their '+jlink+'=\'security access\'; return true;" onclick="mainwriter(24); return false;">access privileges</a> are denied. To compliment this, some text blocks have adaptable contents - depending on user privileges; anonymous users read one thing, registered users another.'+(usrname=="anonymous"?'':' To see the difference, you can log on as an anonymous user '+jlink+'=\'log in as an anonymous user?\'; return true;" onclick="anon_asp_entry();">here.</a>');}

if (noteval==67) {notetable=notetable+'<ul>Dynamic Links.</b><ul><br>The ability to change the properties or behaviour of individual links "on-the-fly" gives the Link Cache its true versatility. Dynamic links are a simple extension of the typical properties of a '+jlink+'=\'javascript links\'; return true;" onclick="upperhelp(56); return false;">Javascript-enabled link.</a> By clicking on a single button or link within the page, the user can alter the behaviour of the "stored" links on the page from active to frozen and back again. These "stored" links call up a Javascript function which can illicit one of two separate responses depending on the link\'s status...<br><br>When the links are active, they perform as standard links, generating new HTML in a new window.<br><br>When they are frozen, they no longer spawn new HTML. Instead they adopt a new role - as part of the selection process for editing the link cache, links stored within the cache act as markers to identify their individual bays while simultaneously populating the "edit link" field with the chosen bay\'s contents. Links outside the cache (the Top 10 etc.) can now be used to re-populate this field with a new link for editing and submission. Switch back to active status and standard link functionality is restored once more.';}

if (noteval==68) {notetable=notetable+'<ul>Timer Features.</b><ul><br>The first timer feature relates to the user\'s login process:<br><br>When a user returns to the <b>Web Bank,</b> a record is made of the present time while their previous login time is retrieved from the server. The present time is then sent to the server to replace this previous login time. The difference between the present and previous login times is calculated, and the result is converted into a text string reflecting the period of time elapsed since the last login, which is then sent to the page. The longer the user remains logged into the <b>Web Bank,</b> the larger this difference becomes, and this changing value is updated whenever the user returns to the Control Centre.<br><br>The second feature (not available for '+jlink+'=\'timeouts and on-screen clocks\'; return true;" onclick="upperhelp(87); return false;">Netscape version 4.x users</a>) is the small clock located in the top right-hand corner of the screen. This feature works by subtracting the present time from the login time, and expressing the difference as a text string. This string is then written into its own layer on the page. The contents of the layer are updated every second or so, and each time the contents are updated, a new calculation is made, giving the impression of a standard counter ticking through the seconds...';}

if (noteval==70) {notetable=notetable+'<ul>The Document Object Model - DOM.</b><ul><br>The best way of discriminating between the different browser platforms is in the way they each address the "document object".<ul><br><b>document.all</b> refers to <b>IE<br>document.layers </b>refers to <b>NS4.x </b><i>and</i><br><b>document.getElementById </b>refers to <b>NS6+.</b></ul><br>Using these differences, it is possible to identify browser-variations and build switches into the site\'s code so that the page runs smoothly, independent of browser-type.<br><br>Although individual browser platforms identify objects in the page using these different methods, by using a DOM switch it is possible to consistently evaluate these objects to the same names, independent of browser-type - using these names, the objects can then be addressed and manipulated via Javascript - they can be re-written, or have their individual object properties modified - this is Dynamic HTML in operation.<br><br><b>NB Check the following for a more detailed view of the DOM: '+jlink+'=\'other web projects - 1\'; return true;" onclick="upperhelp(94); return false;">Other Web Projects - 1</a> & '+jlink+'=\'other web projects - 2\'; return true;" onclick="upperhelp(99); return false;">2.</a></b>';}

if (noteval==71) {notetable=notetable+'<ul>Relative Screen Dimensions.</b><ul><br>As much of the site layout is dependent on the dimensions of the visible browser window, it is imperative to collect these values as soon as the site starts to load, before the onload process. To achieve this, place the script in the body of the parent page.<ul><br>NS4.x evaluates screen dimensions in a different way from other browsers:<ul><br><b><u>NS4.x:</u></b><br>available_width=innerWidth;<br>available_height=innerHeight;<br><br><b><u>All other browsers (except Konqueror):</u></b><br>available_width=document.body.clientWidth;<br>available_height=document.body.clientHeight;<br><br><b><u>Konqueror dares to be difficult:</u></b><br>available_height=top.innerHeight;';}

if (noteval==72) {notetable=notetable+'<ul>Border Formatting.</b><ul><br>A significant difference between borders in <b>NS4.x</b> and other browsers is that <b>NS4.x</b> does not tolerate coloured or decorated borders for layers or tables, unlike more recent browser versions.<ul><p align=justify>The coloured title bar that appears at the top of the <b>Web Bank</b> in most browsers is in part created by combining coloured tables and layers with coloured, decorated borders - these take up less bandwidth and can be generated quicker than an imported colour image. As the border formatting feature is deprecated in <b>NS4.x</b>, a different header is used, substituting a monochromatic horizontal line for the coloured bars.';}

if (noteval==73) {notetable=notetable+'<ul>Font Size Variation.</b><ul><p align=justify>There is a considerable lack of consistency regarding standard font sizes across the different browser platforms. In general, the standard font size for <b>NS6+</b> is comparatively larger than for the other browser-types, while the smaller font sizes in <b>NS4.x</b> are invariably not small enough in comparison with other browsers.<br><br>By using a Cascading Style Sheet to control the font definitions, different font classes can be substituted into the "font string" at the beginning of each text block depending on which browser platform the site is being viewed from. Each font class can contain a different browser-dependent font size.<br><br>For example, if the browser is NS6+, then an extra font class is inserted into the font string: <b>&lt;FONT&nbsp;CLASS="NSFONT"&gt;</b>. Within the style sheet definition, NSFONT is identical in every way to the standard font class, except that the font-size value equals 85%. As a consequence, all text viewed on this browser is 15% smaller than text viewed in other browsers of similar dimensions, which approximates the difference in NS6+\'s "interpretation" of the standard font size. ';}

if (noteval==74) {notetable=notetable+'<ul>Layout Variations.</b><ul><br>There are certain inconsistencies regarding some HTML layout features across the different browser platforms:<ul><br>The indent feature created by <b>&lt;UL&gt;</b> produces both an indent and a carriage return in <b>NS4.x</b> and <b>IE</b>, but often only a indent in <b>NS6+</b>. Therefore extra carriage returns are inserted into the appropriate locations in the text when viewed using <b>NS6+</b> to give the site an appearance consistant with the other browser platforms.<br><br>Similarly, the <b>&lt;BLOCKQUOTE&gt;</b> feature creates an indent and a carriage return in <b>NS6+</b> and <b>IE</b>, but occasionally only an indent in <b>NS4.x</b>, so extra carriage returns also have to be inserted at the appropriate points when the site is viewed using outdated Netscape releases.';}

if (noteval==75) {notetable=notetable+'<ul>Identification Variations.</b><ul><br>To address a FORM via JavaScript and DHTML, the form must be correctly identified. Both <b>IE</b> and <b>NS6+</b> use the <b>"ID"</b> property for this purpose, while <b>NS4.x</b> uses the deprecated <b>"NAME"</b> property. As all on-screen objects are written to the page by Javascript, the script inserts the appropriate identification property into each form before it is written to the page.<ul><br>For example, to write a FORM called "testform" to a layer, the output string <b>outputtext</b> can be written as:<ul><br><b>outputtext=\'&lt;FORM \'+domcheck+\' "testform"&gt \';</b></ul><br>The variable <b>"domcheck"</b> is either <b>ID</b> or <b>NAME</b>, depending on the browser platform.';}

if (noteval==76) {notetable=notetable+'<ul>Form Evaluation.</b><ul><br>As described in '+jlink+'=\'javascript links\'; return true;" onclick="upperhelp(75); return false;">Identification Variations</a>, each FORM has its own identity, and each different browser-type communicates with forms in a different way. For example, to set a FIELD called "firstfield" to 12 in a FORM called "testform" in a LAYER called "formlayer":<br><br><b>IE</b> uses: <b>testform.firstfield.value=12<br>NS4.x</b> uses: <b>document.formlayer.document.testform.firstfield.value=12</b><br>while <b>NS6+</b> uses: <b>document.getElementById("testform").firstfield.value=12</b><br><br>It is possible to re-evaluate the form name so that it is consistent across browsers:<ul><br><b>IE</b> -  it remains the same<br><b>NS4.x</b>  - testform = eval(\'document.formlayer.document.testform\')<br><b>NS6+</b> - testform = eval(\'document.getElementById("testform")\')</ul><br>So for all browsers, the code now becomes: <b>testform.firstfield.value=12</b>';}

if (noteval==77) {notetable=notetable+'<ul>Controlling Forms.</b><ul><br>As outlined in '+jlink+'=\'form evaluation\'; return true;" onclick="upperhelp(76); return false;">Form Evaluation</a>, individual fields within a form can be modified using Javascript. There are other methods of manipulating forms and form data using Javascript employed in the <b>Web Bank.</b><br><br> Essential for collecting user input, form field data can also applied to variables:<ul><br><b>var_1 = eval(\'testform.firstfield.value\');</b></ul><br>Also, individual fields can gain focus (useful for controlling the way in which a user fills in a form), and forms can be reset or submitted as well:<ul><br><b>testform.firstfield.focus();<br>testform.reset();<br>testform.submit();</ul><BR>NB</b> anyform.submit() is not used in the <b>Web Bank,</b> for reasons described '+jlink+'=\'forms - 1\'; return true;" onclick="mainwriter(18); return false;">here.</a>';}

if (noteval==78) {notetable=notetable+'<ul>Form Option Fields and NS4.x.</b><ul><br>Almost all the forms in the <b>Web Bank</b> employ simple TEXT fields for user input, except the Screen Settings form, where the wide selections of Web Colours and FONT FACES are represented using pull-down OPTION fields. Using the standard form submission process, information from these fields is effectively collated across all browser types. However, using Javascript to collect these values '+jlink+'=\'forms - 1\'; return true;" onclick="mainwriter(18); return false;">without form submission</a> causes problems for <b>NS4.x,</b> which fails to reliably capture the updated values of the OPTION fields.<br><br>So, for <b>NS4.x</b>, normal TEXT fields are used instead of OPTION fields. This requires the user to submit the appropriate value into the field - rubbish in, rubbish out, as they say. This is not actually a problem for the colour values - if the user submits an inappropriate value, Javascript cannot interpret it properly and the value defaults to black, but, if the user starts to make up names for FONT FACES, it can prove to be extremely detrimental to the layout of the <b>Web Bank.</b><blockquote>'+(document.layers?'<br>':'')+'<center><b>It is for this reason, and this reason alone, that NS4.x users do not have the ability to alter the on-screen FONT FACE.</b>';}

if (noteval==79) {notetable=notetable+'<ul>Web Colours and Netscape.</b><ul><br>Along with the 140 registered Web Colour names, it is possible to create custom names for colours which can be applied to the properties of on-screen objects.<br><br>In NS4.x, where you have an open text field rather than a pull-down option menu, if you submit an alpha string to be used as a colour code and the string is a registered Web Colour, then that colour is used. However, if this fails, the string is then interpreted as hexadecimal colour code. Standard hexadecimal colour codes range from #000000 to #FFFFFF - if the string is similar to a hex. code within this range, then that colour code will be used. For instance, the string "DALI" is equivalent to the hex. code "#DA0000", and therefore produces the same colour. The same is true for "CARROT" and "#CA0000". Alpha strings outside this standard range produce the default colour BLACK.<center><br><b>Unfortunately, NS6+ does not interpret these non-registered custom colours reliably, and hence often defaults custom colours to BLACK.</center></b>';}

if (noteval==80) {notetable=notetable+'<ul>Read-Only Object Properties and NS4.x</b><ul><br>As discussed in the section on '+jlink+'=\'form processing 2\'; return true;" onclick="mainwriter(19); return false;">Form Processing</a>, in some early browser technologies, many of the properties of on-screen elements are read-only. While the properties which define the position of these elements on the page, their visibility, stacking order, background colour and their contents (when images) can be re-written independent of browser-type, Netscape 4.x does not permit the adaptation of text or links once they have been written onto the screen. The process for altering the font colour, for example, is discussed '+jlink+'=\'font colours\'; return true;" onclick="upperhelp(61); return false;">here.</a><br><br>While this is not the case for IE and more recent versions of Mozilla / Netscape, where the properties of individual elements can be altered by directly addressing the object.property using Javascript (without any need to re-write the relevant content), the best approach in negotiating this problem is to assume the worst and, when altering the properties of text-based content in any way, always choose re-write the modified content.<center><br><b>This is not as bad as it sounds - all the material already exists in local cache, so there are no delays experienced with the re-load. </b></center>';}

if (noteval==81) {notetable=notetable+'<ul>Capture Events - 1</b><ul><br>Most browsers require the user to click on a submit button (or equivalent) after form completion, although some browsers ('+jlink+'=\'single field forms\'; return true;" onclick="upperhelp(83); return false;">notably NS6+</a> and '+jlink+'=\'opera\'; return true;" onclick="upperhelp(88); return false;">Opera</a>) now submit a single field form on a carriage return (forms with multiple fields still require a submit). By harnessing capture events, all carriage returns can be directed towards form processing, and hence can process multiple field forms. As a consequence, within the <b>Web Bank</b>, only one capture event is of any significance: ensuring that a carriage return correctly processes the relevant form, as discussed '+jlink+'=\'form submission\'; return true;" onclick="upperhelp(64); return false;">here.</a><ul><br> Capture events are defined as part of the onload process:<blockquote><b><u>NS4.x:</u><br>document.captureEvents(Event.KEYPRESS);<br>document.onKeyPress = submitter;<br><br><u>All other browsers:</u><br>document.onkeydown = submitter;</b><blockquote><b>see also: '+jlink+'=\'capture events - 2\'; return true;" onclick="upperhelp(82); return false;">Capture Events - 2</a></b></b>';}

if (noteval==82) {notetable=notetable+'<ul>Capture Events - 2</b><ul><br>In IE, capture events are identified using the <b>event.keycode</b> property, while all other browsers use the <b>e.which</b> property. <b>13</b> is the universal keyboard code for a carriage return.<blockquote><br><b>function submitter(e) {<ul>if (document.all){<ul>if (event.keyCode == 13) {formprocess();  return false;}</ul>}<br>else<br> if((document.layers) || (document.getElementById)) {<ul>if (e.which == 13 ){formprocess(); return false;}</ul>}<br>	else<br>return true;<br>}</b><blockquote><b>back to: '+jlink+'=\'capture events - 1\'; return true;" onclick="upperhelp(81); return false;">Capture Events - 1</a></b></b>';}

if (noteval==83) {notetable=notetable+'<ul>Inhibiting Single Field Form Submission and NS6+</b><ul><p align=justify>As described in the section on '+jlink+'=\'form processing 1\'; return true;" onclick="mainwriter(18); return false;">FORMS</a>, the <b>Web Bank</b> does not permit the submission of forms <i>per se</i>, but instead collects all user data and processes it behind the scenes. However, as mentioned under '+jlink+'=\'keyboard control\'; return true;" onclick="upperhelp(64); return false;">keyboard control</a>, NS6+ browsers have been developed to automatically submit a single field form whenever a carriage return is pressed, which is great for Google, but is rather undesirable here, as <b>Web Bank</b> forms have no targets and subsequently cause the entire site to reload, thereby sending the user back to the initial login screen.<br><br> The simple way to avoid this is to create an extra, redundant field for all the forms where only a single field is actually required - using hidden fields will not work, and there is no easy method of creating an "almost" invisible field. But, as the result is cumbersome and unsightly, this extra field has been coded to only appear in the browsers that require it.<ul><br><b>see also:</b> '+jlink+'=\'opera issues\'; return true;" onclick="upperhelp(88); return false;">problems with Opera</b>';}

if (noteval==84) {notetable=notetable+'<ul>Writing Content to Layers - 1 - Internal Text Strings</b><ul><br>There are two methods of writing content into a layer, depending on whether the source is internal or external. <b>Internal</b> means that the text is stored in the browser\'s cache as the main page appears, while <B>external</B> means that the content exists in a separate file on the server, which is only imported on request. <b>Internal</b> text exists as strings - depending on the request, Javascript builds different strings and writes them to the page.<br><br>As ever, <b>NS4.x</b> behaves differently from other browsers. When writing a string <b>textstring</b> to a layer <b>destination:<ul></b><br>destination.open();<br>destination.write(textstring);<br>destination.close();</ul><br>While all other browsers import the string into the INNERHTML of the layer:<ul>eval(\'parent.destination.innerHTML = textstring\');<ul><br><b>see also:</b> '+jlink+'=\'writing to layers - 2 - importing external files\'; return true;" onclick="upperhelp(85); return false;">Importing External Files</a></b>';}

if (noteval==85) {notetable=notetable+'<ul>Writing Content to Layers - 2 - Importing External Files - Step One</b><ul><br>When importing an <b>external</b> source into a layer, <b>NS4.x</b> uses the efficient but, unfortunately, now deprecated <b>LOAD</b> function, writing the external file, whether HTML or ASP, directly into a designated layer (with a defined width) on the page in a <u>single step</u>:<ul><br>destination.load(testpage.asp, (available_width/2));</ul><br>Both <b>IE</b> and newer versions of Netscape import text in <u>two steps</u> via hidden <b>IFRAMES</b>. IE uses the <b>.location</b> operator, while <b>NS6+</b> overwrites the <B>.src</b> component of the hidden layer.<ul><br><b><u>IE:</u></b><br>eval(\'parent.ieContent.document.frames["ieframe"].document.location = testpage.asp\');<bR><br><b><u>NS6+:<br></u></b>eval("document.getElementById(\'ieframe\').src = testpage.asp"); <ul><br><b>back to:</b> '+jlink+'=\'writing to layers - 1 - text strings\'; return true;" onclick="upperhelp(84); return false;">Internal Text Strings</a>&nbsp;&nbsp;&nbsp;&nbsp;<b>go to:</b> '+jlink+'=\'writing to layers - 3 - importing files - step two\'; return true;" onclick="upperhelp(86); return false;">Importing Files - step two</a></b>';}

if (noteval==86) {notetable=notetable+'<ul>Writing Content to Layers - 3 - Importing External Files - Step Two</b><ul><br>Once the text has been loaded from the external source file, the contents of the final destination layer are then made equal to the contents of the body of the hidden IFRAME. To ensure that this final stage only occurs <u>after</u> the text has been loaded into the hidden layer, the function call for this stage is made from the onload statement in the external .ASP file:<ul><br><b><u>IE:</u></b><br>eval(\'parent.destinationHTML.innerHTML = parent.ieContent.document.frames["ieframe"].document.body.innerHTML\');<br><br><b><u>NS6+:<br></u></b>eval("destinationHTML.innerHTML = window.frames.ieframe.document.getElementById(\'body\').innerHTML");</ul><br>Confusing, n\'est pas? <ul><ul><br>back to: '+jlink+'=\'writing to layers - 2 - importing files - step one\'; return true;" onclick="upperhelp(85); return false;">Importing Files - step one</a>   </b>';}

if (noteval==87) {notetable=notetable+'<ul>Timeouts and On-Screen Clocks.</b><ul><br>A series of timeout functions are employed in the <b>Web Bank</b>: as data passes between the browser and the server, a timeout is employed to wait for a server-based flag before new data is updated on the screen; the scrolling of the combined Web Cache also employs a timeout function, as does the clock feature.<br><BR>While the scrolling and flag-recognition processes only use timeouts on a temporary basis, the on-screen clock constantly requires the use of timeouts. Although this is not an issue for most browsers, in the case of <b>NS4.x</b>, the need to regularly update even a small section of the screen causes certain functionality problems, which are best overcome by entirely avoiding the use of the clock in these situations.</b>';}

if (noteval==88) {notetable=notetable+'<ul>Opera.</b><ul><br>What a song and dance! Two main issues come to light in the use of the Opera browser with the <b>Web Bank</b> inside Windows.<ul><br>Firstly, in a fashion similar to '+jlink+'=\'form submission and NS6+\'; return true;" onclick="upperhelp(83); return false;">NS6+</a>, Opera has automatic form submission built in to it\'s carriage return. As a consequence, most of the forms in the <b>Web Bank</b> - whether single or multiple field - will submit when return is pressed, causing even more problems than NS6+. As the scripted response to a carriage return is still active in the <b>Web Bank,</b> the forms are still processed, so <b>if the user loses focus from the form</b> (by clicking on another part of the page) before pressing return, or <b>presses "CTRL + ENTER"</b> then the site works properly, without reloading back to the login page. An alternative and simpler solution is to use the "submit" links that accompany all the forms.<br><br>Secondly, Opera has a positively medieval attitude towards Popups, recognising any new window created by the <b>window.open</b> method as a popup. With this feature, <b>the external links in the '+jlink+'=\'link bank documentation\'; return true;" onclick="mainwriter(26); return false;">link cache</a> will not work</b> until the user disables the popup control under Tools/Preferences/Windows/Popups...</b>';}

if (noteval==90) {notetable=notetable+'<ul>Unresolved Issues.<ul></b><br></b>The following programming issues have been outlined elsewhere in the documentation:<ul><br>'+jlink+'=\'clock issues\'; return true;" onclick="upperhelp(87); return false;">Clocks in NS4.x</a><br>'+jlink+'=\'form submission and opera\'; return true;" onclick="upperhelp(88); return false;">Carriage returns and form submission in Opera and Mozilla.</a></ul><br>Obvious problems, seemingly without obvious solutions, still to be addressed:<ul><br><li>Certain browsers - especially Opera - experience problems with pulldown option menus inside forms. This is occasionally observed in the <b>Web Bank</b>, usually for the font face option.<li>Opera has potential security issues, as the user\'s login details are occasionally visible in the address bar as they are passed in the background between the user and the server.<li>As all text is embedded in Javascript, site contents are transparent to robots/webcrawlers, inhibiting search engine coverage.<li>Browser / OS conflicts: IE and Opera on '+jlink+'=\'mac issues\'; return true;" onclick="upperhelp(98); return false;">Mac OS9</a> and Konqueror on '+jlink+'=\'linux issues\'; return true;" onclick="upperhelp(97); return false;">Linux.</a>';}

if (noteval==91) {notetable=notetable+'<ul>The Future - may mmv.<ul><br></b>Depending on the success of the <b>Web Bank,</b> the most probable extension of the site would be to increase the capacity of the '+jlink+'=\'link bank documentation\'; return true;" onclick="mainwriter(26); return false;"><b>Link Cache</b></A>. A possible drawback would be the extended server space this utilises, so the option of expanded use of the facilities may be associated with a minimal fee - an executive service, so to speak.<br><br></b>';}

if (noteval==92) {notetable=notetable+'<ul>Download Page.<ul></b><br></b>This entire site is available for download as a single .zip file (approx. 230Kb). Contained alongside the reference text, images and main HTML pages are the necessary .ASP and .JS scripts as well as an empty access database. The original code is under copyright, but if you include on your page a reference link back to the original source:<center><br><i><b>http://sonik-systems.com/webbank/</i></b></center><br> then you have the creator\'s permission for use.<br><Br>To be able to use the <b>Web Bank</b> on a local machine, you need to run a web server with .ASP functionality. For PC\'s, we recommend either of Microsoft\'s <b>PWS</b> or <b>IIS with World Wide Web Service</b>. Linux offers a variety of .ASP servers (check references to ChilliSoft and Apache) but, as discussed in the Macintosh section, finding an OS9-based web-server to run .ASP is no easy task.<blockquote><br><a href=webbank.zip target=blank onmouseout="window.status=\' \'; return true;" onmouseover="window.status=\'download the zip file\'; return true;"><img src='+image21.src+' border=0 alt="download&nbsp;here" align=center> download the zip file</a></p></b></blockquote>';}

if (noteval==93) {notetable=notetable+'<ul>Author\'s Note - 1.<ul></b><br>The majority of the technologies developed and employed by the <b>Web Bank</b> have a wide range of potential uses. The overall design and structure can be applied to any form of online content, including multimedia. In general, the design supports any material where, although individual users provide only a limited amount of information, the combined output produces a huge wealth of knowledge for all.<BR><BR>The <b>Web Bank</b> also provides a unique and innovative approach to flexible database management and data presentation - using Javascript to control the combination of DHTML and hidden pages of imported .ASP, the end-user is presented with an interface that is significantly more seamless than those found anywhere else on the net...<br><br>Regarding the redundancy of the "back" button, I can only apologise, and say that there are both swings and roundabouts in this world - what is gained by preloading the page and having Javascript subsequently coordinate site navigation is balanced somewhat by the non-functionality of the "back" button. To address this, the site is embedded with more cross-referenced links than you can shake a stick at.<p align=right>'+jlink+'=\'authors note 2\'; return true;" onclick="upperhelp(102); return false;">Author\'s Note - 2</a>';}

if (noteval==94) {notetable=notetable+'<ul>Other Web Projects - 1.<ul></b><br><b>Guess the Magic Word?</b> a silent form script, using Javascript, .ASP, SQL and DHTML to provide the ultimate in biligerant password control. <b>NB <u>not supported in</u> Mozilla <1 based browsers, temperamental in Opera.</b><ul><li>'+jlink+'=\'Silent Form - the magic word\'; return true;" onclick="temp_url=\'../silent/\'; linkresponse(); return false;">http://sonik-system.com/silent/</b></a></ul><br><b>Magic Squares</b> - an early, incomplete DHTML project, demonstrating the countless joys of DHTML text and image handling, with another thought-provoking front-end (and the odd bug). <b>NB <u>not supported in</u> Opera/Linux based browsers.</b><ul><li>'+jlink+'=\'magic squares demo\'; return true;" onclick="temp_url=\'../magicsquares/\'; linkresponse(); return false;">http://sonik-system.com/magicsquares/</b></a></ul><br><b>Not a Website - the "Anima-gram" - a DHTML interactive screen-saver demo - a poor performer in Linux/Opera due to poor event capture handling.</b><ul><li>'+jlink+'=\'notawebsite - the anima-gram\'; return true;" onclick="temp_url=\'../notawebsite/\'; linkresponse(); return false;">http://sonik-system.com/notawebsite/</b></a></ul><BR><B>Word Association - testing - details to be announced.<br>Portfolio - testing - details to be announced.<p align=right>'+jlink+'=\'other web projects\'; return true;" onclick="upperhelp(99); return false;">Other Web Projects - 2.</a>';}

if (noteval==95) {notetable=notetable+'<ul><ul><ul><br><table cellspacing=0 cellpadding=3 border=1  width='+available_width*0.4+' background='+image17.src+'><tr><td>'+fontvalue+'<center><font color=antiquewhite><b><br><u>contacting the author</u><!ul><br><br>all correspondence, suggestions, criticisms or witticisms<br>welcome and gratefully accepted via email at:<br><a href=mailto:webbank@sonik-systems.com?subject=webbank&nbsp;enquiry><font color=chartreuse>webbank@sonik-systems.com</font></a><br><br>'+(document.layers?'':'or send a message to the author '+jlink+'=\'a direct message to the creator\';return true;" onclick="sendmail();return false;">here.</a><br><br>')+'alternatively, you can leave a voice or text message at:<br><b><font color=chartreuse>+44 (0) 7763 217437</font></b><br><br>thank you for your attention<br><br>"exisi monumentum aere perennius" <br><br><br><font class=least><font color=cyan>digsby wyscher - ©mmv</font></font></center></td></tr></table></b>';}

if (noteval==96) {notetable=notetable+'<ul>Acknowledgements.<ul></b><br>The author is as ever deeply indebted to geedee and all at '+jlink+'=\'link to netregistry\'; return true;" onclick="temp_url=\'www.netregistry.com\'; linkresponse(); return false;">Netregistry</a> for their enduring patience and server space. He would also like to thank his brother Tim for the kind use of a G3 for testing purposes.';}

if (noteval==97) {notetable=notetable+'<ul>Linux.<ul></b><br>The <b>Web Bank</b> has been tested using KDE version 3.2 running on Slackware version 10.0.<br>Unfortunately, the built-in browser for this version of KDE - Konqueror - performs very poorly. It appears to be unable to support the ASP import function properly and, at present, there are no plans to address this problem. Other browsers such as Mozilla, Firefox and Opera work well with this distribution, although we are still waiting to test how the <b>Web Bank</b> works on other Linux distributions. IE is of course untested.<br><BR>In general, the appearance of the <b>Web Bank</b> is deprecated in all browsers within Linux. This is primarily due to the different fonts Linux uses in comparison to Windows-based browsers. If you download and install the appropriate font packages for Linux from '+jlink+'=\'link to mscorefonts\'; return true;" onclick="temp_url=\'thelinuxbox.org/files/msttcorefonts.tar.gz\'; linkresponse(); return false;">here</a>, the site will look a lot better.';}

if (noteval==98) {notetable=notetable+'<ul>Macintosh.<ul></b><br><b>OS 9.</b><ul>The <b>Web Bank</b> functions well within Mozilla ver 1.02 and upwards, but performs <u>very</u> poorly in most other browsers on OS9:- The now deprecated version of IE produces unfathomable scripting errors, based around memory overflow problems (the <b>Web Bank</b> is a bit of a monster), Opera ver 6.03 doesn\'t work at all, and Netscape ver 4.7 (on a G3) <b>CRASHES THE ENTIRE MACHINE!!!</b> - we are very sorry about this, but YOU HAVE BEEN WARNED (pehaps somewhat belatedly).<br><br></ul>At present, the <b>Web Bank</b> remains untested on OSX.';}

if (noteval==99) {notetable=notetable+'<ul>Other Web Projects - 2.<ul></b><br>A graphic <b>Prime Number Generator</b> using Javascript and DHTML, with extensive documentation regarding DOM, buttons and controlling DHTML. <b>NB <u>not</u> Mozilla 1+ based browsers.</b><ul><li>'+jlink+'=\'Prime Number Generator\'; return true;" onclick="temp_url=\'sonik-systems.com/primes\'; linkresponse(); return false;">http://sonik-system.com/primes/</b></a></ul><br><b>The Flash Flying Saucer:</b> Controlling 3D animation in 2D web space. Using Flash, Javascript and DHTML, the user can control an animated flying saucer in a 3 dimensional space. With full documentation regarding design and DOM, the site can be downloaded as a single .ZIP file. <b>NB <u>not</u> Opera/Mozilla/Firefox/K-Meleon on certain OS.</b><ul><li>'+jlink+'=\'The Flash Flying Saucer\'; return true;" onclick="temp_url=\'sonik-systems.com/saucer\'; linkresponse(); return false;">http://sonik-system.com/saucer/</a></ul><br><b>Drag and Drop demo:</b> Pretty much what it says on the tin - coming to a shopping site near you soon!<b> All browsers bar Opera and Konqueror on Linux.</b><ul><li>'+jlink+'=\'Drag and Drop demo\'; return true;" onclick="temp_url=\'../draganddrop\'; linkresponse(); return false;">http://sonik-system.com/draganddrop/</a></ul><br><b>DHTMLClock demo:</b> Combining drag and drop techniques with DHTML and timeouts, this is a clock that you can change the face of.<b> All browsers bar Opera and Konqueror on Linux.</b><ul><li>'+jlink+'=\'dhtmlclock\'; return true;" onclick="temp_url=\'../DHTMLClock\'; linkresponse(); return false;">http://sonik-system.com/dhtmlclock/</b></a></ul></b>';}

if (noteval==100) {
	notetable=notetable+'<ul>Backdrop Customization.<ul><br>';
		if (imagebank) {
			notetable=notetable+'You can use the pre-existing image URL, re-enter an image URL into the field below or select an image from the Image Cache.';}
		else {
			notetable=notetable+'Select an image URL from the Image Cache opposite and it will appear in the form below.';}

		notetable=notetable+'<ul><u>Then,</u> pick a background type (single image for a full screen desktop, tiled etc for fills), and continue to answer the prompts as they appear. You can click on "submit?" or "test" at any time to see your new backdrop, but it will only be permanently updated once you have sent the changes to the server.';
}

if (noteval==101) {notetable=notetable+'<ul>Backdrop Feature - 2 - Custom Backdrops.</b><ul><br>As well as providing a selection of default backdrops, the <b>Web Bank</b> also gives its users an opportunity to create and permanently save their own backdrops for the Web Bank. Not only can they submit tiled or "fill" images, but they can use larger images, controlling their size and position on the screen, and whether they have a border or not. It should be noted that the larger the image (in bytes), the more the overall performance of the <b>Web Bank</b> may be affected, so try and keep the size down if your find the site behaving sluggishly.<br><br>Whenever a new image is submitted for personal use as a backdrop, the image\'s URL (internet location) is added to the image cache so that other users have the opportunity to use the same file.<p align=right>'+jlink+'=\'default backdrops\'; return true;" onclick="upperhelp(63); return false;">Default Backdrops?';}

if (noteval==102) {notetable=notetable+'<ul>Author\'s Note - 2.<ul></b><br>Although the <B>Web Bank</b> is maintained as a significant part of Digsby Wyscher\'s Portfolio, is also meant to be an important demonstration of one potential future of the Web, where the majority of the Internet\'s online material is held within databases - not just images and text, but their locations on the page, as well as their format and appearance - while only a small amount of HTML and Javascript is necessary to load this material onto the page, producing a genuine "roaming" Internet desktop.<p align=right>'+jlink+'=\'authors note 1\'; return true;" onclick="upperhelp(93); return false;">Author\'s Note - 1</a><br>'+jlink+'=\'other web projects\'; return true;" onclick="upperhelp(94); return false;">Other Web Projects.</a>';}

if (noteval==103) {notetable=notetable+'<ul>Outside Domain PHP/Javascript Solution.<ul></b><br>Apart from in NS4.x, which cannot handle importing external PHP files, this scripting solution employs similar methods as outlined in '+jlink+'=\'form processing\'; return true;" onclick="mainwriter(18); return false;">Form Processing</a> and '+jlink+'=\'layer writing\'; return true;" onclick="upperhelp(85); return false;">Writing Text to Layers</a>, with a few extra twists to allow communication between Javascript, PHP and .ASP. Using the mail referrer as an example, Javascript collects and verifies the contents of the form and sends this information to a PHP script on a separate server, importing the PHP into a hidden layer of the <b>Web Bank</b>. In response, this hidden PHP processes the info., sends the appropriate emails and then generates further Javascript to send back to the main body of the <b>Web Bank</b>. But, as Javascript variables cannot be passed directly between domains, this info. is instead converted into a string which, via an onload event in the PHP page, is sent to a new hidden page of ASP, lying back inside the <B>Web Bank\'s</b> domain. As this page loads, it safely writes and updates the relevant Javascript of the main page.<br><br>So, to recap:<ul><table cols=7 border=1 cellpadding=3 cellspacing=0 width='+available_width*0.3+'><tr><td colspan=2><center>'+fontvalue+'<i>inside domain</td><td colspan=2><center>'+fontvalue+'<i>outside domain</td><td colspan=3><center>'+fontvalue+'<i>inside domain</td></tr><tr><td>'+fontvalue+'HTML:-></td><td>'+fontvalue+'Javascript:-></td><td>'+fontvalue+'PHP:-></td><td>'+fontvalue+'Javascript:-></td><td>'+fontvalue+'ASP:-></td><td>'+fontvalue+'Javascript:-></td><td>'+fontvalue+'HTML!</td></tr></table>';
}

if (noteval==104) {notetable=notetable+'<ul>Country Specific Scripting.<ul></b><br>By using PHP to resolve IP addresses to the user\'s country (employing an IP to GEO script, as provided by '+jlink+'=\'maxmind.com\'; return true;" onclick="temp_url=\'www.maxmind.com/\'; linkresponse(); return false;">Maxmind</a>) it is possbile to customize elements of the <b>Web Bank</b> to specific countries. For example, within the "Your Space" feature, there are several default forms, designed to search sites such as Google and Ebay. Once a user has logged onto the <b>Web Bank</b>, a PHP script captures their IP address and correlates it to a geographical location. Depending on this location, these default search forms are adapted so that they search the nearest site to the user eg USA users search .COM sites while UK users search .CO.UK sites.';
}



	maintext=notetable+'</b><hr size=2 width='+available_width*0.3+'></td></tr></table>';
	destination=popupHTML;
	magiccontents();
	popupLyr.visibility="visible";
}

// mac issues - testing .ASP on a local server nigh on impossible / IE no longer properly supported / many browsers have alternate scripting / no flash support
// other projects - silent / portfolio / notawebsite / wordpairs / boxes / 
// hidden asp in dhtml - new method of database handling
// cross referencing - further dom stuff in saucer / button setup in primes
// Again, for any form - <b>theform</b>, for any field - <b>thefield</b>, in any layer - <b>thelayer</b>, the field is focussed thus:<br><br>'+(document.layers?'<font class=least>':'<font class=lesser>')+'<b>if (document.layers) {eval("document."+thelayer+".document."+theform+"."+thefield+".focus()");}<br>else <br>if (document.all) {eval(theform+"."+thefield+".focus()");}<br>else<br>if (document.getElementById) {eval("document.getElementById(\' "+theform+" \')."+thefield+".focus()");}</b></font><br><br>This process can equally submit, reset and get values from a form.
