<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>deepdark.net - James Green's Blog - ASP.Net</title>
    <link>http://deepdark.net/</link>
    <description>.NET, SQL Server and *.*</description>
    <image>
      <url>http://deepdark.net/files/deepdark.jpg</url>
      <title>deepdark.net - James Green's Blog - ASP.Net</title>
      <link>http://deepdark.net/</link>
    </image>
    <language>en-us</language>
    <copyright>James Green</copyright>
    <lastBuildDate>Tue, 27 Nov 2007 08:32:41 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>James.Green@deepdark.net</managingEditor>
    <webMaster>James.Green@deepdark.net</webMaster>
    <item>
      <trackback:ping>http://deepdark.net/Trackback.aspx?guid=dffd5242-eb06-448c-9697-b39d7d190492</trackback:ping>
      <pingback:server>http://deepdark.net/pingback.aspx</pingback:server>
      <pingback:target>http://deepdark.net/PermaLink,guid,dffd5242-eb06-448c-9697-b39d7d190492.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://deepdark.net/CommentView,guid,dffd5242-eb06-448c-9697-b39d7d190492.aspx</wfw:comment>
      <wfw:commentRss>http://deepdark.net/SyndicationService.asmx/GetEntryCommentsRss?guid=dffd5242-eb06-448c-9697-b39d7d190492</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The problem with IIS6 that I have been curious about but up until today never needed
a solution for.
</p>
        <p>
The problem I am talking about is that with the IIS 6.0 UI you cannot set a host
header on a SSL port for a domain.  You can live a long and happy life with a
1-cert-per-server config but with the case of a wildcard cert (one covering all subdomains
of the domain it was purchased for) you really want to be able to take advantage of
these extra subdomains.
</p>
        <p>
Consider an example from a server below.  The two sites that are highlighted
belong to the same domain - Lets call the <font color="#ff0000"><strong>red </strong></font>one <font face="Courier New" color="#000000">www.MySite.com</font> and
the <strong><font color="#0000ff">blue</font></strong> one <font face="Courier New" color="#000000">shop.MySite.com</font>. 
There is a wildcard cert installed on the machine for <font face="Courier New">*.MySite.com</font>.
</p>
        <p>
          <img src="http://deepdark.net/content/binary/iis_ssl_adsultil.gif" border="0" />
        </p>
        <p>
The first one is easy.  Install the cert and assign it to the site.
</p>
        <p>
Setting this on subsequent sites on the same box is where you get the problem. 
It can be done, and it isn't hard, you just have to know the trick!
</p>
        <p>
          <strong>The trick is the <font face="Courier New">adsutil.vbs</font> script that is
included when you install IIS</strong>.  The default path to find these scripts
is: <font face="Courier New">C:\Inetpub\AdminScripts</font>.
</p>
        <p>
The process for assigning a host header for SSL to all subsequent sitess is:
</p>
        <ol>
          <li>
Don't assign a SSL port number to the second site.  Leave it on port 80 for now</li>
          <li>
Open a command window and change to the path with adsutil.vbs.</li>
          <li>
Run the following command:  <font face="Courier New" color="#000000"><strong>cscript.exe
adsutil.vbs set /w3svc/<em>&lt;site identifier&gt;</em>/SecureBindings ":443<em>:&lt;host
header&gt;"</em></strong></font>   In our example above the <em>&lt;site
identifier&gt;</em> is replaced with the Id of the blue site, <font face="Courier New">1023406912</font>,
and the <em>&lt;host header&gt;</em> is replaced with <font face="Courier New">shop.MySite.com</font></li>
          <li>
adsutil will assign port 443 to the site, you do not need to reset IIS</li>
        </ol>
        <p>
          <a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/d3df4bc9-0954-459a-b5e6-7a8bc462960c.mspx?mfr=true">TechNet
has a rundown of all the things you can do with adsutil.vbs and IIS6</a>, so check
it out.  But don't get too attached - the Metabase is not showing up for
IIS 7!
</p>
        <p>
          <strong>
            <font color="#808080" size="1">Listening To: The Boatman's Call, Nick Cave
and the Bad Seeds</font>
          </strong>
        </p>
      </body>
      <title>Running multiple secure (SSL) sites with host headers and a wildcard SSL Certificate</title>
      <guid isPermaLink="false">http://deepdark.net/PermaLink,guid,dffd5242-eb06-448c-9697-b39d7d190492.aspx</guid>
      <link>http://deepdark.net/PermaLink,guid,dffd5242-eb06-448c-9697-b39d7d190492.aspx</link>
      <pubDate>Tue, 27 Nov 2007 08:32:41 GMT</pubDate>
      <description>&lt;p&gt;
The problem with IIS6 that I have been curious about but up until today never needed
a solution for.
&lt;/p&gt;
&lt;p&gt;
The problem I am talking about is&amp;nbsp;that with the IIS 6.0 UI you cannot set a host
header on a SSL port for a domain.&amp;nbsp; You can live a long and happy life with a
1-cert-per-server config but with the case of a wildcard cert (one covering all subdomains
of the domain it was purchased for) you really want to be able to take advantage of
these extra subdomains.
&lt;/p&gt;
&lt;p&gt;
Consider an example from a server below.&amp;nbsp; The two sites that are highlighted
belong to the same domain - Lets call the &lt;font color=#ff0000&gt;&lt;strong&gt;red &lt;/strong&gt;&lt;/font&gt;one &lt;font face="Courier New" color=#000000&gt;www.MySite.com&lt;/font&gt; and
the &lt;strong&gt;&lt;font color=#0000ff&gt;blue&lt;/font&gt;&lt;/strong&gt; one &lt;font face="Courier New" color=#000000&gt;shop.MySite.com&lt;/font&gt;.&amp;nbsp;
There is a wildcard cert installed on the machine for &lt;font face="Courier New"&gt;*.MySite.com&lt;/font&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://deepdark.net/content/binary/iis_ssl_adsultil.gif" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
The first one is easy.&amp;nbsp; Install the cert and assign it to the site.
&lt;/p&gt;
&lt;p&gt;
Setting this on subsequent sites on the same box is where you get the problem.&amp;nbsp;
It can be done, and it isn't hard, you just have to know the trick!
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The trick is the &lt;font face="Courier New"&gt;adsutil.vbs&lt;/font&gt; script that is
included when you install IIS&lt;/strong&gt;.&amp;nbsp; The default path to find these scripts
is: &lt;font face="Courier New"&gt;C:\Inetpub\AdminScripts&lt;/font&gt;.
&lt;/p&gt;
&lt;p&gt;
The process for assigning a host header for SSL to all subsequent sitess is:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Don't assign a SSL port number to the second site.&amp;nbsp; Leave it on port 80 for now&lt;/li&gt;
&lt;li&gt;
Open a command window and change to the path with adsutil.vbs.&lt;/li&gt;
&lt;li&gt;
Run the following command:&amp;nbsp; &lt;font face="Courier New" color=#000000&gt;&lt;strong&gt;cscript.exe
adsutil.vbs set /w3svc/&lt;em&gt;&amp;lt;site identifier&amp;gt;&lt;/em&gt;/SecureBindings ":443&lt;em&gt;:&amp;lt;host
header&amp;gt;"&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp; In our example above the &lt;em&gt;&amp;lt;site
identifier&amp;gt;&lt;/em&gt; is replaced with the Id of the blue site, &lt;font face="Courier New"&gt;1023406912&lt;/font&gt;,
and the &lt;em&gt;&amp;lt;host header&amp;gt;&lt;/em&gt; is replaced with &lt;font face="Courier New"&gt;shop.MySite.com&lt;/font&gt;
&lt;/li&gt;
&lt;li&gt;
adsutil will assign port 443 to the site, you do not need to reset IIS&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/d3df4bc9-0954-459a-b5e6-7a8bc462960c.mspx?mfr=true"&gt;TechNet
has a rundown of all the things you can do with adsutil.vbs and IIS6&lt;/a&gt;, so check
it out.&amp;nbsp; But don't get too attached -&amp;nbsp;the Metabase is not showing up for
IIS 7!
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color=#808080 size=1&gt;Listening To: The Boatman's Call, Nick Cave and
the Bad Seeds&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;</description>
      <comments>http://deepdark.net/CommentView,guid,dffd5242-eb06-448c-9697-b39d7d190492.aspx</comments>
      <category>ASP.Net</category>
      <category>Geeking Out!</category>
    </item>
    <item>
      <trackback:ping>http://deepdark.net/Trackback.aspx?guid=12fb2397-0496-4677-aae2-46b8cbf39489</trackback:ping>
      <pingback:server>http://deepdark.net/pingback.aspx</pingback:server>
      <pingback:target>http://deepdark.net/PermaLink,guid,12fb2397-0496-4677-aae2-46b8cbf39489.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://deepdark.net/CommentView,guid,12fb2397-0496-4677-aae2-46b8cbf39489.aspx</wfw:comment>
      <wfw:commentRss>http://deepdark.net/SyndicationService.asmx/GetEntryCommentsRss?guid=12fb2397-0496-4677-aae2-46b8cbf39489</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I got this message again this morning and I am so sick of it!
</p>
        <p>
          <img src="http://deepdark.net/content/binary/Bad.png" border="0" />
        </p>
        <p>
