Commits

Dmitri Nesteruk committed d75fe09

mathjax fixed! no more js noise

Comments (0)

Files changed (23)

BrowserSilencer.cs

+using System;
+using System.Reflection;
+using System.Runtime.InteropServices;
+using System.Windows.Controls;
+
+namespace DmitriNesteruk.TypograFix
+{
+  /// <summary>
+  /// Gets web browser to STFU about javascript errors.
+  /// </summary>
+  public class BrowserSilencer
+  {
+    public static void SetSilent(WebBrowser browser, bool silent)
+    {
+      if (browser == null)
+        throw new ArgumentNullException("browser");
+
+      // get an IWebBrowser2 from the document
+      IOleServiceProvider sp = browser.Document as IOleServiceProvider;
+      if (sp != null)
+      {
+        Guid IID_IWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
+        Guid IID_IWebBrowser2 = new Guid("D30C1661-CDAF-11d0-8A3E-00C04FC9E26E");
+
+        object webBrowser;
+        sp.QueryService(ref IID_IWebBrowserApp, ref IID_IWebBrowser2, out webBrowser);
+        if (webBrowser != null)
+        {
+          webBrowser.GetType().InvokeMember("Silent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.PutDispProperty, null, webBrowser, new object[] { silent });
+        }
+      }
+    }
+
+
+    [ComImport, Guid("6D5140C1-7436-11CE-8034-00AA006009FA"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
+    private interface IOleServiceProvider
+    {
+      [PreserveSig]
+      int QueryService([In] ref Guid guidService, [In] ref Guid riid, [MarshalAs(UnmanagedType.IDispatch)] out object ppvObject);
+    }
+  }
+}
       <TabItem Header="Stateless">
         <Pages:StatelessEditor x:Name="statelessEditor"/>
       </TabItem>
+      <TabItem Header="Mathjax">
+        <Pages:MathjaxEditor x:Name="mathjaxEditor"/>
+      </TabItem>
       <TabItem Header="Line Pattern">
         <Pages:LinePatternGenerator x:Name="linePatternGenerator"/>
       </TabItem>

MainWindow.xaml.cs

       OptionPresets = App.OptionPresets;
 
       InitializeComponent();
+      
       OneTimeViewerInitialization();
 
+      BrowserSilencer.SetSilent(PreviewWebBrowser, true);
+      BrowserSilencer.SetSilent(UnicodeMapBrowser, true);
+      BrowserSilencer.SetSilent(FeatureGuideBrowser, true);
+
       iocContainer.RegisterType<Generator>(new Singleton())
         .RegisterType<IGenerator, ZenGenerator>("zen", new Singleton());
 
       EditorBorder.Child = sp;
 #endif
 
+      // 
+
       // event wireups
       Closing += OnClosing;
     }
 margin-top: 1.929em;
 margin-bottom: 0.643em; }" +
                            "</style>";
+
       const string mathjax = @"
 <script type=""text/x-mathjax-config"">
-  MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['$latex','$'], ['\\(','\\)']]}});
+  MathJax.Hub.Config({tex2jax: {inlineMath: [['$latex','$'], ['\\(','\\)']]}});
 </script>
 <script type=""text/javascript""
   src=""http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"">
   MathJax.Hub.Queue([""Typeset"",MathJax.Hub]);
 }
 </script>";
+
       const string template = "<html><head>{0}{1}{2}</head><body scroll='auto'></body></html>";
       string everything = template.ƒ(encoding, mathjax, style);
       PreviewWebBrowser.NavigateToString(everything);

Pages/MathjaxEditor.xaml

+<UserControl x:Class="DmitriNesteruk.TypograFix.Pages.MathjaxEditor"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             mc:Ignorable="d" 
+             d:DesignHeight="640" d:DesignWidth="1024">
+  <UserControl.Background>
+    <LinearGradientBrush>
+      <GradientStop Color="Black"/>
+      <GradientStop Color="#333333"/>
+    </LinearGradientBrush>
+  </UserControl.Background>
+  <UserControl.Resources>
+    <ResourceDictionary Source="/Themes/Generic.xaml" x:Name="MainDictionary"/>
+  </UserControl.Resources>
+  <Grid>
+    <Grid.ColumnDefinitions>
+      <ColumnDefinition/>
+      <ColumnDefinition/>
+    </Grid.ColumnDefinitions>
+    <Grid.RowDefinitions>
+      <RowDefinition/>
+    </Grid.RowDefinitions>
+    <Border BorderBrush="{StaticResource AlmostBlackBrush}" CornerRadius="5" BorderThickness="5" Grid.Row="1" Margin="5">
+      <TextBox AcceptsReturn="True" FontFamily="Consolas"
+               Name="tbIn" VerticalScrollBarVisibility="Auto" 
+               HorizontalScrollBarVisibility="Auto" BorderThickness="0"
+               TextWrapping="Wrap" TextChanged="OnTextChanged">
+      </TextBox>
+    </Border>
+    <Border BorderBrush="{StaticResource AlmostBlackBrush}" CornerRadius="5" BorderThickness="5" Grid.Row="1" Margin="5" Grid.Column="1">
+      <WebBrowser Name="mathjaxBrowser"/>
+    </Border>
+  </Grid>
+</UserControl>

Pages/MathjaxEditor.xaml.cs

+using System;
+using System.Reflection;
+using System.Runtime.InteropServices;
+using mshtml;
+
+namespace DmitriNesteruk.TypograFix.Pages
+{
+  using System.Windows.Controls;
+
+  /// <summary>
+  /// Interaction logic for MathjaxEditor.xaml
+  /// </summary>
+  public partial class MathjaxEditor : UserControl
+  {
+    // too buggy to keep separate
+    const string mathjax = @"
+<script type=""text/x-mathjax-config"">
+  MathJax.Hub.Config({tex2jax: {inlineMath: [['$latex','$'], ['\\(','\\)']]}});
+</script>
+<script type=""text/javascript""
+  src=""http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"">
+</script>
+<script type=""text/javascript"">
+function updateMath()
+{
+  MathJax.Hub.Queue([""Typeset"",MathJax.Hub]);
+}
+</script>";
+
+    public string BuildInitialPage()
+    {
+      return "<html>{0}<body></body></html>".ƒ(mathjax);
+    }
+
+    public MathjaxEditor()
+    {
+      InitializeComponent();
+
+      mathjaxBrowser.NavigateToString(BuildInitialPage());
+      BrowserSilencer.SetSilent(mathjaxBrowser, true);
+    }
+
+    private void OnTextChanged(object sender, TextChangedEventArgs e)
+    {
+      dynamic doc = mathjaxBrowser.Document as HTMLDocument;
+      doc.body.innerHTML = tbIn.Text;
+      mathjaxBrowser.InvokeScript("updateMath");
+    }
+  }
+}

TypograFix.csproj

       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
+    <Page Include="Pages\MathjaxEditor.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="Pages\StatelessEditor.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
       <DependentUpon>App.xaml</DependentUpon>
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="BrowserSilencer.cs" />
     <Compile Include="EnumToFriendlyNameConverter.cs" />
     <Compile Include="EnumValuesExtension.cs" />
     <Compile Include="Pages\CodeAnnotationEditor.xaml.cs">
     <Compile Include="Pages\LinePatternGenerator.xaml.cs">
       <DependentUpon>LinePatternGenerator.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Pages\MathjaxEditor.xaml.cs">
+      <DependentUpon>MathjaxEditor.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Pages\StatelessEditor.xaml.cs">
       <DependentUpon>StatelessEditor.xaml</DependentUpon>
     </Compile>
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug no C++|Any CPU = Debug no C++|Any CPU
-		Debug no C++|Mixed Platforms = Debug no C++|Mixed Platforms
-		Debug no C++|Win32 = Debug no C++|Win32
 		Debug no C++|x64 = Debug no C++|x64
-		Debug|Any CPU = Debug|Any CPU
-		Debug|Mixed Platforms = Debug|Mixed Platforms
-		Debug|Win32 = Debug|Win32
 		Debug|x64 = Debug|x64
-		Release no C++|Any CPU = Release no C++|Any CPU
-		Release no C++|Mixed Platforms = Release no C++|Mixed Platforms
-		Release no C++|Win32 = Release no C++|Win32
 		Release no C++|x64 = Release no C++|x64
