<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head><title>Stylesheet switcher</title>

<style type="text/css">
<!--
body { background-color: #ffffff; color: #000000; }
pre { font-family: "Courier New",Courier,monospace; font-size: 12px; color: #000000; }
span.comment { color: #008080; font-weight: normal; }
span.oper { color: #0000f0; font-weight: normal; }
span.var { color: #d56000; font-weight: normal; }
span.func { color: #aa00ff; font-weight: normal; }
span.string { color: #777777; font-weight: normal; }
span.num { color: #990000; font-weight: bold; }
span.reg { color: #8d7f07; font-weight: normal; }
-->
</style></head><body>
<pre><span class="comment">/***********************************************************************************************
                             Script to swap between stylesheets
  Written by Mark Wilton-Jones, 05/12/2002. v2.2.1 updated 14/03/2006 for dynamic stylesheets
************************************************************************************************

Please see http://www.howtocreate.co.uk/jslibs/ for details and a demo of this script
Please see http://www.howtocreate.co.uk/jslibs/termsOfUse.html for terms of use

To set up the page in the first place:

	Inbetween the &lt;head&gt; tags, put:

		&lt;script src="PATH TO SCRIPT/swapstyle.js" type="text/javascript" language="javascript1.2"&gt;&lt;/script&gt;

	Also between the head tags, put your stylesheets, best done as external links, but you can use
	&lt;style ...&gt; tags as well.

		Stylesheets cannot be switched if they have no title attribute and will be used at all times:

			&lt;link rel="stylesheet" type="text/css" href="all.css"&gt;

		Stylesheets will be on by default if they have a title attribute and their rel attribute is set to 'stylesheet'.
		Most browsers will only allow one of these to be defined (or several sharing the same title):

			&lt;link rel="stylesheet" type="text/css" href="default.css" title="Default"&gt;

		Stylesheets will be off by default if they have a title attribute and their rel attribute is set to 'alternate stylesheet':

			&lt;link rel="alternate stylesheet" type="text/css" href="contrast.css" title="High Contrast"&gt;
			&lt;link rel="alternate stylesheet" type="text/css" href="bigFont.css" title="Big Font"&gt;

To swap between stylesheets:

	changeStyle();                           //switches off all stylesheets that have title attributes
	changeStyle('Default');                  //switches off all stylesheets that have title attributes that do not match 'Default'
	changeStyle('High Contrast');            //switches off all stylesheets that have title attributes that do not match 'High Contrast'
	changeStyle('Big Font');                 //switches off all stylesheets that have title attributes that do not match 'Big Font'
	changeStyle('High Contrast','Big Font'); //switches off all stylesheets that have title attributes that do not match 'High Contrast' or 'Big Font'

	Opera 7+ and Mozilla also allow users to switch between stylesheets using the view menu (only one at a time though ...)

To make the script remember the user's choice of stylesheets, for example to use on more than one page or if they reload
- includes stylesheets chosen using the view menu in Gecko - it will only attempt to store a cookie if they actually
changed something:

	In these examples, I call the cookie used to store the choice 'styleTestStore'. You could use any name you like.

	To remember only until the browser window is closed:

		&lt;body onload="useStyleAgain('styleTestStore');" onunload="rememberStyle('styleTestStore');"&gt;

	To remember for 10 days (for example):

		&lt;body onload="useStyleAgain('styleTestStore');" onunload="rememberStyle('styleTestStore',10);"&gt;

If you are going to provide users with a mechanism to change stylesheets, you may want to check
if the browser will allow you to change stylsheets first. Use:

	if( document.styleSheets || ( window.opera &amp;&amp; document.childNodes ) || ( window.ScriptEngine &amp;&amp; ScriptEngine().indexOf('InScript') + 1 &amp;&amp; document.createElement ) ) {
		document.write('Something that allows them to choose stylesheets');
	}

It's not perfect, because it will also appear in ICEbrowser, which makes a mess when it tries to
change to an alternate stylesheet. If you want, you can use
	if( ( document.styleSheets || ( window.opera &amp;&amp; document.childNodes ) || ( window.ScriptEngine &amp;&amp; ScriptEngine().indexOf('InScript') + 1 &amp;&amp; document.createElement ) ) &amp;&amp; !navigator.__ice_version ) {
but you should then update that if ICE is updated to make it work properly.
________________________________________________________________________________________________*/</span>

<span class="oper">function</span> <span class="func">getAllSheets</span>() {
	<span class="oper">if</span>( <span class="oper">!</span><span class="var">window</span>.<span class="var">ScriptEngine</span> <span class="oper">&amp;</span><span class="oper">&amp;</span> <span class="var">navigator</span>.<span class="var">__ice_version</span> ) { <span class="oper">return</span> <span class="var">document</span>.<span class="var">styleSheets</span>; }
	<span class="oper">if</span>( <span class="var">document</span>.<span class="var">getElementsByTagName</span> ) { <span class="oper">var</span> <span class="var">Lt</span> <span class="oper">=</span> <span class="var">document</span>.<span class="func">getElementsByTagName</span>('<span class="string">link</span>'), <span class="var">St</span> <span class="oper">=</span> <span class="var">document</span>.<span class="func">getElementsByTagName</span>('<span class="string">style</span>');
	} <span class="oper">else</span> <span class="oper">if</span>( <span class="var">document</span>.<span class="var">styleSheets</span> <span class="oper">&amp;</span><span class="oper">&amp;</span> <span class="var">document</span>.<span class="var">all</span> ) { <span class="oper">var</span> <span class="var">Lt</span> <span class="oper">=</span> <span class="var">document</span>.<span class="var">all</span>.<span class="func">tags</span>('<span class="string">LINK</span>'), <span class="var">St</span> <span class="oper">=</span> <span class="var">document</span>.<span class="var">all</span>.<span class="func">tags</span>('<span class="string">STYLE</span>');
	} <span class="oper">else</span> { <span class="oper">return</span> []; } <span class="oper">for</span>( <span class="oper">var</span> <span class="var">x</span> <span class="oper">=</span> <span class="num">0</span>, <span class="var">os</span> <span class="oper">=</span> []; <span class="var">Lt</span>[<span class="var">x</span>]; <span class="var">x</span><span class="oper">+</span><span class="oper">+</span> ) {
		<span class="oper">var</span> <span class="var">rel</span> <span class="oper">=</span> <span class="var">Lt</span>[<span class="var">x</span>].<span class="var">rel</span> <span class="oper">?</span> <span class="var">Lt</span>[<span class="var">x</span>].<span class="var">rel</span> <span class="oper">:</span> <span class="var">Lt</span>[<span class="var">x</span>].<span class="var">getAttribute</span> <span class="oper">?</span> <span class="var">Lt</span>[<span class="var">x</span>].<span class="func">getAttribute</span>('<span class="string">rel</span>') <span class="oper">:</span> '<span class="string"></span>';
		<span class="oper">if</span>( <span class="oper">typeof</span>( <span class="var">rel</span> ) <span class="oper">=</span><span class="oper">=</span> '<span class="string">string</span>' <span class="oper">&amp;</span><span class="oper">&amp;</span> <span class="var">rel</span>.<span class="func">toLowerCase</span>().<span class="func">indexOf</span>('<span class="string">style</span>') <span class="oper">+</span> <span class="num">1</span> ) { <span class="var">os</span>[<span class="var">os</span>.<span class="var">length</span>] <span class="oper">=</span> <span class="var">Lt</span>[<span class="var">x</span>]; }
	} <span class="oper">for</span>( <span class="oper">var</span> <span class="var">x</span> <span class="oper">=</span> <span class="num">0</span>; <span class="var">St</span>[<span class="var">x</span>]; <span class="var">x</span><span class="oper">+</span><span class="oper">+</span> ) { <span class="var">os</span>[<span class="var">os</span>.<span class="var">length</span>] <span class="oper">=</span> <span class="var">St</span>[<span class="var">x</span>]; } <span class="oper">return</span> <span class="var">os</span>;
}
<span class="oper">function</span> <span class="func">changeStyle</span>() {
	<span class="var">window</span>.<span class="var">userHasChosen</span> <span class="oper">=</span> <span class="var">window</span>.<span class="var">MWJss</span>;
	<span class="oper">for</span>( <span class="oper">var</span> <span class="var">x</span> <span class="oper">=</span> <span class="num">0</span>, <span class="var">ss</span> <span class="oper">=</span> <span class="func">getAllSheets</span>(); <span class="var">ss</span>[<span class="var">x</span>]; <span class="var">x</span><span class="oper">+</span><span class="oper">+</span> ) {
		<span class="oper">if</span>( <span class="var">ss</span>[<span class="var">x</span>].<span class="var">title</span> ) { <span class="var">ss</span>[<span class="var">x</span>].<span class="var">disabled</span> <span class="oper">=</span> <span class="num">true</span>; }
		<span class="oper">for</span>( <span class="oper">var</span> <span class="var">y</span> <span class="oper">=</span> <span class="num">0</span>; <span class="var">y</span> <span class="oper">&lt;</span> <span class="var">arguments</span>.<span class="var">length</span>; <span class="var">y</span><span class="oper">+</span><span class="oper">+</span> ) { <span class="oper">if</span>( <span class="var">ss</span>[<span class="var">x</span>].<span class="var">title</span> <span class="oper">=</span><span class="oper">=</span> <span class="var">arguments</span>[<span class="var">y</span>] ) { <span class="var">ss</span>[<span class="var">x</span>].<span class="var">disabled</span> <span class="oper">=</span> <span class="num">false</span>; } }
} }
<span class="oper">function</span> <span class="func">rememberStyle</span>( <span class="var">cookieName</span>, <span class="var">cookieLife</span> ) {
	<span class="oper">for</span>( <span class="oper">var</span> <span class="var">viewUsed</span> <span class="oper">=</span> <span class="num">false</span>, <span class="var">ss</span> <span class="oper">=</span> <span class="func">getAllSheets</span>(), <span class="var">x</span> <span class="oper">=</span> <span class="num">0</span>; <span class="var">window</span>.<span class="var">MWJss</span> <span class="oper">&amp;</span><span class="oper">&amp;</span> <span class="var">MWJss</span>[<span class="var">x</span>] <span class="oper">&amp;</span><span class="oper">&amp;</span> <span class="var">ss</span>[<span class="var">x</span>]; <span class="var">x</span><span class="oper">+</span><span class="oper">+</span> ) { <span class="oper">if</span>( <span class="var">ss</span>[<span class="var">x</span>].<span class="var">disabled</span> <span class="oper">!=</span> <span class="var">MWJss</span>[<span class="var">x</span>] ) { <span class="var">viewUsed</span> <span class="oper">=</span> <span class="num">true</span>; <span class="oper">break</span>; } }
	<span class="oper">if</span>( <span class="oper">!</span><span class="var">window</span>.<span class="var">userHasChosen</span> <span class="oper">&amp;</span><span class="oper">&amp;</span> <span class="oper">!</span><span class="var">viewUsed</span> ) { <span class="oper">return</span>; }
	<span class="oper">for</span>( <span class="oper">var</span> <span class="var">x</span> <span class="oper">=</span> <span class="num">0</span>, <span class="var">outLine</span> <span class="oper">=</span> '<span class="string"></span>', <span class="var">doneYet</span> <span class="oper">=</span> []; <span class="var">ss</span>[<span class="var">x</span>]; <span class="var">x</span><span class="oper">+</span><span class="oper">+</span> ) {
		<span class="oper">if</span>( <span class="var">ss</span>[<span class="var">x</span>].<span class="var">title</span> <span class="oper">&amp;</span><span class="oper">&amp;</span> <span class="var">ss</span>[<span class="var">x</span>].<span class="var">disabled</span> <span class="oper">=</span><span class="oper">=</span> <span class="num">false</span> <span class="oper">&amp;</span><span class="oper">&amp;</span> <span class="oper">!</span><span class="var">doneYet</span>[<span class="var">ss</span>[<span class="var">x</span>].<span class="var">title</span>] ) { <span class="var">doneYet</span>[<span class="var">ss</span>[<span class="var">x</span>].<span class="var">title</span>] <span class="oper">=</span> <span class="num">true</span>; <span class="var">outLine</span> <span class="oper">+</span><span class="oper">=</span> ( <span class="var">outLine</span> <span class="oper">?</span> '<span class="string"> MWJ </span>' <span class="oper">:</span> '<span class="string"></span>' ) <span class="oper">+</span> <span class="func">escape</span>( <span class="var">ss</span>[<span class="var">x</span>].<span class="var">title</span> ); } }
	<span class="oper">if</span>( <span class="var">ss</span>.<span class="var">length</span> ) { <span class="var">document</span>.<span class="var">cookie</span> <span class="oper">=</span> <span class="func">escape</span>( <span class="var">cookieName</span> ) <span class="oper">+</span> '<span class="string">=</span>' <span class="oper">+</span> <span class="func">escape</span>( <span class="var">outLine</span> ) <span class="oper">+</span> ( <span class="var">cookieLife</span> <span class="oper">?</span> '<span class="string">;expires=</span>' <span class="oper">+</span> <span class="oper">new</span> <span class="func">Date</span>( ( <span class="oper">new</span> <span class="func">Date</span>() ).<span class="func">getTime</span>() <span class="oper">+</span> ( <span class="var">cookieLife</span> <span class="oper">*</span> <span class="num">86400000</span> ) ).<span class="func">toGMTString</span>() <span class="oper">:</span> '<span class="string"></span>' ) <span class="oper">+</span> '<span class="string">;path=/</span>'; }
}
<span class="oper">function</span> <span class="func">useStyleAgain</span>( <span class="var">cookieName</span> ) {
	<span class="oper">for</span>( <span class="oper">var</span> <span class="var">x</span> <span class="oper">=</span> <span class="num">0</span>; <span class="var">x</span> <span class="oper">&lt;</span> <span class="var">document</span>.<span class="var">cookie</span>.<span class="func">split</span>( "<span class="string">; </span>" ).<span class="var">length</span>; <span class="var">x</span><span class="oper">+</span><span class="oper">+</span> ) {
		<span class="oper">var</span> <span class="var">oneCookie</span> <span class="oper">=</span> <span class="var">document</span>.<span class="var">cookie</span>.<span class="func">split</span>( "<span class="string">; </span>" )[<span class="var">x</span>].<span class="func">split</span>( "<span class="string">=</span>" );
		<span class="oper">if</span>( <span class="var">oneCookie</span>[<span class="num">0</span>] <span class="oper">=</span><span class="oper">=</span> <span class="func">escape</span>( <span class="var">cookieName</span> ) ) {
			<span class="oper">var</span> <span class="var">styleStrings</span> <span class="oper">=</span> <span class="func">unescape</span>( <span class="var">oneCookie</span>[<span class="num">1</span>] ).<span class="func">split</span>( "<span class="string"> MWJ </span>" );
			<span class="oper">for</span>( <span class="oper">var</span> <span class="var">y</span> <span class="oper">=</span> <span class="num">0</span>, <span class="var">funcStr</span> <span class="oper">=</span> '<span class="string"></span>'; <span class="var">styleStrings</span>[<span class="var">y</span>]; <span class="var">y</span><span class="oper">+</span><span class="oper">+</span> ) { <span class="var">funcStr</span> <span class="oper">+</span><span class="oper">=</span> ( <span class="var">y</span> <span class="oper">?</span> '<span class="string">,</span>' <span class="oper">:</span> '<span class="string"></span>' ) <span class="oper">+</span> '<span class="string">unescape( styleStrings[</span>' <span class="oper">+</span> <span class="var">y</span> <span class="oper">+</span> '<span class="string">] )</span>'; }
			<span class="func">eval</span>( '<span class="string">changeStyle(</span>' <span class="oper">+</span> <span class="var">funcStr</span> <span class="oper">+</span> '<span class="string">);</span>' ); <span class="oper">break</span>;
	} } <span class="var">window</span>.<span class="var">MWJss</span> <span class="oper">=</span> []; <span class="oper">for</span>( <span class="oper">var</span> <span class="var">ss</span> <span class="oper">=</span> <span class="func">getAllSheets</span>(), <span class="var">x</span> <span class="oper">=</span> <span class="num">0</span>; <span class="var">ss</span>[<span class="var">x</span>]; <span class="var">x</span><span class="oper">+</span><span class="oper">+</span> ) { <span class="var">MWJss</span>[<span class="var">x</span>] <span class="oper">=</span> <span class="var">ss</span>[<span class="var">x</span>].<span class="var">disabled</span>; }
}</pre>
</body></html>