Only 16 chars?  O RLY?  What if my dog's name is more than 16 chars long?
</p>
        <p>
Further investigation of the JS source reveals that other error messages include:
</p>
        <p>
          <em>
            <font color="#a52a2a">Password can only contain letters and numbers</font>
          </em>
        </p>
        <p>
I am always talking to people about password policy and no wonder people are confused. 
So much good guidance out there is buried under so much rubbish.
</p>
        <p>
Compare this to the other user experience that is becoming more common:
</p>
        <p>
          <img src="http://deepdark.net/content/binary/Good.png" border="0" />
        </p>
        <p>
Much better!  There was a time when it would be appropriate to explain why the
second case is better... but in this day and age it should be obvious.  It is
all about coercing people to do good passwords until they are made obsolete in the
future.
</p>
        <p>
Since Version 1.0.60731.0 of <a href="http://www.asp.net/AJAX/AjaxControlToolkit/">the
ASP.NET AJAX Control Toolkit</a> there has been a <a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/PasswordStrength/PasswordStrength.aspx">quite
good Password Strength control available</a> to the ASP.NET platform.  Everyone
else (like my first, deliberately anonymous example) can just Google it!  There
are plenty of samples available.
</p>
        <p>
One that I liked was <a href="http://www.gerd-riesselmann.net/">at Gerd Riesselmann's
blog</a>, where he shares (GPL) a simple example suitable for learning how this is
done.
</p>
        <p>
What do you think?  Is there any excuse for giving poor password guidance in
2007?
</p>
      </body>
      <title>Password Strength, again!  </title>
      <guid isPermaLink="false">http://deepdark.net/PermaLink,guid,12fb2397-0496-4677-aae2-46b8cbf39489.aspx</guid>
      <link>http://deepdark.net/PermaLink,guid,12fb2397-0496-4677-aae2-46b8cbf39489.aspx</link>
      <pubDate>Mon, 05 Nov 2007 23:37:32 GMT</pubDate>
      <description>&lt;p&gt;
I got this message again this morning and I am so sick of it!
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://deepdark.net/content/binary/Bad.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Only 16 chars?&amp;nbsp; O RLY?&amp;nbsp; What if my dog's name is more than 16 chars long?
&lt;/p&gt;
&lt;p&gt;
Further investigation of the JS source reveals that other error messages include:
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;font color=#a52a2a&gt;Password can only contain letters and numbers&lt;/font&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
I am always talking to people about password policy and no wonder people are confused.&amp;nbsp;
So much good guidance out there is buried under so much rubbish.
&lt;/p&gt;
&lt;p&gt;
Compare this to the other user experience that is becoming more common:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://deepdark.net/content/binary/Good.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Much better!&amp;nbsp; There was a time when it would be appropriate to explain why the
second case is better... but in this day and age it should be obvious.&amp;nbsp; It is
all about coercing people to do good passwords until they are made obsolete in the
future.
&lt;/p&gt;
&lt;p&gt;
Since Version 1.0.60731.0 of &lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/"&gt;the
ASP.NET AJAX Control Toolkit&lt;/a&gt; there has been a &lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/PasswordStrength/PasswordStrength.aspx"&gt;quite
good Password Strength control available&lt;/a&gt; to the ASP.NET platform.&amp;nbsp; Everyone
else (like my first, deliberately anonymous example) can just Google it!&amp;nbsp; There
are plenty of samples available.
&lt;/p&gt;
&lt;p&gt;
One that I liked was &lt;a href="http://www.gerd-riesselmann.net/"&gt;at Gerd Riesselmann's
blog&lt;/a&gt;, where he shares (GPL) a simple example suitable for learning how this is
done.
&lt;/p&gt;
&lt;p&gt;
What do you think?&amp;nbsp; Is there any excuse for giving poor password guidance in
2007?
&lt;/p&gt;</description>
      <comments>http://deepdark.net/CommentView,guid,12fb2397-0496-4677-aae2-46b8cbf39489.aspx</comments>
      <category>ASP.Net</category>
      <category>Geeking Out!</category>
      <category>Secutity</category>
      <category>That will be all (rant)</category>
      <category>UX</category>
    </item>
    <item>
      <trackback:ping>http://deepdark.net/Trackback.aspx?guid=79777c30-f39d-4a35-8379-79e43d467095</trackback:ping>
      <pingback:server>http://deepdark.net/pingback.aspx</pingback:server>
      <pingback:target>http://deepdark.net/PermaLink,guid,79777c30-f39d-4a35-8379-79e43d467095.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://deepdark.net/CommentView,guid,79777c30-f39d-4a35-8379-79e43d467095.aspx</wfw:comment>
      <wfw:commentRss>http://deepdark.net/SyndicationService.asmx/GetEntryCommentsRss?guid=79777c30-f39d-4a35-8379-79e43d467095</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is the third of my posts about group policy for web developers [<a href="http://deepdark.net/PermaLink,guid,5c193950-c743-4a94-9fcf-2381fe5f3e37.aspx">part
1</a>] [<a href="http://deepdark.net/PermaLink,guid,f8f748db-a47e-4715-9d99-093ac21f3c4c.aspx">part
2</a>], and today's post is a from-the-trenches tail about how you can get 401.1 Access
Denied as a result of applying group policy.
</p>
        <p>
Mad props to <a href="http://blogs.msdn.com/jiruss/">Jimmie Russ</a> and his post <a href="http://blogs.msdn.com/jiruss/archive/2006/12/17/access-denied-401-1-goes-away-temporarily-after-iisreset.aspx">Access
Denied 401.1 goes away temporarily after IISRESET</a>, as it was his post that sorted
my problem today.
</p>
        <p>
As you will see in his post, it is possible to push out User Rights Assignment policies
via a GPO that can define the following rights:
</p>
        <ul>
          <li>
Log on as a service</li>
          <li>
Log on as a batch job</li>
          <li>
Allow log on locally</li>
          <li>
Access this computer from the network</li>
        </ul>
        <p>
The above list may not be complete, but it was these four that caused a problem in
my IIS environment.
</p>
        <p>
Two tell-tail signs that this is your problem:
</p>
        <ol>
          <li>
If you run <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e90fe777-4a21-4066-bd22-b931f7572e9a&amp;DisplayLang=en">the
always awesome AuthDiag utility</a> and it reports that certain <strong>local</strong> accounts
(like <font face="Courier New" color="#000000">IUSR_*</font>) have rights missing,
specifically the ones listed above.</li>
          <li>
When you view the <font face="Courier New" color="#000000">User Rights Assignment</font> in <font face="Courier New" color="#000000">Local
Security Settings</font></li>
        </ol>
        <ul>
          <li>
The above four rights are locked (have a little lock icon instead of the "blue 1s
and 0s icon") and are not able to be edited.</li>
          <li>
The above four rights are not granted to our local accounts (again <font face="Courier New" color="#000000">IUSR_*</font> et
al)</li>
        </ul>
        <p>
Again, it may not always be exactly those four - what you are looking for are <strong>policies
that will not allow your IIS accounts (as listed in the AuthDiag results) to log on</strong>.
</p>
        <p>
If I had my time again, I would have cranked up the failed security events and listed
them here, but my servers are working again and I like it that way so this can be
left as an exercise to the reader :-)
</p>
        <p>
As Jimmie said, the solution is to have these rights not pushed down to your web servers. 
This can be by not applying them in your Default Domain Policy, or by putting your
web servers in a seperate OU blocking policy inheritance.  If you're not sure,
consult an expert.
</p>
      </body>
      <title>Group Policy for Web Developers, Part 3:  IIS security accounts</title>
      <guid isPermaLink="false">http://deepdark.net/PermaLink,guid,79777c30-f39d-4a35-8379-79e43d467095.aspx</guid>
      <link>http://deepdark.net/PermaLink,guid,79777c30-f39d-4a35-8379-79e43d467095.aspx</link>
      <pubDate>Thu, 19 Jul 2007 06:39:09 GMT</pubDate>
      <description>&lt;p&gt;