-		Release|Any CPU = Release|Any CPU
-		Release|Mixed Platforms = Release|Mixed Platforms
-		Release|Win32 = Release|Win32
 		Release|x64 = Release|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug no C++|Any CPU.ActiveCfg = Debug no C++|Any CPU
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug no C++|Any CPU.Build.0 = Debug no C++|Any CPU
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug no C++|Mixed Platforms.ActiveCfg = Debug no C++|x64
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug no C++|Mixed Platforms.Build.0 = Debug no C++|x64
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug no C++|Win32.ActiveCfg = Debug no C++|x64
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug no C++|Win32.Build.0 = Debug no C++|x64
 		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug no C++|x64.ActiveCfg = Debug no C++|x64
 		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug no C++|x64.Build.0 = Debug no C++|x64
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug|Win32.ActiveCfg = Debug|Any CPU
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug|Win32.Build.0 = Debug|Any CPU
 		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug|x64.ActiveCfg = Debug|x64
 		{059BB63D-C022-4A90-B3D8-D416018FD088}.Debug|x64.Build.0 = Debug|x64
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release no C++|Any CPU.ActiveCfg = Release no C++|Any CPU
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release no C++|Any CPU.Build.0 = Release no C++|Any CPU
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release no C++|Mixed Platforms.ActiveCfg = Release no C++|x64
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release no C++|Mixed Platforms.Build.0 = Release no C++|x64
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release no C++|Win32.ActiveCfg = Release no C++|x64
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release no C++|Win32.Build.0 = Release no C++|x64
 		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release no C++|x64.ActiveCfg = Release no C++|x64
 		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release no C++|x64.Build.0 = Release no C++|x64
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release|Any CPU.ActiveCfg = Release|x64
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release|Any CPU.Build.0 = Release|x64
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release|Win32.ActiveCfg = Release|Any CPU
-		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release|Win32.Build.0 = Release|Any CPU
 		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release|x64.ActiveCfg = Release|x64
 		{059BB63D-C022-4A90-B3D8-D416018FD088}.Release|x64.Build.0 = Release|x64
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Debug no C++|Any CPU.ActiveCfg = Debug no C++|Any CPU
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Debug no C++|Any CPU.Build.0 = Debug no C++|Any CPU
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Debug no C++|Mixed Platforms.ActiveCfg = Debug no C++|x64
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Debug no C++|Mixed Platforms.Build.0 = Debug no C++|x64
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Debug no C++|Win32.ActiveCfg = Debug no C++|x64
 		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Debug no C++|x64.ActiveCfg = Debug no C++|x64
 		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Debug no C++|x64.Build.0 = Debug no C++|x64
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Debug|Win32.ActiveCfg = Debug|Any CPU
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Debug|Win32.Build.0 = Debug|Any CPU
 		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Debug|x64.ActiveCfg = Debug|x64
 		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Debug|x64.Build.0 = Debug|x64
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Release no C++|Any CPU.ActiveCfg = Release no C++|Any CPU
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Release no C++|Any CPU.Build.0 = Release no C++|Any CPU
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Release no C++|Mixed Platforms.ActiveCfg = Release no C++|x64
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Release no C++|Mixed Platforms.Build.0 = Release no C++|x64
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Release no C++|Win32.ActiveCfg = Release no C++|x64
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Release no C++|Win32.Build.0 = Release no C++|x64
 		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Release no C++|x64.ActiveCfg = Release no C++|x64
 		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Release no C++|x64.Build.0 = Release no C++|x64
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Release|Any CPU.ActiveCfg = Release|x64
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Release|Any CPU.Build.0 = Release|x64
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Release|Win32.ActiveCfg = Release|Any CPU
-		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Release|Win32.Build.0 = Release|Any CPU
 		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Release|x64.ActiveCfg = Release|x64
 		{8C9A6ECC-6CA6-4ECA-B842-F35308679868}.Release|x64.Build.0 = Release|x64
-		{946CF735-A068-445C-9408-3FB2438A2515}.Debug no C++|Any CPU.ActiveCfg = Debug no C++|Any CPU
-		{946CF735-A068-445C-9408-3FB2438A2515}.Debug no C++|Any CPU.Build.0 = Debug no C++|Any CPU
-		{946CF735-A068-445C-9408-3FB2438A2515}.Debug no C++|Mixed Platforms.ActiveCfg = Debug no C++|x64
-		{946CF735-A068-445C-9408-3FB2438A2515}.Debug no C++|Mixed Platforms.Build.0 = Debug no C++|x64
-		{946CF735-A068-445C-9408-3FB2438A2515}.Debug no C++|Win32.ActiveCfg = Debug no C++|x64
-		{946CF735-A068-445C-9408-3FB2438A2515}.Debug no C++|Win32.Build.0 = Debug no C++|x64
 		{946CF735-A068-445C-9408-3FB2438A2515}.Debug no C++|x64.ActiveCfg = Debug no C++|x64
 		{946CF735-A068-445C-9408-3FB2438A2515}.Debug no C++|x64.Build.0 = Debug no C++|x64
-		{946CF735-A068-445C-9408-3FB2438A2515}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{946CF735-A068-445C-9408-3FB2438A2515}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{946CF735-A068-445C-9408-3FB2438A2515}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{946CF735-A068-445C-9408-3FB2438A2515}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{946CF735-A068-445C-9408-3FB2438A2515}.Debug|Win32.ActiveCfg = Debug|Any CPU
-		{946CF735-A068-445C-9408-3FB2438A2515}.Debug|Win32.Build.0 = Debug|Any CPU
 		{946CF735-A068-445C-9408-3FB2438A2515}.Debug|x64.ActiveCfg = Debug|x64
 		{946CF735-A068-445C-9408-3FB2438A2515}.Debug|x64.Build.0 = Debug|x64
-		{946CF735-A068-445C-9408-3FB2438A2515}.Release no C++|Any CPU.ActiveCfg = Release no C++|Any CPU
-		{946CF735-A068-445C-9408-3FB2438A2515}.Release no C++|Any CPU.Build.0 = Release no C++|Any CPU
-		{946CF735-A068-445C-9408-3FB2438A2515}.Release no C++|Mixed Platforms.ActiveCfg = Release no C++|x64
-		{946CF735-A068-445C-9408-3FB2438A2515}.Release no C++|Mixed Platforms.Build.0 = Release no C++|x64
-		{946CF735-A068-445C-9408-3FB2438A2515}.Release no C++|Win32.ActiveCfg = Release no C++|x64
-		{946CF735-A068-445C-9408-3FB2438A2515}.Release no C++|Win32.Build.0 = Release no C++|x64
 		{946CF735-A068-445C-9408-3FB2438A2515}.Release no C++|x64.ActiveCfg = Release no C++|x64
 		{946CF735-A068-445C-9408-3FB2438A2515}.Release no C++|x64.Build.0 = Release no C++|x64
-		{946CF735-A068-445C-9408-3FB2438A2515}.Release|Any CPU.ActiveCfg = Release|x64
-		{946CF735-A068-445C-9408-3FB2438A2515}.Release|Any CPU.Build.0 = Release|x64
-		{946CF735-A068-445C-9408-3FB2438A2515}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{946CF735-A068-445C-9408-3FB2438A2515}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{946CF735-A068-445C-9408-3FB2438A2515}.Release|Win32.ActiveCfg = Release|Any CPU
-		{946CF735-A068-445C-9408-3FB2438A2515}.Release|Win32.Build.0 = Release|Any CPU
 		{946CF735-A068-445C-9408-3FB2438A2515}.Release|x64.ActiveCfg = Release|x64
 		{946CF735-A068-445C-9408-3FB2438A2515}.Release|x64.Build.0 = Release|x64
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug no C++|Any CPU.ActiveCfg = Debug no C++|Any CPU
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug no C++|Any CPU.Build.0 = Debug no C++|Any CPU
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug no C++|Mixed Platforms.ActiveCfg = Debug no C++|x64
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug no C++|Mixed Platforms.Build.0 = Debug no C++|x64
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug no C++|Win32.ActiveCfg = Debug no C++|x64
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug no C++|Win32.Build.0 = Debug no C++|x64
 		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug no C++|x64.ActiveCfg = Debug no C++|x64
 		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug no C++|x64.Build.0 = Debug no C++|x64
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug|Win32.ActiveCfg = Debug|Any CPU
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug|Win32.Build.0 = Debug|Any CPU
 		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug|x64.ActiveCfg = Debug|x64
 		{54FDD674-993D-4444-BE36-985927AE68DB}.Debug|x64.Build.0 = Debug|x64
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Release no C++|Any CPU.ActiveCfg = Release no C++|Any CPU
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Release no C++|Any CPU.Build.0 = Release no C++|Any CPU
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Release no C++|Mixed Platforms.ActiveCfg = Release no C++|x64
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Release no C++|Mixed Platforms.Build.0 = Release no C++|x64
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Release no C++|Win32.ActiveCfg = Release no C++|x64
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Release no C++|Win32.Build.0 = Release no C++|x64
 		{54FDD674-993D-4444-BE36-985927AE68DB}.Release no C++|x64.ActiveCfg = Release no C++|x64
 		{54FDD674-993D-4444-BE36-985927AE68DB}.Release no C++|x64.Build.0 = Release no C++|x64
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Release|Any CPU.ActiveCfg = Release|x64
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Release|Any CPU.Build.0 = Release|x64
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Release|Win32.ActiveCfg = Release|Any CPU
-		{54FDD674-993D-4444-BE36-985927AE68DB}.Release|Win32.Build.0 = Release|Any CPU
 		{54FDD674-993D-4444-BE36-985927AE68DB}.Release|x64.ActiveCfg = Release|x64
 		{54FDD674-993D-4444-BE36-985927AE68DB}.Release|x64.Build.0 = Release|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Debug no C++|Any CPU.ActiveCfg = Debug no C++|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Debug no C++|Mixed Platforms.ActiveCfg = Debug no C++|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Debug no C++|Mixed Platforms.Build.0 = Debug no C++|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Debug no C++|Win32.ActiveCfg = Debug no C++|Win32
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Debug no C++|Win32.Build.0 = Debug no C++|Win32
 		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Debug no C++|x64.ActiveCfg = Debug no C++|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Debug no C++|x64.Build.0 = Debug no C++|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Debug|Any CPU.ActiveCfg = Debug|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Debug|Mixed Platforms.Build.0 = Debug|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Debug|Win32.ActiveCfg = Debug|Win32
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Debug|Win32.Build.0 = Debug|Win32
 		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Debug|x64.ActiveCfg = Debug|x64
 		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Debug|x64.Build.0 = Debug|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Release no C++|Any CPU.ActiveCfg = Release no C++|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Release no C++|Mixed Platforms.ActiveCfg = Release no C++|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Release no C++|Mixed Platforms.Build.0 = Release no C++|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Release no C++|Win32.ActiveCfg = Release no C++|Win32
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Release no C++|Win32.Build.0 = Release no C++|Win32
 		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Release no C++|x64.ActiveCfg = Release no C++|x64
 		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Release no C++|x64.Build.0 = Release no C++|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Release|Any CPU.ActiveCfg = Release|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Release|Mixed Platforms.ActiveCfg = Release|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Release|Mixed Platforms.Build.0 = Release|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Release|Win32.ActiveCfg = Release|x64