This is the third of my posts about group policy for web developers [&lt;a href="http://deepdark.net/PermaLink,guid,5c193950-c743-4a94-9fcf-2381fe5f3e37.aspx"&gt;part
1&lt;/a&gt;] [&lt;a href="http://deepdark.net/PermaLink,guid,f8f748db-a47e-4715-9d99-093ac21f3c4c.aspx"&gt;part
2&lt;/a&gt;], and today's post is a from-the-trenches tail about how you can get 401.1 Access
Denied as a result of applying group policy.
&lt;/p&gt;
&lt;p&gt;
Mad props to &lt;a href="http://blogs.msdn.com/jiruss/"&gt;Jimmie Russ&lt;/a&gt; and his post &lt;a href="http://blogs.msdn.com/jiruss/archive/2006/12/17/access-denied-401-1-goes-away-temporarily-after-iisreset.aspx"&gt;Access
Denied 401.1 goes away temporarily after IISRESET&lt;/a&gt;, as it was his post that sorted
my problem today.
&lt;/p&gt;
&lt;p&gt;
As you will see in his post, it is possible to push out User Rights Assignment policies
via a GPO that can define the following rights:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Log on as&amp;nbsp;a service&lt;/li&gt;
&lt;li&gt;
Log on as&amp;nbsp;a batch job&lt;/li&gt;
&lt;li&gt;
Allow log on locally&lt;/li&gt;
&lt;li&gt;
Access this computer from the network&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The above list may not be complete, but it was these four that caused a problem in
my IIS environment.
&lt;/p&gt;
&lt;p&gt;
Two tell-tail signs that this is your problem:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
If you run &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e90fe777-4a21-4066-bd22-b931f7572e9a&amp;amp;DisplayLang=en"&gt;the
always awesome AuthDiag utility&lt;/a&gt; and it reports that certain &lt;strong&gt;local&lt;/strong&gt; accounts
(like &lt;font face="Courier New" color=#000000&gt;IUSR_*&lt;/font&gt;) have rights missing, specifically
the ones listed above.&lt;/li&gt;
&lt;li&gt;
When you view the &lt;font face="Courier New" color=#000000&gt;User Rights Assignment&lt;/font&gt; in &lt;font face="Courier New" color=#000000&gt;Local
Security Settings&lt;/font&gt; 
&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
The above four rights are locked (have a little lock icon instead of the "blue 1s
and 0s icon") and are not able to be edited.&lt;/li&gt;
&lt;li&gt;
The above four rights are not granted to our local accounts (again &lt;font face="Courier New" color=#000000&gt;IUSR_*&lt;/font&gt; et
al)&lt;/li&gt;
&lt;/ul&gt;
&gt;
&lt;p&gt;
Again, it may not always be exactly those four - what you are looking for are &lt;strong&gt;policies
that will not allow your IIS accounts (as listed in the AuthDiag results) to log on&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
If I had my time again, I would have cranked up the failed security events and listed
them here, but my servers are working again and I like it that way so this can be
left as an exercise to the reader :-)
&lt;/p&gt;
&lt;p&gt;
As Jimmie said, the solution is to have these rights not pushed down to your web servers.&amp;nbsp;
This can be by not applying them in your Default Domain Policy, or by putting your
web servers in a seperate OU blocking policy inheritance.&amp;nbsp; If you're not sure,
consult an expert.
&lt;/p&gt;</description>
      <comments>http://deepdark.net/CommentView,guid,79777c30-f39d-4a35-8379-79e43d467095.aspx</comments>
      <category>Active Directory</category>
      <category>ASP.Net</category>
      <category>Geeking Out!</category>
    </item>
    <item>
      <trackback:ping>http://deepdark.net/Trackback.aspx?guid=9058c631-130d-4ffc-861a-663989e41b0e</trackback:ping>
      <pingback:server>http://deepdark.net/pingback.aspx</pingback:server>
      <pingback:target>http://deepdark.net/PermaLink,guid,9058c631-130d-4ffc-861a-663989e41b0e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://deepdark.net/CommentView,guid,9058c631-130d-4ffc-861a-663989e41b0e.aspx</wfw:comment>
      <wfw:commentRss>http://deepdark.net/SyndicationService.asmx/GetEntryCommentsRss?guid=9058c631-130d-4ffc-861a-663989e41b0e</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <font size="2">
          <p>
Today's post is about a nifty little trick that I have seen done with search text
boxes on sites over the years and I decided that it had to be in my toolbox too. 
</p>
          <p>
What we are going for is a search box that looks like this when the page loads:
</p>
        </font>
        <p>
        </p>
        <p>
          <img src="http://deepdark.net/content/binary/inactive_search.png" border="0" />
        </p>
        <p>
...and looks like this when the user clicks into it:
</p>
        <p>
          <img src="http://deepdark.net/content/binary/active_search.png" border="0" />
        </p>
        <p>
This technique seems to mostly be applied to search boxes, and I can see the benefit
in that.
</p>
        <p>
          <u>The post that follows is the amalgum of many VS-A's</u>
        </p>
        <p>
To get this done, it is a bit of CSS to style up the inactive and active state for
the text box, and a tiny bit of Javascript to tie it together.  I'm using the
term active and inactive not in any technical sense, just to describe the two styles
that are applied to our text box in response to the user activity.
</p>
        <p>
(assuming the rest of the page is a drab <font face="Courier New" color="#000000">#f0f0f0</font> in
colour...)  These are the two style rules that we are using in the images above:
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font color="#a52a2a">.</font>
            <font color="#a52a2a">inactiveSearchBox</font>
            <br />
{<br />
    <font color="#ff0000">background-color</font>: <font color="#000080">#f0f0f0</font>;<br />
    <font color="#ff0000">border</font>: <font color="#000080">solid
1px #ffffff</font>;<br />
}<br /><br /><font color="#a52a2a">.activeSearchBox</font><br />
{<br />
    <font color="#ff0000">border</font>: <font color="#000080">groove
1px #d9d9d9</font>;<br />
    <font color="#ff0000">background-color</font>: <font color="#000080">#ffffff</font>;<br />
}</span>
        </p>
        <p>
          <strong>
            <font size="1">
            </font>
          </strong>The markup for the input box is then as follows:
</p>
        <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
          <font color="#0000ff" size="2">
            <p>
              <font face="Courier New">&lt;</font>
            </p>
          </font>
          <font face="Courier New">
            <font color="#a31515" size="2">input</font>
            <font color="#000000" size="2">
            </font>
            <font color="#ff0000" size="2">type</font>
            <font color="#0000ff" size="2">="text"</font>
            <font color="#000000" size="2">
            </font>
            <font color="#ff0000" size="2">class</font>
            <font color="#0000ff" size="2">="inactiveSearchBox"</font>
            <font color="#000000" size="2">
            </font>
            <font color="#ff0000" size="2">id</font>
            <font color="#0000ff" size="2">="SearchStrng"</font>
            <font color="#000000" size="2"> </font>
          </font>
          <font face="Courier New">
            <br />
            <font color="#ff0000" size="2">   value</font>
            <font color="#0000ff" size="2">="
Search Here"</font>
          </font>
          <font size="2">
            <br />
          </font>
          <font face="Courier New">
            <font color="#ff0000" size="2">   onFocus</font>
            <font color="#0000ff" size="2">="this.className='activeSearchBox';
if(this.value==' Search Here')this.value='';"</font>
          </font>
          <font face="Courier New">
            <font size="2"> <br /></font>
            <font color="#ff0000" size="2">   onBlur</font>
            <font color="#0000ff" size="2">="if(this.value=='')this.value='
Search Here';this.className='inactiveSearchBox';"</font>
            <font size="2">
            </font>
          </font>
          <font color="#0000ff" size="2">
            <font face="Courier New">/&gt; </font>
          </font>
        </span>
        <p>
As you can see it all happens in the <font face="Courier New" color="#000000">onFocus</font> and <font face="Courier New" color="#000000">onBlur</font> events
of the textbox.  When the text box gets the focus it sets the class to be our <font face="Courier New" color="#000000">activeSearchBox </font>style and
clears our standard text.  The <font face="Courier New" color="#000000">onBlur</font> event
restores the default value if the user did not enter anything and sets our style back
to the <font face="Courier New"><font color="#000000">inactiveSearchBox</font></font>style.
</p>
        <p>
          <strong>
            <font size="1">Glossary:</font>
          </strong>
        </p>
        <p>
          <font size="1">VS-A, <em>n</em>. View Source, followd by an "Ah!".  
<br />
See also: VS-****.</font>
        </p>
        <p>
          <strong>
            <font color="#808080" size="1">Listening to:  Former co-workers :-)</font>
          </strong>
        </p>
      </body>
      <title>Adding a pinch of spice to a search box with CSS</title>
      <guid isPermaLink="false">http://deepdark.net/PermaLink,guid,9058c631-130d-4ffc-861a-663989e41b0e.aspx</guid>
      <link>http://deepdark.net/PermaLink,guid,9058c631-130d-4ffc-861a-663989e41b0e.aspx</link>
      <pubDate>Wed, 27 Jun 2007 13:32:32 GMT</pubDate>
      <description>&lt;font size=2&gt; 
&lt;p&gt;
Today's post is about a nifty little trick that I have seen done with search text
boxes on sites over the years and I decided that it had to be in my toolbox too. 
&lt;/p&gt;
&lt;p&gt;
What we are going for is a search box that looks like this when the page loads:
&lt;/font&gt;&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://deepdark.net/content/binary/inactive_search.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
...and looks like this when the user clicks into it:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://deepdark.net/content/binary/active_search.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
This technique seems to mostly be applied to search boxes, and I can see the benefit
in that.
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;The post that follows is the amalgum of many VS-A's&lt;/u&gt;
&lt;/p&gt;
&lt;p&gt;
To get this done, it is a bit of CSS to style up the inactive and active state for
the text box, and a tiny bit of Javascript to tie it together.&amp;nbsp; I'm using the
term active and inactive not in any technical sense, just to describe the two styles
that are applied to our text box in response to the user activity.
&lt;/p&gt;
&lt;p&gt;
(assuming the rest of the page is a drab &lt;font face="Courier New" color=#000000&gt;#f0f0f0&lt;/font&gt; in
colour...)&amp;nbsp; These are the two style rules that we are using in the images above:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font color=#a52a2a&gt;.&lt;/font&gt;&lt;font color=#a52a2a&gt;inactiveSearchBox&lt;/font&gt;
&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#ff0000&gt;background-color&lt;/font&gt;: &lt;font color=#000080&gt;#f0f0f0&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#ff0000&gt;border&lt;/font&gt;: &lt;font color=#000080&gt;solid
1px #ffffff&lt;/font&gt;;&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;font color=#a52a2a&gt;.activeSearchBox&lt;/font&gt;
&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#ff0000&gt;border&lt;/font&gt;: &lt;font color=#000080&gt;groove
1px #d9d9d9&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#ff0000&gt;background-color&lt;/font&gt;: &lt;font color=#000080&gt;#ffffff&lt;/font&gt;;&lt;br&gt;
}&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size=1&gt;&lt;/font&gt;&lt;/strong&gt;The markup for the input box is then as follows:
&lt;/p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font color=#0000ff size=2&gt; 
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;lt;&lt;/font&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#a31515 size=2&gt;input&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#ff0000 size=2&gt;type&lt;/font&gt;&lt;font color=#0000ff size=2&gt;="text"&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#ff0000 size=2&gt;class&lt;/font&gt;&lt;font color=#0000ff size=2&gt;="inactiveSearchBox"&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#ff0000 size=2&gt;id&lt;/font&gt;&lt;font color=#0000ff size=2&gt;="SearchStrng"&lt;/font&gt;&lt;font color=#000000 size=2&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;
&lt;br&gt;
&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;value&lt;/font&gt;&lt;font color=#0000ff size=2&gt;="
Search Here"&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;
&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;onFocus&lt;/font&gt;&lt;font color=#0000ff size=2&gt;="this.className='activeSearchBox';
if(this.value==' Search Here')this.value='';"&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;onBlur&lt;/font&gt;&lt;font color=#0000ff size=2&gt;="if(this.value=='')this.value='
Search Here';this.className='inactiveSearchBox';"&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font face="Courier New"&gt;/&amp;gt; &lt;/font&gt;
&lt;/span&gt;&gt;
&lt;p&gt;
&gt;As you can see it all happens in the &lt;font face="Courier New" color=#000000&gt;onFocus&lt;/font&gt; and &lt;font face="Courier New" color=#000000&gt;onBlur&lt;/font&gt; events
of the textbox.&amp;nbsp; When the text box gets the focus it sets the class to be our &lt;font face="Courier New" color=#000000&gt;activeSearchBox &lt;/font&gt;style&amp;nbsp;and
clears our standard text.&amp;nbsp; The &lt;font face="Courier New" color=#000000&gt;onBlur&lt;/font&gt; event
restores the default value if the user did not enter anything and sets our style back
to the &lt;font face="Courier New"&gt;&lt;font color=#000000&gt;inactiveSearchBox&lt;/font&gt; &lt;/font&gt;style.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size=1&gt;Glossary:&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=1&gt;VS-A, &lt;em&gt;n&lt;/em&gt;. View Source, followd by an "Ah!".&amp;nbsp; 
&lt;br&gt;
See also: VS-****.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color=#808080 size=1&gt;Listening to:&amp;nbsp; Former co-workers :-)&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;</description>
      <comments>http://deepdark.net/CommentView,guid,9058c631-130d-4ffc-861a-663989e41b0e.aspx</comments>
      <category>ASP.Net</category>
      <category>CSS</category>
      <category>Geeking Out!</category>
      <category>UX</category>
    </item>
    <item>
      <trackback:ping>http://deepdark.net/Trackback.aspx?guid=5c193950-c743-4a94-9fcf-2381fe5f3e37</trackback:ping>
      <pingback:server>http://deepdark.net/pingback.aspx</pingback:server>
      <pingback:target>http://deepdark.net/PermaLink,guid,5c193950-c743-4a94-9fcf-2381fe5f3e37.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://deepdark.net/CommentView,guid,5c193950-c743-4a94-9fcf-2381fe5f3e37.aspx</wfw:comment>
      <wfw:commentRss>http://deepdark.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5c193950-c743-4a94-9fcf-2381fe5f3e37</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is the second post on Group Policy for web developers.  <a href="http://deepdark.net/PermaLink,guid,f8f748db-a47e-4715-9d99-093ac21f3c4c.aspx">Part
1 was about managing the local Intranet Zone for your AD network</a>.  This post
will be based on a similar scenario.  Specifically, when issuing certificates
from a local Certification Authority, like Microsoft Certificate Services that ships
in Windows Server 2003.
</p>
        <p>
Modern browsers give you a <a href="http://deepdark.net/PermaLink,guid,fe6a6123-d36d-48a5-a531-b9a80419afa3.aspx">more
pretty warning system than they did last year</a> when you view a site that do not
chain back to a Trusted Root CA.  This is still an important warning and we don't
want to condition people into just clicking yes every time they see it.
</p>
        <p>
The first thing you will need to do (and like the last post, a certain degree of domain
administrative Godness is required...) is <strong>get the CA's certificate from the
CA</strong>.  Using Microsoft Certificate Services, you want to choose the option
highlighted below:
</p>
        <p>
          <img src="http://deepdark.net/content/binary/GetTrustedCACert.jpg" border="0" />
        </p>
        <p>
This will prompt you to save the certificate file.  Do this, then delete it when
you are done.  
</p>
        <p>
Next we need to <strong>install the certificate into our client machines</strong>. 
We will need a GPO.  You may use the one from the previous example or make a
new one. Again the place in your AD to create this will vary.  For smaller sites
adding at the the top level is fine, but hands off the default policy.
</p>
        <p>
Navigate to Security Settings -&gt; PK policies -&gt;Trusted Root CA's as in the screen
below:
</p>
        <p>
          <img src="http://deepdark.net/content/binary/TrustedCA.jpg" border="0" />
        </p>
        <p>
Right-click on the Trusted Root CA's container and choose Import.  Here, browse
for the cert file saved in step one and you are done!
</p>
        <p>
Finally, here is <a href="http://technet2.microsoft.com/windowsserver/en/library/32aacfe8-83af-4676-a45c-75483545a9781033.mspx?mfr=true">some
linkage to much more detail about Certificates in AD</a>.
</p>
      </body>
      <title>Group Policy for web developers, part 2</title>
      <guid isPermaLink="false">http://deepdark.net/PermaLink,guid,5c193950-c743-4a94-9fcf-2381fe5f3e37.aspx</guid>
      <link>http://deepdark.net/PermaLink,guid,5c193950-c743-4a94-9fcf-2381fe5f3e37.aspx</link>
      <pubDate>Wed, 13 Jun 2007 03:15:54 GMT</pubDate>
      <description>&lt;p&gt;
This is the second post on Group Policy for web developers.&amp;nbsp; &lt;a href="http://deepdark.net/PermaLink,guid,f8f748db-a47e-4715-9d99-093ac21f3c4c.aspx"&gt;Part
1 was about managing the local Intranet Zone for your AD network&lt;/a&gt;.&amp;nbsp; This post
will be based on a similar scenario.&amp;nbsp; Specifically, when issuing certificates
from a local Certification Authority, like Microsoft Certificate Services that ships
in Windows Server 2003.
&lt;/p&gt;
&lt;p&gt;
Modern browsers give you a &lt;a href="http://deepdark.net/PermaLink,guid,fe6a6123-d36d-48a5-a531-b9a80419afa3.aspx"&gt;more
pretty warning system than they did last year&lt;/a&gt; when you view a site that do not
chain back to a Trusted Root CA.&amp;nbsp; This is still an important warning and we don't
want to condition people into just clicking yes every time they see it.
&lt;/p&gt;
&lt;p&gt;
The first thing you will need to do (and like the last post, a certain degree of domain
administrative Godness is required...) is &lt;strong&gt;get the CA's certificate from the
CA&lt;/strong&gt;.&amp;nbsp; Using Microsoft Certificate Services, you want to choose the option
highlighted below:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://deepdark.net/content/binary/GetTrustedCACert.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
This will prompt you to save the certificate file.&amp;nbsp; Do this, then delete it when
you are done.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Next we need to &lt;strong&gt;install the certificate into our client machines&lt;/strong&gt;.&amp;nbsp;
We will need a GPO.&amp;nbsp; You may use the one from the previous example or make a
new one. Again the place in your AD to create this will vary.&amp;nbsp; For smaller sites
adding at the the top level is fine, but hands off the default policy.
&lt;/p&gt;
&lt;p&gt;
Navigate to Security Settings -&amp;gt; PK policies -&amp;gt;Trusted Root CA's as in the screen
below:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://deepdark.net/content/binary/TrustedCA.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Right-click on the Trusted Root CA's container and choose Import.&amp;nbsp; Here, browse
for the cert file saved in step one and you are done!
&lt;/p&gt;
&lt;p&gt;
Finally, here is &lt;a href="http://technet2.microsoft.com/windowsserver/en/library/32aacfe8-83af-4676-a45c-75483545a9781033.mspx?mfr=true"&gt;some
linkage to much more detail about&amp;nbsp;Certificates in AD&lt;/a&gt;.
&lt;/p&gt;</description>
      <comments>http://deepdark.net/CommentView,guid,5c193950-c743-4a94-9fcf-2381fe5f3e37.aspx</comments>
      <category>Active Directory</category>
      <category>ASP.Net</category>
      <category>Geeking Out!</category>
      <category>Secutity</category>
    </item>
    <item>
      <trackback:ping>http://deepdark.net/Trackback.aspx?guid=f8f748db-a47e-4715-9d99-093ac21f3c4c</trackback:ping>
      <pingback:server>http://deepdark.net/pingback.aspx</pingback:server>
      <pingback:target>http://deepdark.net/PermaLink,guid,f8f748db-a47e-4715-9d99-093ac21f3c4c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://deepdark.net/CommentView,guid,f8f748db-a47e-4715-9d99-093ac21f3c4c.aspx</wfw:comment>
      <wfw:commentRss>http://deepdark.net/SyndicationService.asmx/GetEntryCommentsRss?guid=f8f748db-a47e-4715-9d99-093ac21f3c4c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Some sites that you may have on your internal network, such as Virtual Server console,