-		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Release|Win32.Build.0 = Release|x64
 		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Release|x64.ActiveCfg = Release|x64
 		{BD49323F-FBCC-406E-9582-ECF054EAF7B0}.Release|x64.Build.0 = Release|x64
 	EndGlobalSection
 		HideSolutionNode = FALSE
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
+		EnterpriseLibraryConfigurationToolBinariesPath = packages\Unity.2.1.505.0\lib\NET35
 		VisualSVNWorkingCopyRoot = 
-		EnterpriseLibraryConfigurationToolBinariesPath = packages\Unity.2.1.505.0\lib\NET35
 	EndGlobalSection
 	GlobalSection(SpecExplorer.ActivityCompletionStatus) = preSolution
 		SpecExplorer.ActivityCompletionStatus = 

doc/Default.chm

Binary file modified.

doc/build/Default/Building from Source.html

         </div>
         
     </div>
-    <div id=nonscrollingpagefooter>&copy;ActiveMesa, 2011. All Rights Reserved.</div>
+    <div id=nonscrollingpagefooter>&copy;ActiveMesa, 2012. All Rights Reserved.</div>
 </body>
 </html>

doc/build/Default/Introduction.html

         </div>
         
     </div>
-    <div id=nonscrollingpagefooter>&copy;ActiveMesa, 2011. All Rights Reserved.</div>
+    <div id=nonscrollingpagefooter>&copy;ActiveMesa, 2012. All Rights Reserved.</div>
 </body>
 </html>

doc/build/Default/Markup Rendering.html

         </div>
         
     </div>
-    <div id=nonscrollingpagefooter>&copy;ActiveMesa, 2011. All Rights Reserved.</div>
+    <div id=nonscrollingpagefooter>&copy;ActiveMesa, 2012. All Rights Reserved.</div>
 </body>
 </html>

doc/build/Default/WhatIsRasterization.html

         </div>
         
     </div>
-    <div id=nonscrollingpagefooter>&copy;ActiveMesa, 2011. All Rights Reserved.</div>
+    <div id=nonscrollingpagefooter>&copy;ActiveMesa, 2012. All Rights Reserved.</div>
 </body>
 </html>

doc/build/Default/helpcompilerlog.txt

--- Compile started at Wednesday, 21 December 2011 01:56:31
+-- Compile started at Wednesday, 16 May 2012 12:43:26
 Microsoft HTML Help Compiler 4.74.8702
 
 Compiling c:\Dropbox\Projects\Open-Source\TypograFix\doc\Default.chm
 Default.hhc
 Default.hhk
 
-Compile time: 0 minutes, 8 seconds
+Compile time: 0 minutes, 0 seconds
 6	Topics
 16	Local links
 1	Internet link
 0	Graphics
 
 
-Created c:\Dropbox\Projects\Open-Source\TypograFix\doc\Default.chm, 66,279 bytes
-Compression decreased file by 124,857 bytes.
+Created c:\Dropbox\Projects\Open-Source\TypograFix\doc\Default.chm, 66,277 bytes
+Compression decreased file by 124,859 bytes.
 
--- Compile completed on 12/21/2011 01:56:41
+-- Compile completed on 05/16/2012 12:43:26

doc/build/Default/script/webnav.js

 			break;
 		case "addtofavorites":
 			/* Forward to favorites frame */
-			var favorites = document.getElementById("cntNavfavorites").contentWindow;
-			favorites.postMessage(event.data,"*");
+			var favoritesDiv = document.getElementById("divNavfavorites");
+			var favoritesFrame = document.getElementById("cntNavfavorites");
+			if(!favoritesDiv.getAttribute("innovasys_loaded")) {
+				// Activate favorites pane and when it loads post the message
+				favoritesFrame.onload = function() {
+					favoritesFrame.onload = null;
+					postEventToFavorites(event);
+				}
+				GlobalSetActiveNavTab("favorites");
+			}
+			else {
+				// Favorites already loaded, post message immediately
+				GlobalSetActiveNavTab("favorites");
+				postEventToFavorites(event);
+			}
 			break;
 	}