Sharepoint, ASP.NET sites of your own creation, and so on, can require your AD credentials
to log you on.  Typically the browser will prompt you for them <a href="http://support.microsoft.com/kb/815141">unless
you add the site to the Local Intranet zone</a>.  
</p>
        <p>
          <img src="http://deepdark.net/content/binary/LocalIntranet.jpg" border="0" />
        </p>
        <p>
This quickly becomes cumbersome as the number of users grows.  Everyone will
have to add the URL to their Local Intranet zone manually and that spells work.
</p>
        <p>
          <strong>Internet Explorer</strong>
        </p>
        <p>
All the IE Zones, including Local Intranet, can be administered by Group
Policy.  Where in your AD you create your GPO will depend on the scale
of your operation, for smaller sites a GPO at the domain level is not a bad
choice.  I'd caution against editing your default domain policy, consider creating
a new GPO just under it.
</p>
        <p>
Edit the GPO and browse to the <font face="Courier New"><strong>Site To Zone Assignment
List</strong></font>, inside the <strong><font face="Courier New">Internet Control
Panel</font></strong> \ <strong><font face="Courier New">Security Page</font></strong> settings:
</p>
        <p>
  <img src="http://deepdark.net/content/binary/LocalIntranetGPO.jpg" border="0" /></p>
        <p>
The UI will let you add IP addresses, FQDN's or http/https addresses, and which zone
they will belong to.
</p>
        <p>
One nice side effect of this to watch for is the users can now not change their zones
via the IE settings.
</p>
        <p>
          <strong>FireFox</strong>
        </p>
        <p>
For FireFox, you are going to have to <a href="http://www.mozilla.org/catalog/end-user/customizing/briefprefs.html">create/maintain
an all.js in the %installdir%\defaults\pref\ </a>directory.
</p>
        <p>
This is just a plain text file that can contain settings in the FireFox Javascript
format.  <a href="http://www.mozilla.org/projects/netlib/integrated-auth.html">For
Integrated Authentication you will need to add the following line</a>:
</p>
        <p>
          <font face="Courier New">
            <strong>pref("network.negotiate-auth.trusted-uris", "comma
seperated site list");</strong>
          </font>
        </p>
        <p>
          <font color="#808080">
            <strong>Listening To: Kruder and Dorfmeister, the K&amp;D Sessions,
part 1</strong>
          </font>
        </p>
      </body>
      <title>Group Policy for web developers, part 1</title>
      <guid isPermaLink="false">http://deepdark.net/PermaLink,guid,f8f748db-a47e-4715-9d99-093ac21f3c4c.aspx</guid>
      <link>http://deepdark.net/PermaLink,guid,f8f748db-a47e-4715-9d99-093ac21f3c4c.aspx</link>
      <pubDate>Fri, 08 Jun 2007 01:19:27 GMT</pubDate>
      <description>&lt;p&gt;
Some sites that you may have on your internal network, such as Virtual Server console,
Sharepoint, ASP.NET sites of your own creation, and so on, can require your AD credentials
to log you on.&amp;nbsp; Typically the browser will prompt you for them &lt;a href="http://support.microsoft.com/kb/815141"&gt;unless
you add the site to the Local Intranet zone&lt;/a&gt;.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://deepdark.net/content/binary/LocalIntranet.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
This quickly becomes cumbersome as the number of users grows.&amp;nbsp; Everyone will
have to add the URL to their Local Intranet zone manually and that spells work.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Internet Explorer&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
All the IE Zones, including Local Intranet,&amp;nbsp;can be&amp;nbsp;administered by Group
Policy.&amp;nbsp;&amp;nbsp;Where in your AD you create your GPO will depend on&amp;nbsp;the scale
of your operation, for smaller sites a GPO at the domain level is not&amp;nbsp;a&amp;nbsp;bad
choice.&amp;nbsp; I'd caution against editing your default domain policy, consider creating
a new GPO&amp;nbsp;just under it.
&lt;/p&gt;
&lt;p&gt;
Edit the GPO and browse to the &lt;font face="Courier New"&gt;&lt;strong&gt;Site To Zone Assignment
List&lt;/strong&gt;&lt;/font&gt;, inside the &lt;strong&gt;&lt;font face="Courier New"&gt;Internet Control
Panel&lt;/font&gt;&lt;/strong&gt; \ &lt;strong&gt;&lt;font face="Courier New"&gt;Security&amp;nbsp;Page&lt;/font&gt;&lt;/strong&gt; settings:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&lt;img src="http://deepdark.net/content/binary/LocalIntranetGPO.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
The UI will let you add IP addresses, FQDN's or http/https addresses, and which zone
they will belong to.
&lt;/p&gt;
&lt;p&gt;
One nice side effect of this to watch for is the users can now not change their zones
via the IE settings.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;FireFox&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
For FireFox, you are going to have to &lt;a href="http://www.mozilla.org/catalog/end-user/customizing/briefprefs.html"&gt;create/maintain
an all.js in the %installdir%\defaults\pref\ &lt;/a&gt;directory.
&lt;/p&gt;
&lt;p&gt;
This is just a plain text file that can contain settings in the FireFox Javascript
format.&amp;nbsp; &lt;a href="http://www.mozilla.org/projects/netlib/integrated-auth.html"&gt;For
Integrated Authentication you will need to add the following line&lt;/a&gt;:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&lt;strong&gt;pref("network.negotiate-auth.trusted-uris", "comma
seperated site list");&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#808080&gt;&lt;strong&gt;Listening To: Kruder and Dorfmeister, the K&amp;amp;D Sessions,
part 1&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;</description>
      <comments>http://deepdark.net/CommentView,guid,f8f748db-a47e-4715-9d99-093ac21f3c4c.aspx</comments>
      <category>ASP.Net</category>
      <category>Geeking Out!</category>
      <category>Secutity</category>
      <category>Active Directory</category>
    </item>
    <item>
      <trackback:ping>http://deepdark.net/Trackback.aspx?guid=b78fc575-af9c-4781-a9a9-1055128f3374</trackback:ping>
      <pingback:server>http://deepdark.net/pingback.aspx</pingback:server>
      <pingback:target>http://deepdark.net/PermaLink,guid,b78fc575-af9c-4781-a9a9-1055128f3374.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://deepdark.net/CommentView,guid,b78fc575-af9c-4781-a9a9-1055128f3374.aspx</wfw:comment>
      <wfw:commentRss>http://deepdark.net/SyndicationService.asmx/GetEntryCommentsRss?guid=b78fc575-af9c-4781-a9a9-1055128f3374</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My <a href="http://deepdark.net/PermaLink,guid,0eaa175f-2819-4d06-9820-38fe39e82fb5.aspx">Pure
CSS Tabs with ASP.NET 2.0 Master Pages</a> post also apeared over on <a href="http://csharpzealot.com/forums/33/ShowThread.aspx#33">CSharpZealot.com</a> where
I just added a note about an alternate solution.  Copied here for completeness
:)
</p>
        <p>
          <em>There was an alternate solution using the </em>
          <a class="" href="http://www.asp.net/cssadapters/" target="_blank">
            <em>CSS
Friendly Control Adaptor</em>
          </a>
          <em> toolkit for ASPNet 2.0 which renders the standard
menu control as UL\LI tags rather than as tables </em>
        </p>
        <p>
          <em>I chose to not go that route because I don't need the tabs to link to a sitemap
datasource or anything cool like that - UL\LI in a master page was plenty good enough
for me, however if you did want/need to link the same code to a sitemap then the CSS
Friendly adaptors would be well worth looking into.</em>
        </p>
        <p>
          <strong>
            <font color="#808080" size="1">Listening to:  <em>Wave of Mutilation:
The Best of Pixies</em></font>
          </strong>
        </p>
      </body>
      <title>Pure CSS Tabs with ASP.NET 2.0 Master Pages - Foot note</title>
      <guid isPermaLink="false">http://deepdark.net/PermaLink,guid,b78fc575-af9c-4781-a9a9-1055128f3374.aspx</guid>
      <link>http://deepdark.net/PermaLink,guid,b78fc575-af9c-4781-a9a9-1055128f3374.aspx</link>
      <pubDate>Fri, 23 Mar 2007 01:35:46 GMT</pubDate>
      <description>&lt;p&gt;
My &lt;a href="http://deepdark.net/PermaLink,guid,0eaa175f-2819-4d06-9820-38fe39e82fb5.aspx"&gt;Pure
CSS Tabs with ASP.NET 2.0 Master Pages&lt;/a&gt; post also apeared over on &lt;a href="http://csharpzealot.com/forums/33/ShowThread.aspx#33"&gt;CSharpZealot.com&lt;/a&gt;&amp;nbsp;where
I just added a note about an alternate solution.&amp;nbsp; Copied here for completeness
:)
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;There was an alternate solution using the &lt;/em&gt;&lt;a class="" href="http://www.asp.net/cssadapters/" target=_blank&gt;&lt;em&gt;CSS
Friendly Control Adaptor&lt;/em&gt;&lt;/a&gt;&lt;em&gt; toolkit for ASPNet 2.0 which renders the standard
menu control as UL\LI tags rather than as tables &lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;I chose to not go that route because I don't need the tabs to link to a sitemap
datasource or anything cool like that - UL\LI in a master page was plenty good enough
for me, however if you did want/need to link the same code to a sitemap then the CSS
Friendly adaptors would be well worth looking into.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font color=#808080 size=1&gt;Listening to:&amp;nbsp; &lt;em&gt;Wave of Mutilation: The
Best of Pixies&lt;/em&gt;&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;</description>
      <comments>http://deepdark.net/CommentView,guid,b78fc575-af9c-4781-a9a9-1055128f3374.aspx</comments>
      <category>ASP.Net</category>
      <category>Geeking Out!</category>
    </item>
    <item>
      <trackback:ping>http://deepdark.net/Trackback.aspx?guid=0eaa175f-2819-4d06-9820-38fe39e82fb5</trackback:ping>
      <pingback:server>http://deepdark.net/pingback.aspx</pingback:server>
      <pingback:target>http://deepdark.net/PermaLink,guid,0eaa175f-2819-4d06-9820-38fe39e82fb5.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://deepdark.net/CommentView,guid,0eaa175f-2819-4d06-9820-38fe39e82fb5.aspx</wfw:comment>
      <wfw:commentRss>http://deepdark.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0eaa175f-2819-4d06-9820-38fe39e82fb5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So I came across a problem using a old CSS trick to make a tab strip/menu bar on a
site from a Unordered List inside a Div 
</p>
        <p>
To create the tabs the trick is you can use some CSS like this: <font color="#a31515" size="2"></font></p>
        <font color="#a31515" size="2">
        </font>
        <p>
          <font face="Courier New" color="#a31515" size="2">#nav</font>
          <font face="Courier New">
            <font size="2">
              <br />
{ <br /></font>
            <font color="#ff0000" size="2">   float</font>
            <font size="2">:</font>
            <font color="#0000ff" size="2">left</font>
          </font>
          <font face="Courier New">
            <font size="2"> ; <br /></font>
            <font color="#ff0000" size="2">   margin</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">0</font>
          </font>
          <font face="Courier New">
            <font size="2">; <br /></font>
            <font color="#ff0000" size="2">   padding</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">10px</font>
            <font size="2">
            </font>
            <font color="#0000ff" size="2">0</font>
            <font size="2">
            </font>
            <font color="#0000ff" size="2">0</font>
            <font size="2">
            </font>
            <font color="#0000ff" size="2">46px</font>
          </font>
          <font face="Courier New">
            <font size="2">; <br /></font>
            <font color="#ff0000" size="2">   list-style</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">none</font>
          </font>
          <font face="Courier New" size="2">; 
<br />
}</font>
          <font face="Courier New">
            <font color="#a31515" size="2">
              <br />
#nav</font>
            <font color="#000000" size="2">
            </font>
            <font color="#a31515" size="2">li</font>
          </font>
          <font face="Courier New">
            <font size="2">
              <font color="#000000">
              </font>
              <br />
{ <br /></font>
            <font color="#ff0000" size="2">   font-size</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">150%</font>
          </font>
          <font face="Courier New">
            <font size="2">; <br /></font>
            <font color="#ff0000" size="2">   float</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">left</font>
          </font>
          <font face="Courier New">
            <font size="2">; <br /></font>
            <font color="#ff0000" size="2">   margin</font>
            <font size="2">:</font>
            <font color="#0000ff" size="2">0</font>
          </font>
          <font face="Courier New">
            <font size="2">; <br /></font>
            <font color="#ff0000" size="2">   padding</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">0</font>
          </font>
          <font face="Courier New" size="2">; 
<br />
}</font>
          <font face="Courier New">
            <font color="#a31515" size="2">
              <br />
#nav</font>
            <font color="#000000" size="2">
            </font>
            <font color="#a31515" size="2">a</font>
          </font>
          <font face="Courier New">
            <font size="2">
              <br />
{ <br /></font>
            <font color="#ff0000" size="2">   float</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">left</font>
          </font>
          <font face="Courier New">
            <font size="2">; <br /></font>
            <font color="#ff0000" size="2">   display</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">block</font>
          </font>
          <font face="Courier New">
            <font size="2">; <br /></font>
            <font color="#ff0000" size="2">   margin</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">0</font>
            <font size="2">
            </font>
            <font color="#0000ff" size="2">1px</font>
            <font size="2">
            </font>
            <font color="#0000ff" size="2">0</font>
            <font size="2">
            </font>
            <font color="#0000ff" size="2">0</font>
          </font>
          <font face="Courier New">
            <font size="2"> ; <br /></font>
            <font color="#ff0000" size="2">   padding</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">4px</font>
            <font size="2">
            </font>
            <font color="#0000ff" size="2">8px</font>
          </font>
          <font face="Courier New">
            <font size="2">; <br /></font>
            <font color="#ff0000" size="2">   color</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">#333</font>
          </font>
          <font face="Courier New">
            <font size="2">; <br /></font>
            <font color="#ff0000" size="2">   text-decoration</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">none</font>
          </font>
          <font face="Courier New">
            <font size="2">; <br /></font>
            <font color="#ff0000" size="2">   border</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">1px</font>
            <font size="2">
            </font>
            <font color="#0000ff" size="2">solid</font>
            <font size="2">
            </font>
            <font color="#0000ff" size="2">#949494</font>
          </font>
          <font face="Courier New">
            <font size="2">; <br /></font>
            <font color="#ff0000" size="2">   border-bottom</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">none</font>
          </font>
          <font face="Courier New">
            <font size="2">; <br /></font>
            <font color="#ff0000" size="2">   background</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">#686868</font>
          </font>
          <font face="Courier New">
            <font size="2">; <br /></font>
            <font color="#ff0000" size="2">   color</font>
            <font size="2">: </font>
            <font color="#0000ff" size="2">#949494</font>
          </font>
          <font face="Courier New" size="2">; 
<br />
}</font>
        </p>
        <p>
...to turn a &lt;UL&gt; with the ID="nav" into some tabs.  For example we add
the following to the master page: 
</p>
        <font face="Courier New">
          <font color="#0000ff">&lt;</font>
          <font color="#a52a2a">ul</font>
          <font color="#000080">
          </font>
          <font color="#ff0000">id</font>
          <font color="#0000ff">="nav" </font>
          <font color="#0000ff">&gt;</font>
        </font> <br /><font face="Courier New">   <font color="#a52a2a"><font color="#0000ff">&lt;</font>li <font color="#ff0000">id</font><font color="#0000ff">="navHome"</font><font color="#0000ff">&gt;&lt;</font>a</font><font color="#ff0000">href</font><font color="#0000ff">="default.aspx"</font>&gt;Home<font color="#a52a2a"><font color="#0000ff">&lt;/</font>a<font color="#0000ff">&gt;</font><font color="#0000ff">&lt;/</font>li</font><font color="#0000ff">&gt;</font></font><font color="#a52a2a"><font color="#0000ff"> </font><br /></font><font face="Courier New"><font color="#0000ff">   &lt;</font><font color="#a52a2a">li <font color="#ff0000">id</font><font color="#0000ff">="</font><font color="#0000ff">navProducts"</font><font color="#0000ff">&gt;&lt;</font>a</font><font color="#ff0000">href</font><font color="#0000ff">="products.aspx"</font>&gt;Products<font color="#a52a2a"><font color="#0000ff">&lt;/</font>a<font color="#0000ff">&gt;&lt;</font><font color="#0000ff">/</font>li</font><font color="#0000ff">&gt;</font></font> <br /><font face="Courier New">   <font color="#008000">&lt;!-- ...and so