+}
+
+function postEventToFavorites(event) {
+	var favorites = document.getElementById("cntNavfavorites").contentWindow;
+	favorites.postMessage(event.data,"*");
 }  
 
 function toolbarMessageHandler(event) {

doc/build/Default/webnav.html

 <head>
     <meta content="Innovasys HelpStudio (www.innovasys.com)" name="GENERATOR">
     
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
     <script type="text/javascript" src="script/webutility.js"></script>
     <script type="text/javascript" src="script/webnav.js"></script>
     <link rel="stylesheet" type="text/css" href="stylesheets/webnav.css" />

doc/build/Default/webtoolbar.html

 <head>
     
     <meta content="Innovasys HelpStudio (www.innovasys.com)" name="GENERATOR">
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
     <script type="text/javascript" src="script/webutility.js"></script>
     <script type="text/javascript" src="script/webnav.js"></script>
     <script type="text/javascript" src="script/webhighlight.js"></script>

doc/designtime/search.gif

Added
New image

doc/script/community.js

+/* Community Features Filtering */
+var ic_communityShowPrivate = false;
+var ic_communityShowPublic = false;
+var ic_communitySignedIn = false;
+var ic_clientBehavior = new Object();
+var ic_ajax;
+var oldOnLoad;
+
+/* Hook window load */
+oldOnLoad = (window.onload) ? window.onload : function () {};
+window.onload = function () {oldOnLoad(); ic_loadCommunityFeatureStates()};
+
+function ic_loadCommunityFeatureStates()
+{
+    ic_communityShowPrivate = loadValueWithDefault("community_showPrivate",true);
+    ic_communityShowPublic = loadValueWithDefault("community_showPublic",true);
+    documentElement("CommunityShowPrivateCheckbox").checked = ic_communityShowPrivate;
+    documentElement("CommunityShowPublicCheckbox").checked = ic_communityShowPublic;
+    
+    ic_updateCommunityFilterLabel();
+    ic_populateCommunitySections();    
+}
+
+function ic_saveCommunityFeatureStates()
+{
+    save("community_showPrivate",ic_communityShowPrivate);
+    save("community_showPublic",ic_communityShowPublic);
+}
+
+function ic_setCommunityFeatureVisibility(checkBox)
+{
+    if (checkBox.id == "CommunityShowPrivateCheckbox")
+    {
+        ic_communityShowPrivate = !ic_communityShowPrivate;
+        checkBox.checked = ic_communityShowPrivate;
+    }
+    else if (checkBox.id == "CommunityShowPublicCheckbox")
+    {
+        ic_communityShowPublic = !ic_communityShowPublic;
+        checkBox.checked = ic_communityShowPublic;
+    }
+        
+    ic_updateCommunityFilterLabel();
+    ic_populateCommunitySections();
+    ic_saveCommunityFeatureStates();
+}
+
+function ic_updateCommunityFilterLabel()
+{
+    if(!document.getElementById("showAllCommunityContentLabel"))
+    {
+        return;
+    }
+    
+    document.getElementById("showNoCommunityContentLabel").style.display = ((!ic_communityShowPrivate && !ic_communityShowPublic)?"inline":"none");
+    document.getElementById("showAllCommunityContentLabel").style.display = ((ic_communityShowPrivate && ic_communityShowPublic)?"inline":"none");
+    document.getElementById("showPrivateCommunityContentLabel").style.display = ((ic_communityShowPrivate && !ic_communityShowPublic)?"inline":"none");
+    document.getElementById("showPublicCommunityContentLabel").style.display = ((!ic_communityShowPrivate && ic_communityShowPublic)?"inline":"none");
+}
+
+function loadValueWithDefault(valueName,defaultValue)
+{
+    var value = load(valueName);
+        
+    if(value == null)
+        return defaultValue;
+    else
+    {
+        if (value == "true")
+            return true;
+        else if (value == "false")
+            return false;
+        else
+            return value;
+    }
+}
+
+/* End Community Features Filtering */
+
+function ic_GetPhrase(name)
+{
+    var span = document.getElementById("ic_" + name);
+    if (span)
+    {
+        return span.innerHTML;
+    }
+}
+
+function ic_populateCommunitySections()
+{
+    var publicDisplayStyle = (ic_communityShowPublic?"block":"none");
+    var privateDisplayStyle = (ic_communityShowPrivate?"block":"none");
+    
+    ic_ajax = new InnovasysAjax();
+    ic_ajax.setNodeHandler("privateitems",ic_privateItemsHandler);
+    ic_ajax.setNodeHandler("publicitems",ic_publicItemsHandler);
+    ic_ajax.setNodeHandler("newpagecontent",ic_newPageContentHandler);
+    ic_ajax.setNodeHandler("newscript",ic_newScriptHandler);
+    ic_ajax.setNodeHandler("refresh",ic_refreshHandler);
+    ic_ajax.setNodeHandler("errormessage",ic_errorMessageHandler);
+    ic_ajax.setNodeHandler("signedin",ic_signedInHandler);
+    ic_ajax.setNodeHandler("newstyles",ic_newStylesHandler);
+    
+    // Show the footer if any community features enabled
+    documentElement("communityfooter").style.display = ((ic_communityShowPrivate || ic_communityShowPublic)?"block":"none");
+    
+    var communitydivs = document.getElementsByTagName("DIV");
+    for (var x=0;x<communitydivs.length;x++)
+    {
+        var div = communitydivs[x];
+        if (div.className == "communityprivatecontainer")
+        {
+            div.style.display = privateDisplayStyle;
+            div.getElementsByTagName("DIV").item(0).innerHTML = ic_GetPhrase("Loading");
+        }
+        else if (div.className == "communitypubliccontainer" || div.className == "communityratingcontainer")
+        {
+            div.style.display = publicDisplayStyle;
+            div.getElementsByTagName("DIV").item(0).innerHTML  = ic_GetPhrase("Loading");
+        }
+    }
+    
+    // Fire off the Ajax request for community content
+    ic_ajax.sendRequest(communityBaseUrl + "ic_community.aspx?action=getcontent&language=" + communityPhraseLanguage + "&itemid=" + encodeURIComponent(communityItemId) + "&getprivate=" + (ic_communityShowPrivate?"true":"false") + "&getpublic=" + (ic_communityShowPublic?"true":"false") + "&projectkey=" + communityProjectKey)
+}
+
+function ic_addPrivateContent(contentType)
+{
+    // Fire off the request to add a new item
+    ic_ajax.sendRequest(communityBaseUrl + "ic_community.aspx?action=createitem&language=" + communityPhraseLanguage + "&contenttype=" + contentType + "&itemid=" + encodeURIComponent(communityItemId) + "&isprivate=true&returnurl=" + location.href + "&projectkey=" + communityProjectKey);
+}
+
+function ic_addPublicContent(contentType)
+{
+    // Fire off the request to add a new item
+    ic_ajax.sendRequest(communityBaseUrl + "ic_community.aspx?action=createitem&language=" + communityPhraseLanguage + "&contenttype=" + contentType + "&itemid=" + encodeURIComponent(communityItemId) + "&isprivate=false&returnurl=" + location.href + "&projectkey=" + communityProjectKey);
+}
+
+function ic_postPrivateContent(button,contentType)
+{
+    var txt = button.parentNode.getElementsByTagName("TEXTAREA").item(0);
+    ic_ajax.sendRequest(communityBaseUrl + "ic_community.aspx?action=postnewitem&language=" + communityPhraseLanguage + "&itemid=" + encodeURIComponent(communityItemId) + "&contenttype=" + contentType + "&isprivate=true&projectkey=" + communityProjectKey,"POST",txt.value);
+}
+
+function ic_postPublicContent(button,contentType)
+{
+    var txt = button.parentNode.getElementsByTagName("TEXTAREA").item(0);
+    ic_ajax.sendRequest(communityBaseUrl + "ic_community.aspx?action=postnewitem&language=" + communityPhraseLanguage + "&itemid=" + encodeURIComponent(communityItemId) + "&contenttype=" + contentType + "&isprivate=false&projectkey=" + communityProjectKey,"POST",txt.value);
+}
+
+function ic_postRating(value)
+{
+    ic_ajax.sendRequest(communityBaseUrl + "ic_community.aspx?action=postrating&language=" + communityPhraseLanguage + "&itemid=" + encodeURIComponent(communityItemId) + "&value=" + value + "&projectkey=" + communityProjectKey);
+}
+
+function ic_editPrivateItem(contentId)
+{
+    ic_ajax.sendRequest(communityBaseUrl + "ic_community.aspx?action=edititem&language=" + communityPhraseLanguage + "&contentid=" + contentId + "&projectkey=" + communityProjectKey);  
+}
+
+function ic_editPublicItem(contentId)
+{
+    ic_ajax.sendRequest(communityBaseUrl + "ic_community.aspx?action=edititem&language=" + communityPhraseLanguage + "&contentid=" + contentId + "&projectkey=" + communityProjectKey);  
+}
+
+function ic_deletePrivateItem(contentId)
+{
+    if (window.confirm(ic_GetPhrase("ConfirmDelete")))
+        ic_ajax.sendRequest(communityBaseUrl + "ic_community.aspx?action=deleteitem&language=" + communityPhraseLanguage + "&contentid=" + contentId + "&projectkey=" + communityProjectKey);    
+}
+
+function ic_deletePublicItem(contentId)
+{
+    if (window.confirm(ic_GetPhrase("ConfirmDelete")))
+        ic_ajax.sendRequest(communityBaseUrl + "ic_community.aspx?action=deleteitem&language=" + communityPhraseLanguage + "&contentid=" + contentId + "&projectkey=" + communityProjectKey);    
+}
+
+function ic_postEditPrivateContent(button,contentId)
+{
+    var txt = button.parentNode.getElementsByTagName("TEXTAREA").item(0);
+    ic_ajax.sendRequest(communityBaseUrl + "ic_community.aspx?action=postedititem&language=" + communityPhraseLanguage + "&contentid=" + contentId + "&projectkey=" + communityProjectKey,"POST",txt.value);
+}
+
+function ic_postEditPublicContent(button,contentId)
+{
+    var txt = button.parentNode.getElementsByTagName("TEXTAREA").item(0);
+    ic_ajax.sendRequest(communityBaseUrl + "ic_community.aspx?action=postedititem&language=" + communityPhraseLanguage + "&contentid=" + contentId + "&projectkey=" + communityProjectKey,"POST",txt.value);
+}
+
+function ic_communitySignIn()
+{
+    ic_ajax.sendRequest(communityBaseUrl + "ic_community.aspx?action=signin&language=" + communityPhraseLanguage + "&returnurl=" + location.href + "&projectkey=" + communityProjectKey);
+}
+
+function ic_communityCancelEdit(button)
+{
+    var container = button.parentNode;
+    container.style.display = "none";
+}
+
+function ic_privateItemsHandler(element)
+{
+    ic_commonItemsHandler(element,"communityprivatecontent");
+}
+
+function ic_publicItemsHandler(element)
+{
+    ic_commonItemsHandler(element,"communitypubliccontent");
+}
+
+function ic_refreshHandler()
+{
+    ic_populateCommunitySections();
+}
+
+function ic_errorMessageHandler(element)
+{
+    alert(element.text);
+}
+
+function ic_signedInHandler(element)
+{
+    ic_communitySignedIn = (element.text == "true");
+}
+
+function ic_commonItemsHandler(element,prefix)
+{
+    // The returned XML is a collection of child nodes, one per content type
+    for (x=0;x<element.childNodes.length;x++)
+    {
+        var contentNode = element.childNodes[x];
+        var itemId = contentNode .getAttribute("itemId");
+        var contentType = contentNode .getAttribute("contentType");
+        
+        var contentElement = document.getElementById(prefix + "|" + itemId + "|" + contentType);
+        if (contentElement != null)
+        {
+            contentElement.innerHTML = contentNode.text;
+        }
+    }
+    
+    // Identify any sections without content
+    var communitydivs = document.getElementsByTagName("DIV");
+    for (var x=0;x<communitydivs.length;x++)
+    {
+        var div = communitydivs[x];
+        if (div.className == "communityprivatecontainer")
+        {
+            if (div.getElementsByTagName("DIV").item(0).innerHTML == ic_GetPhrase("Loading"))
+            {
+                if (ic_communitySignedIn)
+                {
+                    div.getElementsByTagName("DIV").item(0).innerHTML = ic_GetPhrase("NoNotes");
+                }
+                else
+                    div.getElementsByTagName("DIV").item(0).innerHTML = ic_GetPhrase("SignInToView");
+            }
+        }
+        else if (div.className == "communitypubliccontainer")
+        {
+            if (div.getElementsByTagName("DIV").item(0).innerHTML == ic_GetPhrase("Loading"))
+                div.getElementsByTagName("DIV").item(0).innerHTML  = ic_GetPhrase("NoComments");
+        }
+    }
+    
+}
+
+function ic_newPageContentHandler(element)
+{
+        var elementId = element.getAttribute("clientElementId");
+        
+        var contentElement = document.getElementById(elementId);
+        if (contentElement == null)
+        {
+            contentElement = document.createElement("DIV");
+            document.body.appendChild(contentElement);
+        }
+        contentElement.innerHTML = element.text;
+}
+
+function ic_newStylesHandler(element)
+{
+    var styles = element.text;
+    var newSS=document.createElement('link');
+    newSS.rel='stylesheet';
+    newSS.href=styles;
+    document.getElementsByTagName("head")[0].appendChild(newSS);
+}
+
+function ic_newScriptHandler(element)
+{
+    if (element.text.length > 0)
+    {
+        var ua = window.navigator.userAgent;
+        var msie = ua.indexOf ( "MSIE " );
+        var safari = ua.indexOf ( "Safari");
+        var globalObj = this;
+        if ( safari != -1)
+            setTimeout(element.text,0);                        
+        else if ( msie != -1 )
+            window.execScript(element.text);
+        else
+        {
+            if (globalObj.eval)
+                globalObj.eval(element.text);
+            else
+                eval(element.text);
+        }
+    }
+}
+
+function ic_communityNavigate(url)
+{
+    if (isDesignTime)
+        window.external.communityLogin(url);
+    else
+        location.href = url;
+}
+
+
+/**** Ajax Support ****/
+
+/* Prototypes to make cross browser DOM functionality simpler */
+
+var isIE = (window.navigator.userAgent.indexOf("MSIE") > 0);
+
+if (!isIE) {
+  // select the first node that matches the XPath expression
+  // xPath: the XPath expression to use
+  XMLDocument.prototype.selectSingleNode = function(xPath) {
+    var doc = this;
+    if (doc.nodeType != 9)
+      doc = doc.ownerDocument;
+    if (doc.nsResolver == null) doc.nsResolver = function(prefix) { return(null); };
+    var node = doc.evaluate(xPath, this, doc.nsResolver, XPathResult.ANY_UNORDERED_NODE_TYPE, null);
+    if (node != null) node = node.singleNodeValue;
+    return(node);
+  }; // selectSingleNode
+
+  Node.prototype.__defineGetter__("text", function () {
+    return(this.textContent);
+  }); // text
+}
+
+if(typeof HTMLElement!="undefined" && !HTMLElement.prototype.insertAdjacentElement){
+    HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode)
+    {
+        switch (where){
+        case 'beforeBegin':
+            this.parentNode.insertBefore(parsedNode,this)
+            break;
+        case 'afterBegin':
+            this.insertBefore(parsedNode,this.firstChild);
+            break;
+        case 'beforeEnd':
+            this.appendChild(parsedNode);
+            break;
+        case 'afterEnd':
+            if (this.nextSibling) this.parentNode.insertBefore(parsedNode,this.nextSibling);
+            else this.parentNode.appendChild(parsedNode);
+            break;
+        }
+    }
+
+    HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr)
+    {
+        var r = this.ownerDocument.createRange();
+        r.setStartBefore(this);
+        var parsedHTML = r.createContextualFragment(htmlStr);
+        this.insertAdjacentElement(where,parsedHTML)
+    }
+
+
+    HTMLElement.prototype.insertAdjacentText = function(where,txtStr)
+    {
+        var parsedText = document.createTextNode(txtStr)
+        this.insertAdjacentElement(where,parsedText)
+    }
+}
+
+/* End cross browser DOM Prototypes */
+
+/* Hashtable implementation */
+
+function InnovasysHashtable()
+{
+   this.data = new Object();
+   this.keys = new Array();
+} // end constructor
+
+
+function InnovasysHashtable_getKey(raw)
+{
+   // avoids conflict with actual attributes
+   return '__'+ raw +'__';
+}
+
+function InnovasysHashtable_get(nam)
+{
+   var key = this.getKey(nam);
+   // retreive value if key exists, otherwise null
+   var val = (this.data[key]) ? this.data[key] : null;
+   return val;
+}
+
+function InnovasysHashtable_put(nam, val)
+{
+   // Check that name isn't missing
+   if (!nam) return false;
+   
+   var key = this.getKey(nam);
+   
+   // Add if doesn't already exist
+   var exists = true;
+   if (!this.data[key])
+   {
+      exists = false;
+      this.keys[this.keys.length] = key;
+   }
+   
+   // return old value if set, otherwise null
+   var oldval = exists ? this.data[key] : null;
+   
+   this.data[key] = val;
+    
+   return oldval;
+}
+
+
+function InnovasysHashtable_keys()
+{
+   // return a copy of the array so that it isn't
+   // accidentally modified by the caller
+   return keys.slice(0);
+}
+
+function InnovasysHashtable_containsKey(nam)
+{
+   // Return true if key found
+   return (this.get(nam) != null);
+}
+
+InnovasysHashtable.prototype.getKey = InnovasysHashtable_getKey;
+InnovasysHashtable.prototype.get = InnovasysHashtable_get;
+InnovasysHashtable.prototype.put = InnovasysHashtable_put;
+InnovasysHashtable.prototype.keys = InnovasysHashtable_keys;
+InnovasysHashtable.prototype.containsKey = InnovasysHashtable_containsKey;
+
+/* End Hashtable implementation */
+
+
+var HTTP_STATUS_OK = 200;
+var READYSTATE_COMPLETED = 4;
+var NODE_TYPE_ELEMENT = 1;
+
+function InnovasysAjax(recurseOnChildren)
+{
+    // request objects
+    this.aRequests = new Array();
+    this.aRequests[0] = null;
+    // maps handlers to element names
+    this.hRespHandlers = new InnovasysHashtable();
+    // records if a wildcard handler has been set
+    this.isWildcardSet = false;
+    // whether or not to recurse on children of a 
+    // matched element that has already been passed
+    // to an appropriate handler function.
+    this.recurseOnChildren = 
+      recurseOnChildren ? true : false;
+    
+    this.sendRequest = function(url, method, requestxml)
+    {
+        // set defaults for omitted optional arguments
+        if (!method) method = "GET";
+        if (!requestxml) requestxml = null;
+
+        // request object
+        var req = null;
+
+        // look for an empty spot in requests 
+        // array due to a deleted request. 
+
+        // default spot is at end
+        var openIndex = this.aRequests.length;
+        // look for closer spot
+        for (var i=0; i<this.aRequests.length; i++)
+        {
+            if (this.aRequests[i] == null)
+            {
+                openIndex = i;
+                break;
+            }
+        }
+
+    // now make the request, if possible
+        if (window.ActiveXObject)
+        {
+            try {req = window.external.GetXMLHTTP();} catch (ex) { }
+            if (!req)
+                req = new ActiveXObject("Microsoft.XMLHTTP");
+            if (req)
+            {
+                // this might look odd, but it is
+                // necessary because ‘this’ in event 
+                // handlers refers to the owner of the 
+                // fired event. See: 
+                // www.quirksmode.org/js/this.html
+                var self = this;
+                req.onreadystatechange = 
+                  function() {self.handle()};
+                // add the element to the array before 
+                // doing anything that will fire 
+                // readyStateChange event. If we didn’t
+                // do this now, we could be getting event 
+                // firings from request objects that we 
+                // can’t find in our requsts array, when
+                // we go to handle the readyStateChange.
+                this.aRequests[openIndex] = req;
+                req.open(method, url, true);
+                req.send(requestxml);
+            }
+            else
+            {
+                return false;
+            }
+        }
+        else if (window.XMLHttpRequest)
+        {
+            // this might look odd, but it is
+            // necessary because ‘this’ in event 
+            // handlers refers to the owner of the 
+            // fired event. See: 
+            // www.quirksmode.org/js/this.html
+            var self = this;
+            req = new XMLHttpRequest();
+            req.onreadystatechange = 
+               function() {self.handle()};
+            // add the element to the array before 
+            // doing anything that will fire 
+            // readyStateChange event. If we didn’t
+            // do this now, we could be getting event 
+            // firings from request objects that we 
+            // can’t find in our requsts array, when we 
+            // go to handle the readyStateChange.
+            this.aRequests[openIndex] = req;
+            req.open(method, url, true);
+            req.setRequestHeader("Content-Type", "text/xml");
+            req.send(requestxml);
+        }
+        else
+        {
+            // no support
+            return false; 
+        } 
+
+        return true; // indicate no errors
+    }; 
+
+    this.handle = function()
+    {
+        // cycle through request objects to see 
+        // if any are ready with a response.
+        for (var i=0; i<this.aRequests.length; i++)
+        {
+            // if state is "complete"
+            if (this.aRequests[i] != null && this.aRequests[i].readyState == 4)
+            {
+               if (this.aRequests[i].status == 0 || this.aRequests[i].status == HTTP_STATUS_OK)
+               {
+                  // pass this off to the xml parser
+                  this.parseResponse(this.aRequests[i].responseXML);
+                  this.aRequests[i] = null;
+               }
+            }
+        }
+    };
+    
+    this.setNodeHandler = function(sElementName, funcHandler)
+    {
+        // flip flag if wildcard
+        if (sElementName == '*')
+            this.isWildcardSet = true;
+
+        // add the element handler to the hashtable
+        return this.hRespHandlers.put(sElementName, funcHandler);
+    };
+    
+    
+    this.parseResponse = function(oNode)
+    {
+        if (!oNode) return;
+        
+        // base case (oNode is a leaf element)
+        if (!oNode.hasChildNodes()) return;
+
+        // otherwise recurse through children
+        var children = oNode.childNodes;
+
+        for (var i=0; i<children.length; i++)
+        {
+            // only act on elements
+            if (children[i].nodeType == NODE_TYPE_ELEMENT)
+            {
+                // check for specific handler
+                var elementName = children[i].nodeName;
+                if (this.hRespHandlers.containsKey(elementName))
+                {
+                    // get the handler
+                    var funcHandler = this.hRespHandlers.get(elementName);
+                    // fire the handler
+                    funcHandler(children[i]);
+                           
+                    // recurse if necessary
+                    if (this.recurseOnChildren) 
+                        this.parseResponse(children[i]);
+                }
+                else if (this.isWildcardSet)
+                {
+                    // retreive the handler
+                    var funcHandler = this.hRespHandlers.get('*');
+                    // fire the handler
+                    funcHandler(children[i]);
+
+                    // recurse if necessary
+                    if (this.recurseOnChildren) 
+                        this.parseResponse(children[i]);
+                }
+                else
+                {
+                    // no match on this tree, search children
+                    this.parseResponse(children[i]);
+                }
+            }
+        }
+    };
+
+}