on... --&gt;</font></font><font color="#008000"><br /></font><font face="Courier New" color="#a52a2a"><font color="#0000ff">&lt;/</font>ul<font color="#0000ff">&gt;</font></font><p></p><p>
OK so far.  The thing with tabs is you always want the tab of the current page
to glow a little or something to indicate what page the user is up to.
</p><p>
A common way is to assign an ID attribute to the body tag of each page and include
some CSS that looks at the body ID and overrides the <font face="Courier New"><font color="#a31515">#nav</font><font color="#000000" size="2"></font><font color="#a31515" size="2">a</font><font size="2"> </font></font> for
the current page.
</p><p>
The trick comes when the pages all descend from an ASP.NET 2.0 Master Page - the body
tags are going to be identical on each page.
</p><p>
As luck would have it, <a href="http://www.w3.org/TR/REC-CSS2/selector.html#attribute-selectors">CSS
lets us select based on any attribute</a>.  Once the page is rendered each page
will get its own form tag where the Action attribute represents the current loaded
page as so:  
</p><p><font face="Courier New">&lt;<font color="#000080">form</font><font color="#a52a2a">name</font>=<font color="#ff0000">"aspnetForm"</font><font color="#a52a2a">method</font>=<font color="#ff0000">"post"</font><font color="#a52a2a">action</font>=<font color="#ff0000">"Default.aspx"</font><font color="#a52a2a">id</font>=<font color="#ff0000">"aspnetForm"</font>&gt;</font></p><p>
Which would let us add the following to our stylesheet:
</p><font color="#a31515" size="2"><p><font face="Courier New">#nav</font></p></font><font face="Courier New"><font color="#000000" size="2"></font><font color="#a31515" size="2">a:hover</font><font color="#000000" size="2">, </font><font color="#a31515" size="2">body</font><font color="#000000" size="2"></font><font color="#a31515" size="2">form[action="Default.aspx"]</font><font color="#000000" size="2"></font><font color="#a31515" size="2">#NavPlaceHolder</font><font color="#000000" size="2"></font><font color="#a31515" size="2">#nav</font><font color="#000000" size="2"></font><font color="#a31515" size="2">#navHome</font><font color="#000000" size="2"></font><font color="#a31515" size="2">a</font></font><font face="Courier New"><font size="2"><font color="#000000"></font><br />
{ 
<br /></font><font color="#ff0000" size="2">   background</font><font size="2">: </font><font color="#0000ff" size="2">#ffffff</font></font><font face="Courier New" size="2">; 
<br />
}</font><p>
OK So far but the problem is it is case sensitve!  We would need -
If the page loads as default.aspx our tab won't highlight.  <strong>This just
won't do!</strong></p><p>
The trick is to add a new ContentPlaceHolder in our master page straight above the
UL listed above
</p><font size="2"><p></p></font><font face="Courier New"><font color="#0000ff" size="2">&lt;</font><font color="#a31515" size="2">asp</font><font color="#0000ff" size="2">:</font><font color="#a31515" size="2">ContentPlaceHolder</font><font size="2"></font><font color="#ff0000" size="2">runat</font><font color="#0000ff" size="2">="server"</font><font size="2"></font><font color="#ff0000" size="2">id</font><font color="#0000ff" size="2">="pageIdPlaceHolder"</font><font size="2"></font><font color="#0000ff" size="2">&gt;</font><font color="#0000ff" size="2">&lt;/</font><font color="#a31515" size="2">asp</font><font color="#0000ff" size="2">:</font><font color="#a31515" size="2">ContentPlaceHolder</font><font color="#0000ff" size="2">&gt;</font></font><p>
Each page that descends from our master page should then override that ContentPlaceHolder
to add an empty Span with a page-specific ID as so: 
</p><font color="#0000ff" size="2"><p><font face="Courier New">&lt;</font></p></font><font face="Courier New"><font color="#a31515" size="2">asp</font><font color="#0000ff" size="2">:</font><font color="#a31515" size="2">Content</font><font color="#000000" size="2"></font><font color="#ff0000" size="2">ID</font><font color="#0000ff" size="2">="pageIdContent"</font><font color="#000000" size="2"></font><font color="#ff0000" size="2">ContentPlaceHolderID</font><font color="#0000ff" size="2">="pageIdPlaceHolder"</font><font color="#000000" size="2"></font><font color="#ff0000" size="2">runat</font><font color="#0000ff" size="2">="server"</font><font color="#000000" size="2"></font></font><font color="#0000ff" size="2"><font face="Courier New">&gt;</font><br /><font face="Courier New">   &lt;</font></font><font face="Courier New"><font color="#a31515" size="2">span</font><font color="#000000" size="2"></font><font color="#ff0000" size="2">id</font><font color="#0000ff" size="2">="ProductsPage"&gt;&lt;/</font><font color="#a31515" size="2">span</font></font><font color="#0000ff" size="2"><font face="Courier New">&gt; <font color="#008000">&lt;!--
This page will show the Products tab as selected --&gt;</font></font><br /><font face="Courier New">&lt;/</font></font><font face="Courier New"><font color="#a31515" size="2">asp</font><font color="#0000ff" size="2">:</font><font color="#a31515" size="2">Content</font><font color="#0000ff" size="2">&gt;</font></font><p></p><p>
and then we can add a rule to our CSS for each page that would read:  <em>Whenever
there is an element with the ID="ProductsPage" right next to one with the ID="nav"
do the following.</em>  The + operator selects the next adjacent node in the
document as so:
</p><font color="#0000ff" size="2"><font color="#a31515" size="2"><p><font face="Courier New">#<font color="#0000ff"><font color="#a52a2a">ProductsPage</font></font></font></p></font><font face="Courier New"><font color="#a31515" size="2">+</font><font color="#000000" size="2"></font><font color="#a31515" size="2">#nav</font><font color="#000000" size="2"></font><font color="#a31515" size="2">#navProducts</font><font color="#000000" size="2"></font><font color="#a31515" size="2">a</font></font><font size="2"><br /><font face="Courier New">{</font><br /></font><font face="Courier New"><font color="#ff0000" size="2">   background</font><font size="2">: </font><font color="#0000ff" size="2">#ffffff</font></font><font size="2"><font face="Courier New">;</font><br /><font face="Courier New">}</font></font><p><font size="2"><font color="#000000">And there you have it!  Accessable and maintainable
nav bars from a UL using CSS, plus keeping all the time saving layout features of
Master Pages. </font></font></p><p><font size="2"><font color="#808080">Listening To:  <em>The History Of Breaks</em></font></font></p></font></body>
      <title>Pure CSS Tabs with ASP.NET 2.0 Master Pages</title>
      <guid isPermaLink="false">http://deepdark.net/PermaLink,guid,0eaa175f-2819-4d06-9820-38fe39e82fb5.aspx</guid>
      <link>http://deepdark.net/PermaLink,guid,0eaa175f-2819-4d06-9820-38fe39e82fb5.aspx</link>
      <pubDate>Sat, 10 Mar 2007 13:26:14 GMT</pubDate>
      <description>&lt;p&gt;