doc/scripts/mshs.js

+/* Returns a document element using the Firefox friendly getElementById */
+function documentElement(id) {
+    return document.getElementById(id);
+}
+
+/* Locates the first meta tag with a specific name */
+function FindMetaTag(name) {
+    var AllMetaTags = document.getElementsByTagName('meta');
+    for (var i = 0; i < AllMetaTags.length; i++) {
+        var MetaTag = AllMetaTags[i];
+        if (MetaTag.name == name)
+            return MetaTag;
+    }
+}
+
+/* Gets the MSHS base url for resources */
+function ResourceBaseUrl() {
+
+    if (isDesignTime) {
+        return '';
+    }
+    else {
+        // Get the first script tag
+        var script = document.getElementById('mshs_support_script');
+
+        // Extract the src which is a full resource url to within our origin .mshc
+        var scriptSrc = script.src;
+
+        // Get the portion up to the ; (the base url for resource references)
+        var startIndex = scriptSrc.indexOf(';') + 1;
+        var scriptUrl = scriptSrc.substring(0, startIndex);
+
+        return scriptUrl;
+    }
+}
+
+function ToggleSection(id) {
+    var element;
+    var img;
+
+    // Find the element
+    element = documentElement(id);
+    img = documentElement(id + "_Image");
+    if (element) {
+        if (element.className == "hs-collapsed") {
+            element.className = "hs-expanded";
+            if (img) {
+                img.src = ResourceBaseUrl() + "images/hs-expanded.gif";
+                if (getStyleAttribute(img, "hs-hidealltext"))
+                    img.alt = getStyleAttribute(img, "hs-hidealltext");
+                else
+                    img.alt = "Hide";
+            }
+        }
+        else {
+            element.className = "hs-collapsed";
+            if (img) {
+                img.src = ResourceBaseUrl() + "images/hs-collapsed.gif";
+                if (getStyleAttribute(img, "hs-showalltext"))
+                    img.alt = getStyleAttribute(img, "hs-showalltext");
+                else
+                    img.alt = "Show";
+            }
+        };
+    }
+}
+function getStyleAttribute(element, styleProp) {
+    if (element.currentStyle)
+        return element.currentStyle[styleProp];
+    else if (window.getComputedStyle)
+        return document.defaultView.getComputedStyle(element, null).getPropertyValue(styleProp);
+}
+function HideOrShowAllCSections(show) {
+    var spans
+    var divs
+
+    spans = document.getElementsByTagName("SPAN");
+    if (spans) {
+        for (var spanindex = 0; spanindex < spans.length; spanindex++) {
+            if ((spans[spanindex].className == "hs-collapsed" && show) || (spans[spanindex].className == "hs-expanded" && !show)) {
+                ToggleSection(spans[spanindex].id)
+            }
+        }
+    }
+    divs = document.getElementsByTagName("DIV")
+    if (divs) {
+        for (var divindex = 0; divindex < divs.length; divindex++) {
+            if ((divs[divindex].className == "hs-collapsed" && show) || (divs[divindex].className == "hs-expanded" && !show)) {
+                ToggleSection(divs[divindex].id)
+            }
+        }
+    }
+}
+function HideAllCSections() {
+    var HSHideAll = documentElement("HSHideAll");
+    var HSShowAll = documentElement("HSShowAll");
+
+    HideOrShowAllCSections(false)
+    if (HSHideAll) {
+        HSHideAll.style.display = "none";
+        if (HSShowAll) {
+            HSShowAll.style.display = "block";
+        }
+    }
+}
+function ShowAllCSections() {
+    var HSHideAll = documentElement("HSHideAll");
+    var HSShowAll = documentElement("HSShowAll");
+
+    HideOrShowAllCSections(true)
+    if (HSShowAll) {
+        HSShowAll.style.display = "none";
+        if (HSHideAll) {
+            HSHideAll.style.display = "block";
+        }
+    }
+}
+
+function ShowPageAddress() {
+    alert(location.href);
+}
+
+function getNextSibling(n) {
+    n = n.nextSibling;
+    while (n) {
+        if (n.nodeType == 1)
+            return n;
+        else
+            n = n.nextSibling;
+    }
+}
+
+function bodyLoadMain() {
+
+    if (!isDesignTime) {
+
+        // Fix double line breaks
+        var linebreaks = document.getElementsByTagName("BR");
+        if (linebreaks) {
+            for (var linebreakindex = 0; linebreakindex < linebreaks.length; linebreakindex++) {
+                var linebreak = linebreaks[linebreakindex];
+                var sibling = getNextSibling(linebreak);
+                if (sibling && sibling.tagName == "BR")
+                    linebreak.parentNode.removeChild(linebreak);
+            }
+        }
+
+        // Fix double captions and bookmark links
+        var anchors = document.getElementsByTagName("A");
+        if (anchors) {
+            for (var anchorindex = 0; anchorindex < (anchors.length); anchorindex++) {
+                var anchor = anchors[anchorindex];
+                var anchorCaption = anchor.innerText;
+                if (anchorCaption && anchorCaption.substring(0, anchorCaption.length / 2) == anchorCaption.substring(anchorCaption.length / 2))
+                    anchor.innerHTML = anchorCaption.substring(anchorCaption.length / 2);
+                    
+                // Check for bookmark links - currently prefixed with the full page url
+                var anchorHref = anchor.href;
+                if (anchorHref.indexOf('#') != -1) {
+                    var bookmark = anchorHref.substring(anchorHref.indexOf('#'));
+                    if (anchorHref.substring(0, anchorHref.indexOf('#')) == location.href) {
+                        // Bookmark in this document
+                        anchor.target = "_self";
+                    }
+                }
+            }
+        }
+
+        // Fix Javascript rules using urls
+        var stylesheets = document.styleSheets;
+        if (stylesheets && stylesheets.length > 0) {
+            for (var stylesheetindex = 0; stylesheetindex < (stylesheets.length); stylesheetindex++) {
+                var stylesheet = stylesheets[stylesheetindex];
+                var rules;
+                if (stylesheet.rules) {
+                    rules = stylesheet.rules;
+                }
+                else {
+                    rules = stylesheet.cssRules;
+                }
+                if (rules) {
+                    for (var ruleindex = 0; ruleindex < rules.length; ruleindex++) {
+                        var rule = rules[ruleindex];
+                        if (rule.style.backgroundImage) {
+                            if (rule.style.backgroundImage.substring(0, 4) == 'url(') {
+                                var backgroundText = rule.style.backgroundImage;
+                                var originalUrl
+                                if (rule.style.backgroundImage.indexOf('127.0.0.1') != -1) {
+                                    // Chrome - rule returned as full url
+                                    originalUrl = backgroundText.substring(backgroundText.indexOf('/', backgroundText.indexOf('127.0.0.1')) + 5, backgroundText.lastIndexOf(')'));
+                                }
+                                else {
+                                    // IE - rule returned as original, with a .. prefix
+                                    originalUrl = backgroundText.substring(backgroundText.indexOf('../') + 2, backgroundText.lastIndexOf(')'));
+                                }
+                                originalUrl = originalUrl.replace("\"", "");
+                                var newUrl = 'url(\"' + ResourceBaseUrl() + originalUrl + '\")';
+                                backgroundText = newUrl + backgroundText.substring(backgroundText.indexOf(')') + 1);
+                                rule.style.backgroundImage = backgroundText;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    if (!isDesignTime) {
+        bodyLoad();
+
+        // Show the main content section
+        document.getElementById('mainBody').style.display = 'block';
+    }
+
+}

doc/stylesheets/branding.css

+
+body.OH_VSIP_body
+{
+	font-family:Segoe UI, Verdana, Arial;
+	font-size:0.85em; /*10pt*/
+	color:#000;
+	margin:0px;
+	padding:0px;
+	min-width:600px;
+	background-color:#fff;
+}
+
+body
+{
+	font-family:Segoe UI, Verdana, Arial;
+	font-size:0.85em; /*10pt*/
+	color:#000;
+	margin:0px;
+	padding:0px;
+	min-width:600px;
+	background-color:#fff;
+}
+
+a, .linkstyle
+{
+	color: #1364c4;
+	text-decoration: none;
+}
+
+a:link
+{
+	color: #1364c4;
+}
+a:visited
+{
+	color: #960bb4;
+}
+.OH_leftNav a:visited
+{
+  color: #1364c4;
+}
+
+a:hover,
+a:active
+{
+	color: #960bb4;
+	
+}
+
+a img {
+	border:none;
+}
+
+pre
+{
+  width: 600px;
+  overflow: hidden;
+}
+
+.OH_topic
+{
+  margin: 13px;
+}
+
+DIV.OH_title
+{
+  clear:both;
+	font-family:Segoe UI, Verdana, Arial;
+	margin-left:-13px;
+	margin-right:-13px;
+}
+
+DIV.OH_title table
+{
+  border: 0;
+	border-color: #ffffff;
+	width: 99%;
+  margin: 0px;
+	padding: 0px;
+	border-collapse:collapse; 
+	border-spacing:0; 
+}
+
+DIV.OH_title table tr td
+{
+  border: 0px;
+	height: 22px;
+	vertical-align: middle;
+}
+
+.OH_tdSearchTitle
+{
+	font-family:Segoe UI, Verdana, Arial;
+	font-size: 1.45em;  /*17pt*/
+	font-weight: bold;
+	padding-left:10px;
+	text-align: left;
+	color:#250c58;
+}
+
+.OH_tdTitleColumn
+{
+	font-family:Segoe UI, Verdana, Arial;
+	font-size: 1.45em;  /*17pt*/
+	font-weight: bold;
+	color:#250c58;
+	padding:0px;
+	padding-left:10px;
+	text-align: left;
+}
+
+.OH_tdLogoColumn
+{
+  padding:0px;
+  padding-top:11px;
+	padding-right:13px;
+	padding-bottom:12px;
+	vertical-align:middle;
+	text-align: right;
+}
+
+DIV.majorTitle
+{
+  font-size:0.5em; /*6pt*/
+  font-weight:normal;
+  color:Black;
+  padding-bottom:2px;
+}
+
+a.other-version
+{
+	padding:0px 5px 0px 5px;
+}
+.breadcrumb
+{
+	font-family:Segoe UI, Verdana, Arial;
+	font-size:1em; /*12pt*/
+	line-height:300%;
+	vertical-align:middle;
+	background-color:#E6E6E6;
+	width:100%;
+}
+
+.target
+{
+	font-weight:bold;
+}
+
+a.breadcrumb
+{
+	text-decoration:none;
+	cursor:pointer;
+}
+
+table.header
+{
+	width:100%;
+}
+
+td.header
+{
+	padding:0px 0px 0px 16px;
+}
+.nextbc
+{
+	background-color:Transparent;
+	padding:0px 3px 0px 3px;
+	position:relative;
+	right:0;
+}
+
+H1 {
+	font-size:2em; /*24pt*/
+	font-weight:400;
+}
+
+H1.heading { 
+    font-size:1.2em; /*14pt*/
+  	font-family:Segoe UI, Verdana, Arial;
+    font-weight:bold;
+    line-height:120%;
+}
+
+H2 { 
+	font-size:1.15em; /*13.5pt*/
+	font-weight:bold;
+}
+
+H2.subtitle {
+	font-size:1.8em; /*22pt*/
+	font-weight:400;
+	margin-bottom:0.6em;
+}
+H3 {
+	font-size:1.1em; /*13pt*/
+	font-weight:bold;
+}
+.heading
+{
+	font-size:0.85em; /*10pt*/
+	font-family:Segoe UI, Verdana, Arial;
+	font-weight:bold;
+	margin:0px;
+	margin-top:18px;
+}
+H4.subHeading
+{
+    margin-top: 10px;
+    font-size: 1em; /*12pt*/
+}
+
+H4.subHeading,
+.subHeading
+{
+	font-size:0.85em; /*10pt*/
+	font-family:Segoe UI, Verdana, Arial;
+	font-weight:bold;
+	margin:0px;
+}
+dl {
+	margin:0 0 10px;
+	padding:0 0 0 1px;
+}
+dt {
+	font-style:normal;
+	margin:0px;
+}
+dd
+{
+  margin-left:13px;
+}
+li {
+	margin-bottom:3px;
+	margin-left:0;
+}
+ol {
+	line-height:140%;
+	list-style-type:decimal;
+	margin-bottom:15px;
+}
+ol ol {
+	line-height:140%;
+	list-style-type:lower-alpha;
+	margin-bottom:4px;
+	margin-top:3px;
+}
+
+ol ol ol
+{
+	line-height:140%;
+	list-style-type:lower-roman;
+	margin-bottom:4px;
+	margin-top:3px;
+}
+
+ol ul,ul ol {
+	line-height:140%;
+	margin-bottom:15px;
+	margin-top:15px;
+}
+
+p {
+	margin:0;
+	margin-top:12px;
+	margin-bottom:12px;
+}
+div.section p {
+	margin-bottom:15px;
+	margin-top:0;
+}
+ul {
+	line-height:140%;
+	list-style-position:outside;
+	list-style-type:disc;
+	margin-bottom:15px;
+}
+ul ul {
+	line-height:140%;
+	list-style-type:disc;
+	margin-bottom:4px;
+	margin-left:13px;
+	margin-top:3px;
+}
+
+div#header {
+	background-color:#d4dfff;
+	padding:0;
+	width:100%;
+}
+div#header table td {
+	color:#00f;
+	margin-bottom:0;
+	margin-top:0;
+	padding-right:20px;
+}
+
+div#header table tr#headerTableRow3 td {
+	padding-bottom:2px;
+	padding-top:5px;
+}
+div#header table#bottomTable {
+	border-top-color:#fff;
+	border-top-style:solid;
+	border-top-width:1px;
+	text-align:left;
+}
+
+div#mainSection
+{
+  padding: 10px;
+
+}
+
+DIV.OH_outerContent div#mainSection table
+{
+  border-collapse:collapse;
+  border:1px solid #bbbbbb;
+  margin-bottom:5px;
+  margin-top:5px;
+  margin-right:13px;
+  padding:0px;
+  width:auto;
+}
+
+DIV.OH_outerContent div#mainSection table th 
+{
+	font-family:Segoe UI, Verdana, Arial;
+  font-size:0.85em; /*10pt*/
+  border:1px solid #bbbbbb;
+  color:#000000;
+  background-color:#e5e5e5;
+  padding-left:13px;
+  padding-right:13px;
+  vertical-align:middle;
+  text-align:left;
+}
+
+DIV.OH_outerContent div#mainSection table td
+{
+	font-family:Segoe UI, Verdana, Arial;
+  font-size:0.85em; /*10pt*/
+  border:1px solid #bbbbbb;
+  color:#000000;
+  padding-left:13px;
+  padding-right:13px;
+  overflow:auto;
+}
+
+DIV.OH_outerContent div#mainSection table td.imageCell
+{
+  white-space:nowrap;
+}
+
+DIV.OH_outerContent DIV#mainSection TABLE.MtpsTableLayout
+{
+  BORDER: 0px;
+}
+
+DIV.OH_outerContent DIV#mainSection TABLE.MtpsTableLayout TD
+{
+  PADDING-RIGHT: 5px;
+  PADDING-LEFT: 5px; 
+  MARGIN: 1px; 
+  BORDER: 0px;
+}
+
+DIV.OH_outerContent div#mainSection table table td
+{
+  border-right:0px;
+}
+
+.media img 
+{
+    vertical-align:top;
+}
+
+.HeaderCaptionText, .title {
+    color:#000000;
+	font-family:Segoe UI, Verdana, Arial;
+    font-size:1.9em; /*24pt*/
+    font-style:normal;
+    font-variant:normal;
+    font-weight:bold;
+    line-height:normal;
+    margin:0pt 0pt 10px;
+}
+
+div#mainBody div.alert,
+div#mainBody div.code {
+    width:98.9%;
+}
+
+div#mainBody div.alert
+{
+    padding-bottom:0.82em; /*9px*/
+}
+
+span.selflink {
+	font-weight:bold;
+}
+
+span.code
+{
+    font-family: Monospace, Courier New, Courier;
+    color: #000066;
+}
+
+span.parameter {
+  font-style:italic;
+}
+
+span.input {
+  font-weight:bold;
+  color:Red;
+}
+
+span.label 
+{
+	font-weight: bold;
+}
+
+div.caption
+{
+	font-weight: bold;
+	font-size:1em; /*12pt*/
+	color:#003399;
+}
+
+.procedureSubHeading {
+    font-size : 1.1em; /*13.5pt*/
+    font-weight:bold;
+}
+
+/* added for new spans that replace
+   sub, sup, big and small tags
+*/
+span.sub {vertical-align:sub }
+span.sup {vertical-align:super }
+span.big {font-size:larger}
+span.small {font-size:smaller}
+span.tt {font-family: Courier, "Courier New", Consolas, monospace}
+
+div.clsNote {
+    background-color:#EEEEEE;
+    margin-bottom:4px;
+    padding:2px;
+}
+
+.OH_regiontitle
+{
+	font-size:1.3em; /*15pt*/
+	font-family:Segoe UI, Verdana, Arial;
+	font-weight:bold;
+	color:#250c58;
+	float: left;
+	background-color: #FFFFFF;
+	margin-top:13px;
+	margin-bottom:5px;
+	padding-right:7px;
+	z-index: 2;
+}
+
+.OH_CollapsibleAreaRegion
+{	
+	z-index: 100;
+}
+
+.OH_RegionToggle
+{
+  line-height:0px;
+	border-top-style: solid;
+	border-top-width: 1px;
+	border-top-color: #e5e5e5;
+	top: -13px;
+	position: relative;
+	float: left;
+	width: 97.5%;
+	z-index: -1;
+}
+
+.OH_CodeSnippetTitleBar
+{
+	background-color:#DDDDDD;
+	padding-top:3px;
+	padding-left:3px;
+	padding-right:3px;
+	padding-bottom:3px;
+	white-space:nowrap;
+	border-bottom:solid 1px #aaaaaa;
+	height:15px;
+    word-spacing:normal;
+	letter-spacing:normal; 	
+}
+
+.OH_CodeDisplayLanguage
+{
+	float:left;
+    text-align:left;
+}
+
+.OH_CopyCodeButton
+{
+	float:right;
+    text-align:right; 
+}
+span.copyCode
+{
+	color: #0000ff;
+	font-size: 0.9em; /*10.5pt*/
+	font-weight: normal;
+	cursor: hand;
+	float: right;
+	display: inline;
+	text-align: right;
+}
+a.copyCode
+{
+    cursor: pointer;
+    color: blue;
+    text-decoration: none;
+    text-align:right;
+}
+div.libCScode
+{
+	width:98.9%;
+	padding-bottom: 20px;
+	border-top:#ffffff 5px solid;
+	display:block;
+}
+div.libCScode table
+{
+	border: 0;
+	font-size:0.85em; /*10pt*/
+	margin-bottom: 5px;
+	width: 100%
+}
+div.libCScode table th 
+{
+	background:	#dddddd;
+	border-bottom-color: #C8CDDE;
+	border-bottom-style: solid;
+	border-bottom-width: 1px;
+	color: #000066;
+	font-weight: bold;
+}
+div.libCScode table td, pre.libCScode
+{
+	background:	#dddddd;
+	border-top-color: #C8CDDE;
+	border-top-style: solid;
+	border-top-width: 1px;
+	padding-left: 5px;
+	padding-right: 5px;
+	padding-top: 5px;
+	margin: 0 0 10px 0;
+	display:block;
+}
+div.libCScode pre
+{
+	font-family:Monospace, Courier New, Courier;
+	font-size: 1.05em; /*13pt*/
+	color:	#000066;
+	white-space:-moz-pre-wrap;
+	word-wrap:	break-word;
+	overflow:hidden;
+	
+}
+pre.ideCScode
+{
+	background:	#F7F7FF;
+	border-top-color: #FFFFFF;
+	border-top-style: solid;
+	border-top-width: 1px;
+	padding-left: 5px;
+	padding-right: 5px;
+	padding-top: 5px;
+	padding-bottom: 0px;
+	margin: 0 0 10px 0;
+	word-wrap:break-word;
+	font-size:1.05em; /*13pt*/
+	border-bottom:#ffffff 5px solid;
+	font-family:Monospace, Courier New, Courier;
+	white-space:pre;
+	display:block;
+}
+
+.OH_CodeSnippetContainer
+{	
+	clear:both;
+	width: 100%;
+	margin-top:10px;
+	line-height:normal;
+}
+
+.OH_CodeSnippetContainerTabs
+{
+  position:relative;
+  top:5px;
+  _top:3px;
+  float:left;
+  background-color:Transparent;
+	vertical-align: middle;
+	cursor:default;
+	margin:0px;
+	padding:0px;
+  z-index:2;
+}
+
+.OH_CodeSnippetContainerTab,
+.OH_CodeSnippetContainerTabLeft,
+.OH_CodeSnippetContainerTabRight,
+.OH_CodeSnippetContainerTabFirst,
+.OH_CodeSnippetContainerTabActive,
+.OH_CodeSnippetContainerTabLeftActive,
+.OH_CodeSnippetContainerTabRightActive,
+.OH_CodeSnippetContainerTabActiveNotFirst,
+.OH_CodeSnippetContainerTabDisabled,
+.OH_CodeSnippetContainerTabLeftDisabled,
+.OH_CodeSnippetContainerTabRightDisabled,
+.OH_CodeSnippetContainerTabDisabledNotFirst,
+.OH_CodeSnippetContainerTabSolo
+{
+	float: left;
+  font-size:0.8em; /*10pt*/
+  margin:0px;
+  padding:0px;
+  _padding-top:2px;
+  height:20px;
+}
+
+.OH_CodeSnippetContainerTab,
+.OH_CodeSnippetContainerTabFirst,
+.OH_CodeSnippetContainerTabActive,
+.OH_CodeSnippetContainerTabActiveNotFirst,
+.OH_CodeSnippetContainerTabDisabled,
+.OH_CodeSnippetContainerTabDisabledNotFirst,
+.OH_CodeSnippetContainerTabSolo
+{
+	border-top:solid 1px #bbbbbb;
+}
+
+.OH_CodeSnippetContainerTab,
+.OH_CodeSnippetContainerTabLeft,
+.OH_CodeSnippetContainerTabRight,
+.OH_CodeSnippetContainerTabFirst,
+.OH_CodeSnippetContainerTabDisabled,
+.OH_CodeSnippetContainerTabLeftDisabled,
+.OH_CodeSnippetContainerTabRightDisabled,
+.OH_CodeSnippetContainerTabDisabledNotFirst
+{
+	border-bottom:solid 2px #d0d2d2;
+}
+
+.OH_CodeSnippetContainerTab,
+.OH_CodeSnippetContainerTabActiveNotFirst,
+.OH_CodeSnippetContainerTabDisabledNotFirst
+{
+  border-left:solid 1px #bbbbbb;	
+}
+
+.OH_CodeSnippetContainerTab,
+.OH_CodeSnippetContainerTabLeft,
+.OH_CodeSnippetContainerTabRight,
+.OH_CodeSnippetContainerTabFirst
+{
+	background-color:#eff5ff;
+}
+
+.OH_CodeSnippetContainerTabDisabled,
+.OH_CodeSnippetContainerTabLeftDisabled,
+.OH_CodeSnippetContainerTabRightDisabled,
+.OH_CodeSnippetContainerTabDisabledNotFirst
+{
+  background-color:#f5f5f5;
+}
+
+.OH_CodeSnippetContainerTabActive,
+.OH_CodeSnippetContainerTabLeftActive,
+.OH_CodeSnippetContainerTabRightActive,
+.OH_CodeSnippetContainerTabActiveNotFirst,
+.OH_CodeSnippetContainerTabSolo
+{
+	background-color:white;
+  font-weight:bold;
+}
+
+.OH_CodeSnippetContainerTab a,
+.OH_CodeSnippetContainerTab a:link,
+.OH_CodeSnippetContainerTab a:visited,
+.OH_CodeSnippetContainerTab a:active,
+.OH_CodeSnippetContainerTab a:hover,
+.OH_CodeSnippetContainerTabFirst a,
+.OH_CodeSnippetContainerTabFirst a:link,
+.OH_CodeSnippetContainerTabFirst a:visited,
+.OH_CodeSnippetContainerTabFirst a:active,
+.OH_CodeSnippetContainerTabFirst a:hover
+{
+	padding:0px 5px 0px 5px;
+	color:#1364c4;
+	text-decoration:none;
+	cursor: pointer;
+}
+
+.OH_CodeSnippetContainerTabSolo a,
+.OH_CodeSnippetContainerTabSolo a:link,
+.OH_CodeSnippetContainerTabSolo a:visited,
+.OH_CodeSnippetContainerTabSolo a:active,
+.OH_CodeSnippetContainerTabSolo a:hover
+{
+	padding:0px 5px 0px 5px;
+	color:#1364c4;
+	text-decoration:none;
+}
+
+.OH_CodeSnippetContainerTab a:link,
+.OH_CodeSnippetContainerTab a:visited,
+.OH_CodeSnippetContainerTabFirst a:link,
+.OH_CodeSnippetContainerTabFirst a:visited,
+.OH_CodeSnippetContainerTabSolo a:link,
+.OH_CodeSnippetContainerTabSolo a:visited
+{
+	color:#1364c4;
+}
+
+.OH_CodeSnippetContainerTab a:active,
+.OH_CodeSnippetContainerTab a:hover,
+.OH_CodeSnippetContainerTabFirst a:active,
+.OH_CodeSnippetContainerTabFirst a:hover
+{
+	color:#250c58;
+}
+
+.OH_CodeSnippetContainerTabActive a,
+.OH_CodeSnippetContainerTabActive a:link,
+.OH_CodeSnippetContainerTabActive a:visited,
+.OH_CodeSnippetContainerTabActive a:active,
+.OH_CodeSnippetContainerTabActive a:hover,
+.OH_CodeSnippetContainerTabActiveNotFirst a,
+.OH_CodeSnippetContainerTabActiveNotFirst a:link,
+.OH_CodeSnippe