So I came across a problem using a old CSS trick to make a tab strip/menu bar on a
site from a Unordered List inside a Div 
&lt;/p&gt;
&lt;p&gt;
To create the tabs the trick is you can use some CSS like this: &lt;font color=#a31515 size=2&gt;
&lt;/p&gt;
&gt;&lt;font color=#a31515 size=2&gt;&lt;/font&gt; 
&lt;p&gt;
&lt;font face="Courier New" color=#a31515 size=2&gt;#nav&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt; 
&lt;br&gt;
{&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;float&lt;/font&gt;&lt;font size=2&gt;:&lt;/font&gt;&lt;font color=#0000ff size=2&gt;left&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt; ;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;0&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;10px&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#0000ff size=2&gt;0&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#0000ff size=2&gt;0&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#0000ff size=2&gt;46px&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;list-style&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;none&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" size=2&gt;; 
&lt;br&gt;
}&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#a31515 size=2&gt; 
&lt;br&gt;
#nav&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#a31515 size=2&gt;li&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;&lt;font color=#000000&gt; &lt;/font&gt;
&lt;br&gt;
{&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;font-size&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;150%&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;float&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;left&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin&lt;/font&gt;&lt;font size=2&gt;:&lt;/font&gt;&lt;font color=#0000ff size=2&gt;0&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;0&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" size=2&gt;; 
&lt;br&gt;
}&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#a31515 size=2&gt; 
&lt;br&gt;
#nav&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#a31515 size=2&gt;a&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt; 
&lt;br&gt;
{&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;float&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;left&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;display&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;block&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;margin&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;0&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#0000ff size=2&gt;1px&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#0000ff size=2&gt;0&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#0000ff size=2&gt;0&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt; ;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;padding&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;4px&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#0000ff size=2&gt;8px&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;color&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;#333&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;text-decoration&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;none&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;border&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;1px&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#0000ff size=2&gt;solid&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#0000ff size=2&gt;#949494&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;border-bottom&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;none&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;background&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;#686868&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;;&amp;nbsp;&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;color&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;#949494&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" size=2&gt;; 
&lt;br&gt;
}&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
...to turn a &amp;lt;UL&amp;gt; with the ID="nav" into some tabs.&amp;nbsp; For example we add
the following to the master page: 
&lt;/p&gt;
&lt;font face="Courier New"&gt;&lt;font color=#0000ff&gt;&amp;lt;&lt;/font&gt;&lt;font color=#a52a2a&gt;ul&lt;/font&gt;&lt;font color=#000080&gt; &lt;/font&gt;&lt;font color=#ff0000&gt;id&lt;/font&gt;&lt;font color=#0000ff&gt;="nav" &lt;/font&gt;&lt;font color=#0000ff&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&lt;br&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#a52a2a&gt;&lt;font color=#0000ff&gt;&amp;lt;&lt;/font&gt;li &lt;font color=#ff0000&gt;id&lt;/font&gt;&lt;font color=#0000ff&gt;="navHome"&lt;/font&gt;&lt;font color=#0000ff&gt;&amp;gt;&amp;lt;&lt;/font&gt;a&lt;/font&gt; &lt;font color=#ff0000&gt;href&lt;/font&gt;&lt;font color=#0000ff&gt;="default.aspx"&lt;/font&gt;&amp;gt;Home&lt;font color=#a52a2a&gt;&lt;font color=#0000ff&gt;&amp;lt;/&lt;/font&gt;a&lt;font color=#0000ff&gt;&amp;gt;&lt;/font&gt;&lt;font color=#0000ff&gt;&amp;lt;/&lt;/font&gt;li&lt;/font&gt;&lt;font color=#0000ff&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;font color=#a52a2a&gt;&lt;font color=#0000ff&gt;&amp;nbsp;&lt;/font&gt;
&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/font&gt;&lt;font color=#a52a2a&gt;li &lt;font color=#ff0000&gt;id&lt;/font&gt;&lt;font color=#0000ff&gt;="&lt;/font&gt;&lt;font color=#0000ff&gt;navProducts"&lt;/font&gt;&lt;font color=#0000ff&gt;&amp;gt;&amp;lt;&lt;/font&gt;a&lt;/font&gt; &lt;font color=#ff0000&gt;href&lt;/font&gt;&lt;font color=#0000ff&gt;="products.aspx"&lt;/font&gt;&amp;gt;Products&lt;font color=#a52a2a&gt;&lt;font color=#0000ff&gt;&amp;lt;/&lt;/font&gt;a&lt;font color=#0000ff&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color=#0000ff&gt;/&lt;/font&gt;li&lt;/font&gt;&lt;font color=#0000ff&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&lt;br&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#008000&gt;&amp;lt;!-- ...and so on...
--&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;font color=#008000&gt; 
&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New" color=#a52a2a&gt;&lt;font color=#0000ff&gt;&amp;lt;/&lt;/font&gt;ul&lt;font color=#0000ff&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
OK so far.&amp;nbsp; The thing with tabs is you always want the tab of the current page
to glow a little or something to indicate what page the user is up to.
&lt;/p&gt;
&lt;p&gt;
A common way is to assign an ID attribute&amp;nbsp;to the body tag of each page and include
some CSS that looks at the body ID and overrides the &lt;font face="Courier New"&gt;&lt;font color=#a31515&gt;#nav&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#a31515 size=2&gt;a&lt;/font&gt;&lt;font size=2&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt; for
the current page.
&lt;/p&gt;
&lt;p&gt;
The trick comes when the pages all descend from an ASP.NET 2.0 Master Page - the body
tags are going to be identical on each page.
&lt;/p&gt;
&lt;p&gt;
As luck would have it, &lt;a href="http://www.w3.org/TR/REC-CSS2/selector.html#attribute-selectors"&gt;CSS
lets us select based on any attribute&lt;/a&gt;.&amp;nbsp; Once the page is rendered each page
will get its own form tag where the Action attribute represents the current loaded
page as so: &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;lt;&lt;font color=#000080&gt;form&lt;/font&gt; &lt;font color=#a52a2a&gt;name&lt;/font&gt;=&lt;font color=#ff0000&gt;"aspnetForm"&lt;/font&gt; &lt;font color=#a52a2a&gt;method&lt;/font&gt;=&lt;font color=#ff0000&gt;"post"&lt;/font&gt; &lt;font color=#a52a2a&gt;action&lt;/font&gt;=&lt;font color=#ff0000&gt;"Default.aspx"&lt;/font&gt; &lt;font color=#a52a2a&gt;id&lt;/font&gt;=&lt;font color=#ff0000&gt;"aspnetForm"&lt;/font&gt;&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Which would let us add the following to our stylesheet:
&lt;/p&gt;
&lt;font color=#a31515 size=2&gt; 
&lt;p&gt;
&lt;font face="Courier New"&gt;#nav&lt;/font&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#a31515 size=2&gt;a:hover&lt;/font&gt;&lt;font color=#000000 size=2&gt;, &lt;/font&gt;&lt;font color=#a31515 size=2&gt;body&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#a31515 size=2&gt;form[action="Default.aspx"]&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#a31515 size=2&gt;#NavPlaceHolder&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#a31515 size=2&gt;#nav&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#a31515 size=2&gt;#navHome&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#a31515 size=2&gt;a&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size=2&gt;&lt;font color=#000000&gt; &lt;/font&gt;
&lt;br&gt;
{ 
&lt;br&gt;
&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;background&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;#ffffff&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New" size=2&gt;; 
&lt;br&gt;
}&lt;/font&gt;&gt;
&lt;p&gt;
OK So far but the problem is it is case sensitve!&amp;nbsp; We&amp;nbsp;would need&amp;nbsp;-
If the page loads as default.aspx our tab won't highlight.&amp;nbsp; &lt;strong&gt;This just
won't do!&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The trick is to add a new ContentPlaceHolder in our master page straight above the
UL listed above
&lt;/p&gt;
&lt;font size=2&gt; 
&lt;p&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#0000ff size=2&gt;&amp;lt;&lt;/font&gt;&lt;font color=#a31515 size=2&gt;asp&lt;/font&gt;&lt;font color=#0000ff size=2&gt;:&lt;/font&gt;&lt;font color=#a31515 size=2&gt;ContentPlaceHolder&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#ff0000 size=2&gt;runat&lt;/font&gt;&lt;font color=#0000ff size=2&gt;="server"&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#ff0000 size=2&gt;id&lt;/font&gt;&lt;font color=#0000ff size=2&gt;="pageIdPlaceHolder"&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#0000ff size=2&gt;&amp;gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&amp;lt;/&lt;/font&gt;&lt;font color=#a31515 size=2&gt;asp&lt;/font&gt;&lt;font color=#0000ff size=2&gt;:&lt;/font&gt;&lt;font color=#a31515 size=2&gt;ContentPlaceHolder&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&gt;
&lt;p&gt;
Each page that descends from our master page should then override that ContentPlaceHolder
to add an empty Span with a page-specific ID as so: 
&lt;/p&gt;
&lt;font color=#0000ff size=2&gt; 
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;lt;&lt;/font&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#a31515 size=2&gt;asp&lt;/font&gt;&lt;font color=#0000ff size=2&gt;:&lt;/font&gt;&lt;font color=#a31515 size=2&gt;Content&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#ff0000 size=2&gt;ID&lt;/font&gt;&lt;font color=#0000ff size=2&gt;="pageIdContent"&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#ff0000 size=2&gt;ContentPlaceHolderID&lt;/font&gt;&lt;font color=#0000ff size=2&gt;="pageIdPlaceHolder"&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#ff0000 size=2&gt;runat&lt;/font&gt;&lt;font color=#0000ff size=2&gt;="server"&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt;
&lt;br&gt;
&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#a31515 size=2&gt;span&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#ff0000 size=2&gt;id&lt;/font&gt;&lt;font color=#0000ff size=2&gt;="ProductsPage"&amp;gt;&amp;lt;/&lt;/font&gt;&lt;font color=#a31515 size=2&gt;span&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font face="Courier New"&gt;&amp;gt; &lt;font color=#008000&gt;&amp;lt;!--
This page will show the Products tab as selected --&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;br&gt;
&lt;font face="Courier New"&gt;&amp;lt;/&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#a31515 size=2&gt;asp&lt;/font&gt;&lt;font color=#0000ff size=2&gt;:&lt;/font&gt;&lt;font color=#a31515 size=2&gt;Content&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
and then we can add a rule&amp;nbsp;to our CSS for each page that would read:&amp;nbsp; &lt;em&gt;Whenever
there is an element with the ID="ProductsPage" right next to one with the ID="nav"
do the following.&lt;/em&gt;&amp;nbsp; The + operator selects the next adjacent node in the
document as so:
&lt;/p&gt;
&lt;font color=#0000ff size=2&gt;&lt;font color=#a31515 size=2&gt; 
&lt;p&gt;
&lt;font face="Courier New"&gt;#&lt;font color=#0000ff&gt;&lt;font color=#a52a2a&gt;ProductsPage&lt;/font&gt; &lt;/font&gt;&lt;/font&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#a31515 size=2&gt;+&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#a31515 size=2&gt;#nav&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#a31515 size=2&gt;#navProducts&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#a31515 size=2&gt;a&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;
&lt;br&gt;
&lt;font face="Courier New"&gt;{&lt;/font&gt;
&lt;br&gt;
&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color=#ff0000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;background&lt;/font&gt;&lt;font size=2&gt;: &lt;/font&gt;&lt;font color=#0000ff size=2&gt;#ffffff&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font face="Courier New"&gt;;&lt;/font&gt;
&lt;br&gt;
&lt;font face="Courier New"&gt;}&lt;/font&gt;&lt;/font&gt;&gt;
&lt;p&gt;
&lt;font size=2&gt;&lt;font color=#000000&gt;And there you have it!&amp;nbsp; Accessable and maintainable
nav bars from a UL using CSS, plus keeping all the time saving layout features of
Master Pages. &lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;&lt;font color=#808080&gt;Listening To:&amp;nbsp; &lt;em&gt;The History Of Breaks&lt;/em&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;/font&gt;&gt;&gt;</description>
      <comments>http://deepdark.net/CommentView,guid,0eaa175f-2819-4d06-9820-38fe39e82fb5.aspx</comments>
      <category>CSS</category>
      <category>UX</category>
      <category>ASP.Net</category>
    </item>
  </channel>
</rss>