commit ca8d059a9f0e04af63c12ccc9620ae8036e1f1b7 Author: Jarvis Prime Date: Mon Mar 23 16:10:59 2026 +0000 Initial: static site migrated from S3 diff --git "a/\\\".html" "b/\\\".html" new file mode 100644 index 0000000..04c2a1d --- /dev/null +++ "b/\\\".html" @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/about-us.html b/about-us.html new file mode 100644 index 0000000..45051ab --- /dev/null +++ b/about-us.html @@ -0,0 +1,399 @@ + + + + + + + + + + + + + + + +About Component Owl, developers of Better ListView + + + + + + + +
+ + + + + + + +
+
+
Component Owl
+
+ +

About Us

+
Have you ever wondered why some software immediately strikes you
+ as polished and professional, and looks and feels just great?
+ So did we. Component Owl is the result of our journey.
+ +

Component Owl is part of the Dextronet.com network.

+ +
+
+

About Dextronet

+ +

Dextronet has been founded in 2004 with the intention to develop, sell and support software + with great design that makes your life better. To put it simply: We love creating software + that you will love to use.

+ +

In the 14 years that Dextronet has existed, we have been growing + and expanding our business organically and responsibly, and attained substantial steady growth + each year. We are here to stay.

+ +

Our flagship and most popular product is Swift To-Do List + (developed in .NET). With over 500.000 downloads and paying customers in 93 countries, + it is the number one task and notes organizer for Windows.

+ +

Better ListView component is the core part of Swift To-Do List, and as such, tens + of thousands users work with it every day.

+
+ +
+

About Component Owl

+ +

ComponentOwl.com was founded as a Dextronet.com spinoff to commercially release Better ListView + and other software components originally developed for our in-house purposes.

+ +

Our goal is to provide complete, light-weight, flexible, intuitive to use and reliable + components and controls for Microsoft .NET with native look and feel.

+ +

Soon after release, Better ListView has started to receive favorable reviews and praise + from developers. All our development effort + is based on the feedback of our customers.

+ +
+
+
“The [Better ListView] control is very easy and intuitive to use and + is well documented.” + – DevProConnections.com Review
+
+
+
+
+ +
+

Our Team

+ +

Our growing team has over 50+ years of combined experience with development of rich-client + desktop Windows software and components.

+ +

+ Libor Tinka - lead developer + Libor Tinka, Better ListView lead developer, has been programming since 7 years old on ZX Spectrum, + and has enormous attention for detail. His interests include programming, quantum physics, advanced + mathematics, digital imaging (algorithms, HDR and panoramic photography), and green Japanese tea. +

+ +

Our Customers

+ +

Since releasing Better ListView, numerous developers and companies have started utilizing + Better ListView in their projects, to save money, development time, and to impress their customers.

+ +

Our customers represent a rich spectrum of businesses and organizations, including:

+ + +
+
+
It's an odd thing when you're inspired by a form component, but + Component Owl with their Better ListView has done it. Love its native feel.” +
Daniel Nolan
+
+
+ +
+
+
“I greatly appreciate all of the help you have provided over the past week. The knowledge of your product and Support response time far exceeds that of the other software vendors I have worked with. I could not be more happy with the product and will be recommending Component Owl to any/all future development teams I am part of. Thank you again for being so attentive to our needs and providing excellent support! + +” +
– Brian S.
+
+
+ + +
+
+
+ +

Association of Software Professionals Member

+ +

We’ve been proud members of Association of Software Professionals for over + 12 years now.

+ +

We also contribute to ASPects, the monthly magazine of Association of Software Professionals.

+ +

Association of Software Professionals

+ +
+
+
“Component Owl created the one and only tool I don’t want to be without when it comes to software developing in Visual Studio. Also, I’ve been working as software user/developer for the last 26 years, and I have never before experienced a support that really goes the needed extra mile to make things work, like the guys at Component Owl do.” + – Göran Alfvén, Sweden
+
+
+ +

Microsoft Partner

+ +

Component Owl is a Microsoft Partner We are part of the Microsoft Partner Network, which helps us strengthen our capabilities in delivering the best components for Microsoft Windows.

+ +
+

Our Contact Info

+ +

Contact us today directly with any of your questions, suggestions or comments: +
support (at) componentowl (dot) com

+ +

You can also use the contact form in Support section. + We usually reply within 24 hours or sooner.

+ +

You can follow us on twitter and subscribe + to our RSS news feed.

+ +

+ The City of Brno + Our offices are based in Brno,
Czech Republic, European Union. +

+ Brno is the second largest city in Czech Republic, after the capital city Prague. +
It is a technological hub and home of two computer science universities and influential + software enterprises, including AVG and Red Hat.
+

+
+
+ + + + + +
+ + + + + + + + + + diff --git a/articles.html b/articles.html new file mode 100644 index 0000000..8c0c0c8 --- /dev/null +++ b/articles.html @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + +Better ListView .NET control: Improved List View control for C# and VB.NET (Windows Forms) + + + + + + + +
+ + + + + + + +
+
+
+ +
Articles for .NET developers
+ + + +
+ +
+ +
+
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/articles/visual-studio-toolbox-control-integration.html b/articles/visual-studio-toolbox-control-integration.html new file mode 100644 index 0000000..b4918ae --- /dev/null +++ b/articles/visual-studio-toolbox-control-integration.html @@ -0,0 +1,1838 @@ + + + + + + + + + + + + + + + +Visual Studio Toolbox Control Integration - visual studio + + + + + + + +
+ + + + + + + +
+
+
+ +
+ +
Articles for .NET developers
+ +

Visual Studio Toolbox Control Integration

+ +
+ + + + +

The Most Complete Guide to Visual Studio Toolbox Control Integration

+

Libor +Tinka, Lead Developer, ComponentOwl.com

+

+

+

Contents

+

1. Introduction
+2. Prerequisites
+3. Creating a Sample Control
+4. Manual Toolbox Integration
+5. Toolbox Integration using TCI
+6. Toolbox Integration using DTE
+7. Toolbox Integration using VSI Packages
+8. Toolbox Integration using VSPackages
+9. Toolbox Integration using VSIX Packages
+10. Supporting Multiple Version of .NET Framework
+11. Sample Source Code

+

1. Introduction

+

This tutorial is intended for developers who would like to distribute their +WPF or WinForms controls and automatically put them into Visual Studio Toolbox +during installation.

+

I struggled with Toolbox integration earlier because there are several possible +approaches (harder to decide between them). Each approach have its own pros and cons and +no overall comparison is provided. I wrote this tutorial to shed some light on the topic +and spare you hours, maybe days of research and experimenting with aspects of +Visual Studio (Toolbox) extensibility.

+

We will first take a look on Toolbox control integration in general to get a +big picture. Each approach will be then discussed in detail and the following +question will be answered:

+
    +
  • How to install control in Visual Studio Toolbox?
  • +
  • How to update the control?
  • +
  • How to uninstall/remove the control?
  • +
  • How to support multiple Visual Studio versions?
  • +

+

There are several options on how to integrate your controls with Visual +Studio Toolbox:

+
    +
  • Manual installation
  • +
  • Toolbox Control Installer (TCI)
  • +
  • Visual Studio Automation Object Model (DTE)
  • +
  • VSPackage
  • +
  • VSI package
  • +
  • VSIX package
  • +
+

Manual installation

+

The simplest way of adding control into Visual Studio Toolbox is from within +the IDE.

+

This approach have one crucial drawback, which is that you leave Toolbox +integration to the user. Many developers are not that experienced with Visual +Studio and when your component is shipped, even if you provide appropriate +step-by-step guide, they may find it too complicated and rather try +another component which "just works". I thought that every developer using +Visual Studio is experienced enough to know how to add new items in VS Toolbox, +but I received few e-mails from users who uninstalled the product just because +the component have not appeared in the Toolbox and they thought it is broken +(without reading our documentation, of course). On the other hand, there is +a group of users who are not experienced developers, but are in charge of trying +some products in a given company (e.g. project managers). These people can +install the component, play with it and they would really appreciate if it just +works. This increases chance they will actually purchase your product.

+

Advantages: zero effort
+Disadvantages: require experienced users, slows user +producitivity, updating controls is not intuitive

+

Toolbox Control Installer (TCI)

+

Visual Studio 2005 SDK contained a VSPackage called Toolbox Control +Installer. This package comes pre-installed with Visual Studio 2008 and newer. +Its job is to simplify the specific task of extending Visual Studio Toolbox. +This approach requires you to install your assembly in GAC (Global Assembly +Cache) and create a key in Windows Registry.

+

Advantages: simple and fast component installation, updating +and removing
+Disadvantages: requires installation in GAC (not always +wanted), VS 2005 supported with SDK only

+

Visual Studio Automation Object Model (DTE)

+

If you are not afraid of COM, you can try DTE (Development Tools Environment) approach. +There is already a project on CodePlex called +Visual Studio Toolbox Manager, +which solves the toolbox integration problem using a simple command-line +application. The project is outdated since it does not support Visual Studio +2010 and newer. I made a project called DteToolboxInstaller, which +is also a command-line application and does support Visual Studio 2013, 2012, 2010, +2008 and 2005. You can use the project as you like. The main disadvantage of DTE +approach is the speed. The installer have to run devenv.exe using the automation interface, create a +fake VS Solution, open Toolbox, add the stuff and then close the Solution. The +whole process take no less than 10 seconds. If you want to integrate with two or +three versions of Visual Studio, it can take well over a minute.

+

Advantages: does not require updating registry or GAC, full +control over Toolbox
+Disadvantages: very slow, separate installation required for +every version of Visual Studio

+

VSPackage

+

A VSPackage seems to be a natural option. VSPackages allow any type +of Visual Studio extension and you can manipulate Toolbox as well. There was a trouble +with VSPackages in providing a Package Load Key (PLK) which can be +generated only manually using web form. The requirement for PLK vanished with +Visual Studio 2010 (hooray!). The nice thing about VSPackage approcach is that it does not slow +down the installation process. The package is loaded and the controls are installed +on-demand (when the Toolbox is opened for the first time after installation). +After trying all the approaches, using VSPackage seems to be fastest and most +universal one.

+

Advantages: quick installation, appearance in About box and +other extensibility features
+Disadvantages: cmplicated setup, each component requires its +own package if shipped separately

+

VSI Package

+

VSI packages are quite old but you can use them for integration with Visual +Studio 2005 and newer. It have very simple structure and you can create one even +without Visual Studio. The only trouble with VSI compared to other +approaches is invoking a wizard form which cannot be suppressed. The +installation just cannot run in "quiet" mode. Another trouble with VSI is that a +digital signature is required in order to get rid of a warning dialog. Your control will be always installed under "My Controls" tab in the +Toolbox, which is not always desirable.

+

Advantages: simple creation, installer provided by Visual +Studio, automated creation and signing requires several specific steps
+Disadvantages: no quiet mode (extra steps when custom installer +is used), manual uninstallation

+

VSIX Package

+

VSIX packages came with Visual Studio 2010 so you can integrate with 2010 or +newer. the .VSI and .VSIX file extensions are associated with Visual Studio so +you can simply double-click it or run it via shell. You can also run +VsixInstaller.exe utility that performs the installation. Good news: No more +nag screens when VSIX is not signed - the installer only contains a dialog with +simple text: "This extension does not contain a digital signature." +Even better news: The VsixInstaller supports quiet mode!

+

Please note that VSI and VSIX package installers contain features like +displaying EULA, choosing which components to install or localization. When +deploying your controls for use in Visual Studio, you won't need an installer on +top of the package.

+

Advantages: installer provided by Visual Studio, quiet mode, +fast installation
+Disadvantages: package project required, automated creation is +complicated, no support for VS 2005 and 2008

+

Comparison of Approaches

+

Here is a table summarizing features of the discussed approaches. As you can +see, the VSPackage approach gives you the most freedom, but is also hardest +to implement. We will discuss every approach so +that you will be able to impement the one that suits you best.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 20052008201020122013SpeedInstall AutomationUninstall automation 
Manual installationdepends on user
TCIfast 
EnvDTEslow 
VSImoderate 
VSIXmoderate (faster than VSI) 
VSPackagefast 
+ +

2. Prerequisites

+

We will focus on integration with Visual Studio 2010, 2012 and 2013. Hence you will need:

+
    +
  • Visual Studio 2010 (or 2012, 2013)
  • +
  • Visual Studio 2010 SDK (or 2012 SDK, 2013 SDK)
  • +
  • Microsoft Windows SDK
  • +
+

The VS SDK contains regpkg.exe tool and project templates discussed in VSIX +and VSPackage approaches.

+

The Windows SDK contains gacutil.exe, guidgen.exe, signtool.exe and other +useful tools.

+

There are two kinds of versioning used for Visual Studio. One is based on the +release name (e.g. Visual Studio 2008) and the other is a classic version number +(e.g. 8.0). Both will be used, so it should be noted which version numbers +correspond to which versions of Visual Studio:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Release nameVersion number
Visual Studio 20058.0
Visual Studio 20089.0
Visual Studio 201010.0
Visual Studio 201211.0
Visual Studio 201312.0
+

3. Creating a Sample Control

+

We will start by creating simple WinForms control for integration in VS +Toolbox.

+

You can start with File - New - Project... (Control+Shift+N) and select +Windows Forms Controls Library template.

+

Of course, you can also create empty Class Library project, add references to +System.Drawing and System.Windows.Forms and create a new control. In fact, any +DLL containing public classes derived from Control will +suffice.

+

We want to support .NET Runtime version 4.0 and 4.5, so the control should be +built against .NET 4.0 to ensure compatibility (the lower framework version you +use, the wider range of compatible frameworks since they are backward +compatible). It should be noted that .NET 4.5 is an in-place update of .NET 4.0 +and hence the 4.5 assemblies will work on machines with 4.0 runtime installed +unless you use some feature specific to 4.5.

+

If you have multiple controls in your assembly and don't want to use some of +them in Toolbox, decorate them with ToolboxItem attribute with +defaultType parameter set to false:

+
+[ToolboxItem(false)]
+public class InvisibleControl : UserControl
+{
+  ...
+}
+
+

I have created a very simple control called SampleControl:

+

+

Finally, I set version of the assembly 3.3.0.0 (I chose just something else +than 1.0.0.0 to see where the specific version number appears).

+

Custom Transparent Icon for the Toolbox

+

Icons for Toolbox are 16 by 16 pixel images. Various image formats are supported +(BMP, JPEG, PNG and ICO). However, you need to +create 256-color BMP image to ensure transparency. The transparent color is determined by bottom left +pixel of the icon. Transparency works for magenta (#ff00ff):

+

+

The icon file should have same name as the control class (i.e. +SampleControl.BMP).

+

Finally, use ToolboxBitmapAttribute to link icon with the control class:

+
+[ToolboxBitmap(typeof(SampleControl), "Resources.SampleControl.bmp")]
+public partial class SampleControl : UserControl
+{
+	...
+}
+
+

Note that icon location matters, at least in C#. Since I have added +the icon under custom folder named Resources, I need to reference +Resources.SampleControl.bmp instead of just SampleControl.bmp.

+

Here is the resulting transparent icon in Toolbox:

+

+

Marking the Control as Toolbox Item

+

We can mark control as toolbox item by adding a ToolboxItemAttribute +with defaultType parameter set to true:

+
+[ToolboxItem(true)]
+public partial class SampleControl : UserControl
+...
+
+

This decoration is optional since the controls within assembly are +considered toolbox items by default. However, we can mark certain control +classes with ToolboxItem(false) to hide them from Toolbox. This +comes in handy when we have multiple projects and there are too many controls in +the Toolbox because loaded from all the other projects.

+

Signing the Assembly

+

The assembly containing controls (SampleControl.dll in our +case) should be strongly named if we want them installed in GAC +(Global Assembly Cache) later on. This is optional in most cases, but the Toolbox Controls +Installer approach requires the assembly being installed in GAC, hence the +strong name is necessary there.

+

To give an assembly a strong name, open project properties and find +Signing tab:

+

+

Check the "Sign the assembly" option and select "<New...>" +from the combo box. This will create a new .SNK file in your project which will +be used to sign the assembly. You can also browse for existing key file. If you +want to distribute multiple assemblies with custom controls, it is a best +practice to use same strong name key for each assembly (it is possible to have +one .SNK file located in Solution folder and put just a link to that file in +each project; when we browse for the key under the Signing tab, the link will be +used without copying the file).

+

The SNK (Strong Name Key) file is basically a private key to digitally sign +your assembly. There is also a public key which can be used to verify the +assembly and its shorter variant called "public key token" for assembly +identification.

+

4. Manual Toolbox Integration

+

Installing

+

To install component into Visual Studio Toolbox manually, open some form or +control in designer, open the Toolbox window (Control+Alt+X), right-click on the +Toolbox window and select "Choose Items...":

+

+

The "Choose Toolbox Items" dialog will show up:

+

+

You can browse for DLL file with your component by clicking the "Browse..." +button.

+

This is the simplest way of putting component in the Toolbox without extra +actions required.

+

This can be unpleasant for end-users since it means many clicks they have +to perform. I will explain how to integrate a component a little bit more so that it +will be visible under the ".NET Framework Components" tab in the above dialog box and +possibly show up in Toolbox automatically without extra effort of the user.

+

Making the Control Visible in "Choose Toolbox Items" Dialog Box

+

As you can see on the above picture, the SampleControl component is already +displayed in the dialog box under ".NET Framework Components" tab.

+

This is because the folder containing our control is registered as "assembly folder" in the +registry and hence is searched when the above dialog is populated.

+

You can register your own assembly this way by creating a key in registry:

+
32-bit OS: HKLM\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\<your control name>
+64-bit OS: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AssemblyFolders\<your control name>
+

You can also create key for specific version of .NET runtime (this comes in +handy if you distribute different components for different versions of .NET):

+
32-bit OS: HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx\<your control name>
+64-bit OS: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx\<your control name>
+

In both cases, the default value for the key is a string with full path to +the folder with your assembly.

+

You can specify Toolbox tab in which the component should show up by adding +subkey named "Toolbox" with single string value "TabName" this value has Toolbox +tab name as data. When you add such control in the Toolbox, it will reside under +new tab with the specified name:

+

+

+

The control should also appear in "Choose Toolbox Items" dialog box if it +is installed in Global Assembly Cache.

+

The control pops up in the Toolbox automatically in +its own tab in Visual Studio 2012/2013.

+

Installing the Control in GAC

+

The benefit of GAC (Global Assembly Cache) is that the user needs not to +browse for your control. He will just select it form the above dialog box +without having to know where it is actually installed (the dialog is populated +by controls from "assembly folders" and from the GAC).

+

The GAC have one useful feature and disadvantage at the same time: It allows +holding multiple versions of the same assembly. When user makes reference to +your control from GAC and set "Specific Version" to true in +Reference Properties window, it will be tied to that version. When you install an +"update", a new version will be added to GAC, but the user will stay with the +older one. Of course, the "Choose Toolbox Items" dialog will show both versions, +so the user can just replace old reference with the new one.

+

You can make the installer removing any older versions from GAC during +installation and add/keep just the newest one. This will force the user to +replace the reference since it breaks the build.

+

You can work with GAC by using tool called gacutil.exe or +from code. We will discuss both approaches.

+

The gacutil.exe is located in Microsoft Windows SDK directory. There are two +such extecutables:

+
c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\gacutil.exe
+c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\gacutil.exe
+

The former is for .NET Framework up to version 3.5. The latter is for +.NET 4.0 and higher. This is for compatibility reasons as a separate GAC have +been introduced with .NET 4.0.

+

You can install an assembly to GAC by calling:

+
gacutil.exe /i SampleControl.dll
+

To uninstall it, we refer to our assembly by its assembly name, not file +name:

+
gacutil.exe /u SampleControl
+

Finally, you can check if the assembly is installed in GAC by listing any +instances of the provided name:

+
gacutil.exe /l SampleControl
+

It is not wise, however, to use gacutil.exe from a custom +installer as it is located in SDK that user might not have installed. +Furthermore, the SDK license does not allow bundling gacutil.exe +with your installer.

+

Some installers like Inno Setup or MSI allow installing in GAC anyway.

+

You can also work with GAC using +System.EnterpriseServices.Internal.Publish class. The class have two +methods: GacInstall and GacRemove. Both +methods take just path to assembly file as a parameter, so for example:

+
(new Publish()).GacInstall(assemblyPath);
+

will install the specified assembly in GAC.

+

Updating

+

Updating the control depends on how it is installed and referenced.

+

If you have added component in the Toolbox manually via "Choose Toolbox Items" +dialog box and "Browse..." button, i.e. as a file reference, the +default property of such reference is that it simply points to the specified +file no matter which version it have (unless user sets "Specific Version" to +true in reference properties window; the default is +false in this case). Simply replacing the DLL with the control by a newer +file will suffice. If the user have specified "Specific Version" to true, +the build will break because the reference is no longer valid. He needs to +replace the reference by a new one pointing on the same file which now have +newer version.

+

If you have added the component from GAC (these components also appear in the +"Choose Toolbox Items" dialog box), the "Specific Version" property of the +reference is true by default:

+

+

This means that even if you install a newer version of the component in GAC, +the project will still reference the older version and both versions will reside +in GAC.

+

If you remove all versions of the component from GAC (e.g. using +gacutil.exe) and then install just the newest one, the build will break +unless the user changed "Specific Version" property to false.

+

Removing

+

Removing the manually installed control consists of just reverting all the +steps done during the installation.

+

In case of file references, deleting the file is sufficient.

+

In case of tighter integration (GAC, registry), the registry keys need to be +deleted and the control can be removed from GAC (e.g. using gacutil.exe).

+

Resetting Toolbox and Clearing the Toolbox Cache

+

The Toolbox can fall into state where it does not display some items, some are +duplicate and some can be disabled. Sometimes the only remedy is to let Visual +Studio rebuild the +Toolbox from scratch.

+

To do that, right-click on the Toolbox window and select "Reset +Toolbox". Visual Studio will go through all the installed packages and reloads +components into the Toolbox.

+

If this won't help, you can perform hard reset of the Toolbox. Exit +Visual Studio and delete all .TBD files in the following folder:

+
\Users\<user>\AppData\Local\Microsoft\VisualStudio\10.0\
+

It should be up to four files:

+

+

Once removed, start Visual Studio again. After showing the Toolbox, all items +should load instead of loading only the cached versions.

+

5. Toolbox Integration using TCI

+

Installing

+

Toolbox Control Installer is a VS package pre-installed in Visual Studio 2008 and +newer. It looks in Windows registry for components and loads them in the +Toolbox.

+

Before using TCI, one can check if it is installed in the given version of +VS. For example, the following registry key should exist if the Visual Studio +2010 have TCI installed:

+
32-bit OS: HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\Packages\{2c298b35-07da-45f1-96a3-be55d91c8d7a}
+64-bit OS: HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Packages\{2c298b35-07da-45f1-96a3-be55d91c8d7a}
+

The TCI package GUID is always the same so you can make the check for any +version of Visual Studio with the above key (only change the version number from +10.0 to corresponding version number, of course).

+

The only prerequisites for the assembly is that it should have strong name +(i.e. to be signed). See section "Creating the Sample Control" for more +information.

+

The installation consists of putting the control in GAC (see previous +section for more information) and creating registry keys.

+

Suppose we have the SampleControl installed in GAC:

+

+

We will make reference to this assembly from registry by creating the +following key:

+
32-bit OS: HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\ToolboxControlsInstaller\SampleControl, Version=3.7.0.0, Culture=neutral, PublicKeyToken=3cc4c7b61201d46c
+64-bit OS: HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\ToolboxControlsInstaller\SampleControl, Version=3.7.0.0, Culture=neutral, PublicKeyToken=3cc4c7b61201d46c
+

The default value for the key is the Toolbox tab name name you would like to +have for the component(s), e.g. "Component Owl".

+

Installing in Visual Studio 2012 and 2013

+

One extra step is required to make this work in Visual Studio 2012/2013, which is +adding the registry key also in its user config hive, i.e.:

+
HKCU\Software\Microsoft\VisualStudio\11.0_Config\ToolboxControlsInstaller\SampleControl, Version=3.7.0.0, Culture=neutral, PublicKeyToken=3cc4c7b61201d46c
+

for VS 2012. Use 12.0_Config for VS 2013.

+

Updating

+

Updating the component is very simple. Just modify the above registry keys by +changing the version number.

+

Removing

+

To remove the component, delete the above registry keys. You should also +remove the corresponding assembly from GAC.

+

Automating Integration with TCI using TciToolboxInstaller

+

I made a simple command-line application called TciToolboxInstaller +which does all the described steps. The usage is simple:

+
TciToolboxInstaller.exe [install|uninstall] [vs2005|vs2008|vs2010|vs2012|vs2013] [tab name] [assembly path]
+

For example, if you like to install SampleControl.dll in Visual Studio 2012 +Toolbox, just call:

+
TciToolboxInstaller.exe install vs2012 "Component Owl" SampleControl.dll
+

You can use quotes for the last two parameters if they contain spaces.

+

The TciToolboxInstaller project is contained in sample +source code.

+

6. Toolbox Integration using DTE

+

Installing

+

The +DTE (Development Tools Environment) approach does not require working +with GAC or registry. It remotely manipulates Visual Studio Toolbox and +adds/removes items as needed.

+

The whole installation is done from (managed) code using COM wrappers. It +works in the following steps:

+
    +
  • Check if an instance of Visual Studio is not running. If not, continue.
  • +
  • Retrieve an EnvDTE.DTE object corresponding to the + version of Visual Studio we want to integrate with.
  • +
  • Create a "dummy" project using the DTE object
  • +
  • Obtain Toolbox window and ToolBox object from it.
  • +
  • Find or create ToolBoxTab object.
  • +
  • Add item in the Toolbox tab (ToolBoxTab.ToolBoxItems.Add).
  • +
  • Wait until current instance of Visual Studio stops running.
  • +
+

Here are some of the step/strongs in C# code - it is an excerpt from +DteToolboxInstaller project provided in sample source code:

+
+// obtain a DTE object
+Type typeDTE = Type.GetTypeFromProgID("VisualStudio.DTE.11.0");
+
+DTE dte = (DTE)Activator.CreateInstance(typeDTE, true);
+
+// create a temporary file
+string tempFile = Path.GetFileNameWithoutExtension(Path.GetTempFileName());
+string tempDirectory = string.Format("{0}{1}", Path.GetTempPath(), tempFile);
+
+// create Visual Studio Solution
+Solution4 solution = (dte.Solution as Solution4);
+
+string templatePath = solution.GetProjectTemplate(TemplateName, "CSharp");
+
+solution.AddFromTemplate(templatePath, tempDirectory, DummyProjectName, false);
+
+// get Toolbox window
+Window window = dte.Windows.Item(Constants.vsWindowKindToolbox);
+
+// get Toolbox
+ToolBox toolBox = (ToolBox)window.Object;
+
+// get Toolbox tab
+ToolBoxTab toolBoxTab = (GetToolBoxTab(toolBox.ToolBoxTabs) ?? toolBox.ToolBoxTabs.Add(this.tabName));
+
+// add new item under the Toolbox tab
+toolBoxTab.ToolBoxItems.Add(assemblyName, this.assemblyPath, vsToolBoxItemFormat.vsToolBoxItemFormatDotNETComponent);
+
+// select the Toolbox tab
+toolBoxTab.Activate();
+
+// cleanup
+dte.Solution.Close(false);
+dte.Quit();
+Marshal.ReleaseComObject(dte);
+
+// wait till Visual Studio turns off completely
+if (IsVisualStudioRunning())
+{
+	Thread.Sleep(VisualStudioProcessTimeout);
+}
+
+

There are several obstacles on implementing the DTE approach.

+

First of all, we need to ensure that Visual Studio is not running during the +installation - this is because we want messages sent to Visual Studio instance +will arrive in the "invisible" one ran from our code and not the one which the +user have currently opened.

+

Similarly, we would like to wait a while until the instance terminates after +installation. This is necessary when integrating with multiple versions of +Visual Studio when just a single instance have to be running at a time. Doing two +installations too quickly in succession may cause the previous one to fail +because a Visual Studio instance is still running.

+

The communication between our code and Visual Studio is mediated by OLE +message filter which needs to be implemented. You can take a look on +DteToolboxInstaller (see below) source code, where is a working installer +implemented that uses this approach.

+

Updating and Removing

+

Since we have full control over the Toolbox with this approach, updating or +removing items/tabs is done with the corresponding DTE objects.

+

Automatic Integration with DTE using DteToolboxInstaller

+

I made a simple command-line application called DteToolboxInstaller +which does all the necessary steps and solves the deals with the discussed +obstacles. The usage is simple:

+
DteToolboxInstaller.exe [install|uninstall] [vs2005|vs2008|vs2010|vs2012|vs2013] [tab name] [assembly path]
+

For example, if you like to install SampleControl.dll in Visual Studio 2012 +Toolbox, just call:

+
DteToolboxInstaller.exe install vs2012 "Component Owl" SampleControl.dll
+

You can use quotes for the last two parameters if they contain spaces.

+

The DteToolboxInstaller project is contained in sample +source code.

+

7. Toolbox Integration using VSI Packages

+

Let's consider you don't have a custom installer and want to distribute your +components in some kind of simple extension package that Visual Studio +understands.

+

Visual Studio contains an installer for so called VSI packages that will +do the integration work for you. If you have Visual Studio installed, the .VSI +extension is already associated with the Visual Studio Content Installer.

+

Creating the VSI Package

+

I have created an empty folder and copied SampleControl.dll in +it. All that is needed to make a VSI package is to create a .VSCONTENT file, +which is simply a XML file satisfying +Visual Studio Content Installer schema:

+
+<VSContent xmlns="http://schemas.microsoft.com/developer/vscontent/2005"> 
+    <Content>
+        <FileName>SampleControl.dll</FileName>
+        <DisplayName>SampleControl</DisplayName>
+        <Description>ComponentOwl.com SampleControl</Description>
+        <FileContentType>Toolbox Control</FileContentType>
+        <ContentVersion>2.0</ContentVersion>
+    </Content>
+</VSContent>
+
+

The content is readable and pretty straightforward. The +ContentVersion element can contain either "1.0" (support for Visual +Studio 2005, 2008 and 2010) or "2.0" (support for Visual Studio 2008, 2010, +2012, 2013).

+

Now we zip the two files and rename extension of the archive to .VSI. We +should end up with the following three files:

+

+

If you double-click the SampleControl.vsi, the Visual Studio +Content Installer opens up. You can start the installer from command line as +well:

+
32-bit OS: C:\Program Files\Common Files\Microsoft Shared\MSEnv\VSContentInstaller.exe SampleControl.vsi
+64-bit OS: C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\VSContentInstaller.exe SampleControl.vsi
+

The installer have a form o wizard:

+

+

Signing the VSI Package

+

By default, the VSI package is not signed. This causes showing: "Publisher: +Unknown" label on the first page of the installation wizard and an unpleasant +dialog box later on:

+

+

To avoid this, you need to digitally sign the VSI package. Of course, you +have to own a digital certificate (usually an X.509 certificate stored in .PFX +file).

+

Because we cannot sign ZIP files, we need to convert the .VSI file (which is +actually a ZIP archive with just an altered extension) to self-extracting archive that the Visual Studio Content +Installer recognizes. There is a tool called MakeZipExe +to do this task:

+
MakeZipExe.exe -zipfile:SampleControl.vsi -output:SampleControl-unsigned.vsi -overwrite
+

The MakeZipExe tool is located at Visual Studio's binary +folder:

+
c:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\MakeZipExe.exe
+

The second step is signing the .EXE file using signtool.exe. +You can find signtool.exe in Microsoft Windows SDK, i.e.:

+
c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\signtool.exe
+

Here is a sample usage of signtool.exe:

+
signtool.exe sign /du "http://www.componentowl.com/sample-control" /f certificate.pfx /p abc123 /t "http://timestamp.comodoca.com/authenticode" "SampleControl-signed.vsi"
+

When signed, the "Publisher" and "Information URL" labels are filled in the +installer and no dialog box appears. The benefit of signing is obvious - your +users will know they are installing trusted, possibly high-quality software and there +is a higher chance of your software being used more widely (for example, the +government sector usually require such certified software).

+

You can also add an EULA to your VSI package. This can be done by adding a +comment metadata in the archive by ZIP archiver that supports such feature (e.g. +WinZip).

+

Uninstalling the Control from Toolbox

+

As far as I know, the control cannot be removed from the Toolbox +programmatically. You need to delete the control's DLL located at

+
c:\Users\<user>\Documents\Visual Studio 2010\Controls\
+

the same should be done for every version of Visual Studio installed.

+

In Visual Studio, right-click on Toolbox and select "Reset Toolbox". The +component will not be found and disappear. Similarly, you can just +delete the control from the Toolbox or select "Choose Items..." from context +menu and untick the control there:

+

 

+

Drawbacks of Using VSI Package

+

One drawback of using VSI package is that the installer runs every version of +VS IDE you have installed and which is supported by the package. The form will +disappear eventually, but it lowers user experience.

+

Another drawback is that when you want to update your control, the installer +offers whether to rename, replace or skip the file (e.g. SampleControl.dll). User have to decide to +update, which also slows down installation and requires user interaction.

+

You also cannot specify custom Toolbox tab. All controls are installed under +"My Controls" tab:

+

+

8. Toolbox Integration using VSPackages

+

This approach brings full control over the integration and other benefits. The VSPackages are loaded on-demand, so +the integration process won't slow down a custom installer.

+

Although VSPackage and our sample control can be packed within the same +assembly, we will create a separate Visual Studio Package project.

+

When user opens Toolbox in VS for the first time after installation, the IDE +will look in registry for any registered packages and load them (if not loaded +previously).

+

Creating VSPackage Project

+

We would like to have our VSPackage compatible with VS 2010, 2012 +and 2013, so we will work in Visual Studio 2010.

+

Select "File - New - Project.." (Control+Shift+N) and +select the "Visual Studio Package" template:

+

+

This will start a "Visual Studio Package Wizard":

+

+

You can leave most options in the wizard on defaults. Leave all the check boxes unchecked +on "Page 3 of 7" and "Page 7 of 7":

+

+

+

Now we will take a look on the generated files. Open the Guids.cs +file:

+
+// Guids.cs
+// MUST match guids.h
+using System;
+
+namespace ComponentOwl.ToolboxIntegration
+{
+    static class GuidList
+    {
+        public const string GuidSampleVSPackagePkgString = "00000000-8fdf-48b6-98f8-4ff21a3a4def";
+        public const string GuidSampleVSPackageCmdSetString = "def6519d-5ace-4062-95d6-4ee43f4a5de9";
+
+        public static readonly Guid GuidSampleVSPackageCmdSet = new Guid(GuidSampleVSPackageCmdSetString);
+    };
+}
+
+

Here are the GUIDs that +uniquely identify your package. I have edited the first four hex digits of +package identifier to "00000000" so that we can find it more easily later. This is +just for purpose of convenience in our sample project. Always use randomly generated GUID +in a real-world application. Visual Studio will generate a new GUID +whenever you create a new VSPackage project.

+

You can also generate new GUIDs any time, for example using +online GUID +generator or guidgen.exe utility from Windows SDK. When these numbers are changed, your package will be different from +Visual Studio's point of view.

+

Another important file here is source.extension.vsixmanifest. +If you double-click on the file in Solution Explorer, the VSIX Manifest Designer +will show up:

+

+

Not all the fields are mandatory, but I will fill all of them nevertheless:

+
    +
  • ID - Unique product "Identity" - the ID is limited to + 100 characters and the recommended format is "Company.Product.Feature.Name". + We can leave the VSPackage's GUID here.
  • +
  • Product Name - This field is used for Toolbox Tab name, + so I will put "Component Owl Controls" here.
  • +
  • Author - Your name or company name - + "ComponentOwl.com", for example.
  • +
  • Version - This is version of the package and its + contents. The format is same as for assembly versions: + Major.Minor.Build.Revision. I will put "1.4.0.128" here.
  • +
  • Description - Speaks for itself.
  • +
  • Locale - Language for the package.
  • +
  • Supported VS Editions - Here you can specify which + editions of Visual Studio 2010 you would like to support. Of course, it can + support VS 2012/2013 as well, but for now I will just check Ultimate, Premium and + Professional editions.
  • +
  • Supported Framework Runtime - Minimum and maximum .NET + Framework Runtime versions your extension supports. Since my component will + support 4.0 and 4.5 runtime, I will put 4.0 and 4.5 here.
  • +
+

Adding Support for Visual Studio 2012/2013

+

We have specified supported Visual Studio Editions in VSIX Manifest Designer, +through the "Visual Studio Version and Edition" dialog box:

+

+

As you can see, only Visual Studio 2010 is supported here because VSIX is new +to 2010 and of course VS 2010 does not know about 2012/2013. We have to +source.extensions.vsixmanifest file for manual editing. Select the file +in Solution Explorer and press F7 (View Code):

+
+<?xml version="1.0" encoding="utf-8"?>
+<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
+  <Identifier Id="aaaaaaaa-8fdf-48b6-98f8-4ff21a3a4def">
+    <Name>SampleVsPackage</Name>
+    <Author>ComponentOwl.com</Author>
+    <Version>1.0</Version>
+    <Description xml:space="preserve">Information about my package</Description>
+    <Locale>1033</Locale>
+    <InstalledByMsi>false</InstalledByMsi>
+    <SupportedProducts>
+      <VisualStudio Version="10.0">
+        <Edition>Ultimate</Edition>
+        <Edition>Premium</Edition>
+        <Edition>Pro</Edition>
+      </VisualStudio>
+    </SupportedProducts>
+    <SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="4.5" />
+  </Identifier>
+  <References>
+    <Reference Id="Microsoft.VisualStudio.MPF" MinVersion="10.0">
+      <Name>Visual Studio MPF</Name>
+    </Reference>
+  </References>
+  <Content>
+    <VsPackage>|%CurrentProject%;PkgdefProjectOutputGroup|</VsPackage>
+  </Content>
+</Vsix>
+
+

Take a look on the Vsix/Identifier/SupportedProducts/VisualStudio +element (highlighted in bold). Copy and paste this element and modify +Version attribute on the second one to "11.0":

+
+<VisualStudio Version="11.0">
+  <Edition>Ultimate</Edition>
+  <Edition>Premium</Edition>
+  <Edition>Pro</Edition>
+</VisualStudio>
+
+

The edition tags are valid for version 11.0 because Visual Studio 2012 +template generates the same edition names.

+

Writing Package Code

+

Now we will take a look on the VSPackage code itself. Open the +SampleVSPackage.cs +file. I kept only the necessary code and added the ProvideToolboxItems attribute:

+
+[PackageRegistration(UseManagedResourcesOnly = true)]
+[InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
+[Guid(GuidList.guidSampleVsPackagePkgString)]
+[ProvideToolboxItems(1)]
+public sealed class SampleVsPackage : Package
+{
+}
+
+

Our VSPackage implementation inherits from +Microsoft.VisualStudio.Shell.Package class and is decorated by three +attributes:

+
    +
  • PackageRegistrationAttribute - Specifies that package + registration tool should look for additional attributes (will be discussed + later).
  • +
  • InstalledProductRegistrationAttribute - Provides + information for the Visual Studio splash screen and About box.
  • +
  • GuidAttribute - Provides custom GUID for the class + because automatic GUID is undesirable here (Visual Studio need to be able to trace our + package by its unique ID).
  • +
  • ProvideToolboxItemsAttribute - Specifies that the + package provides toolbox items. There are various uses of VSPackages, but we + are interested in intalling controls to Visual Studio Toolbox, hence this + attribute.
  • +
+

The strings "#110" and "#112" in +InstalledProductRegistrationAttribute refer to keys in +VSPackage.resx. You can open this file and edit package name and +description there:

+

+

Now we write methods within SampleVsPackage class that work with the Toolbox:

+
+private const string ComponentFile = "SampleControl.dll";
+private const string TabName = "Component Owl";
+
+private void InstallToolboxItems()
+{
+    IToolboxService toolboxService = (IToolboxService)GetService(typeof(IToolboxService));
+
+    foreach (ToolboxItem item in ToolboxService.GetToolboxItems(GetAssemblyName()))
+    {
+        toolboxService.AddToolboxItem(item, TabName);
+    }
+}
+
+private void RemoveToolboxItems()
+{
+    IToolboxService toolboxService = (IToolboxService)GetService(typeof(IToolboxService));
+
+    foreach (ToolboxItem item in ToolboxService.GetToolboxItems(GetAssemblyName()))
+    {
+        toolboxService.RemoveToolboxItem(item);
+    }
+}
+
+private AssemblyName GetAssemblyName()
+{
+    string pathAssembly = String.Concat(
+        Path.GetDirectoryName(GetType().Assembly.Location),
+        Path.DirectorySeparatorChar,
+        ComponentFile);
+
+    return AssemblyName.GetAssemblyName(pathAssembly);
+}
+
+

The method names InstallToolboxItems and +RemoveToolboxItems +speak for themselves. Both methods look for SampleControl.dll in the same +location as the VSPackage's assembly. They get all toolbox items from the +assembly and either put them under "Component Owl" tab or remove them.

+

The ToolboxService class comes from +System.Drawing.Design and we need to add reference to this asssembly in +order to use ToolboxService.

+

Building the Package

+

Before building the SampleVsPackage project, open project +properties, find the VSIX tab and uncheck all the options:

+

+

Finally, build the project. Just two files, SampleVsPackage.dll +and SampleVsPackage.pdb, should be generated.

+

Registering the Package

+

Until the package can be loaded by Visual Studio, it needs to be +registered. +The registration is simply writing specific keys into Windows Registry.

+

To do that, find the Package Registration Utility (RegPkg.exe). It should be +located in Visual Studio SDK directory, e.g.:

+
32-bit OS: c:\Program Files\Microsoft Visual Studio 11.0\VSSDK\VisualStudioIntegration\Tools\Bin\RegPkg.exe
+64-bit OS: c:\Program Files (x86)\Microsoft Visual Studio 11.0\VSSDK\VisualStudioIntegration\Tools\Bin\RegPkg.exe
+

You can copy the tool where it suits you.

+

Here is a sample usage of RegPkg:

+
32-bit OS: RegPkg.exe /root:SOFTWARE\Microsoft\VisualStudio\11.0 /codebase SampleVsPackage.dll
+64-bit OS: RegPkg.exe /root:SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0 /codebase SampleVsPackage.dll
+

This will write package registration information into the Windows Registry, +hence registers the package. Similar call have to be done by your custom installer in +order to register the package.

+

Instead of writing into registry, RegPkg.exe can gereate a REG file (several +other formats are available) so that you can write package information into +registry using the file. To do that, use /regfile parameter:

+
32-bit OS: RegPkg.exe /root:SOFTWARE\Microsoft\VisualStudio\11.0 /regfile:SampleVsPackage.ref /codebase SampleVsPackage.dll
+64-bit OS: RegPkg.exe /root:SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0 /regfile:SampleVsPackage.ref /codebase SampleVsPackage.dll
+

This creates SampleVsPackge.reg file you can use any time +later instead of RegPkg.exe itself.

+

There are two other options for specifying how the package will be registered: +codebase and assembly. When /codebase +parameter is used (as in the sample above), the registry will point to the location on disk where your +package is located (see + +Assembly.CodeBase property for more information).

+

Another option is the /assembly parameter - this assumbes +that your VSPackage assembly is located in GAC (Global Assembly Cache). See +section Installing the Control in GAC for more information.

+

You can check out the registry after the package registration:

+

+

Package Registration for Visual Studio 2012/2013

+

Regrettably, simply registering package is not enough for Visual Studio 2012/2013 to load +it (see this + +blog post). Because of performance optimizations, VS developers removed +feature that looks for changes in VS registry root and thus we need to call

+
devenv.exe /Setup
+

In order to finish package registration.

+

This call can be very time consuming since Visual Studio 2012/2013 goes through all +extensions and looks for changes. On the other hand, I tried running devenv.exe with /Setup +parameter on fresh install of Visual Studio 2012/2013 and it was instant. On older +installation, however, the operation took well over a minute (it behaves just +like Microsoft Windows, which progressively slows down during its lifetime).

+

We can speed things up by a little hack. One of the things the /Setup +does is copying registry keys from HKLM to Visual Studio's 11.0_Config hive (or 12.0_Config, respectively). We can just write registry under this key +instead of calling devenv.exe and avoid possibly lengthy operation.

+

The hive is located in +HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config.

+

So let's open and edit the SampleVsPackage.reg file we have +generated using RegPkg.exe earlier. Here is the modified version where only the +registry root has been changed:

+
+REGEDIT4
+
+[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config\InstalledProducts\SampleVsPackage]
+@="#110"
+"Package"="{00000000-8fdf-48b6-98f8-4ff21a3a4def}"
+"PID"="1.0"
+"ProductDetails"="#112"
+"LogoID"="#400"
+[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config\Packages\{00000000-8fdf-48b6-98f8-4ff21a3a4def}]
+@="ComponentOwl.ToolboxIntegration.SampleVsPackage, SampleVsPackage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30782fc44cbe0af5"
+"InprocServer32"="C:\\Windows\\SYSTEM32\\MSCOREE.DLL"
+"Class"="ComponentOwl.ToolboxIntegration.SampleVsPackage"
+"CodeBase"="C:\\projects\\articles\\2012-10-22 Visual Studio Toolbox Control Integration\\ToolboxIntegration\\SampleVsPackage\\bin\\Debug\\SampleVsPackage.DLL"
+[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config\Packages\{00000000-8fdf-48b6-98f8-4ff21a3a4def}]
+[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config\Packages\{00000000-8fdf-48b6-98f8-4ff21a3a4def}\Toolbox]
+"Default Items"=dword:00000001
+
+

The highlighted parts have been edited.

+

So in addition to standard package registration, we also write in the +registry where Visual Studio 2012/2013 user config hive resides. This is sufficient +for our VSPackage to load.

+

However, this is really a hack - editing of user configuration in registry +may cause Visual Studio to not load your user settings and show up as when +running for the first time. I tried this hack on my machine and it worked, but +there may be some hidden glitches. If you want to follow standard procedure, +just call "devenv.exe /Setup".

+

Loading VSPackage

+

If you did all the previous steps, your package should load when you open +Windows Forms Designer and show Toolbox (Cotrol+Alt+X). You can notice your +package name displaying in status bar for a while, then SampleControl should show up in the +Toolbox under "Component Owl" tab:

+

+

Displaying Your Extension in VS About Box

+

If you want information about your extension to be visible in Visual Studio +splash screen and About Box, implement IVsInstalledProduct +interface:

+
+...
+
+public sealed class SampleVsPackage : Package, IVsInstalledProduct
+{
+
+...
+
+	int IVsInstalledProduct.IdBmpSplash(out uint pIdBmp)
+	{
+	    pIdBmp = 0;
+	    return 0;
+	}
+	
+	int IVsInstalledProduct.IdIcoLogoForAboutbox(out uint pIdIco)
+	{
+	    pIdIco = 400;
+	    return 0;
+	}
+	
+	int IVsInstalledProduct.OfficialName(out string pbstrName)
+	{
+	    pbstrName = "ComponentOwl SampleControl";
+	    return 0;
+	}
+	
+	int IVsInstalledProduct.ProductDetails(out string pbstrProductDetails)
+	{
+	    pbstrProductDetails = "SampleControl control.\r\nFor more information see http://www.componentowl.com";
+	    return 0;
+	}
+	
+	int IVsInstalledProduct.ProductID(out string pbstrPID)
+	{
+	    pbstrPID = "3.3.0.0";
+	    return 0;
+	}
+	
+	...
+	
+}
+
+

This code causes the component to show up in the list of "Installed Products" +in Visual Studio about box:

+

+

As for the splash screen, Visual Studio 2008 used to display extensions in +its splash screen, but later version do not:

+

    +    +

+

Troubleshooting Package Load Failures

+

You may encounter this dialog when playing with packages:

+

+

When you click "No", the package will be skipped later when loading packages. +You can re-enable loading all packages by running

+
devenv.exe /ResetSkipPkgs
+

To debug package load problem, you can do just what the dialog says. Run

+
devenv.exe /log
+

and then take a look on the ActivityLog.xml (path is shown +in the dialog). There you can find cause of the problem in one of the "entry" +elements:

+
+...
+<entry>
+  <record>106</record>
+  <time>2012/10/26 06:07:36.920</time>
+  <type>Error</type>
+  <source>VisualStudio</source>
+  <description>CreateInstance failed for package [ComponentOwl.ToolboxIntegration.SampleVSPackage, SampleVSPackage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=87379c2b0cde9bc3]</description>
+  <guid>{761F0CB7-64C1-4695-91D2-6E3C26C12314}</guid>
+  <hr>80070002</hr>
+  <errorinfo>Could not load file or assembly 'file:///C:\projects\articles\2012-10-22 Visual Studio Toolbox Control Integration\ToolboxIntegration\SampleVSPackage\bin\SampleVSPackage.DLL' or one of its dependencies. The system cannot find the file specified.</errorinfo>
+</entry>
+...
+
+

In this particular case, the problem was caused by changing output path from +"bin\SampleVSPackage.dll" to "bin\Debug\SampleVSPackage.dll" +so the file does not longer exist at the location for which it is registered. +The solution is to either change the location back or unregister the package +(i.e. remove the corresponding registry entries - the GUID is provided in the +log).

+

Past Troubles with Package Load Keys

+

The above problem with package load failure happened on Visual Studio 2005 +and 2008 because a Package Load Key (PLK) had to be provided by the VSPackage. +The PLK is basically a hashcode computed from metadata about package (name, +author/company, version). The PLK had to be obtained from a website provided by +Microsoft.

+

I believe PLK caused many troubles and headaches to developers, including +myself.

+

This is no longer relevant for Visual Studio 2010 and newer (requirement for +PLKs removed), so we won't discuss this topic in more depth

+

Update Control Already Installed in Toolbox

+

Suppose we have already integrated SampleControl version 3.3.0.0 in the +Visual Sudio Toolbox:

+

+

We would like to update this control to version 3.4.0.0.

+

First of all, we update assembly information of the SampleControl +project:

+

+

If we "deploy" (copy) SampleControl.dll to the folder with +SampleVsPackage.dll where it is registered, the SampleControl will no longer be +visible in Toolbox, because the control in Toolbox should still be 3.3.0.0 and +this version is no longer to be found.

+

You don't need to increment assembly version of the SampleVsPackage project, +but at least you have to increment parameter of the ProvideToolboxItems attribute:

+
+[PackageRegistration(UseManagedResourcesOnly = true)]
+[InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
+[Guid(GuidList.guidSampleVsPackagePkgString)]
+[ProvideToolboxItems(2)]
+public sealed class SampleVsPackage : Package, IVsInstalledProduct
+{
+	...
+}
+
+

The package need to be re-registered (see section Registering the Package) +which will effectively update just the "Default Items" value in the Toolbox key:

+

+

This will cause Visual Studio to update your control in the Toolbox:

+

+

Remove Control from the Toolbox

+

Now we would like to remove control from the Visual Studio Toolbox. This +step can be done by custom uninstaller.

+

One way to do that is to simply unregister the VSPackage using +RegPkg.exe:

+
32-bit OS: RegPkg.exe /unregister /root:SOFTWARE\Microsoft\VisualStudio\10.0 SampleVsPackage.dll
+64-bit OS: RegPkg.exe /First of all, we update assembly information of the unregisFirst of all, we update assembly information of the ter /root:SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0 SampleVsPackage.dll
+

You can also do this manually by simply removing the registry entry of the +corresponding package, e.g.:

+
32-bit OS: HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\Packages\{a9696de6-e209-414d-bbec-a0506fb0e924}
+64-bit OS: HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Packages\{a9696de6-e209-414d-bbec-a0506fb0e924}
+

On Visual Studio 2012/2013, the key need to be removed in user config registry +hive or call "devenv.exe /Setup" after removing the registry key in HKLM. For +more information, see section Package Registration for Visual Studio 2012/2013.

+

9. Toolbox Integration using VSIX Packages

+

Microsoft have removed most /po +f the drawbacks of VSI packages by introducing VSIX. The +price is that VSIX is a little bit more complicated and Visual Studio 2008 is no +longer supported.

+

There are two versions of VSIX Schema. Version 1.0 is what Visual Studio 2010 +understand. There is also version 2.0 for Visual Studio 2012/2013. We want a VSIX +Package compatible with both, so we will work in Visual Studio 2010.

+

Create a new Project from Template

+

If you have Visual Studio 2010 SDK installed, you can create a new VSIX +package project with control from a template.

+

Select "File - New - Project.." (Control+Shift+N) and +then select the "Windows Forms Toolbox Control" or "WPF +Toolbox Control" template:

+

+

The projects is basically a VSPackage wrapped in VSIX container after +build. The package assembly also contain the control class named +ToolboxControl.

+

There are three important files generated by the template:

+
    +
  • ProvideToolboxControlAttribute.cs - This is attribute + for ToolboxControl class. We will discuss it later.
  • +
  • source.extension.vsixmanifest - This is manifest XML + file for our VSIX package. It contains all information about the package and + what it contains.
  • +
  • ToolboxControl.cs - This is a sample control to be + installed in Visual Studio Toolbox.
  • +
+

Create a new Project from VSPackage

+

We can also start with VSPackage like the one we have already created in +previous section. I will create a new VSPackage project (as in previous +chapter), name it SampleVsixPackage and configure it according +to "Windows Forms Toolbox Control" template to show you all the differences.

+

The basic configuration of source.extension.vsixmanifest is +the same as in previous chapter.

+

Project properties differs from VSPackage we have created earlier on the VSIX +tab, where we have the first two check boxes checked:

+

+

Update the Manifest File

+

Double-click on the source.extension.vsixmanifest file to +open up the VSIX Manifest Designer:

+

+

If you are not sure about some part of the form, please take a look on +section Create VSPackage Project, where the form is described in more +detail.

+

In addition to previous VSPackage project, I have also filled the following +optional boxes:

+
    +
  • License Terms - If you have EULA or other licence in + TXT or RTF format, you can browse for it.
  • +
  • Icon - You can browse for an icon representing the + extension. It should be 32x32 pixels large, PNG, BMP, JPEG or ICO image + format.
  • +
  • Preview Image - Thumbnail image representing the + extension. It should be 200x200 pixels large, PNG, BMP or JPEG image format.
  • +
  • More Info URL - URL of a website containing more + information about the extension.
  • +
  • Getting Started Guide - URL of a website with + documentation; you can also provide relative path to HTML file with the + local documentation.
  • +
+

Add Control

+

Let's create a new WPF control within the SampleVsixPackage +project itself. I will name it SampleWpfControl to distinguish +it from SampleControl we have created earlier.

+

To ensure our control will show up in Toolbox of Visual Studio 2012/2013, we have +to decorate the SampleWpfControl class by +ProvideToolboxControlAttribute:

+
+[ProvideToolboxControl("SampleWpfControl", true)]
+public partial class SampleWpfControl : UserControl
+{
+	...
+}
+
+

You also have to provide implementation of the attribute class:

+
+[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+[System.Runtime.InteropServices.ComVisibleAttribute(false)]
+public sealed class ProvideToolboxControlAttribute : RegistrationAttribute
+{
+	private const string ToolboxControlsInstallerPath = "ToolboxControlsInstaller";
+
+	public ProvideToolboxControlAttribute(string name, bool isWpfControls)
+	{
+		if (name == null)
+		{
+			throw new ArgumentException("name");
+		}
+
+		this.Name = name;
+		this.IsWpfControls = isWpfControls;
+	}
+
+	private bool IsWpfControls { get; set; }
+	private string Name { get; set; }
+
+	public override void Register(RegistrationAttribute.RegistrationContext context)
+	{
+		if (context == null)
+		{
+			throw new ArgumentNullException("context");
+		}
+
+		using (Key key = context.CreateKey(String.Format(CultureInfo.InvariantCulture, "{0}\\{1}",
+														 ToolboxControlsInstallerPath,
+														 context.ComponentType.Assembly.FullName)))
+		{
+			key.SetValue(String.Empty, this.Name);
+			key.SetValue("Codebase", context.CodeBase);
+			if (this.IsWpfControls)
+			{
+				key.SetValue("WPFControls", "1");
+			}
+		}
+
+	}
+
+	public override void Unregister(RegistrationAttribute.RegistrationContext context)
+	{
+		if (context != null)
+		{
+			context.RemoveKey(String.Format(CultureInfo.InvariantCulture, "{0}\\{1}",
+														 ToolboxControlsInstallerPath,
+														 context.ComponentType.AssemblyQualifiedName));
+		}
+	}
+}
+
+

This code is generated if you create project from template.

+

The project in Solution Explorer should look like this:

+

+

+

Adding Controls from Other Projects

+

What if we would like to use SampleControl.dll as in the VSI +package scenario?

+

Of course, we can click "Add Content" in the VSIX Manifest designer and +simply add "Toolbox Control" content from other project:

+

+

However, this is possible only if the SampleControl project +itself is a package project!

+

Lucklily, since the VSIX package is still just a ZIP archive, we can take a +look on how to add such external DLLs to it manually.

+

Setting Up VSIX Installer

+

The VSIX Installer tool (VsixInstaller.exe) is located in +Visual Studio's binary folder:

+
32-bit OS: c:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\VSIXInstaller.exe
+64-bit OS: c:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\VSIXInstaller.exe
+

You can hit F6 and Visual Studio will build your project to create +SampleVsixPackage.vsix file. This is our VSIX package.

+

The VSIX Installer should be associated with the .VSIX file extension, so it is +usually possible +to just double-click on the file and see the VSIX installer.

+

The installation can fail in the very first step:

+

+

This problem appears if you have invalid manifest file. If this happen, open +source.extension.vsixmanifest and fill in all missing data. +Furthermore, you can check if the XML is valid according to +VSIX Extension +Schema.

+

Now we are able to rebuild and run the VSIX installer again:

+

+

Make the VSIX Package Compatible with Visual Studio 2012/2013

+

To make our VSIX package working with Visual Studio 2012 and newer, we need +to manually update the manifest file. Select the +source.extension.vsixmanifest file and press F7 (View Code):

+
+<?xml version="1.0" encoding="utf-8"?>
+<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
+  <Identifier Id="ComponentOwl.ToolboxControl.Express">
+    <Name>Component Owl</Name>
+    <Author>ComponentOwl.com</Author>
+    <Version>1.0</Version>
+    <Description xml:space="preserve">Windows Forms Toolbox Control</Description>
+    <Locale>1033</Locale>
+    <MoreInfoUrl>http://www.componentowl.com/toolbox-control</MoreInfoUrl>
+    <License>license.rtf</License>
+    <GettingStartedGuide>http://www.componentowl.com/documentation/toolbox-control</GettingStartedGuide>
+    <Icon>icon.png</Icon>
+    <PreviewImage>overview.jpg</PreviewImage>
+    <SupportedProducts>
+      <VisualStudio Version="10.0">
+        <Edition>Ultimate</Edition>
+        <Edition>Premium</Edition>
+        <Edition>Pro</Edition>
+      </VisualStudio>
+      <VisualStudio Version="11.0">
+        <Edition>Ultimate</Edition>
+        <Edition>Premium</Edition>
+        <Edition>Pro</Edition>
+      </VisualStudio>
+      <VisualStudio Version="12.0">
+        <Edition>Ultimate</Edition>
+        <Edition>Premium</Edition>
+        <Edition>Pro</Edition>
+      </VisualStudio>
+    </SupportedProducts>
+    <SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="5.0" />
+  </Identifier>
+  <References />
+  <Content>
+    <ToolboxControl>|%CurrentProject%;PkgdefProjectOutputGroup|</ToolboxControl>
+  </Content>
+</Vsix>
+
+

The bolded text have been added. I have simply added a new +VisualStudio element with higher version and all the editions (they are +relevant for VS 2012 and 2013 as its own template also generates these).

+

The VSIX installer will show Visual Studio 2012 options as +well after this update (if installed, of course):

+

+

Please note that Visual Studio 2012/2013 also works with 2.0 version of the +schema, so if you create VSIX package in Visual Studio 2012/2013, it won't be +compatible with 2010. The solution is hence to use 1.0 version of the schema +and add support for newer Visual Studio as described earlier.

+

A great advantage over VSI package is that installation of Toolbox control is +really fast with VSIX.

+

Regrettably, the control won't show up in Visual Studio 2012/2013 Toolbox in its +default configuration. You need to enable loading-per user extensions (this +option is enabled by default in Visual Studio 2010):

+

+

Signing the VSIX Package

+

Unlike older VSI package, there is no nag screen when the package is not +signed. Instead, a label appears informing user that the package is not +signed.

+

To sign a VSIX package, we need PackageSignatureManager from +System.IO.Packaging (WindowsBase.dll). I made a simple command-line application called SignVsix (you can +find it in sample source code) that takes three arguments (VSIX file path, PFX +certificate path and password for the certificate):

+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.IO.Packaging;
+using System.Security.Cryptography;
+using System.Security.Cryptography.X509Certificates;
+
+internal class Program
+{
+	private static void Main(string[] args)
+	{
+		// first argument - path to VSIX package
+		string paramPathPackage = args[0].Replace("\"", "");
+		// second argument - path to PFX certificate
+		string paramPathCertificate = args[1].Replace("\"", "");
+		// third argument - password for the certificate
+		string paramPassword = args[2];
+
+		// open VSIX package
+		Package package = Package.Open(paramPathPackage, FileMode.Open);
+
+		// load certificate
+		byte[] certificate = File.ReadAllBytes(paramPathCertificate);
+
+		// sign all parts of the package
+		var signatureManager = new PackageDigitalSignatureManager(package)
+		{
+			CertificateOption = CertificateEmbeddingOption.InSignaturePart
+		};
+
+		List<Uri> partsToSign = new List<Uri>();
+
+		foreach (PackagePart packagePart in package.GetParts())
+		{
+			partsToSign.Add(packagePart.Uri);
+		}
+
+		partsToSign.Add(PackUriHelper.GetRelationshipPartUri(signatureManager.SignatureOrigin));
+		partsToSign.Add(signatureManager.SignatureOrigin);
+		partsToSign.Add(PackUriHelper.GetRelationshipPartUri(new Uri("/", UriKind.RelativeOrAbsolute)));
+
+		try
+		{
+			signatureManager.Sign(partsToSign, new X509Certificate2(certificate, paramPassword));
+		}
+		catch (CryptographicException cryptographicException)
+		{
+			Console.WriteLine("Signing failed: {0}", cryptographicException.Message);
+		}
+	}
+}
+
+

The usage is very simple:

+
SignVsix.exe SampleVsixPackage.vsix certificate.pfx abc123
+

When the file is signed, VSIX Installer shows label "Digital Signature: +<Author Name>" on the first page:

+

+

Dissecting the VSIX Package

+

If you look on the project references, you can see reference to +Microsoft.VisualStudio.Shell.Immutable.10. This reference points to +Visual Studio 2010 SDK and we cannot expect this dependency present on end-user's machine. This +library contains ProvideToolboxControlAttribute class, which is +used by our ToolboxControl.

+

Since a software development company may want to develop many components, it would be nice to have an +universal VSIX package which can be adjusted for any control.

+

Let's take a look on the ToolboxControl.vsix. It is simply a +ZIP archive containing the manifest, resources, ToolboxControl binary and a +ToolboxControl.pkgdef file. If we look through all its content, +we easily generate our own VSIX packages on demand, even without Visual Studio. +There should also be a programmatic way on generating VSIX packages using +classes from System.IO.Packaging.

+

Update Toolbox Control via VSIX Package

+

If you made changes to your control and want to re-install the package, an +error message appear:

+

+

In order to provide an update, you need to increment version number in the +VSIX manifest:

+

+

You can also increment version number in the Package class attribute, but +this is not necessary for the VSIX to perform update:

+
+[InstalledProductRegistration("#110", "#112", "2.0", IconResourceID = 400)]
+[Guid(GuidList.guidSampleVsixPackagePkgString)]
+public sealed class SampleVsixPackage : Package
+{
+	...
+}
+
+

Of course, you can also increment version of the assembly.

+

Uninstall the VSIX Package

+

The VSIX Installer can be used to uninstall control from the Toolbox via +/uninstall parameter followed by package ID (the constant located in +Guids.cs: GuidList.guidSampleVsixPackagePkgString):

+
VSIXInstaller.exe /uninstall:e3dfd099-d0ab-4b8e-b26d-639032c29ad9
+

It is also possible to uninstall VSIX Package manually using +Extension Manager (Tools - Extension Manager...). In Visual Studio +2012/2013, the corresponding dialog is called Extensions and Updates +(Tools - Extensions and Updates...).

+

+

Quiet Mode

+

Both installation and uninstallation can be performed in quiet mode by using /quiet parameter. This will suppress +user interface of the installer, which is handy when you want to automate +Toolbox control integration with your custom installer.

+

10. Supporting Multiple Version of .NET Framework

+

Since .NET Framework is backward-compatible, building a component on lowest +possible framework ensures compatibility with higher versions as well.

+

I heard from several users that the component may not be displayed in Toolbox +although it seems that the Toolbox respects the .NET compatibility and display +.NET 2.0 component even when working in .NET 4.0 (Client Profile) project.

+

There is also a scenario where you want to support additional features from +higher version of .NET (for example, drawing text using GDI+ in .NET 2.0 and +drawing text using WPF in .NET 3.5 and higher). You may also want to add +extensive Windows Forms Designer support, which is not available in Client +Profile framework.

+

The solution to this is to build several DLLs, each with different features +and possibly different target frameworks. Then integrate all the assemblies.

+

This does not pose a problem when DTE approach is used, +alhtough it is better to give each version of the component unique name or place +them in separate tabs (e.g. "Component Owl WinForms - .NET 2.0").

+

When TCI approach is used, each version of the assembly +requires different public key token, because they have to reside in GAC +side-by-side. Furthermore, they need a separate registry key based on the public +key token.

+

The VSI and VSIX approaches require +renaming the component or customizing Toolbox tab in the +ProvideToolboxControlAttribute (see part Toolbox Control Integration using +VSIX Packages for more information).

+

The VSPackage approach allows you to place all the versions +in Visual Studio Toolbox under their respective tabs.

+

When manual approach is used, you can of course add each +version of the assembly separately and also create separate tabs in the Toolbox.

+ +

11. Sample Source Code

+ +

The attached sample source is a Visual Studio 2010 Solution containing +implementations of all the presented approaches. The binaries are contained +under "bin\Release" subfolders and batch files (.CMD extension) are provided +where appropriate.

+ +

+Download sample source code (212 KB) +

+ +

You can find the following folders in the archive:

+

DteToolboxInstaller - A command-line application for +installing/uninstalling assemblies in VS Toolbox using Visual Studio Automation +Object Model (DTE). Custom tab name and VS version can be specified. The tool +can be used in real-world application.

+

SampleControl - Windows Forms control for testing the +integration.

+

SampleVsixPackage - VSIX package project (basically a +VSPackage that is further packaged with the sample control), the resulting +package can be installed by VSIX Installer that comes with Visual Studio.

+

SampleVsPackage - VSPackage that is able to install all +control assemblies located in its own folder. Contains batch files for package +registration/unregistration.

+

SignVsix - A command-line application for signing VSIX +packages. Sample batch file is provided. Valid PFX certificate need to be +provided by the user.

+

TciToolboxInstaller - A command-line application for +installing/uninstalling assemblies in VS Toolbox using Toolbox Control Installer +package (but does not depend on it). Custom tab name and VS version can be +specified. The tool can be used in real-world application.

+

VSI - Basic setting for creating VSI package and a sample +VSI package created from the files. Batch file for signing the VSI package is +provided.

+

 

+ +

+Download sample source code (212 KB) +

+ +Creative Commons License
This work is licensed under a Creative Commons Attribution 3.0 Unported License.Component Owl WinForms - .NET 2.0 +
+ +
+ +
+ + + + + +
+ +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/better-listview-express.html b/better-listview-express.html new file mode 100644 index 0000000..7312892 --- /dev/null +++ b/better-listview-express.html @@ -0,0 +1,448 @@ + + + + + + + + + + + + + + + +Free list-view control for .NET WinForms (C#, VB.net) - freeware Better LIstView Express by Component Owl + + + + + + + +
+ + + + + + + +
+
+
+

Better ListView Express edition: Free .NET listview control

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ +
+ Free Download + +

Version 3.15 / May 27, 2015

+
+ +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + + + + + +
+ Share this page if you like it: +
+ +
+
+ + + + +
+ +
+ +
+ +
+ +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git "a/better-listview-express/\\\".html" "b/better-listview-express/\\\".html" new file mode 100644 index 0000000..04c2a1d --- /dev/null +++ "b/better-listview-express/\\\".html" @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/better-listview-express/comparison-with-full-version.html b/better-listview-express/comparison-with-full-version.html new file mode 100644 index 0000000..6d6fb27 --- /dev/null +++ b/better-listview-express/comparison-with-full-version.html @@ -0,0 +1,900 @@ + + + + + + + + + + + + + + + +Comparison of Better ListView, Better ListView Express, and regular .NET list-view components + + + + + + + +
+ + + + + + + +
+
+
+

Better ListView Express edition: Free .NET listview control

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ +
+ Free Download + +

Version 3.15 / May 27, 2015

+
+ +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + + + + + +
+ Share this page if you like it: +
+ +
+
+ + + + +
+ +
+ +
+ +
+ +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/better-listview-express/documentation.html b/better-listview-express/documentation.html new file mode 100644 index 0000000..5555cfc --- /dev/null +++ b/better-listview-express/documentation.html @@ -0,0 +1,228 @@ + + + + + +Better ListView Documentation + + + +
+

+ Better ListView Express Documentation + +

+ + +

+ + Introduction, Comparison + +
What this documentation covers; brief comparison to regular .NET + ListView +

+

+ + Quick Start + +
Step-by-step tutorial for using Better ListView in your + application +

+

+ + Background Image + +
Image on the control background, setting its layout and + opacity +

+

+ + Check Boxes + +
Enabling two and three state check boxes on items +

+

+ + Collections + +
Working with collections of columns, items, sub-items, + groups +

+

+ + Columns + +
Hiding, resizing and reordering column headers +

+

+ + Context Menus + +
Displaying context menus on the control, column headers, groups + and items +

+

+ + Data Binding + +
Complex binding of custom list-based data to the + control +

+

+ + Drag and Drop + +
Setting-up Drag and Drop functionality and effects +

+

+ + Embedded Controls + +
Custom item and sub-item editing controls +

+

+ + Empty Text + +
Displaying customized text on empty list +

+

+ + Focusing Elements + +
How items, sub-items and groups can be focused and how to detect + focus changes +

+

+ + Groups + +
Working with item groups +

+

+ + Hit Test + +
Getting info for cursor position in the control +

+

+ + Insertion Mark + +
Specifying insertion mark location and apperance +

+

+ + Item Hierarchy + +
Setting-up tree-like item hierarchy (parent and child items), item + indentation +

+

+ + Item Reordering + +
Changing item order automatically with Drag and Drop +

+

+ + Items + +
Working with ListView items +

+

+ + Label Editing + +
Inline editing of items and sub-items +

+

+ + Layout Properties + +
Element and element part sizes and padding, multi-line text, image + border +

+

+ + Multi-line Items + +
Setting up items with multiple lines of text +

+

+ + Owner Drawing + +
Custom drawing over the control and its parts +

+

+ + Performance + +
Understanding Better ListView performance settings +

+

+ + Saving and Loading ListView Content + +
Storing and retrieving items and groups in binary or XML + format +

+

+ + Searching Items + +
Item searching by typing or programmatically +

+

+ + Serialization + +
Overview of Better ListView serialization capabilities +

+

+ + Sorting Items + +
Ordering items with multiple columns and custom + comparers +

+

+ + Sub-items + +
Working with sub-items which are attached under items +

+

+ + Text Formatting + +
Text alignment and trimming +

+

+ + Tooltips + +
Displaying customized tooltips on control and its parts +

+

+ + Views + +
Ways of displaying items, detecting view change +

+ + + + +
+ diff --git a/better-listview-express/quick-start-guide.html b/better-listview-express/quick-start-guide.html new file mode 100644 index 0000000..1d0db5d --- /dev/null +++ b/better-listview-express/quick-start-guide.html @@ -0,0 +1,303 @@ + + + + +Quick Start + + + + +
+
+ + + + +

Quick Start

+ +

Table of Contents

+

Tutorial Prerequisites

+

Step-by-step tutorial

+

Installation + Troubleshooting

+

Migrating from .NET ListView

+

Learning Resources and Getting + Support

+ + + + +

+Tutorial Prerequisites

+ + + +

+Step-by-step Tutorial

+ + +

Start with a new "Windows Forms Application" + project. A designer with empty Form appears. Display the + Toolbox window (View - + Toolbox):

+ +

+ +

The Toolbox should contain a new tab called + "ComponentOwl" containing all the installed component + from ComponentOwl, including Better ListView.

+ +

+

Express editions of ComponentOwl Controls are listed in separate + tab called "ComponentOwl (Express Controls)".

+
+

If you chose not to integrate component in + Visual Studio during installation or the component have not been + successfully integrated, please follow the next steps.

+ +

Right-click on empty area of the Toolbox window and select + "Choose Items...":

+ +

+ +

In the "Choose Toolbox Items" dialog, select + the ".NET Framework Components" tab. If the comonent + has been properly installed, it will be already listed here. If you find + it, make sure the newest version is checked (e.g. 2.5.2.0 instead of + 1.0.0.0) and click "OK":

+ +

+ +

If you need other than installed version (e.g. DLL to match for + specific .NET Framework version) click on the + "Browse..." button:

+ +

+ +

Browse for the betterlistview.dll file containing the + component.

+ +

+

If you use Better ListView Express edition, + locate component named BetterListViewExpress or DLL named + betterlistviewexpress.dll.

+
+

The location depends on where you installed the product. The default + location is:

+ +
C:\Program Files\Component Owl\Better ListView\Redistributable
+ +

You can choose the file right within + "Redistributable" folder. This is .NET 2.0 component + compatible with .NET Framework 2.0 or higher. If you want binary for a + specific .NET version, choose the file from ".NET Framework + Specific" folder:

+ +

+ +

Make sure the check box next to + "BetterListView" is checked and click + "OK":

+ +

+ +

Now the component should appear in your Toolbox:

+ +

+ +

Select the component and place it on designer surface:

+ +

+ +

Now you can design Better ListView the same way as any other + control:

+ +

+ + +

+Installation + Troubleshooting

+ + +

If the component does not appear in Toolbox, make sure that your + target framework version is a full-featured .NET Framework 2.0, 3.0, 3.5 + or 4.0. The Compact Framework or Client Profile are not supported.

+ +

You can also try the "Reset Toolbox" option + from the Toolbox context menu, restart Visual Studio and try to add the + control again.

+ +

Sometimes even the Toolbox can get corrupted (known issue on Visual + Studio 2010) and its cache needs to be cleared. Simply remove all + ".tbd" files from this folder:

+ +

Vista/Windows 7:

+ +
\Users\<user>\AppData\Local\Microsoft\VisualStudio\10.0\*.tbd
+ +

Windows XP:

+ +
\Documents and Settings\<user directory>\Local Settings\Application Data\Microsoft\VisualStudio\10.0\*.tbd
+ +

Make sure the Visual Studio is not running when removing the files. + The Toolbox should reload its default items when opened.

+ + + + + + +

+Migrating from .NET ListView

+ + +

We did our best to make Better ListView as similar to regular .NET + ListView as possible. Better ListView, however, is not a ListView-derived + control - it is completely autonomous WinForms control. The following + rules of thumb will help you to migrate from ListView to Better + ListView:

+ + +

To compare usage of .NET ListView and Better ListView, consider the + following code using the regular .NET + ListView:

+ +

C#

+
BetterListView listView = new BetterListView();
+
+BetterListViewItem item = new BetterListViewItem("new item");
+
+listView.Items.Add(item);
+
+listView.View = BetterListViewView.List;
+
+// ...
+
+BetterListViewHitTestInfo hitTestInfo = listView.HitTest(new Point(0, 0));
+ +

Visual Basic

+
Dim listView As New BetterListView()
+
+Dim item As New BetterListViewItem("new item")
+
+listView.Items.Add(item)
+
+listView.View = BetterListViewView.List
+
+' ...
+
+Dim hitTestInfo As BetterListViewHitTestInfo = listView.HitTest(New Point(0, 0))
+ + +

+Learning resources and getting + support

+ + +

The documentation and learning resources include:

+ + +

You can find all these resources in Start Menu - Better + ListView.

+ +

The C# and Visual Basic Samples are located at:

+ +

Vista/Windows 7:

+ +
\Users\<user>\Documents\ComponentOwl\Better ListView Samples
+ +

Windows XP:

+ +
\Documents and Settings\<user directory>\My Documents\ComponentOwl\Better ListView Samples
+ +

Make sure the Visual Studio is not running when removing the files. + The Toolbox should reload its default items when opened.

+ +

We will happily answer any of your questions and provide further + assistance. Just email us at support@componentowl.com. + Or, you can use the online form at www.componentowl.com/support.

+ + + +
+ + + + + +
+ + + +
+ diff --git a/better-listview-express/releases?since=3.14.0.html b/better-listview-express/releases?since=3.14.0.html new file mode 100644 index 0000000..6c36af1 --- /dev/null +++ b/better-listview-express/releases?since=3.14.0.html @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + +Better ListView .NET control: Improved List View control for C# and VB.NET (Windows Forms) + + + + + + + +
+ + + + + + + +
+
+
+

Better ListView Express edition: Free .NET listview control

+ + + +
+ +
+ + + + + + + + + +
+ +
+ +
+ Free Download + +

Version 3.15 / May 27, 2015

+
+ +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + + + + + +
+ Share this page if you like it: +
+ +
+
+ + + + +
+ +
+ +
+ +
+ +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/better-listview.html b/better-listview.html new file mode 100644 index 0000000..04c2a1d --- /dev/null +++ b/better-listview.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git "a/better-listview/\\\".html" "b/better-listview/\\\".html" new file mode 100644 index 0000000..04c2a1d --- /dev/null +++ "b/better-listview/\\\".html" @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/better-listview/class-reference.html b/better-listview/class-reference.html new file mode 100644 index 0000000..48e0710 --- /dev/null +++ b/better-listview/class-reference.html @@ -0,0 +1,21 @@ + + + + + Better ListView Class Reference + + + + + + + <p>This page requires frames, but your browser does not support them.</p> + + + diff --git a/better-listview/comparison-table.html b/better-listview/comparison-table.html new file mode 100644 index 0000000..fee5c02 --- /dev/null +++ b/better-listview/comparison-table.html @@ -0,0 +1,550 @@ + + + + + + + + + + + + + + + +Better ListView .NET control: Improved List View control for C# and VB.NET (Windows Forms) + + + + + + + +
+ + + + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ +
+ Share this page if you like it: +
+ +
+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/better-listview/documentation.html b/better-listview/documentation.html new file mode 100644 index 0000000..8c87171 --- /dev/null +++ b/better-listview/documentation.html @@ -0,0 +1,227 @@ + + + + + +Better ListView Documentation + + + +
+

+ Better ListView Documentation + +

+ +

+ + Introduction, Comparison + +
What this documentation covers; brief comparison to regular .NET + ListView +

+

+ + Quick Start + +
Step-by-step tutorial for using Better ListView in your + application +

+

+ + Background Image + +
Image on the control background, setting its layout and + opacity +

+

+ + Check Boxes + +
Enabling two and three state check boxes on items +

+

+ + Collections + +
Working with collections of columns, items, sub-items, + groups +

+

+ + Columns + +
Hiding, resizing and reordering column headers +

+

+ + Context Menus + +
Displaying context menus on the control, column headers, groups + and items +

+

+ + Data Binding + +
Complex binding of custom list-based data to the + control +

+

+ + Drag and Drop + +
Setting-up Drag and Drop functionality and effects +

+

+ + Embedded Controls + +
Custom item and sub-item editing controls +

+

+ + Empty Text + +
Displaying customized text on empty list +

+

+ + Focusing Elements + +
How items, sub-items and groups can be focused and how to detect + focus changes +

+

+ + Groups + +
Working with item groups +

+

+ + Hit Test + +
Getting info for cursor position in the control +

+

+ + Insertion Mark + +
Specifying insertion mark location and apperance +

+

+ + Item Hierarchy + +
Setting-up tree-like item hierarchy (parent and child items), item + indentation +

+

+ + Item Reordering + +
Changing item order automatically with Drag and Drop +

+

+ + Items + +
Working with ListView items +

+

+ + Label Editing + +
Inline editing of items and sub-items +

+

+ + Layout Properties + +
Element and element part sizes and padding, multi-line text, image + border +

+

+ + Multi-line Items + +
Setting up items with multiple lines of text +

+

+ + Owner Drawing + +
Custom drawing over the control and its parts +

+

+ + Performance + +
Understanding Better ListView performance settings +

+

+ + Saving and Loading ListView Content + +
Storing and retrieving items and groups in binary or XML + format +

+

+ + Searching Items + +
Item searching by typing or programmatically +

+

+ + Serialization + +
Overview of Better ListView serialization capabilities +

+

+ + Sorting Items + +
Ordering items with multiple columns and custom + comparers +

+

+ + Sub-items + +
Working with sub-items which are attached under items +

+

+ + Text Formatting + +
Text alignment and trimming +

+

+ + Tooltips + +
Displaying customized tooltips on control and its parts +

+

+ + Views + +
Ways of displaying items, detecting view change +

+ + + + +
+ diff --git a/better-listview/quick-start-guide.html b/better-listview/quick-start-guide.html new file mode 100644 index 0000000..aa5e8e0 --- /dev/null +++ b/better-listview/quick-start-guide.html @@ -0,0 +1,437 @@ + + + + +Quick Start + + + + +
+
+ + + + +

Quick Start

+ +

Table of Contents

+

Tutorial Prerequisites

+

Step-by-step tutorial

+

Installation + Troubleshooting

+

Online + Activation

+

Offline + Activation

+

Migrating from .NET ListView

+

Learning Resources and Getting + Support

+ + + + +

+Tutorial Prerequisites

+ + + +

+Step-by-step Tutorial

+ + +

Start with a new "Windows Forms Application" + project. A designer with empty Form appears. Display the + Toolbox window (View - + Toolbox):

+ +

+ +

The Toolbox should contain a new tab called + "ComponentOwl" containing all the installed component + from ComponentOwl, including Better ListView.

+ + + +

If you chose not to integrate component in + Visual Studio during installation or the component have not been + successfully integrated, please follow the next steps.

+ +

Right-click on empty area of the Toolbox window and select + "Choose Items...":

+ +

+ +

In the "Choose Toolbox Items" dialog, select + the ".NET Framework Components" tab. If the comonent + has been properly installed, it will be already listed here. If you find + it, make sure the newest version is checked (e.g. 2.5.2.0 instead of + 1.0.0.0) and click "OK":

+ +

+ +

If you need other than installed version (e.g. DLL to match for + specific .NET Framework version) click on the + "Browse..." button:

+ +

+ +

Browse for the betterlistview.dll file containing the + component.

+ + + +

The location depends on where you installed the product. The default + location is:

+ +
C:\Program Files\Component Owl\Better ListView\Redistributable
+ +

You can choose the file right within + "Redistributable" folder. This is .NET 2.0 component + compatible with .NET Framework 2.0 or higher. If you want binary for a + specific .NET version or Client Profile, choose the file from + ".NET Framework Specific" folder:

+ +

+ +

Make sure the check box next to + "BetterListView" is checked and click + "OK":

+ +

+ +

Now the component should appear in your Toolbox:

+ +

+ +

Select the component and place it on designer surface:

+ +

+ +

Now you can design Better ListView the same way as any other + control:

+ +

+ + +

+Installation + Troubleshooting

+ + +

If the component does not appear in Toolbox, make sure that your + target framework version is a full-featured .NET Framework 2.0, 3.0, 3.5 + or 4.0. The Compact Framework is not supported.

+ +

You can also try the "Reset Toolbox" option + from the Toolbox context menu, restart Visual Studio and try to add the + control again.

+ +

Sometimes even the Toolbox can get corrupted (known issue on Visual + Studio 2010) and its cache needs to be cleared. Simply remove all + ".tbd" files from this folder:

+ +

Vista/Windows 7:

+ +
\Users\<user>\AppData\Local\Microsoft\VisualStudio\10.0\*.tbd
+ +

Windows XP:

+ +
\Documents and Settings\<user directory>\Local Settings\Application Data\Microsoft\VisualStudio\10.0\*.tbd
+ +

Make sure the Visual Studio is not running when removing the files. + The Toolbox should reload its default items when opened.

+ + +

+Online Activation

+ + +

By default, Better ListView runs in trial mode. + The only limitations of trial version are watermark + displayed on the control...

+ +

+ +

and an Activation Dialog, that appears on every + application run:

+ +

+ +

There are three possible actions:

+ + +

When activating Better ListView, you are asked for a serial key + (obtained by pruchasing + Better ListView):

+ +

+ +

+

Internet connection is required to activate Better ListView. If + you need to activate the product off-line, please contact + us.

+
+

When the Better ListView is activated, it uses the standard + licensing scheme of .NET. When a form is created or opened in + Windows Forms Designer, a + licenses.licx file is updated in your project and the + trial version notification disappears.

+ + +

+Offline Activation

+ + +

If the activation is blocked by a firewall or proxy server, you can + activate Better ListView offline.

+ +

First, call the following static method from code:

+ +
BetterListView.ShowOfflineActivationDialog()
+ +

A dialog appears containing your computer ID:

+ +

+ +

Please copy this code to clipboard (Control+C) and send us the code + along with your serial number you obtained when + purchased the product to support@componentowl.com.

+ +

The serial number is a 16-character code the identifies your + purchased product, e.g.:

+ +

+
5KTPNX6QNJBZNJTL
The computer ID is + rather longer code that is unique to your machine: + +
6780f65cb1b86f9a10dacc662906c3d371ab4abc
+ +

With this information, we will generate a license file and send it + to back to you via e-mail.

+ +

You can find a file license-blv.dat in the e-mail + attachment we send in reply. Please copy this file in the following path + (and create the folder Component Owl if it does not + exist):

+ +

Windows 7, 8, Vista:

+ +
c:\ProgramData\Component Owl\
+ +

Windows XP:

+ +
c:\Documents and Settings\All Users\Application Data\Component Owl\
+ +

Now just rebuild the project referencing Better ListView and you are + done.

+ +

Please note the license works for specific + product and specific computer. It won't + work on other machines or with other Component Owl's products. You need to + activate Better ListView for each machine on which you want to build + projects.

+ + +

Updating to Newer Version of Better ListView

+ + +

If a new version of Better ListView is released, to update to newer + version, simply download + and install the new version. The installer will prompt for updating to a + new version.

+ +

The DLL with the component (betterlistview.dll) is + installed usually in Program Files folder, so if you + use copies of the library on other locations on your disk, replace the old + copies with the new version.

+ +

The licenses.licx file in your project may also + point to an older version of Better ListView. To update + licenses.licx open some form with Better ListView in + Windows Forms Designer and compile. A new line will + be added to the licenses.licx for the new version of + the Better ListView. You can delete the line with the reference to older + version, e.g.:

+ +
ComponentOwl.BetterListView.BetterListView, BetterListView, Version=1.4.0.0, Culture=neutral, PublicKeyToken=e6c91a3add447be2
+ +

should be switched to:

+ +
ComponentOwl.BetterListView.BetterListView, BetterListView, Version=2.7.0.0, Culture=neutral, PublicKeyToken=e6c91a3add447be2
+ +

if 2.7.0.0 is the updated version of Better ListView. + You can do the update of licenses.licx file with text + editor within Visual Studio, if you know the new + version number.

+ +


+
+

If you use Better ListView in separate project, you need to copy + licenses.licx file to the main project as + well.

+
+

+Migrating from .NET ListView

+ + +

We did our best to make Better ListView as similar to regular .NET + ListView as possible while having all its extra features. Better ListView, + however, is not a ListView-derived control - it is completely autonomous + WinForms control. The following rules of thumb will help you to migrate + from ListView to Better ListView:

+ + +

To compare usage of .NET ListView and Better ListView, consider the + following code using Better ListView instead the regular .NET + ListView:

+ +

C#

+
BetterListView listView = new BetterListView();
+
+BetterListViewItem item = new BetterListViewItem("new item");
+
+listView.Items.Add(item);
+
+listView.View = BetterListViewView.List;
+
+// ...
+
+BetterListViewHitTestInfo hitTestInfo = listView.HitTest(new Point(0, 0));
+ +

Visual Basic

+
Dim listView As New BetterListView()
+
+Dim item As New BetterListViewItem("new item")
+
+listView.Items.Add(item)
+
+listView.View = BetterListViewView.List
+
+' ...
+
+Dim hitTestInfo As BetterListViewHitTestInfo = listView.HitTest(New Point(0, 0))
+ + +

+Learning resources and getting + support

+ + +

The documentation and learning resources include:

+ + +

You can find all these resources in Start Menu - + ComponentOwl - Better ListView.

+ +

The C# and Visual Basic Samples are located at:

+ +

Windows 7, 8, Vista:

+ +
\Users\<user>\Documents\ComponentOwl\Better ListView Samples
+ +

Windows XP:

+ +
\Documents and Settings\<user directory>\My Documents\ComponentOwl\Better ListView Samples
+ +

Make sure the Visual Studio is not running when removing the files. + The Toolbox should reload its default items when opened.

+ +

We will happily answer any of your questions and provide further + assistance. Just email us at support@componentowl.com. + Or, you can use the online form at www.componentowl.com/support.

+ + + +
+ + + + + +
+ + + +
+ diff --git a/better-listview/releases?since=1.40.html b/better-listview/releases?since=1.40.html new file mode 100644 index 0000000..d3ee12c --- /dev/null +++ b/better-listview/releases?since=1.40.html @@ -0,0 +1,984 @@ + + + + + + + + + + + + + + + +Better ListView .NET control: Improved List View control for C# and VB.NET (Windows Forms) + + + + + + + +
+ + + + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + +
+ +
+ + + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ +
+ Share this page if you like it: +
+ +
+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/better-listview/resources.html b/better-listview/resources.html new file mode 100644 index 0000000..f142f1a --- /dev/null +++ b/better-listview/resources.html @@ -0,0 +1,381 @@ + + + + + + + + + + + + + + + +Better ListView .NET control: Improved List View control for C# and VB.NET (Windows Forms) + + + + + + + +
+ + + + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ +
+ Share this page if you like it: +
+ +
+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/better-listview/screenshots.html b/better-listview/screenshots.html new file mode 100644 index 0000000..f8b2654 --- /dev/null +++ b/better-listview/screenshots.html @@ -0,0 +1,459 @@ + + + + + + + + + + + + + + + +Better ListView Screenshots + + + + + + + +
+ + + + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + +
+ Share this page if you like it: +
+ +
+
+ + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/better-listview/story.html b/better-listview/story.html new file mode 100644 index 0000000..d67f30e --- /dev/null +++ b/better-listview/story.html @@ -0,0 +1,432 @@ + + + + + + + + + + + + + + + +The story behind Better ListView control + + + + + + + +
+ + + + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ +
+ Share this page if you like it: +
+ +
+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + + + + + + diff --git a/better-splitbutton.html b/better-splitbutton.html new file mode 100644 index 0000000..c86ed0d --- /dev/null +++ b/better-splitbutton.html @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + +Better SplitButton, Dropdown Button Control for .NET WinForms (C#, VB.net), free for non-commercial use, cheap commercial license with source code + + + + + + + +
+ + + + + + + +
+
+
+

Free Split-Button (dropdown button) control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ +
+ Free Download + + Buy commercial license with source code from $67 + +

Version 3.15 / May 27, 2015

+
+ +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better SplitButton (Dropdown button) for .NET overview

+
+ +
+ Share this page if you like it: +
+ +
+
+ + +
+

Better SplitButton Always Dropdown Option

+
+ + +
+

SplitButton with Custom Flat Style

+
+ + +
+

Better SplitButton with ImageList for all DropDown states

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/better-splitbutton/class-reference.html b/better-splitbutton/class-reference.html new file mode 100644 index 0000000..0390dec --- /dev/null +++ b/better-splitbutton/class-reference.html @@ -0,0 +1,21 @@ + + + + + Better SplitButton Class Reference + + + + + + + <p>This page requires frames, but your browser does not support them.</p> + + + diff --git a/better-splitbutton/documentation.html b/better-splitbutton/documentation.html new file mode 100644 index 0000000..4c9df0c --- /dev/null +++ b/better-splitbutton/documentation.html @@ -0,0 +1,52 @@ + + + + + +Better SplitButton Documentation + + + +
+

+ Better SplitButton Documentation + +

+ + +

+ + Quick Start + +
step-by-step tutorial for using Better ListView in your + application +

+

+ + Better SplitButton Properties + +
Properties for adjusting Better SplitButton appearance and + behavior +

+

+ + Known Issues + +
Things that are not yet available in Better SplitButton contrary + to WinForms Button +

+ + + + +
+ diff --git a/better-splitbutton/quick-start-guide.html b/better-splitbutton/quick-start-guide.html new file mode 100644 index 0000000..3c306d7 --- /dev/null +++ b/better-splitbutton/quick-start-guide.html @@ -0,0 +1,225 @@ + + + + +Quick Start + + + + +
+
+ + + + +

Quick Start

+ +

Table of Contents

+

Tutorial Prerequisites

+

Step-by-step tutorial

+

Installation + Troubleshooting

+

Learning Resources and Getting + Support

+ + + + +

+Tutorial Prerequisites

+ + + +

+Step-by-step Tutorial

+ + +

Start with a new "Windows Forms Application" + project. A designer with empty Form appears. Display the + Toolbox window (View - + Toolbox):

+ +

+ +

The Toolbox should contain a new tab called + "ComponentOwl" containing all the installed component + from ComponentOwl, including Better SplitButton.

+ +

If you chose not to integrate component in + Visual Studio during installation or the component have not been + successfully integrated, please follow the next steps.

+ +

Right-click on empty area of the Toolbox window and select + "Choose Items...":

+ +

+ +

In the "Choose Toolbox Items" dialog, select + the ".NET Framework Components" tab. If the comonent + has been properly installed, it will be already listed here. If you find + it, make sure the newest version is checked (e.g. 2.1.0.0 instead of + 1.0.0.0) and click "OK":

+ +

+ +

Now the component should appear in your Toolbox. Select the + component and place it on designer surface:

+ +

+ +

Now you can design Better SplitButton the same way as any other + control:

+ +

+ + +

+Installation + Troubleshooting

+ + +

If the component does not appear in Toolbox, make sure that your + target framework version is a full-featured .NET Framework 2.0, 3.0, 3.5 + or 4.0. The Compact Framework or Client Profile are not supported.

+ +

You can also try the "Reset Toolbox" option + from the Toolbox context menu, restart Visual Studio and try to add the + control again.

+ +

Sometimes even the Toolbox can get corrupted (known issue on Visual + Studio 2010) and its cache needs to be cleared. Simply remove all + ".tbd" files from this folder:

+ +

Vista/Windows 7:

+ +
\Users\<user>\AppData\Local\Microsoft\VisualStudio\10.0\*.tbd
+ +

Windows XP:

+ +
\Documents and Settings\<user directory>\Local Settings\Application Data\Microsoft\VisualStudio\10.0\*.tbd
+ +

Make sure the Visual Studio is not running when removing the files. + The Toolbox should reload its default items when opened.

+ + +

Updating to Newer Version of Better SplitButton

+ + +

If a new version of Better SplitButton is released, to update to + newer version, simply download + and install the new version. The installer will prompt for updating to a + new version.

+ +

The DLL with the component (betterlistview.dll) is + installed usually in Program Files folder, so if you + use copies of the library on other locations on your disk, replace the old + copies with the new version.

+ +

The licenses.licx file in your project may also + point to an older version of Better ListView. To update + licenses.licx open some form with Better ListView in + Windows Forms Designer and compile. A new line will + be added to the licenses.licx for the new version of + the Better ListView. You can delete the line with the reference to older + version, e.g.:

+ +
ComponentOwl.BetterListView.BetterListView, BetterListView, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e6c91a3add447be2
+ +

should be switched to:

+ +
ComponentOwl.BetterListView.BetterListView, BetterListView, Version=2.2.0.0, Culture=neutral, PublicKeyToken=e6c91a3add447be2
+ +

if 2.2.0.0 is the updated version of Better ListView. + You can do the update of licenses.licx file with text editor within + Visual Studio, if you know the new version + number.

+ + +

+Learning resources and getting + support

+ + +

The documentation and learning resources include:

+ + +

You can find all these resources in Start Menu - Better + ListView.

+ +

The C# and Visual Basic Samples are located at:

+ +

Vista/Windows 7:

+ +
\Users\<user>\Documents\ComponentOwl\Better SplitButton Samples
+ +

Windows XP:

+ +
\Documents and Settings\<user directory>\My Documents\ComponentOwl\Better SplitButton Samples
+ +

Make sure the Visual Studio is not running when removing the files. + The Toolbox should reload its default items when opened.

+ +

We will happily answer any of your questions and provide further + assistance. Just email us at support@componentowl.com. + Or, you can use the online form at www.componentowl.com/support.

+ + + +
+ + + + + +
+ + + +
+ diff --git a/better-splitbutton/screenshots.html b/better-splitbutton/screenshots.html new file mode 100644 index 0000000..c98988d --- /dev/null +++ b/better-splitbutton/screenshots.html @@ -0,0 +1,362 @@ + + + + + + + + + + + + + + + +Better ListView .NET control: Improved List View control for C# and VB.NET (Windows Forms) + + + + + + + +
+ + + + + + + +
+
+
+

Free Split-Button (dropdown button) control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ +
+ Free Download + + Buy commercial license with source code from $67 + +

Version 3.15 / May 27, 2015

+
+ +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + +
+ Share this page if you like it: +
+ +
+
+ + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/better-thumbnail-browser.html b/better-thumbnail-browser.html new file mode 100644 index 0000000..76cd3d1 --- /dev/null +++ b/better-thumbnail-browser.html @@ -0,0 +1,445 @@ + + + + + + + + + + + + + + + +Better Thumbnail Browser for .NET (C#, VB), image thumbnail viewing and loading control + + + + + + + +
+ + + + + + + +
+
+
+

Better Thumbnail Browser loading and viewing control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Overview

+
+ +
+ Share this page if you like it: +
+ +
+
+ + +
+

Auto populate

+
+ + +
+

Sorting

+
+ + +
+

Custom spacing

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/better-thumbnail-browser/class-reference.html b/better-thumbnail-browser/class-reference.html new file mode 100644 index 0000000..7929f6c --- /dev/null +++ b/better-thumbnail-browser/class-reference.html @@ -0,0 +1,21 @@ + + + + + btb-class + + + + + + + <p>This page requires frames, but your browser does not support them.</p> + + + diff --git a/better-thumbnail-browser/documentation.html b/better-thumbnail-browser/documentation.html new file mode 100644 index 0000000..ab5b4af --- /dev/null +++ b/better-thumbnail-browser/documentation.html @@ -0,0 +1,243 @@ + + + + + +Better Thumbnail Browser Documentation + + + +
+

+ Better Thumbnail Browser Documentation + +

+ + + + +
+

Better Thumbnail Browser Features

+
+
+
+

+ + Overview + +
What this documentation covers; list Better Thumbnail Browser + features +

+

+ + Quick Start + +
Step-by-step tutorial for using Better ListView in your + application +

+

+ + Using the Control + +
Basic usage of Better Thumbnail Browser +

+

+ + Layout + +
Element and element part sizes and padding, multi-line text, image + border +

+

+ + Loading Thumbnails + +
Loading images from a folder on disk or using custom loader + class. +

+

+ + Text Formatting + +
Text alignment and trimming +

+ + + +
+

Features Inherited from Better ListView

+
+
+
+

+ + Background Image + +
Image on the control background, setting its layout and + opacity +

+

+ + Check Boxes + +
Enabling two and three state check boxes on items +

+

+ + Collections + +
Working with collections of columns, items, sub-items, + groups +

+

+ + Columns + +
Hiding, resizing and reordering column headers +

+

+ + Context Menus + +
Displaying context menus on the control, column headers, groups + and items +

+

+ + Data Binding + +
Complex binding of custom list-based data to the + control +

+

+ + Drag and Drop + +
Setting-up Drag and Drop functionality and effects +

+

+ + Empty Text + +
Displaying customized text on empty list +

+

+ + Focusing Elements + +
How items, sub-items and groups can be focused and how to detect + focus changes +

+

+ + Groups + +
Working with item groups +

+

+ + Hit Test + +
Getting info for cursor position in the control +

+

+ + Insertion Mark + +
Specifying insertion mark location and apperance +

+

+ + Item Reordering + +
Changing item order automatically with Drag and Drop +

+

+ + Items + +
Working with ListView items +

+

+ + Label Editing + +
Inline editing of items and sub-items +

+

+ + Multi-line Items + +
Setting up items with multiple lines of text +

+

+ + Owner Drawing + +
Custom drawing over the control and its parts +

+

+ + Performance + +
Understanding Better ListView performance settings +

+

+ + Saving and Loading ListView Content + +
Storing and retrieving items and groups in binary or XML + format +

+

+ + Searching Items + +
Item searching by typing or programmatically +

+

+ + Serialization + +
Overview of Better ListView serialization capabilities +

+

+ + Sorting Items + +
Ordering items with multiple columns and custom + comparers +

+

+ + Sub-items + +
Working with sub-items which are attached under items +

+

+ + Tooltips + +
Displaying customized tooltips on control and its parts +

+

+ + Views + +
Ways of displaying items, detecting view change +

+ + + + +
+ diff --git a/better-thumbnail-browser/quick-start-guide.html b/better-thumbnail-browser/quick-start-guide.html new file mode 100644 index 0000000..3b44eee --- /dev/null +++ b/better-thumbnail-browser/quick-start-guide.html @@ -0,0 +1,442 @@ + + + + +Quick Start + + + + +
+
+ + + + +

Quick Start

+ +

Table of Contents

+

Tutorial Prerequisites

+

Step-by-step tutorial

+

Installation + Troubleshooting

+

Online + Activation

+

Offline + Activation

+

Starting with Better + ThumbnailBrowser

+

Learning Resources and Getting + Support

+ + + + +

+Tutorial Prerequisites

+ + + +

+Step-by-step Tutorial

+ + +

Start with a new "Windows Forms Application" + project. A designer with empty Form appears. Display the + Toolbox window (View - + Toolbox):

+ +

+ +

The Toolbox should contain a new tab called + "ComponentOwl" containing all the installed component + from ComponentOwl, including Better Thumbnail Browser.

+ + + +

If you chose not to integrate component in + Visual Studio during installation or the component have not been + successfully integrated, please follow the next steps.

+ +

Right-click on empty area of the Toolbox window and select + "Choose Items...":

+ +

+ +

In the "Choose Toolbox Items" dialog, select + the ".NET Framework Components" tab. If the comonent + has been properly installed, it will be already listed here. If you find + it, make sure the newest version is checked (e.g. 2.5.2.0 instead of + 1.0.0.0) and click "OK":

+ +

+ +

If you need other than installed version (e.g. DLL to match for + specific .NET Framework version) click on the + "Browse..." button:

+ +

+ +

Browse for the betterthumbnailbrowser.dll file + containing the component.

+ +

The location depends on where you installed the product. The default + location is:

+ +
C:\Program Files\Component Owl\Better ListView\Redistributable
+ +

You can choose the file right within + "Redistributable" folder. This is .NET 2.0 component + compatible with .NET Framework 2.0 or higher. If you want binary for a + specific .NET version or Client Profile, choose the file from + ".NET Framework Specific" folder:

+ +

+ +

Make sure the check box next to + "BetterListView" is checked and click + "OK":

+ +

+ +

Now the component should appear in your Toolbox:

+ +

+ +

Select the component and place it on designer surface:

+ +

+ +

Now you can design Better Thumbnail Browser the same way as any other + control:

+ +

+ + +

+Installation + Troubleshooting

+ + +

If the component does not appear in Toolbox, make sure that your + target framework version is a full-featured .NET Framework 2.0, 3.0, 3.5 + or 4.0. The Compact Framework is not supported.

+ +

You can also try the "Reset Toolbox" option + from the Toolbox context menu, restart Visual Studio and try to add the + control again.

+ +

Sometimes even the Toolbox can get corrupted (known issue on Visual + Studio 2010) and its cache needs to be cleared. Simply remove all + ".tbd" files from this folder:

+ +

Vista/Windows 7:

+ +
\Users\<user>\AppData\Local\Microsoft\VisualStudio\10.0\*.tbd
+ +

Windows XP:

+ +
\Documents and Settings\<user directory>\Local Settings\Application Data\Microsoft\VisualStudio\10.0\*.tbd
+ +

Make sure the Visual Studio is not running when removing the files. + The Toolbox should reload its default items when opened.

+ + +

+Activation

+ + +

By default, Better Thumbnail Browser runs in + trial mode. The only limitations of + trial version are watermark displayed on the + control...

+ +

+ +

and an Activation Dialog, that appears on every + application run:

+ +

+ +

There are three possible actions:

+ + +

When activating Better Thumbnail Browser, you are asked for a serial + key (obtained by pruchasing + Better Thumbnail Browser):

+ +

+ +

+

Internet connection is required to activate Better + ThumbnailBrowser. If you need to activate the product off-line, please + contact + us.

+
+

When the Better Thumbnail Browser is activated, it uses the standard + licensing scheme of .NET. When a form is created or opened in + Windows Forms Designer, a + licenses.licx file is updated in your project and the + trial version notification disappears.

+ + +

+Offline Activation

+ + +

If the activation is blocked by a firewall or proxy server, you can + activate Better Thumbnail Browser offline.

+ +

First, call the following static method from code:

+ +
BetterThumbnailBrowser.ShowOfflineActivationDialog()
+ +

A dialog appears containing your computer ID:

+ +

+ +

Please copy this code to clipboard (Control+C) and send us the code + along with your serial number you obtained when + purchased the product to support@componentowl.com.

+ +

The serial number is a 16-character code the identifies your + purchased product, e.g.:

+ +

+
5KTPNX6QNJBZNJTL
The computer ID is + rather longer code that is unique to your machine: + +
6780f65cb1b86f9a10dacc662906c3d371ab4abc
+ +

With this information, we will generate a license file and send it + to back to you via e-mail.

+ +

You can find a file license-btb.dat in the e-mail + attachment we send in reply. Please copy this file in the following path + (and create the folder Component Owl if it does not + exist):

+ +

Windows 7, 8, Vista:

+ +
c:\ProgramData\Component Owl\
+ +

Windows XP:

+ +
c:\Documents and Settings\All Users\Application Data\Component Owl\
+ +

Now just rebuild the project referencing Better Thumbnail Browser and + you are done.

+ +

Please note the license works for specific + product and specific computer. It won't + work on other machines or with other Component Owl's products. You need to + activate Better Thumbnail Browser for each machine on which you want to + build projects.

+ + +

Updating to Newer Version of Better Thumbnail Browser

+ + +

If a new version of Better Thumbnail Browser is released, to update + to newer version, simply download + and install the new version. The installer will prompt for updating to a + new version.

+ +

The DLL with the component (betterthumbnailbrowser.dll) + is installed usually in Program Files folder, so if + you use copies of the library on other locations on your disk, replace the + old copies with the new version.

+ +

The licenses.licx file in your project may also + point to an older version of Better Thumbnail Browser. To update + licenses.licx open some form with Better + ThumbnailBrowser in Windows Forms Designer and + compile. A new line will be added to the + licenses.licx for the new version of the Better + ThumbnailBrowser. You can delete the line with the reference to older + version, e.g.:

+ +
ComponentOwl.ThumbnailBrowser.ThumbnailBrowser, ThumbnailBrowser, Version=1.4.0.0, Culture=neutral, PublicKeyToken=e6c91a3add447be2
+ +

should be switched to:

+ +
ComponentOwl.ThumbnailBrowser.ThumbnailBrowser, ThumbnailBrowser, Version=2.7.0.0, Culture=neutral, PublicKeyToken=e6c91a3add447be2
+ +

if 2.7.0.0 is the updated version of Better + ThumbnailBrowser. You can do the update of + licenses.licx file with text editor within + Visual Studio, if you know the new version + number.

+ +


+
+

If you use Better Thumbnail Browser in separate project, you need + to copy licenses.licx file to the main project as + well.

+
+

+Starting with Better + ThumbnailBrowser

+ + +

Better Thumbnail Browser inherits from Better ListView control, which + is made as similar to regular .NET ListView as possible while having all + its extra features. Better Thumbnail Browser uses its own item type - + BetterThumbnailBrowserItem (which inherits from BetterListViewItem). + Please keep this in mind when filling the control with thumbnail items. + For other types, see the following rules of thumb:

+ + +

To compare usage of .NET ListView and Better Thumbnail Browser, + consider the following code using Better Thumbnail Browser instead of the + regular .NET ListView.

+ +

C#

+
BetterThumbnailBrowser thumbnailBrowser = new BetterThumbnailBrowser();
+
+BetterThumbnailBrowserItem item = new BetterThumbnailBrowserItem("new thumbnail item");
+
+thumbnailBrowser.Items.Add(item);
+
+thumbnailBrowser.View = BetterListViewView.List;
+
+// ...
+
+BetterListViewHitTestInfo hitTestInfo = thumbnailBrowser.HitTest(new Point(0, 0));
+ +

Visual Basic

+
Dim thumbnailBrowser As New BetterThumbnailBrowser()
+
+Dim item As New BetterThumbnailBrowserItem("new item")
+
+thumbnailBrowser.Items.Add(item)
+
+thumbnailBrowser.View = BetterListViewView.List
+
+' ...
+
+Dim hitTestInfo As BetterListViewHitTestInfo = thumbnailBrowser.HitTest(New Point(0, 0))
+ + +

+Learning resources and getting + support

+ + +

The documentation and learning resources include:

+ + +

You can find all these resources in Start Menu - Component + Owl - Better Thumbnail Browser.

+ +

The C# and Visual Basic Samples are located at:

+ +

Vista/Windows 7:

+ +
\Users\<user>\Documents\ComponentOwl\Better ListView Samples
+ +

Windows XP:

+ +
\Documents and Settings\<user directory>\My Documents\ComponentOwl\Better ListView Samples
+ +

Make sure the Visual Studio is not running when removing the files. + The Toolbox should reload its default items when opened.

+ +

We will happily answer any of your questions and provide further + assistance. Just email us at support@componentowl.com. + Or, you can use the online form at www.componentowl.com/support.

+ + + +
+ + + + + +
+ + + +
+ diff --git a/better-thumbnail-browser/screenshots.html b/better-thumbnail-browser/screenshots.html new file mode 100644 index 0000000..72856c2 --- /dev/null +++ b/better-thumbnail-browser/screenshots.html @@ -0,0 +1,377 @@ + + + + + + + + + + + + + + + +Better Thumbnail Browser Screenshots + + + + + + + +
+ + + + + + + +
+
+
+

Better Thumbnail Browser loading and viewing control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + +
+ Share this page if you like it: +
+ +
+
+ + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/betterlistview.exe b/betterlistview.exe new file mode 100644 index 0000000..2ea7fda Binary files /dev/null and b/betterlistview.exe differ diff --git a/betterlistviewexpress.exe b/betterlistviewexpress.exe new file mode 100644 index 0000000..1f79d38 Binary files /dev/null and b/betterlistviewexpress.exe differ diff --git a/bettersplitbutton.exe b/bettersplitbutton.exe new file mode 100644 index 0000000..7ce44ae Binary files /dev/null and b/bettersplitbutton.exe differ diff --git a/betterthumbnailbrowser.exe b/betterthumbnailbrowser.exe new file mode 100644 index 0000000..1dc3200 Binary files /dev/null and b/betterthumbnailbrowser.exe differ diff --git a/blog.html b/blog.html new file mode 100644 index 0000000..3f0e8a2 --- /dev/null +++ b/blog.html @@ -0,0 +1,265 @@ + + + + + + + + Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + + + + +
+

Activation issues and how to solve them

+ + + +
+

Dear Readers,
+Periodically we get emails from users having problems with the activation. So we put together a check list on how to deal with the most frequent issues. In case these fixes do not help you solve your problem, please contact contact support at support@componentowl.com and we will be happy to help you out.
+Below, you will find some obstacles we have stumbled across in the past.

+
    +
  1. Try to rebuild the project/solution
  2. +
  3. Restart Visual Studio if rebuilding the solution did not stop the nag screen
  4. +
  5. If you use Better ListView in a Class Library project, it should be referenced and activated in both, the main project and the Class Library project.
  6. +
  7. Do the main project (executable) and all referenced projects contain the licenses.licx file within the Properties folder? If not, rebuild the main project (executable) and copy the licenses.licx file to the appropriate location in all referenced projects (Class Library or other executables).
  8. +
  9. The licenses.licx file should contain only a single reference to Better ListView with the current version number (e.g. ComponentOwl.BetterListView.BetterListView, BetterListView, Version=3.7.2.0, Culture=neutral, PublicKeyToken=e6c91a3add447be2). If there are more lines referencing Better ListView, remove the obsolete ones. You can also delete the licenses.licx file and rebuild the project to regenerate it.
  10. +
  11. Run the Activator application (installed along with the product) and check if it displays a valid license (license info should be displayed in green).
  12. +
  13. You can try to finish the activation via the Activator app and then rebuild the main project. The Activator allows custom proxy settings for activation from behind a web proxy (often present in corporate environments).
  14. +
  15. Check, if the license-blv.dat file is present in the “C:\ProgramData\Component Owl\” folder after activation. If not, please contact support at support@componentowl.com
  16. +
  17. Check, if your projects reference the same version of Better ListView as the one that is installed. Open the „Reference Properties“ window by right clicking on Better ListView reference in the Solution Explorer. Then check if there is a Specific Version property set to true. If so, remove the reference and add a new reference to Better ListView with the correct version. You can also just set Specific Version property to false.
  18. +
  19. The Better ListView has to be activated on each machine where it is built. Do not copy the license-blv.dat file because this is specific to each machine. Rather follow the activation process on each machine.
  20. +
+

We hope these clues can help you, in case you encounter a problem during the activation. As mentioned before, please contact support, if the issues persist.

+
+ + + +
+ + +
+

The Three Main Advantages Better ListView has Over the Classic .NET Framework

+ + + +
+

Dear Readers,
+When evaluating an alternative to replace the .NET ListView you might stumble upon the question: what sets the different solutions available apart from each other? Which one meets my demands the best?
+Here are the three main reasons we think Better ListView is the ideal solution for you if you are planning to use a professional alternative:

+

1) The intuitive approach on getting started

+

The good thing is, you can get started right away. Due to the build-up of processes, as well as the well documented procedures you have almost no learning period. Component Owl keeps its design close to the original .NET ListView so you do not have to get acquainted to a completely new system. But still, the changes made are substantial enough to make your working routine so much easier. Whether its the inbuilt drag & drop, the sub-item images or the multi-column sorting, the processes are meant to make your life easier.

+

2) The fast and helpful support

+

As Component Owl has been on the market for quite a while now, it has been further developed and improved countless times, resulting in a detailed and meaningful FAQ which answer to the majority of your questions. In case you cannot find the answer you need, you can rely on our support system which will give you feedback on you request within 24 hours. This allows you to keep the workflow going with almost no interruptions and puts you ahead of the freeware users.

+

3) The possibility to customize

+

Just like every developer has his own style of working, Component Owl can be customized to every user needs. The many opportunities to adapt your surface to your favorite design or to arrange the necessary tools the way you need them, allows you to optimize your workflow to perform even better.

+

These 3 named advantages are just a few of the many that Component Owl offers you. For more infromation just check out our trial version to see for yourself.

+
+ + + +
+ + + + + +
+ + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2011/01/index.html b/blog/2011/01/index.html new file mode 100644 index 0000000..e52c770 --- /dev/null +++ b/blog/2011/01/index.html @@ -0,0 +1,213 @@ + + + + + + + +January « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2011/02/index.html b/blog/2011/02/index.html new file mode 100644 index 0000000..df3a26c --- /dev/null +++ b/blog/2011/02/index.html @@ -0,0 +1,213 @@ + + + + + + + +February « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2011/02/page/2/index.html b/blog/2011/02/page/2/index.html new file mode 100644 index 0000000..1e8a50c --- /dev/null +++ b/blog/2011/02/page/2/index.html @@ -0,0 +1,253 @@ + + + + + + + + Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + + + + +
+

BLV and Internet Explorer

+ + + +
+

As you all know we are constantly working on improving BetterListView, but once in a while you might encounter a problem which has not found its way to our documentation yet.

+

Today, our blog post covers an interesting case when using Internet Explorer.
+When instantiating an ActiveX control written as a .NET assembly exposed via Interop you might get the following message:

+

System.IO.FileNotFoundException("Could not load file or assembly 'BetterListView, Version=3.8.2.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx' or one of its dependencies. The system cannot find the file specified.")

+

The solution to this problem is a fairly simple one, quoting from an MSDN article:
+“… you can install it in the global assembly cache so that it can be activated from any COM client. If the assembly is only going to be activated by a single application, you can place it in that application’s directory.”

+

Concluding from this short excerpt, you are basically left you with two options:
+1) You may register BetterListView in GAC if it is to be shared. But you should be careful with GAC because it allows holding multiple versions of the same assembly. You can make the installer remove any older versions from GAC during installation and add/keep just the newest one.
+2) You can put your .net assembly with all third-party DLLs in one directory during installation if it is to be private.

+

We recommend the second solution as we reckon it to be the safer one.

+
+ + + +
+ + +
+

Centering Images in Better ListView Sub-items

+ + + +
+
Centered images in Better ListView

Centered images in Better ListView

+

Better ListView 3.11 supports aligning images in sub-items and columns to center. Simply set AlignHorizontalImage property of an sub-item or column to BetterListViewImageAlignmentHorizontal.OverlayCenter.

+

The image will be centered inside available space regardless of text.

+

This is useful for sub-items and column headers consisting of image only.

+
+ + + +
+ + + + + +
+ + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2011/03/index.html b/blog/2011/03/index.html new file mode 100644 index 0000000..fba963f --- /dev/null +++ b/blog/2011/03/index.html @@ -0,0 +1,213 @@ + + + + + + + +March « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2011/05/index.html b/blog/2011/05/index.html new file mode 100644 index 0000000..2fd26fe --- /dev/null +++ b/blog/2011/05/index.html @@ -0,0 +1,211 @@ + + + + + + + +May « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2011/06/index.html b/blog/2011/06/index.html new file mode 100644 index 0000000..ae119dc --- /dev/null +++ b/blog/2011/06/index.html @@ -0,0 +1,213 @@ + + + + + + + +June « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2011/07/index.html b/blog/2011/07/index.html new file mode 100644 index 0000000..2f4d402 --- /dev/null +++ b/blog/2011/07/index.html @@ -0,0 +1,213 @@ + + + + + + + +July « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2011/07/windows-theme-support-in-better-listview/index.html b/blog/2011/07/windows-theme-support-in-better-listview/index.html new file mode 100644 index 0000000..65c08b0 --- /dev/null +++ b/blog/2011/07/windows-theme-support-in-better-listview/index.html @@ -0,0 +1,277 @@ + + + + + + + +Windows Theme Support in Better ListView « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

Windows Theme Support in Better ListView

+ + + +
+

Both current Better ListView 1.5 and the upcoming Better ListView 2.0 put emphasis on native theme support.

+

Contrary to many custom controls, Better ListView adjusts itself to current theme even if the theme is changed in run-time. For example, when user of your application switches theme from Classic to Aero, or to some other custom theme with elements of different sizes, Better ListView re-measures itself for the new theme smoothly. Reloading the component or re-starting the application is not necessary.

+

One of the sweet bonuses of using Better ListView 2.0 instead of regular .NET ListView is the full Groups functionality in all themes and all versions of the operating system. For example, groups are not collapsible in standard ListView on Windows XP and even does not support images. In Better ListView, however, you are able to unleash full potential of groups everywhere.

+

The following images show Better ListView in different Windows themes: Classic, XP Luna and Aero:

+
Better ListView in Classic theme

Better ListView in Classic theme

+
Better ListView in XP Luna Theme

Better ListView in XP Luna Theme

+
Better ListView in Aero Theme

Better ListView in Aero Theme

+

 

+ +
+ + + + +
+ + + + + + + + + + + +
+ +

Leave a Reply

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2011/08/index.html b/blog/2011/08/index.html new file mode 100644 index 0000000..33396dc --- /dev/null +++ b/blog/2011/08/index.html @@ -0,0 +1,213 @@ + + + + + + + +August « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2011/09/index.html b/blog/2011/09/index.html new file mode 100644 index 0000000..18fb5e8 --- /dev/null +++ b/blog/2011/09/index.html @@ -0,0 +1,213 @@ + + + + + + + +September « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2011/10/index.html b/blog/2011/10/index.html new file mode 100644 index 0000000..866ac24 --- /dev/null +++ b/blog/2011/10/index.html @@ -0,0 +1,211 @@ + + + + + + + +October « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2011/11/index.html b/blog/2011/11/index.html new file mode 100644 index 0000000..dc89283 --- /dev/null +++ b/blog/2011/11/index.html @@ -0,0 +1,213 @@ + + + + + + + +November « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2011/12/index.html b/blog/2011/12/index.html new file mode 100644 index 0000000..f2d1285 --- /dev/null +++ b/blog/2011/12/index.html @@ -0,0 +1,211 @@ + + + + + + + +December « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2012/01/index.html b/blog/2012/01/index.html new file mode 100644 index 0000000..59780bf --- /dev/null +++ b/blog/2012/01/index.html @@ -0,0 +1,213 @@ + + + + + + + +January « 2012 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2012/02/index.html b/blog/2012/02/index.html new file mode 100644 index 0000000..395a46e --- /dev/null +++ b/blog/2012/02/index.html @@ -0,0 +1,213 @@ + + + + + + + +February « 2012 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2012/03/index.html b/blog/2012/03/index.html new file mode 100644 index 0000000..ca2ed19 --- /dev/null +++ b/blog/2012/03/index.html @@ -0,0 +1,213 @@ + + + + + + + +March « 2012 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2012/04/index.html b/blog/2012/04/index.html new file mode 100644 index 0000000..dad40ed --- /dev/null +++ b/blog/2012/04/index.html @@ -0,0 +1,213 @@ + + + + + + + +April « 2012 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2012/08/index.html b/blog/2012/08/index.html new file mode 100644 index 0000000..3d670fe --- /dev/null +++ b/blog/2012/08/index.html @@ -0,0 +1,213 @@ + + + + + + + +August « 2012 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2012/09/index.html b/blog/2012/09/index.html new file mode 100644 index 0000000..10c88c2 --- /dev/null +++ b/blog/2012/09/index.html @@ -0,0 +1,211 @@ + + + + + + + +September « 2012 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2012/12/index.html b/blog/2012/12/index.html new file mode 100644 index 0000000..d890a8c --- /dev/null +++ b/blog/2012/12/index.html @@ -0,0 +1,213 @@ + + + + + + + +December « 2012 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2013/01/index.html b/blog/2013/01/index.html new file mode 100644 index 0000000..ec63010 --- /dev/null +++ b/blog/2013/01/index.html @@ -0,0 +1,213 @@ + + + + + + + +January « 2013 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2013/02/index.html b/blog/2013/02/index.html new file mode 100644 index 0000000..43f6444 --- /dev/null +++ b/blog/2013/02/index.html @@ -0,0 +1,211 @@ + + + + + + + +February « 2013 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2013/03/index.html b/blog/2013/03/index.html new file mode 100644 index 0000000..a1566d1 --- /dev/null +++ b/blog/2013/03/index.html @@ -0,0 +1,213 @@ + + + + + + + +March « 2013 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2014/02/index.html b/blog/2014/02/index.html new file mode 100644 index 0000000..5b773ac --- /dev/null +++ b/blog/2014/02/index.html @@ -0,0 +1,211 @@ + + + + + + + +February « 2014 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2014/04/index.html b/blog/2014/04/index.html new file mode 100644 index 0000000..b5a36ef --- /dev/null +++ b/blog/2014/04/index.html @@ -0,0 +1,213 @@ + + + + + + + +April « 2014 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2014/07/index.html b/blog/2014/07/index.html new file mode 100644 index 0000000..e5041f6 --- /dev/null +++ b/blog/2014/07/index.html @@ -0,0 +1,211 @@ + + + + + + + +July « 2014 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2014/08/index.html b/blog/2014/08/index.html new file mode 100644 index 0000000..6620123 --- /dev/null +++ b/blog/2014/08/index.html @@ -0,0 +1,211 @@ + + + + + + + +August « 2014 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2016/11/index.html b/blog/2016/11/index.html new file mode 100644 index 0000000..0c013a8 --- /dev/null +++ b/blog/2016/11/index.html @@ -0,0 +1,211 @@ + + + + + + + +November « 2016 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2017/02/index.html b/blog/2017/02/index.html new file mode 100644 index 0000000..9869c84 --- /dev/null +++ b/blog/2017/02/index.html @@ -0,0 +1,211 @@ + + + + + + + +February « 2017 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/2017/03/index.html b/blog/2017/03/index.html new file mode 100644 index 0000000..73d314d --- /dev/null +++ b/blog/2017/03/index.html @@ -0,0 +1,211 @@ + + + + + + + +March « 2017 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/activation-issues-and-how-to-solve-them/feed/index.html b/blog/activation-issues-and-how-to-solve-them/feed/index.html new file mode 100644 index 0000000..ea83fa9 --- /dev/null +++ b/blog/activation-issues-and-how-to-solve-them/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: Activation issues and how to solve them + + http://www.componentowl.com/blog/activation-issues-and-how-to-solve-them/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/blog/blv-and-internet-explorer/feed/index.html b/blog/blv-and-internet-explorer/feed/index.html new file mode 100644 index 0000000..b2892dc --- /dev/null +++ b/blog/blv-and-internet-explorer/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: BLV and Internet Explorer + + http://www.componentowl.com/blog/blv-and-internet-explorer/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/blog/category/announcements/index.html b/blog/category/announcements/index.html new file mode 100644 index 0000000..05091e6 --- /dev/null +++ b/blog/category/announcements/index.html @@ -0,0 +1,226 @@ + + + + + + + +Announcements « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + + +

Archive for the ‘Announcements’ Category

+ + + + + +
+ + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/blog/category/better-listview/index.html b/blog/category/better-listview/index.html new file mode 100644 index 0000000..c8ae819 --- /dev/null +++ b/blog/category/better-listview/index.html @@ -0,0 +1,298 @@ + + + + + + + +Better ListView « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + + +

Archive for the ‘Better ListView’ Category

+ + + + + +
+ + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/blog/category/components/index.html b/blog/category/components/index.html new file mode 100644 index 0000000..892d080 --- /dev/null +++ b/blog/category/components/index.html @@ -0,0 +1,228 @@ + + + + + + + +Components « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/blog/category/programming/index.html b/blog/category/programming/index.html new file mode 100644 index 0000000..a757291 --- /dev/null +++ b/blog/category/programming/index.html @@ -0,0 +1,214 @@ + + + + + + + +Programming « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/category/tutorials/index.html b/blog/category/tutorials/index.html new file mode 100644 index 0000000..d3478af --- /dev/null +++ b/blog/category/tutorials/index.html @@ -0,0 +1,248 @@ + + + + + + + +Tutorials « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/blog/centering-images-in-better-listview-sub-items/feed/index.html b/blog/centering-images-in-better-listview-sub-items/feed/index.html new file mode 100644 index 0000000..cc3eebe --- /dev/null +++ b/blog/centering-images-in-better-listview-sub-items/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: Centering Images in Better ListView Sub-items + + http://www.componentowl.com/blog/centering-images-in-better-listview-sub-items/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/blog/comments/feed/index.html b/blog/comments/feed/index.html new file mode 100644 index 0000000..a09240a --- /dev/null +++ b/blog/comments/feed/index.html @@ -0,0 +1,126 @@ + + + Comments for Owl's Blog on .NET development + + http://www.componentowl.com/blog + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + Comment on Are You a Zen Coder or Distraction-Junkie? by Coding Dojo Day 1 | Invoke Interests + http://www.componentowl.com/blog/zen-coder-vs-distraction-junkie/#comment-1397 + + Thu, 02 Apr 2015 07:58:08 +0000 + http://www.componentowl.com/blog/?p=664#comment-1397 + + […] of a syllabus and the curriculum. I started working on them after the lecture. I had fun coding in zen mode for some time, going through the course material on my own pace and doing the quizzes and […]

+]]>
+
+ + Comment on Search Filtering in Better ListView by Libor Tinka + http://www.componentowl.com/blog/search-filtering-in-better-listview/#comment-1369 + + Sun, 06 Jul 2014 21:38:54 +0000 + http://www.componentowl.com/blog/?p=882#comment-1369 + + Yes, this feature is also available in Express version.

+]]>
+
+ + Comment on Are You a Zen Coder or Distraction-Junkie? by Foobar + http://www.componentowl.com/blog/zen-coder-vs-distraction-junkie/#comment-1365 + + Fri, 06 Jun 2014 09:30:12 +0000 + http://www.componentowl.com/blog/?p=664#comment-1365 + + and average managers always value distraction junkie coder higher than zen coder, because first one multitasks and is more social [and is always first to blame others]

+]]>
+
+ + Comment on Search Filtering in Better ListView by mustafa salah + http://www.componentowl.com/blog/search-filtering-in-better-listview/#comment-1353 + + Sat, 03 May 2014 14:52:37 +0000 + http://www.componentowl.com/blog/?p=882#comment-1353 + + Is this applicable for Express version?

+]]>
+
+ + Comment on Custom Scroll Bar Size in Better ListView by Libor Tinka + http://www.componentowl.com/blog/custom-scroll-bar-size-in-better-listview/#comment-1346 + + Mon, 03 Feb 2014 14:39:00 +0000 + http://www.componentowl.com/blog/?p=878#comment-1346 + + Height of any element in Better ListView can be changed.

+]]>
+
+ + Comment on Custom Scroll Bar Size in Better ListView by Libor Tinka + http://www.componentowl.com/blog/custom-scroll-bar-size-in-better-listview/#comment-1345 + + Mon, 03 Feb 2014 14:38:25 +0000 + http://www.componentowl.com/blog/?p=878#comment-1345 + + You can do that with CustomHeight propety (see the Support/Documentation).

+]]>
+
+ + Comment on Custom Scroll Bar Size in Better ListView by Dan + http://www.componentowl.com/blog/custom-scroll-bar-size-in-better-listview/#comment-1344 + + Fri, 31 Jan 2014 15:27:23 +0000 + http://www.componentowl.com/blog/?p=878#comment-1344 + + Can you change the button height as this would make it a great option for touch screen apps.

+]]>
+
+ + Comment on Custom Scroll Bar Size in Better ListView by brokey + http://www.componentowl.com/blog/custom-scroll-bar-size-in-better-listview/#comment-1340 + + Wed, 27 Nov 2013 09:46:21 +0000 + http://www.componentowl.com/blog/?p=878#comment-1340 + + Change size of ListView items

+]]>
+
+ + Comment on Enabling Search Highlight in Better ListView by Camiel Hessels + http://www.componentowl.com/blog/enabling-search-highlight-in-better-listview/#comment-1290 + + Mon, 28 Jan 2013 19:54:49 +0000 + http://www.componentowl.com/blog/?p=843#comment-1290 + + Awesome, just what I need! Thanks!

+]]>
+
+ + Comment on Better Thumbnail Browser Component Released by Nathaniel Wise + http://www.componentowl.com/blog/better-thumbnail-browser-component-released/#comment-1289 + + Wed, 23 Jan 2013 09:20:46 +0000 + http://www.componentowl.com/blog/?p=823#comment-1289 + + this is one useful for the example and overviews.in my website i m not used this type of functionality but this is something good component.

+]]>
+
+
+
+ + \ No newline at end of file diff --git a/blog/feed/index.html b/blog/feed/index.html new file mode 100644 index 0000000..595d63e --- /dev/null +++ b/blog/feed/index.html @@ -0,0 +1,525 @@ + + + + Owl's Blog on .NET development + + http://www.componentowl.com/blog + Component Owl codes Better ListView control all night so you don't have to. + Tue, 04 Sep 2018 13:10:05 +0000 + en-US + hourly + 1 + https://wordpress.org/?v=4.9.8 + + Activation issues and how to solve them + http://www.componentowl.com/blog/activation-issues-and-how-to-solve-them/ + http://www.componentowl.com/blog/activation-issues-and-how-to-solve-them/#respond + Wed, 01 Mar 2017 17:22:52 +0000 + + + + + http://www.componentowl.com/blog/?p=927 + + Dear Readers,
+Periodically we get emails from users having problems with the activation. So we put together a check list on how to deal with the most frequent issues. In case these fixes do not help you solve your problem, please contact contact support at support@componentowl.com and we will be happy to help you out.
+Below, you will find some obstacles we have stumbled across in the past.

+
    +
  1. Try to rebuild the project/solution
  2. +
  3. Restart Visual Studio if rebuilding the solution did not stop the nag screen
  4. +
  5. If you use Better ListView in a Class Library project, it should be referenced and activated in both, the main project and the Class Library project.
  6. +
  7. Do the main project (executable) and all referenced projects contain the licenses.licx file within the Properties folder? If not, rebuild the main project (executable) and copy the licenses.licx file to the appropriate location in all referenced projects (Class Library or other executables).
  8. +
  9. The licenses.licx file should contain only a single reference to Better ListView with the current version number (e.g. ComponentOwl.BetterListView.BetterListView, BetterListView, Version=3.7.2.0, Culture=neutral, PublicKeyToken=e6c91a3add447be2). If there are more lines referencing Better ListView, remove the obsolete ones. You can also delete the licenses.licx file and rebuild the project to regenerate it.
  10. +
  11. Run the Activator application (installed along with the product) and check if it displays a valid license (license info should be displayed in green).
  12. +
  13. You can try to finish the activation via the Activator app and then rebuild the main project. The Activator allows custom proxy settings for activation from behind a web proxy (often present in corporate environments).
  14. +
  15. Check, if the license-blv.dat file is present in the “C:\ProgramData\Component Owl\” folder after activation. If not, please contact support at support@componentowl.com
  16. +
  17. Check, if your projects reference the same version of Better ListView as the one that is installed. Open the „Reference Properties“ window by right clicking on Better ListView reference in the Solution Explorer. Then check if there is a Specific Version property set to true. If so, remove the reference and add a new reference to Better ListView with the correct version. You can also just set Specific Version property to false.
  18. +
  19. The Better ListView has to be activated on each machine where it is built. Do not copy the license-blv.dat file because this is specific to each machine. Rather follow the activation process on each machine.
  20. +
+

We hope these clues can help you, in case you encounter a problem during the activation. As mentioned before, please contact support, if the issues persist.

+]]>
+ http://www.componentowl.com/blog/activation-issues-and-how-to-solve-them/feed/ + 0 +
+ + The Three Main Advantages Better ListView has Over the Classic .NET Framework + http://www.componentowl.com/blog/the-three-main-advantages-componentowl-has-over-the-classic-net-framework/ + http://www.componentowl.com/blog/the-three-main-advantages-componentowl-has-over-the-classic-net-framework/#respond + Thu, 09 Feb 2017 21:51:12 +0000 + + + + http://www.componentowl.com/blog/?p=921 + + Dear Readers,
+When evaluating an alternative to replace the .NET ListView you might stumble upon the question: what sets the different solutions available apart from each other? Which one meets my demands the best?
+Here are the three main reasons we think Better ListView is the ideal solution for you if you are planning to use a professional alternative:

+

1) The intuitive approach on getting started

+

The good thing is, you can get started right away. Due to the build-up of processes, as well as the well documented procedures you have almost no learning period. Component Owl keeps its design close to the original .NET ListView so you do not have to get acquainted to a completely new system. But still, the changes made are substantial enough to make your working routine so much easier. Whether its the inbuilt drag & drop, the sub-item images or the multi-column sorting, the processes are meant to make your life easier.

+

2) The fast and helpful support

+

As Component Owl has been on the market for quite a while now, it has been further developed and improved countless times, resulting in a detailed and meaningful FAQ which answer to the majority of your questions. In case you cannot find the answer you need, you can rely on our support system which will give you feedback on you request within 24 hours. This allows you to keep the workflow going with almost no interruptions and puts you ahead of the freeware users.

+

3) The possibility to customize

+

Just like every developer has his own style of working, Component Owl can be customized to every user needs. The many opportunities to adapt your surface to your favorite design or to arrange the necessary tools the way you need them, allows you to optimize your workflow to perform even better.

+

These 3 named advantages are just a few of the many that Component Owl offers you. For more infromation just check out our trial version to see for yourself.

+]]>
+ http://www.componentowl.com/blog/the-three-main-advantages-componentowl-has-over-the-classic-net-framework/feed/ + 0 +
+ + BLV and Internet Explorer + http://www.componentowl.com/blog/blv-and-internet-explorer/ + http://www.componentowl.com/blog/blv-and-internet-explorer/#respond + Sun, 13 Nov 2016 22:37:47 +0000 + + + + + http://www.componentowl.com/blog/?p=914 + + As you all know we are constantly working on improving BetterListView, but once in a while you might encounter a problem which has not found its way to our documentation yet.

+

Today, our blog post covers an interesting case when using Internet Explorer.
+When instantiating an ActiveX control written as a .NET assembly exposed via Interop you might get the following message:

+

System.IO.FileNotFoundException("Could not load file or assembly 'BetterListView, Version=3.8.2.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx' or one of its dependencies. The system cannot find the file specified.")

+

The solution to this problem is a fairly simple one, quoting from an MSDN article:
+“… you can install it in the global assembly cache so that it can be activated from any COM client. If the assembly is only going to be activated by a single application, you can place it in that application’s directory.”

+

Concluding from this short excerpt, you are basically left you with two options:
+1) You may register BetterListView in GAC if it is to be shared. But you should be careful with GAC because it allows holding multiple versions of the same assembly. You can make the installer remove any older versions from GAC during installation and add/keep just the newest one.
+2) You can put your .net assembly with all third-party DLLs in one directory during installation if it is to be private.

+

We recommend the second solution as we reckon it to be the safer one.

+]]>
+ http://www.componentowl.com/blog/blv-and-internet-explorer/feed/ + 0 +
+ + Centering Images in Better ListView Sub-items + http://www.componentowl.com/blog/centering-images-in-better-listview-sub-items/ + http://www.componentowl.com/blog/centering-images-in-better-listview-sub-items/#respond + Wed, 06 Aug 2014 21:14:10 +0000 + + + + + + + + + + + + + + + + + + http://www.componentowl.com/blog/?p=906 + + Centered images in Better ListView

Centered images in Better ListView

+

Better ListView 3.11 supports aligning images in sub-items and columns to center. Simply set AlignHorizontalImage property of an sub-item or column to BetterListViewImageAlignmentHorizontal.OverlayCenter.

+

The image will be centered inside available space regardless of text.

+

This is useful for sub-items and column headers consisting of image only.

+]]>
+ http://www.componentowl.com/blog/centering-images-in-better-listview-sub-items/feed/ + 0 +
+ + Sub-item Check Boxes in Better ListView + http://www.componentowl.com/blog/sub-item-check-boxes-in-better-listview/ + http://www.componentowl.com/blog/sub-item-check-boxes-in-better-listview/#respond + Sun, 06 Jul 2014 21:48:41 +0000 + + + + + + + + + + + + + + + + + + + + + http://www.componentowl.com/blog/?p=901 + + Better ListView Sub-item Check Boxes

Better ListView Sub-item Check Boxes

+

Better ListView 3.10.0 allows displaying fully interactive check boxes and even radio buttons in sub-item cells.

+

This feature can be activated simply by setting CheckBoxAppearance property of a given sub-item to other value than Hide. Such sub-item will not display check box or radio instead of image and text.

+

Please note the first sub-item’s properties do not apply as they are overriden by item’s properties. These two are separate for the case of column reordering (keeping consistency of sub-item states).

+

Another new feature in Better ListView is that check boxes or radios can be displayed disabled. This can be achieved by setting CheckEnabled property to false on the respective item or sub-item.

+

Sub-item check boxes can be operated by both mouse and keyboard. Checking sub-item with keyboard can be done by navigating focus rectangle by arrow keys to the given sub-item and pressing spacebar.

+]]>
+ http://www.componentowl.com/blog/sub-item-check-boxes-in-better-listview/feed/ + 0 +
+ + How to Add Grid Lines in Empty Space in Better ListView + http://www.componentowl.com/blog/how-to-add-grid-lines-in-empty-space-in-better-listview/ + http://www.componentowl.com/blog/how-to-add-grid-lines-in-empty-space-in-better-listview/#respond + Wed, 30 Apr 2014 09:51:46 +0000 + + + + + + + + + + + + + http://www.componentowl.com/blog/?p=894 + + Default list without grid lines below items

Default list without grid lines below items

+
List with grid lines added

List with grid lines added

+

+

Setting grid lines in Better ListView is easy. Simply make sure you are using Details view (the default view). Then you can set GridLines property to one of the following values:

+
    +
  • None – grid lines are hidden
  • +
  • Horizontal – only horizontal lines are displayed
  • +
  • Vertical – only vertical lines are displayed
  • +
  • Grid – both horizontal and vertical lines are displayed, forming a grid
  • +
+

None of these settings, however, cause drawing lines below the last visible item, which may be desirable. The reason for this is that Better ListView supports custom item height and there is uncertainity about the spacing between new grid lines (smallest?, largest?, average?) It is up to your choice.

+

To draw new grid lines, handle the DrawBackground event (or subclass BetterListView and override the OnDrawBackground method) with the following code:

+

[csharp gutter=”false” toolbar=”false”]
+private void ListViewOnDrawBackground(object sender, BetterListViewDrawBackgroundEventArgs eventArgs)
+{
+ BetterListView listView = (BetterListView)sender;

+

// get last visible item
+ var item = listView.BottomItem;

+

if (item == null)
+ {
+ return;
+ }

+

// measure row height
+ var bounds = listView.GetItemBounds(item);
+ int rowHeight = bounds.BoundsOuterExtended.Height;

+

// draw additional lines
+ Rectangle rectClient = listView.ClientRectangleInner;
+ Pen penGridLines = new Pen(listView.ColorGridLines, 1.0f);

+

int y = (bounds.BoundsOuterExtended.Bottom + rowHeight);

+

while (y < rectClient.Bottom) + { + eventArgs.Graphics.DrawLine( + penGridLines, + rectClient.Left, + y, + rectClient.Right - 1, + y); + + y += rowHeight; + } + + penGridLines.Dispose(); +} +[/csharp] + +What this code does is getting the last visible item using BottomItem property. It is important  to get this visible item instead of e.g. first item because GetItemBounds method returns non-null value on visible items only. The GetItemBounds method reveals item measurement which is used to determine item height and coordinate of its bottom. Finally, we draw new lines using current grid line color  (ColorGridLines property) until reaching the bottom of the view.

+]]>
+ http://www.componentowl.com/blog/how-to-add-grid-lines-in-empty-space-in-better-listview/feed/ + 0 +
+ + Alternating Rows in Better ListView + http://www.componentowl.com/blog/alternating-rows-in-better-listview/ + http://www.componentowl.com/blog/alternating-rows-in-better-listview/#respond + Tue, 22 Apr 2014 22:38:15 +0000 + + + + + + + + + + + + http://www.componentowl.com/blog/?p=888 + + Alternating Rows

Alternating Rows

+

Lists with alternating row colors are more readable. It is very simple to implement alternating rows in Better ListView.

+

Simply add DrawItemBackground event handler and fill background on odd/even items:

+

 

+

[csharp gutter=”false” toolbar=”false”]
+private void ListViewOnDrawItemBackground(object sender, BetterListViewDrawItemBackgroundEventArgs eventArgs)
+{
+ if ((eventArgs.Item.Index & 1) == 1)
+ {
+ eventArgs.Graphics.FillRectangle(Brushes.AliceBlue, eventArgs.ItemBounds.BoundsOuter);
+ }
+}
+[/csharp]

+]]>
+ http://www.componentowl.com/blog/alternating-rows-in-better-listview/feed/ + 0 +
+ + Search Filtering in Better ListView + http://www.componentowl.com/blog/search-filtering-in-better-listview/ + http://www.componentowl.com/blog/search-filtering-in-better-listview/#comments + Mon, 03 Feb 2014 14:58:30 +0000 + + + + + http://www.componentowl.com/blog/?p=882 + + Search Filtering

Search Filtering with highlight

+

There are few ways of making searching in large list of items more convenient. For example, Better ListView provides Search Highlighting and Item Hiding features that can be used to improve searching. The above animation shows both of these features in action when searching for a word “pear” using keyboard.

+

The implementation is very simple and involves handling just two events: ItemSearch (raised whenever item is searched, e.g. using keyboard ) and KeyDown:

+

[csharp gutter=”false” toolbar=”false”]
+var listView = new BetterListView();

+

listView.Items.AddRange(new[] { “apple”, “pear”, “pineapple”, “orange”, “grapefruit”, “cherry”, “avocado” });

+

listView.ItemSearch += listView_ItemSearch;
+listView.KeyDown += listView_KeyDown;
+[/csharp]

+

The ItemSearch event handler finds matching items and sets their visibility accordingly. It also updates the highlighting:

+

[csharp gutter=”false” toolbar=”false”]
+void listView_ItemSearch(object sender, BetterListViewItemSearchEventArgs eventArgs)
+{
+ var listView = (BetterListView)sender;

+

listView.BeginUpdate();

+

// update item visibility according to search query string
+ foreach (var item in listView.Items)
+ {
+ bool match = item.Text.Contains(eventArgs.QueryString);

+

if (match)
+ {
+ item.Visible = true;

+

item.SearchHighlight = new BetterListViewSearchHighlight(
+ 0,
+ item.Text.IndexOf(eventArgs.QueryString, StringComparison.Ordinal),
+ eventArgs.QueryString.Length);
+ }
+ else
+ {
+ item.Visible = false;
+ }
+ }

+

listView.EndUpdate();
+}
+[/csharp]

+

Finally, the KeyDown event handler resets the view when Escape key is pressed (all items are made visible and the highlight is removed):

+

[csharp gutter=”false” toolbar=”false”]
+void listView_KeyDown(object sender, KeyEventArgs e)
+{
+ var listView = (BetterListView)sender;

+

listView.BeginUpdate();

+

if (e.KeyCode == Keys.Escape)
+ {
+ // remove search highlight
+ //NOTE: we could use BetterListView.RemoveSearchHighlight() but this applies to visible items only and some items are hidden at the time
+ foreach (var item in listView.Items)
+ {
+ item.SearchHighlight = BetterListViewSearchHighlight.Empty;
+ }

+

// make all items visible
+ foreach (var item in listView.Items)
+ {
+ item.Visible = true;
+ }

+

// mark the key as handled
+ e.Handled = true;

+

// suppress KeyPress event to prevent ItemSearch from happening
+ e.SuppressKeyPress = true;
+ }

+

listView.EndUpdate();
+}
+[/csharp]

+

And that’s it!

+]]>
+ http://www.componentowl.com/blog/search-filtering-in-better-listview/feed/ + 2 +
+ + Custom Scroll Bar Size in Better ListView + http://www.componentowl.com/blog/custom-scroll-bar-size-in-better-listview/ + http://www.componentowl.com/blog/custom-scroll-bar-size-in-better-listview/#comments + Tue, 19 Mar 2013 15:56:22 +0000 + + + + + + + + + + + + + + + + + + http://www.componentowl.com/blog/?p=878 + + Better ListView custom scroll bar size

Better ListView custom scroll bar size

+

Better ListView 3.7.0 contains two new properties that allow you to set custom horizontal and vertical scroll bar sizes:

+
    +
  • HScrollBarWidth
  • +
  • VScrollBarHeight
  • +
+

Of course, you can set these custom sizes in design-time as well as in run-time.

+

Larger scroll bars are practical on modern touch-enabled devices with high resolution screens. The default scroll bar size (17 pixels) may be too small and you may want to make it just large enough for your index finger.

+

This features works in both Better ListView and Better ListView Express.

+

 

+

 

+

 

+

 

+]]>
+ http://www.componentowl.com/blog/custom-scroll-bar-size-in-better-listview/feed/ + 4 +
+ + How to Make Items Fading on Edges in Better ListView + http://www.componentowl.com/blog/how-to-make-items-fading-on-edges-in-better-listview/ + http://www.componentowl.com/blog/how-to-make-items-fading-on-edges-in-better-listview/#respond + Tue, 05 Mar 2013 15:45:22 +0000 + + + + + + + + + + + + + + + + + + + http://www.componentowl.com/blog/?p=868 + + Fading Edges in Better ListView

+

I found the effect of fading borders impressive on my smartphone. This is actualy very easy to do as it requires a simple gradient brush.

+

You can obtain the same effect with Better ListView by overriding the DrawingRedrawCore method and do the drawing over the items:

+

C#

+

[csharp gutter=”false” toolbar=”false”]
+public class FadedListView : BetterListView
+{
+ ///

+ + /// Default size of the fading gradient.
+ ///
+

private const int FadingSize = 64;

+

public CustomListView()
+ {
+ // this is required because we will draw outside item boundaries
+ OptimizedInvalidation = false;
+ }

+

protected override void DrawingRedrawCore(Graphics graphics)
+ {
+ base.DrawingRedrawCore(graphics);

+

// get boundaries of items (this excludes column headers and scroll bars)
+ Rectangle rectContent = BoundsContent;

+

// get size of the gradient
+ int fadingSize = Math.Min(
+ FadingSize,
+ rectContent.Height >> 1);

+

// get boundaries of the gradents
+ Rectangle rectFadingTop = new Rectangle(
+ rectContent.Left,
+ rectContent.Top,
+ rectContent.Width,
+ fadingSize);

+

Rectangle rectFadingBottom = new Rectangle(
+ rectContent.Left,
+ rectContent.Bottom – fadingSize,
+ rectContent.Width,
+ fadingSize);

+

// make boundaries larger to avoid rounding errors in gradient brushes
+ rectFadingTop.Inflate(1, 1);
+ rectFadingBottom.Inflate(1, 1);

+

Brush brushFadingTop = new LinearGradientBrush(rectFadingTop, BackColor, Color.Transparent, LinearGradientMode.Vertical);
+ Brush brushFadingBottom = new LinearGradientBrush(rectFadingBottom, Color.Transparent, SystemColors.Window, LinearGradientMode.Vertical);

+

// deflate the gradient boundaries back
+ rectFadingTop.Inflate(-1, -1);
+ rectFadingBottom.Inflate(-1, -1);

+

// draw the gradients
+ graphics.FillRectangle(brushFadingTop, rectFadingTop);
+ graphics.FillRectangle(brushFadingBottom, rectFadingBottom);

+

// cleanup
+ brushFadingTop.Dispose();
+ brushFadingBottom.Dispose();
+ }
+}
+[/csharp]

+

Visual Basic

+

[vb gutter=”false” toolbar=”false”]
+Public Class CustomListView
+ Inherits BetterListView
+ ”’

+ + ”’ Default size of the fading gradient.
+ ”’
+

Private Const FadingSize As Integer = 64

+

Public Sub New()
+ ‘ this is required because we will draw outside item boundaries
+ OptimizedInvalidation = False
+ End Sub

+

Protected Overrides Sub DrawingRedrawCore(graphics As Graphics)
+ MyBase.DrawingRedrawCore(graphics)

+

‘ get boundaries of items (this excludes column headers and scroll bars)
+ Dim rectContent As Rectangle = BoundsContent

+

‘ get size of the gradient
+ Dim fadingSize__1 As Integer = Math.Min(FadingSize, rectContent.Height >> 1)

+

‘ get boundaries of the gradents
+ Dim rectFadingTop As New Rectangle(rectContent.Left, rectContent.Top, rectContent.Width, fadingSize__1)

+

Dim rectFadingBottom As New Rectangle(rectContent.Left, rectContent.Bottom – fadingSize__1, rectContent.Width, fadingSize__1)

+

‘ make boundaries larger to avoid rounding errors in gradient brushes
+ rectFadingTop.Inflate(1, 1)
+ rectFadingBottom.Inflate(1, 1)

+

Dim brushFadingTop As Brush = New LinearGradientBrush(rectFadingTop, BackColor, Color.Transparent, LinearGradientMode.Vertical)
+ Dim brushFadingBottom As Brush = New LinearGradientBrush(rectFadingBottom, Color.Transparent, SystemColors.Window, LinearGradientMode.Vertical)

+

‘ deflate the gradient boundaries back
+ rectFadingTop.Inflate(-1, -1)
+ rectFadingBottom.Inflate(-1, -1)

+

‘ draw the gradients
+ graphics.FillRectangle(brushFadingTop, rectFadingTop)
+ graphics.FillRectangle(brushFadingBottom, rectFadingBottom)

+

‘ cleanup
+ brushFadingTop.Dispose()
+ brushFadingBottom.Dispose()
+ End Sub
+End Class
+[/vb]

+]]>
+ http://www.componentowl.com/blog/how-to-make-items-fading-on-edges-in-better-listview/feed/ + 0 +
+
+
+ + \ No newline at end of file diff --git a/blog/index.html?p=894.html b/blog/index.html?p=894.html new file mode 100644 index 0000000..e972a0d --- /dev/null +++ b/blog/index.html?p=894.html @@ -0,0 +1,315 @@ + + + + + + + +How to Add Grid Lines in Empty Space in Better ListView « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

How to Add Grid Lines in Empty Space in Better ListView

+ + + +
+
Default list without grid lines below items

Default list without grid lines below items

+
List with grid lines added

List with grid lines added

+

+

Setting grid lines in Better ListView is easy. Simply make sure you are using Details view (the default view). Then you can set GridLines property to one of the following values:

+
    +
  • None – grid lines are hidden
  • +
  • Horizontal – only horizontal lines are displayed
  • +
  • Vertical – only vertical lines are displayed
  • +
  • Grid – both horizontal and vertical lines are displayed, forming a grid
  • +
+

None of these settings, however, cause drawing lines below the last visible item, which may be desirable. The reason for this is that Better ListView supports custom item height and there is uncertainity about the spacing between new grid lines (smallest?, largest?, average?) It is up to your choice.

+

To draw new grid lines, handle the DrawBackground event (or subclass BetterListView and override the OnDrawBackground method) with the following code:

+

[csharp gutter=”false” toolbar=”false”]
+private void ListViewOnDrawBackground(object sender, BetterListViewDrawBackgroundEventArgs eventArgs)
+{
+ BetterListView listView = (BetterListView)sender;

+

// get last visible item
+ var item = listView.BottomItem;

+

if (item == null)
+ {
+ return;
+ }

+

// measure row height
+ var bounds = listView.GetItemBounds(item);
+ int rowHeight = bounds.BoundsOuterExtended.Height;

+

// draw additional lines
+ Rectangle rectClient = listView.ClientRectangleInner;
+ Pen penGridLines = new Pen(listView.ColorGridLines, 1.0f);

+

int y = (bounds.BoundsOuterExtended.Bottom + rowHeight);

+

while (y < rectClient.Bottom) + { + eventArgs.Graphics.DrawLine( + penGridLines, + rectClient.Left, + y, + rectClient.Right - 1, + y); + + y += rowHeight; + } + + penGridLines.Dispose(); +} +[/csharp] + +What this code does is getting the last visible item using BottomItem property. It is important  to get this visible item instead of e.g. first item because GetItemBounds method returns non-null value on visible items only. The GetItemBounds method reveals item measurement which is used to determine item height and coordinate of its bottom. Finally, we draw new lines using current grid line color  (ColorGridLines property) until reaching the bottom of the view.

+ +
+ + + + +
+ + + + + + + + + + + +
+ +

Leave a Reply

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/index.html?p=901.html b/blog/index.html?p=901.html new file mode 100644 index 0000000..18cf0b3 --- /dev/null +++ b/blog/index.html?p=901.html @@ -0,0 +1,275 @@ + + + + + + + +Sub-item Check Boxes in Better ListView « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

Sub-item Check Boxes in Better ListView

+ + + +
+
Better ListView Sub-item Check Boxes

Better ListView Sub-item Check Boxes

+

Better ListView 3.10.0 allows displaying fully interactive check boxes and even radio buttons in sub-item cells.

+

This feature can be activated simply by setting CheckBoxAppearance property of a given sub-item to other value than Hide. Such sub-item will not display check box or radio instead of image and text.

+

Please note the first sub-item’s properties do not apply as they are overriden by item’s properties. These two are separate for the case of column reordering (keeping consistency of sub-item states).

+

Another new feature in Better ListView is that check boxes or radios can be displayed disabled. This can be achieved by setting CheckEnabled property to false on the respective item or sub-item.

+

Sub-item check boxes can be operated by both mouse and keyboard. Checking sub-item with keyboard can be done by navigating focus rectangle by arrow keys to the given sub-item and pressing spacebar.

+ +
+ + + + +
+ + + + + + + + + + + +
+ +

Leave a Reply

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/index.html?p=906.html b/blog/index.html?p=906.html new file mode 100644 index 0000000..aac51c4 --- /dev/null +++ b/blog/index.html?p=906.html @@ -0,0 +1,273 @@ + + + + + + + +Centering Images in Better ListView Sub-items « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

Centering Images in Better ListView Sub-items

+ + + +
+
Centered images in Better ListView

Centered images in Better ListView

+

Better ListView 3.11 supports aligning images in sub-items and columns to center. Simply set AlignHorizontalImage property of an sub-item or column to BetterListViewImageAlignmentHorizontal.OverlayCenter.

+

The image will be centered inside available space regardless of text.

+

This is useful for sub-items and column headers consisting of image only.

+ +
+ + + + +
+ + + + + + + + + + + +
+ +

Leave a Reply

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/index.html?p=914.html b/blog/index.html?p=914.html new file mode 100644 index 0000000..b22c128 --- /dev/null +++ b/blog/index.html?p=914.html @@ -0,0 +1,279 @@ + + + + + + + +BLV and Internet Explorer « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

BLV and Internet Explorer

+ + + +
+

As you all know we are constantly working on improving BetterListView, but once in a while you might encounter a problem which has not found its way to our documentation yet.

+

Today, our blog post covers an interesting case when using Internet Explorer.
+When instantiating an ActiveX control written as a .NET assembly exposed via Interop you might get the following message:

+

System.IO.FileNotFoundException("Could not load file or assembly 'BetterListView, Version=3.8.2.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx' or one of its dependencies. The system cannot find the file specified.")

+

The solution to this problem is a fairly simple one, quoting from an MSDN article:
+“… you can install it in the global assembly cache so that it can be activated from any COM client. If the assembly is only going to be activated by a single application, you can place it in that application’s directory.”

+

Concluding from this short excerpt, you are basically left you with two options:
+1) You may register BetterListView in GAC if it is to be shared. But you should be careful with GAC because it allows holding multiple versions of the same assembly. You can make the installer remove any older versions from GAC during installation and add/keep just the newest one.
+2) You can put your .net assembly with all third-party DLLs in one directory during installation if it is to be private.

+

We recommend the second solution as we reckon it to be the safer one.

+ +
+ + + + +
+ + + + + + + + + + + +
+ +

Leave a Reply

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/index.html?p=921.html b/blog/index.html?p=921.html new file mode 100644 index 0000000..c97e9fa --- /dev/null +++ b/blog/index.html?p=921.html @@ -0,0 +1,279 @@ + + + + + + + +The Three Main Advantages Better ListView has Over the Classic .NET Framework « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

The Three Main Advantages Better ListView has Over the Classic .NET Framework

+ + + +
+

Dear Readers,
+When evaluating an alternative to replace the .NET ListView you might stumble upon the question: what sets the different solutions available apart from each other? Which one meets my demands the best?
+Here are the three main reasons we think Better ListView is the ideal solution for you if you are planning to use a professional alternative:

+

1) The intuitive approach on getting started

+

The good thing is, you can get started right away. Due to the build-up of processes, as well as the well documented procedures you have almost no learning period. Component Owl keeps its design close to the original .NET ListView so you do not have to get acquainted to a completely new system. But still, the changes made are substantial enough to make your working routine so much easier. Whether its the inbuilt drag & drop, the sub-item images or the multi-column sorting, the processes are meant to make your life easier.

+

2) The fast and helpful support

+

As Component Owl has been on the market for quite a while now, it has been further developed and improved countless times, resulting in a detailed and meaningful FAQ which answer to the majority of your questions. In case you cannot find the answer you need, you can rely on our support system which will give you feedback on you request within 24 hours. This allows you to keep the workflow going with almost no interruptions and puts you ahead of the freeware users.

+

3) The possibility to customize

+

Just like every developer has his own style of working, Component Owl can be customized to every user needs. The many opportunities to adapt your surface to your favorite design or to arrange the necessary tools the way you need them, allows you to optimize your workflow to perform even better.

+

These 3 named advantages are just a few of the many that Component Owl offers you. For more infromation just check out our trial version to see for yourself.

+ +
+ + + + +
+ + + + + + + + + + + +
+ +

Leave a Reply

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/index.html?p=927.html b/blog/index.html?p=927.html new file mode 100644 index 0000000..4b31884 --- /dev/null +++ b/blog/index.html?p=927.html @@ -0,0 +1,284 @@ + + + + + + + +Activation issues and how to solve them « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

Activation issues and how to solve them

+ + + +
+

Dear Readers,
+Periodically we get emails from users having problems with the activation. So we put together a check list on how to deal with the most frequent issues. In case these fixes do not help you solve your problem, please contact contact support at support@componentowl.com and we will be happy to help you out.
+Below, you will find some obstacles we have stumbled across in the past.

+
    +
  1. Try to rebuild the project/solution
  2. +
  3. Restart Visual Studio if rebuilding the solution did not stop the nag screen
  4. +
  5. If you use Better ListView in a Class Library project, it should be referenced and activated in both, the main project and the Class Library project.
  6. +
  7. Do the main project (executable) and all referenced projects contain the licenses.licx file within the Properties folder? If not, rebuild the main project (executable) and copy the licenses.licx file to the appropriate location in all referenced projects (Class Library or other executables).
  8. +
  9. The licenses.licx file should contain only a single reference to Better ListView with the current version number (e.g. ComponentOwl.BetterListView.BetterListView, BetterListView, Version=3.7.2.0, Culture=neutral, PublicKeyToken=e6c91a3add447be2). If there are more lines referencing Better ListView, remove the obsolete ones. You can also delete the licenses.licx file and rebuild the project to regenerate it.
  10. +
  11. Run the Activator application (installed along with the product) and check if it displays a valid license (license info should be displayed in green).
  12. +
  13. You can try to finish the activation via the Activator app and then rebuild the main project. The Activator allows custom proxy settings for activation from behind a web proxy (often present in corporate environments).
  14. +
  15. Check, if the license-blv.dat file is present in the “C:\ProgramData\Component Owl\” folder after activation. If not, please contact support at support@componentowl.com
  16. +
  17. Check, if your projects reference the same version of Better ListView as the one that is installed. Open the „Reference Properties“ window by right clicking on Better ListView reference in the Solution Explorer. Then check if there is a Specific Version property set to true. If so, remove the reference and add a new reference to Better ListView with the correct version. You can also just set Specific Version property to false.
  18. +
  19. The Better ListView has to be activated on each machine where it is built. Do not copy the license-blv.dat file because this is specific to each machine. Rather follow the activation process on each machine.
  20. +
+

We hope these clues can help you, in case you encounter a problem during the activation. As mentioned before, please contact support, if the issues persist.

+ +
+ + + + +
+ + + + + + + + + + + +
+ +

Leave a Reply

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/sub-item-check-boxes-in-better-listview/feed/index.html b/blog/sub-item-check-boxes-in-better-listview/feed/index.html new file mode 100644 index 0000000..a3d39e9 --- /dev/null +++ b/blog/sub-item-check-boxes-in-better-listview/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: Sub-item Check Boxes in Better ListView + + http://www.componentowl.com/blog/sub-item-check-boxes-in-better-listview/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/blog/tag/align/index.html b/blog/tag/align/index.html new file mode 100644 index 0000000..012538f --- /dev/null +++ b/blog/tag/align/index.html @@ -0,0 +1,214 @@ + + + + + + + +align « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/better-listview-2/index.html b/blog/tag/better-listview-2/index.html new file mode 100644 index 0000000..0531640 --- /dev/null +++ b/blog/tag/better-listview-2/index.html @@ -0,0 +1,274 @@ + + + + + + + +better listview « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + + +

Posts Tagged ‘better listview’

+ + + + + +
+ + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/better/index.html b/blog/tag/better/index.html new file mode 100644 index 0000000..eb047f7 --- /dev/null +++ b/blog/tag/better/index.html @@ -0,0 +1,226 @@ + + + + + + + +better « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/bound/index.html b/blog/tag/bound/index.html new file mode 100644 index 0000000..f2b4674 --- /dev/null +++ b/blog/tag/bound/index.html @@ -0,0 +1,214 @@ + + + + + + + +bound « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/box/index.html b/blog/tag/box/index.html new file mode 100644 index 0000000..dc29616 --- /dev/null +++ b/blog/tag/box/index.html @@ -0,0 +1,212 @@ + + + + + + + +box « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/boxes/index.html b/blog/tag/boxes/index.html new file mode 100644 index 0000000..f09ac66 --- /dev/null +++ b/blog/tag/boxes/index.html @@ -0,0 +1,212 @@ + + + + + + + +boxes « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/buttons/index.html b/blog/tag/buttons/index.html new file mode 100644 index 0000000..e415b79 --- /dev/null +++ b/blog/tag/buttons/index.html @@ -0,0 +1,212 @@ + + + + + + + +buttons « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/cell/index.html b/blog/tag/cell/index.html new file mode 100644 index 0000000..79c6cc1 --- /dev/null +++ b/blog/tag/cell/index.html @@ -0,0 +1,212 @@ + + + + + + + +cell « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/cells/index.html b/blog/tag/cells/index.html new file mode 100644 index 0000000..50e5ffe --- /dev/null +++ b/blog/tag/cells/index.html @@ -0,0 +1,212 @@ + + + + + + + +cells « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/center/index.html b/blog/tag/center/index.html new file mode 100644 index 0000000..5b4225e --- /dev/null +++ b/blog/tag/center/index.html @@ -0,0 +1,212 @@ + + + + + + + +center « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/check/index.html b/blog/tag/check/index.html new file mode 100644 index 0000000..b88cd23 --- /dev/null +++ b/blog/tag/check/index.html @@ -0,0 +1,212 @@ + + + + + + + +check « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/checkbox/index.html b/blog/tag/checkbox/index.html new file mode 100644 index 0000000..f1a43fe --- /dev/null +++ b/blog/tag/checkbox/index.html @@ -0,0 +1,212 @@ + + + + + + + +checkbox « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/checkboxes/index.html b/blog/tag/checkboxes/index.html new file mode 100644 index 0000000..209b4ab --- /dev/null +++ b/blog/tag/checkboxes/index.html @@ -0,0 +1,212 @@ + + + + + + + +checkboxes « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/child-items-in-listview/index.html b/blog/tag/child-items-in-listview/index.html new file mode 100644 index 0000000..2be7b38 --- /dev/null +++ b/blog/tag/child-items-in-listview/index.html @@ -0,0 +1,214 @@ + + + + + + + +child items in listview « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/column/index.html b/blog/tag/column/index.html new file mode 100644 index 0000000..4fd3567 --- /dev/null +++ b/blog/tag/column/index.html @@ -0,0 +1,218 @@ + + + + + + + +column « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/columns/index.html b/blog/tag/columns/index.html new file mode 100644 index 0000000..72ac36e --- /dev/null +++ b/blog/tag/columns/index.html @@ -0,0 +1,214 @@ + + + + + + + +columns « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/coming-soon/index.html b/blog/tag/coming-soon/index.html new file mode 100644 index 0000000..e1d9314 --- /dev/null +++ b/blog/tag/coming-soon/index.html @@ -0,0 +1,214 @@ + + + + + + + +coming soon « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/custom/index.html b/blog/tag/custom/index.html new file mode 100644 index 0000000..1054c18 --- /dev/null +++ b/blog/tag/custom/index.html @@ -0,0 +1,228 @@ + + + + + + + +custom « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/data/index.html b/blog/tag/data/index.html new file mode 100644 index 0000000..7c0ac43 --- /dev/null +++ b/blog/tag/data/index.html @@ -0,0 +1,214 @@ + + + + + + + +data « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/databinding/index.html b/blog/tag/databinding/index.html new file mode 100644 index 0000000..8063192 --- /dev/null +++ b/blog/tag/databinding/index.html @@ -0,0 +1,214 @@ + + + + + + + +databinding « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/drawing/index.html b/blog/tag/drawing/index.html new file mode 100644 index 0000000..afb3bdd --- /dev/null +++ b/blog/tag/drawing/index.html @@ -0,0 +1,218 @@ + + + + + + + +drawing « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/drawn/index.html b/blog/tag/drawn/index.html new file mode 100644 index 0000000..2eb67d4 --- /dev/null +++ b/blog/tag/drawn/index.html @@ -0,0 +1,216 @@ + + + + + + + +drawn « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/explorer/index.html b/blog/tag/explorer/index.html new file mode 100644 index 0000000..d0f1702 --- /dev/null +++ b/blog/tag/explorer/index.html @@ -0,0 +1,216 @@ + + + + + + + +explorer « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/groups/index.html b/blog/tag/groups/index.html new file mode 100644 index 0000000..c4fc235 --- /dev/null +++ b/blog/tag/groups/index.html @@ -0,0 +1,218 @@ + + + + + + + +groups « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/header/index.html b/blog/tag/header/index.html new file mode 100644 index 0000000..fe95f43 --- /dev/null +++ b/blog/tag/header/index.html @@ -0,0 +1,216 @@ + + + + + + + +header « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/hide/index.html b/blog/tag/hide/index.html new file mode 100644 index 0000000..99d1c45 --- /dev/null +++ b/blog/tag/hide/index.html @@ -0,0 +1,218 @@ + + + + + + + +hide « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/hiding/index.html b/blog/tag/hiding/index.html new file mode 100644 index 0000000..6d4de48 --- /dev/null +++ b/blog/tag/hiding/index.html @@ -0,0 +1,216 @@ + + + + + + + +hiding « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/hierarchy/index.html b/blog/tag/hierarchy/index.html new file mode 100644 index 0000000..3ff36b6 --- /dev/null +++ b/blog/tag/hierarchy/index.html @@ -0,0 +1,214 @@ + + + + + + + +hierarchy « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/hot/index.html b/blog/tag/hot/index.html new file mode 100644 index 0000000..05e0534 --- /dev/null +++ b/blog/tag/hot/index.html @@ -0,0 +1,216 @@ + + + + + + + +hot « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/image/index.html b/blog/tag/image/index.html new file mode 100644 index 0000000..c2fd9cc --- /dev/null +++ b/blog/tag/image/index.html @@ -0,0 +1,214 @@ + + + + + + + +image « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/images/index.html b/blog/tag/images/index.html new file mode 100644 index 0000000..7dcf23a --- /dev/null +++ b/blog/tag/images/index.html @@ -0,0 +1,216 @@ + + + + + + + +images « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/item-hierarchy/index.html b/blog/tag/item-hierarchy/index.html new file mode 100644 index 0000000..9ebc78f --- /dev/null +++ b/blog/tag/item-hierarchy/index.html @@ -0,0 +1,214 @@ + + + + + + + +item hierarchy « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/item/index.html b/blog/tag/item/index.html new file mode 100644 index 0000000..27336c4 --- /dev/null +++ b/blog/tag/item/index.html @@ -0,0 +1,218 @@ + + + + + + + +item « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/items/index.html b/blog/tag/items/index.html new file mode 100644 index 0000000..5d83931 --- /dev/null +++ b/blog/tag/items/index.html @@ -0,0 +1,238 @@ + + + + + + + +items « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/layout/index.html b/blog/tag/layout/index.html new file mode 100644 index 0000000..1e385e5 --- /dev/null +++ b/blog/tag/layout/index.html @@ -0,0 +1,212 @@ + + + + + + + +layout « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/listview/index.html b/blog/tag/listview/index.html new file mode 100644 index 0000000..fdcbe2c --- /dev/null +++ b/blog/tag/listview/index.html @@ -0,0 +1,232 @@ + + + + + + + +listview « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/load/index.html b/blog/tag/load/index.html new file mode 100644 index 0000000..2558814 --- /dev/null +++ b/blog/tag/load/index.html @@ -0,0 +1,214 @@ + + + + + + + +load « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/mouse/index.html b/blog/tag/mouse/index.html new file mode 100644 index 0000000..c5f422d --- /dev/null +++ b/blog/tag/mouse/index.html @@ -0,0 +1,214 @@ + + + + + + + +mouse « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/multi-line/index.html b/blog/tag/multi-line/index.html new file mode 100644 index 0000000..dd6777b --- /dev/null +++ b/blog/tag/multi-line/index.html @@ -0,0 +1,214 @@ + + + + + + + +multi-line « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/multiline/index.html b/blog/tag/multiline/index.html new file mode 100644 index 0000000..248abe2 --- /dev/null +++ b/blog/tag/multiline/index.html @@ -0,0 +1,216 @@ + + + + + + + +multiline « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/owner/index.html b/blog/tag/owner/index.html new file mode 100644 index 0000000..abfa434 --- /dev/null +++ b/blog/tag/owner/index.html @@ -0,0 +1,220 @@ + + + + + + + +owner « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + + +

Posts Tagged ‘owner’

+ + + + + +
+ + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/ownerdrawn/index.html b/blog/tag/ownerdrawn/index.html new file mode 100644 index 0000000..e8a0433 --- /dev/null +++ b/blog/tag/ownerdrawn/index.html @@ -0,0 +1,214 @@ + + + + + + + +ownerdrawn « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/padding/index.html b/blog/tag/padding/index.html new file mode 100644 index 0000000..67471b5 --- /dev/null +++ b/blog/tag/padding/index.html @@ -0,0 +1,214 @@ + + + + + + + +padding « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/progress/index.html b/blog/tag/progress/index.html new file mode 100644 index 0000000..eb9b6d8 --- /dev/null +++ b/blog/tag/progress/index.html @@ -0,0 +1,214 @@ + + + + + + + +progress « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/radio/index.html b/blog/tag/radio/index.html new file mode 100644 index 0000000..6470fe4 --- /dev/null +++ b/blog/tag/radio/index.html @@ -0,0 +1,212 @@ + + + + + + + +radio « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/radios/index.html b/blog/tag/radios/index.html new file mode 100644 index 0000000..e5180dc --- /dev/null +++ b/blog/tag/radios/index.html @@ -0,0 +1,212 @@ + + + + + + + +radios « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/space/index.html b/blog/tag/space/index.html new file mode 100644 index 0000000..b8bd143 --- /dev/null +++ b/blog/tag/space/index.html @@ -0,0 +1,216 @@ + + + + + + + +space « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/spacing/index.html b/blog/tag/spacing/index.html new file mode 100644 index 0000000..05f72d5 --- /dev/null +++ b/blog/tag/spacing/index.html @@ -0,0 +1,214 @@ + + + + + + + +spacing « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/sub-item/index.html b/blog/tag/sub-item/index.html new file mode 100644 index 0000000..571f146 --- /dev/null +++ b/blog/tag/sub-item/index.html @@ -0,0 +1,218 @@ + + + + + + + +sub-item « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/sub-items/index.html b/blog/tag/sub-items/index.html new file mode 100644 index 0000000..17a652c --- /dev/null +++ b/blog/tag/sub-items/index.html @@ -0,0 +1,214 @@ + + + + + + + +sub-items « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/subitem/index.html b/blog/tag/subitem/index.html new file mode 100644 index 0000000..c1e27e4 --- /dev/null +++ b/blog/tag/subitem/index.html @@ -0,0 +1,216 @@ + + + + + + + +subitem « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/subitems/index.html b/blog/tag/subitems/index.html new file mode 100644 index 0000000..60a544e --- /dev/null +++ b/blog/tag/subitems/index.html @@ -0,0 +1,216 @@ + + + + + + + +subitems « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/thumbnails/index.html b/blog/tag/thumbnails/index.html new file mode 100644 index 0000000..eb8127b --- /dev/null +++ b/blog/tag/thumbnails/index.html @@ -0,0 +1,214 @@ + + + + + + + +thumbnails « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/tree/index.html b/blog/tag/tree/index.html new file mode 100644 index 0000000..4a67f8e --- /dev/null +++ b/blog/tag/tree/index.html @@ -0,0 +1,214 @@ + + + + + + + +tree « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/update/index.html b/blog/tag/update/index.html new file mode 100644 index 0000000..befb87c --- /dev/null +++ b/blog/tag/update/index.html @@ -0,0 +1,214 @@ + + + + + + + +update « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/whats-new/index.html b/blog/tag/whats-new/index.html new file mode 100644 index 0000000..b08414e --- /dev/null +++ b/blog/tag/whats-new/index.html @@ -0,0 +1,214 @@ + + + + + + + +what’s new « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/working-on/index.html b/blog/tag/working-on/index.html new file mode 100644 index 0000000..4f2e3ea --- /dev/null +++ b/blog/tag/working-on/index.html @@ -0,0 +1,214 @@ + + + + + + + +working on « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/tag/xp/index.html b/blog/tag/xp/index.html new file mode 100644 index 0000000..34f6321 --- /dev/null +++ b/blog/tag/xp/index.html @@ -0,0 +1,214 @@ + + + + + + + +xp « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/blog/the-three-main-advantages-componentowl-has-over-the-classic-net-framework/feed/index.html b/blog/the-three-main-advantages-componentowl-has-over-the-classic-net-framework/feed/index.html new file mode 100644 index 0000000..e7f557c --- /dev/null +++ b/blog/the-three-main-advantages-componentowl-has-over-the-classic-net-framework/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: The Three Main Advantages Better ListView has Over the Classic .NET Framework + + http://www.componentowl.com/blog/the-three-main-advantages-componentowl-has-over-the-classic-net-framework/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/blog/wp-content/plugins/akismet/_inc/form.js?ver=4.0.8 b/blog/wp-content/plugins/akismet/_inc/form.js?ver=4.0.8 new file mode 100644 index 0000000..3a5be8a --- /dev/null +++ b/blog/wp-content/plugins/akismet/_inc/form.js?ver=4.0.8 @@ -0,0 +1,30 @@ +var ak_js = document.getElementById( "ak_js" ); + +if ( ! ak_js ) { + ak_js = document.createElement( 'input' ); + ak_js.setAttribute( 'id', 'ak_js' ); + ak_js.setAttribute( 'name', 'ak_js' ); + ak_js.setAttribute( 'type', 'hidden' ); +} +else { + ak_js.parentNode.removeChild( ak_js ); +} + +ak_js.setAttribute( 'value', ( new Date() ).getTime() ); + +var commentForm = document.getElementById( 'commentform' ); + +if ( commentForm ) { + commentForm.appendChild( ak_js ); +} +else { + var replyRowContainer = document.getElementById( 'replyrow' ); + + if ( replyRowContainer ) { + var children = replyRowContainer.getElementsByTagName( 'td' ); + + if ( children.length > 0 ) { + children[0].appendChild( ak_js ); + } + } +} \ No newline at end of file diff --git a/blog/wp-content/themes/componentowl/images/search.gif b/blog/wp-content/themes/componentowl/images/search.gif new file mode 100644 index 0000000..d15c85a Binary files /dev/null and b/blog/wp-content/themes/componentowl/images/search.gif differ diff --git a/blog/wp-content/themes/componentowl/javascripts/theme.js b/blog/wp-content/themes/componentowl/javascripts/theme.js new file mode 100644 index 0000000..01e00bf --- /dev/null +++ b/blog/wp-content/themes/componentowl/javascripts/theme.js @@ -0,0 +1,32 @@ +(function($) { + + $(document).ready(function() { + + $(".d-menu li").each(function() { + var $this = $(this); + var dropdown = $this.find(".dropdown"); + if (dropdown.size() == 1) { + $this.hover(function() { + $this.addClass("with-dropdown-hover"); + dropdown.show(); + }, function() { + $this.removeClass("with-dropdown-hover"); + dropdown.hide(); + }); + } + }); + + $("input.inline-label").each(function() { + $(this).data("initial_value", $(this).val()); + }); + $("input.inline-label").focus(function() { + var el = $(this); + el.addClass("inline-label-focus"); + if (el.val() == el.data("initial_value")) { + el.val(""); + } + }); + + }); + +})(jQuery); \ No newline at end of file diff --git a/blog/wp-content/themes/componentowl/style.css b/blog/wp-content/themes/componentowl/style.css new file mode 100644 index 0000000..a4ba3b2 --- /dev/null +++ b/blog/wp-content/themes/componentowl/style.css @@ -0,0 +1,797 @@ +/* +Theme Name: ComponentOwl +Theme URI: http://www.componentowl.com/ +Description: ComponentOwl WordPress Theme. +Version: 1.0 +Author: Ondrej Zabojnik +Author URI: http://www.dextronet.com/ +Tags: blue, custom header, fixed width, two columns, widgets + +*/ + + + +/* COWL THEME */ + +html { height: 100%; } +body { height: 100%; font-size: 14px; font-family: arial, sans-serif; + background: #fefefe url(images/bg.png) top repeat-x; color: #000; text-align: center; } + +a { color: #825900; outline: none; } +a:hover { color: #000; } +a:active { color: #ab7500; } + +input[type=text], input[type=password], textarea, select { padding: 2px; border: 1px solid; -moz-border-radius: 2px; -webkit-border-radius: 2px; border-radius: 2px; + background-color: #fff; border-color: #abadb3 #dbdfe6 #e3e9ef #e2e3ea;} +input[type=text]:focus, input[type=password]:hover, input[type=password]:focus, input[type=text]:hover, textarea:focus, textarea:hover, select:focus, select:hover { + border-color: #d6a140 #efd9b2 #f3e3c6 #f2e1c1; +} +input { font-size: 13px; } +input.required, textarea.required { border-color: #dea110 #f1c354 #f2d58f #f2d58f !important; background-color: #fff8e9; } + +.inline-label-focus { color: #000 !important; } +.inline-label { color: #85878d; } + +.plain-border { border: 1px solid #4c4c4c; } +.centered { display: block; margin-left: auto; margin-right: auto; } + +h1 { margin: 0; padding: 0; } + +.blog-name { color: #000; font-size: 36px; margin: 15px 0 0; } +.blog-name a { color: inherit; text-decoration: none; } +.blog-description { font-size: 14px; font-weight: bold; font-family: arial, sans-serif; margin: 0 0 35px; } + +.image-link { display: block; text-indent: -9999em; } + +ul.common li { padding: 2px 0 3px 23px; background: url(images/arrow-bullet.gif) 4px 5px no-repeat; } + +.postmetadata { font-size: 12px; color: #9e9e9e; margin: 3px 0 0; } +.postmetadata a { color: #9e9e9e; } +.postmetadata a:hover { color: #000; } + +.postinfobar { padding: 3px; font-size: 12px; border-top: 1px dotted #a8906b; overflow: hidden; width: 100%; } +.postinfobar .comments { float: right; font-weight: bold; } +.altbar { margin-top: 8px; } + +.entry p { margin-top: 4px; line-height: 1.5em; color: #222222; font-family: sans-serif; } + +#sidebar { padding: 6px 0 8px; } + +#searchform-sidebar .search { border-color: #daba82; border-width: 2px; } +#searchform-sidebar .search:focus, #searchform-sidebar .search:hover { border-color: #d6a140; } + +#searchform-sidebar { margin: 12px 0 0; padding: 0 0 12px; position: relative; border-bottom: 1px dotted #a8906b; } +#s-sidebar { width: 191px; vertical-align: middle; margin: 0; } +#searchsubmit-sidebar { position: absolute; right: 3px; top: 2px; } + +.dextronet-sidebar-ad-box p { margin: 0 !important; } +.dextronet-sidebar-ad-box img { margin-top: 5px; } +.dextronet-sidebar-ad-box .download { display: block; margin-top: 8px; padding: 5px 0; color: #fff; font-weight: bold; text-align: center; background: #5caf1f; + text-decoration: none; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; +} +.dextronet-sidebar-ad-box .download:hover { background: #825900; } + +#facebook_like iframe { height: 35px !important; } + +.tip { margin: 10px 0; border: 1px solid #d2d24b; padding: 3px 5px 3px 26px; + background: #ffffbb url(images/icons/lightbulb.gif) 5px 50% no-repeat; } + +.dextronet-newsletter-box { margin-top: 10px; background: #e1effc url(http://www.componentowl.com/blog/wp-content/themes/componentowl/images/ss-bg.gif) 0 0 no-repeat; } +.dextronet-newsletter-box img { margin: 5px; } +.dextronet-newsletter-box form { padding: 5px; font-size: 12px; text-align: center; background: url(http://www.componentowl.com/blog/wp-content/themes/componentowl/images/ss-bg.gif) 100% 100% no-repeat; } +.dextronet-newsletter-box div { padding: 3px 0; } +.dextronet-newsletter-box .email { width: 135px; } +.dextronet-newsletter-box input { margin-bottom: 3px; } + +.dextronet-feeds { margin: 15px 0 0; padding-bottom: 12px; border-bottom: 1px dotted #a8906b; } +.dextronet-feeds .links { margin: 0 !important; list-style: none; padding: 0 !important; } +.dextronet-feeds .links li { margin: 0 !important; } +.dextronet-feeds .links a { padding: 7px 0 10px 37px; display: block; } +.dextronet-feeds .links .rss { background: url(images/rss.png) 0 50% no-repeat; } +.dextronet-feeds .links .twitter { background: url(images/twitter.png) 0 50% no-repeat; } + +.product-ad { overflow: hidden; width: 100%; margin: 25px 0; border: 1px solid #86bcea; border-left: none; border-right: none; padding: 8px 0; } +.product-ad .screenshot { float: left; margin: 0 15px 0 0; } +.product-ad h3 { font-size: 26px; margin: 0; } +.product-ad p { font-size: 16px; margin: 0; font-weight: bold; } +.product-ad .buttons { padding-top: 14px; } + +.entry { padding-top: 10px; } +.entry h1, .entry h2 { color: #000; padding: 0; margin: 0; } +.entry h1 { font-size: 1.2em; margin: 20px 0 10px; } +.entry h2 { font-size: 1em; margin: 20px 0 8px; } + +.dbtn-c { + border-bottom: 1px solid #ecdfb9; + border-right: 1px solid #ecdfb9; + display: inline-block; +} +.dbtn-w { + background: #efe5c6; + border-color: #ac995e #9f8d55 #9f8d55 #ac995e; + border-style: solid; + border-width: 1px; + display: block; + height: 30px; +} +.dbtn { + background: url(../../../../images/dbtn.png) repeat-x; + border: none; + color: #000000; + cursor: pointer; + font: 15px arial, sans-serif; + height: 30px; + margin: 0; + outline: none; + vertical-align: top; + padding-left: 15px; + padding-right: 15px; +} +a.dbtn { display: block; height: 30px; line-height: 30px; text-decoration: none; } +.dbtn:active { background: #decd9b; } +.dbtn-hilight { border-color: #cfe3a6; } +.dbtn-hilight .dbtn-w { + background: #e8f2d3; + border-color: #9bc842 #84b12a #84b12a #9bc842; +} +.dbtn-hilight .dbtn { background-image: url(../../../../images/dbtn-hilight.png); font-weight: bold; } +.dbtn-hilight .dbtn:active { background: #bad782; } + + +/* MAIN STRUCTURE */ + +.d-main { float: left; width: 650px; } +.d-sidebar { float: right; width: 200px; } + +.d-placing { margin: auto; text-align: left; width: 900px; } +.d-page { position: relative; min-height: 100%; } + +.d-header { height: 47px; } +.d-logo { float: right; margin-top: 15px; } +.d-menu { float: left; margin: 0; padding: 0; } +.d-menu li { float: left; position: relative; padding-right: 35px !important; list-style: none; } +.d-menu .menu-item { display: block; position: relative; z-index: 99; padding: 12px 0 1px; color: #fff; text-decoration: none; } +.d-menu .active .menu-item { border-bottom: 1px solid #bb983b; padding-bottom: 2px; } +.d-menu .menu-item:hover { border-bottom: 2px solid #bb983b; padding-bottom: 1px; color: #fff; } +.d-menu .featured { color: #fecb33 !important; } + +.d-menu .dropdown { position: absolute; top: 30px; left: -20px; width: 250px; } +.d-menu .dropdown .outer { position: relative; z-index: 97; padding-left: 6px; background: url(../../../../images/dropdown-o.png) 0 100% no-repeat; } +.d-menu .dropdown .shadowbox { position: relative; z-index: 98; padding: 0 8px 8px 0; background: url(../../../../images/dropdown-s.png) 100% 100% no-repeat; } +.d-menu .dropdown .inner { position: relative; overflow: auto; height: 100%; z-index: 99; padding: 12px 14px; background: #362919; border: 1px solid #1c1410; border-top: none; } +.d-menu .dropdown a, .d-menu .dropdown a:hover { color: #fff; } + +.dropdown-submenu .inner { padding: 10px 0 0 !important; } +.dropdown-submenu a { padding: 10px 14px; display: block; text-decoration: none; } +.dropdown-submenu a:hover { background-color: #bb983b; } +.dropdown-submenu li { padding: 0; margin: 0; } +.dropdown-submenu img { display: block; float: left; margin: 4px 10px 0 0; } + +.dropdown .featured-item { font-size: 16px; font-weight: bold; } +.dropdown .subline { display: block; font-size: 12px; color: #fff; padding-top: 3px; } +.dropdown .dropdown-category { background-color: #876234; color: #fff; font-weight: bold; padding: 5px 8px; } + +.d-content-wrap { padding-bottom: 80px; overflow: hidden; height: 100%; padding-top: 40px } +.d-footer { position: absolute; bottom: 0; right: 0; width: 100%; padding: 13px 0 17px; color: #fff; font-size: 11px; + background: #3a2c18 url(images/footer-bg.png) repeat-x; } +.d-footer a { color: #fff; } +.d-footer a:hover { color: #f4c179; } +.d-footer .copy { font-size: 11px; padding-left: 140px; background: url(../../../../images/dextronet.gif) 0 12px no-repeat; } +.d-footer .social { padding: 10px 0 4px; } +.d-footer .social span { padding: 0 3px; } + +/* /MAIN STRUCTURE */ +/* /COWL THEME */ + + +#page { + background-color: white; + border: 1px solid #959596; + text-align: left; + } + +.widecolumn .entry p { + font-size: 1.05em; + } + +.narrowcolumn .entry, .widecolumn .entry { + line-height: 1.4em; + } + +.widecolumn { + line-height: 1.6em; + } + +.narrowcolumn .postmetadata { + text-align: center; + } + +.thread-alt { + background-color: #f8f8f8; +} +.thread-even { + background-color: white; +} +.depth-1 { +border: 1px solid #ddd; +} + +small { + font-family: arial, Sans-Serif; + font-size: 0.9em; + line-height: 1.5em; + } + +h2, h3 { + font-family: arial, helvetica, Sans-Serif; + font-weight: bold; + } + +#headerimg .description { + font-size: 1.2em; + text-align: center; + } + +h2 { + font-size: 1.70em; + } + +h2.pagetitle { + font-size: 1.55em; + } + +#sidebar h2 { + font-family: arial, Helvetica, Sans-Serif; + font-size: 1.1em; + } + +h3 { + font-size: 1.25em; + } + +#headerimg .description { + text-decoration: none; + color: white; + } + +h2, h2 a, h2 a:visited, h3, h3 a, h3 a:visited { + color: #000; + } + +h2, h2 a, h2 a:hover, h2 a:visited, h3, h3 a, h3 a:hover, h3 a:visited, #sidebar h2, #wp-calendar caption, cite { + text-decoration: none; + } +h2 a:hover { color: #000; } + +.entry p a:visited { + color: #585348; + } + +.sticky { + background: #f7f7f7; + padding: 0 10px 10px; + } +.sticky h2 { + padding-top: 10px; + } + +.commentlist li, #commentform input, #commentform textarea { + font: 0.9em arial, helvetica, Sans-Serif; + } +.commentlist li ul li { + font-size: 1em; +} + +.commentlist li { + font-weight: bold; +} + +.commentlist li .avatar { + float: right; + border: 1px solid #eee; + padding: 2px; + background: #fff; + } + +.commentlist cite, .commentlist cite a { + font-weight: bold; + font-style: normal; + text-decoration: none; + font-size: 1.1em; + } + +.commentlist p { + font-weight: normal; + line-height: 1.5em; + text-transform: none; + } + +#commentform p { + font-family: arial, Sans-Serif; + } + +.commentmetadata { + font-weight: normal; + } + +#sidebar { + font: 1em arial, Sans-Serif; + } + +small, #sidebar ul ul li, #sidebar ul ol li, .nocomments, blockquote, strike { + color: #777; + } + +code { + font: 1.1em 'Courier New', Courier, Fixed; + } + +acronym, abbr, span.caps +{ + font-size: 0.9em; + letter-spacing: .07em; + } + +#wp-calendar #prev a, #wp-calendar #next a { + font-size: 9pt; + } + +#wp-calendar a { + text-decoration: none; + } + +#wp-calendar caption { + font: bold 1.3em arial, Sans-Serif; + text-align: center; + } + +#wp-calendar th { + font-style: normal; + text-transform: capitalize; + } +/* End Typography & Colors */ + + + +/* Begin Structure */ +body { + margin: 0; + padding: 0; + } + +#page { + background-color: white; + margin: 20px auto; + padding: 0; + width: 760px; + border: 1px solid #959596; + } + +.narrowcolumn { + float: left; + padding: 0 0 20px 45px; + margin: 0px 0 0; + width: 450px; + } + +.widecolumn { + padding: 10px 0 20px 0; + margin: 5px 0 0 150px; + width: 450px; + } + +.post { + margin: 0 0 40px; + } + +.post hr { + display: block; + } + +.widecolumn .post { + margin: 0; + } + +.narrowcolumn .postmetadata { + padding-top: 5px; + } + +.widecolumn .postmetadata { + margin: 30px 0; + } + +.widecolumn .smallattachment { + text-align: center; + float: left; + width: 128px; + margin: 5px 5px 5px 0px; +} + +.widecolumn .attachment { + text-align: center; + margin: 5px 0px; +} + +.postmetadata { + clear: both; +} + +.clear { + clear: both; +} + +#footer { + padding: 0; + margin: 0 auto; + width: 760px; + clear: both; + } + +#footer p { + margin: 0; + padding: 20px 0; + text-align: center; + } +/* End Structure */ + + + +/* Begin Headers */ + +h2 { + margin: 25px 0 0; + } + +h2.pagetitle { + margin-top: 30px; + text-align: center; +} + +#sidebar h2 { + margin: 5px 0 0; + padding: 0; + } + +h3 { + padding: 0; + margin: 30px 0 0; + } + +h3.comments { + padding: 0; + margin: 40px auto 20px ; + } +/* End Headers */ + + + +/* Begin Images */ +p img { + padding: 0; + max-width: 100%; + } + +/* Using 'class="alignright"' on an image will (who would've + thought?!) align the image to the right. And using 'class="centered', + will of course center the image. This is much better than using + align="center", being much more futureproof (and valid) */ + +img.centered { + display: block; + margin-left: auto; + margin-right: auto; + } + +img.alignright { + padding: 4px; + margin: 0 0 2px 7px; + display: inline; + } + +img.alignleft { + padding: 4px; + margin: 0 7px 2px 0; + display: inline; + } + +.alignright { + float: right; + } + +.alignleft { + float: left; + } +/* End Images */ + + + +/* Begin Lists + + Special stylized non-IE bullets + Do not work in Internet Explorer, which merely default to normal bullets. */ + +html>body .entry ul { + margin-left: 0px; + padding: 0 0 0 30px; + list-style: none; + padding-left: 10px; + text-indent: -10px; + } + +html>body .entry li { + margin: 7px 0 8px 10px; + } + +.entry ul li:before { + content: "\00BB \0020"; + } + +.entry ol { + padding: 0 0 0 35px; + margin: 0; + } + +.entry ol li { + margin: 0; + padding: 0; + } + +.postmetadata ul, .postmetadata li { + display: inline; + list-style-type: none; + list-style-image: none; + } + +#sidebar ul, #sidebar ul ol { + margin: 0; + padding: 0; + } + +#sidebar ul li { + list-style-type: none; + list-style-image: none; + margin-bottom: 15px; + } + +#sidebar ul p, #sidebar ul select { + margin: 5px 0 8px; + } + +#sidebar ul ul, #sidebar ul ol { + margin: 0; + } + +#sidebar ul ul ul, #sidebar ul ol { + margin: 0 0 0 10px; + } + +ol li, #sidebar ul ol li { + list-style: decimal outside; + } + +#sidebar ul ul li, #sidebar ul ol li { + margin: 3px 0 0; + padding: 0; + } +/* End Entry Lists */ + + + +/* Begin Form Elements */ + +.entry form { /* This is mainly for password protected posts, makes them look better. */ + text-align:center; + } + +select { + width: 130px; + } + +#commentform input { + width: 170px; + padding: 2px; + margin: 5px 5px 1px 0; + } + +#commentform { + margin: 5px 10px 0 0; + } +#commentform textarea { + width: 100%; + padding: 2px; + } +#respond:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; + } +#commentform #submit { + margin: 0 0 5px auto; + float: right; + } +/* End Form Elements */ + + + +/* Begin Comments*/ +.alt { + margin: 0; + padding: 10px; + } + +.commentlist { + padding: 0; + text-align: justify; + } + +.commentlist li { + margin: 15px 0 10px; + padding: 5px 5px 10px 10px; + list-style: none; + + } +.commentlist li ul li { + margin-right: -5px; + margin-left: 10px; +} + +.commentlist p { + margin: 10px 5px 10px 0; +} +.children { padding: 0; } + +#commentform p { + margin: 5px 0; + } + +.nocomments { + text-align: center; + margin: 0; + padding: 0; + } + +.commentmetadata { + margin: 0; + display: block; + } +/* End Comments */ + + + +/* Begin Sidebar */ + +#sidebar form { + margin: 0; + } +/* End Sidebar */ + + + +/* Begin Calendar */ +#wp-calendar { + empty-cells: show; + margin: 10px auto 0; + width: 155px; + } + +#wp-calendar #next a { + padding-right: 10px; + text-align: right; + } + +#wp-calendar #prev a { + padding-left: 10px; + text-align: left; + } + +#wp-calendar a { + display: block; + } + +#wp-calendar caption { + text-align: center; + width: 100%; + } + +#wp-calendar td { + padding: 3px 0; + text-align: center; + } + +#wp-calendar td.pad:hover { /* Doesn't work in IE */ + background-color: #fff; } +/* End Calendar */ + + + +/* Begin Various Tags & Classes */ +acronym, abbr, span.caps { + cursor: help; + } + +acronym, abbr { + border-bottom: 1px dashed #999; + } + +blockquote { + margin: 15px 30px 0 10px; + padding-left: 20px; + border-left: 5px solid #ddd; + } + +blockquote cite { + margin: 5px 0 0; + display: block; + } + +.center { + text-align: center; + } + +.hidden { + display: none; + } + +.screen-reader-text { + position: absolute; + left: -1000em; +} + +hr { + display: none; + } + +a img { + border: none; + } + +.navigation { + display: block; + text-align: center; + margin-top: 10px; + margin-bottom: 60px; + } +/* End Various Tags & Classes*/ + + + +/* Captions */ +.aligncenter, +div.aligncenter { + display: block; + margin-left: auto; + margin-right: auto; +} + +.wp-caption { + border: 1px solid #ddd; + text-align: center; + background-color: #f3f3f3; + padding-top: 4px; + margin: 10px; + -moz-border-radius: 3px; + -khtml-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.wp-caption img { + margin: 0; + padding: 0; + border: 0 none; +} + +.wp-caption p.wp-caption-text { + font-size: 11px; + line-height: 17px; + padding: 0 4px 5px; + margin: 0; +} +/* End captions */ + + +/* "Daisy, Daisy, give me your answer do. I'm half crazy all for the love of you. + It won't be a stylish marriage, I can't afford a carriage. + But you'll look sweet upon the seat of a bicycle built for two." */ diff --git a/blog/wp-content/uploads/2014/07/blv-sub-item-checkboxes.png b/blog/wp-content/uploads/2014/07/blv-sub-item-checkboxes.png new file mode 100644 index 0000000..a69737c Binary files /dev/null and b/blog/wp-content/uploads/2014/07/blv-sub-item-checkboxes.png differ diff --git a/blog/wp-content/uploads/2014/08/blv-overlay.png b/blog/wp-content/uploads/2014/08/blv-overlay.png new file mode 100644 index 0000000..02d3033 Binary files /dev/null and b/blog/wp-content/uploads/2014/08/blv-overlay.png differ diff --git a/blog/wp-includes/js/comment-reply.min.js?ver=4.9.8 b/blog/wp-includes/js/comment-reply.min.js?ver=4.9.8 new file mode 100644 index 0000000..4042143 --- /dev/null +++ b/blog/wp-includes/js/comment-reply.min.js?ver=4.9.8 @@ -0,0 +1 @@ +var addComment={moveForm:function(a,b,c,d){var e,f,g,h,i=this,j=i.I(a),k=i.I(c),l=i.I("cancel-comment-reply-link"),m=i.I("comment_parent"),n=i.I("comment_post_ID"),o=k.getElementsByTagName("form")[0];if(j&&k&&l&&m&&o){i.respondId=c,d=d||!1,i.I("wp-temp-form-div")||(e=document.createElement("div"),e.id="wp-temp-form-div",e.style.display="none",k.parentNode.insertBefore(e,k)),j.parentNode.insertBefore(k,j.nextSibling),n&&d&&(n.value=d),m.value=b,l.style.display="",l.onclick=function(){var a=addComment,b=a.I("wp-temp-form-div"),c=a.I(a.respondId);if(b&&c)return a.I("comment_parent").value="0",b.parentNode.insertBefore(c,b),b.parentNode.removeChild(b),this.style.display="none",this.onclick=null,!1};try{for(var p=0;p",{size:1}).attr("size")&&a.attrFn,h=a.attr,i=a.attrHooks.value&&a.attrHooks.value.get||function(){return null},j=a.attrHooks.value&&a.attrHooks.value.set||function(){return c},k=/^(?:input|button)$/i,l=/^[238]$/,m=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,n=/^(?:checked|selected)$/i;e(a,"attrFn",g||{},"jQuery.attrFn is deprecated"),a.attr=function(b,e,f,i){var j=e.toLowerCase(),o=b&&b.nodeType;return i&&(h.length<4&&d("jQuery.fn.attr( props, pass ) is deprecated"),b&&!l.test(o)&&(g?e in g:a.isFunction(a.fn[e])))?a(b)[e](f):("type"===e&&f!==c&&k.test(b.nodeName)&&b.parentNode&&d("Can't change the 'type' of an input or button in IE 6/7/8"),!a.attrHooks[j]&&m.test(j)&&(a.attrHooks[j]={get:function(b,d){var e,f=a.prop(b,d);return f===!0||"boolean"!=typeof f&&(e=b.getAttributeNode(d))&&e.nodeValue!==!1?d.toLowerCase():c},set:function(b,c,d){var e;return c===!1?a.removeAttr(b,d):(e=a.propFix[d]||d,e in b&&(b[e]=!0),b.setAttribute(d,d.toLowerCase())),d}},n.test(j)&&d("jQuery.fn.attr('"+j+"') might use property instead of attribute")),h.call(a,b,e,f))},a.attrHooks.value={get:function(a,b){var c=(a.nodeName||"").toLowerCase();return"button"===c?i.apply(this,arguments):("input"!==c&&"option"!==c&&d("jQuery.fn.attr('value') no longer gets properties"),b in a?a.value:null)},set:function(a,b){var c=(a.nodeName||"").toLowerCase();return"button"===c?j.apply(this,arguments):("input"!==c&&"option"!==c&&d("jQuery.fn.attr('value', val) no longer sets properties"),void(a.value=b))}};var o,p,q=a.fn.init,r=a.find,s=a.parseJSON,t=/^\s*)([^>]*)$/;a.fn.init=function(b,e,f){var g,h;return b&&"string"==typeof b&&!a.isPlainObject(e)&&(g=w.exec(a.trim(b)))&&g[0]&&(t.test(b)||d("$(html) HTML strings must start with '<' character"),g[3]&&d("$(html) HTML text after last tag is ignored"),"#"===g[0].charAt(0)&&(d("HTML string cannot start with a '#' character"),a.error("JQMIGRATE: Invalid selector string (XSS)")),e&&e.context&&e.context.nodeType&&(e=e.context),a.parseHTML)?q.call(this,a.parseHTML(g[2],e&&e.ownerDocument||e||document,!0),e,f):(h=q.apply(this,arguments),b&&b.selector!==c?(h.selector=b.selector,h.context=b.context):(h.selector="string"==typeof b?b:"",b&&(h.context=b.nodeType?b:e||document)),h)},a.fn.init.prototype=a.fn,a.find=function(a){var b=Array.prototype.slice.call(arguments);if("string"==typeof a&&u.test(a))try{document.querySelector(a)}catch(c){a=a.replace(v,function(a,b,c,d){return"["+b+c+'"'+d+'"]'});try{document.querySelector(a),d("Attribute selector with '#' must be quoted: "+b[0]),b[0]=a}catch(e){d("Attribute selector with '#' was not fixed: "+b[0])}}return r.apply(this,b)};var x;for(x in r)Object.prototype.hasOwnProperty.call(r,x)&&(a.find[x]=r[x]);a.parseJSON=function(a){return a?s.apply(this,arguments):(d("jQuery.parseJSON requires a valid JSON string"),null)},a.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a.browser||(o=a.uaMatch(navigator.userAgent),p={},o.browser&&(p[o.browser]=!0,p.version=o.version),p.chrome?p.webkit=!0:p.webkit&&(p.safari=!0),a.browser=p),e(a,"browser",a.browser,"jQuery.browser is deprecated"),a.boxModel=a.support.boxModel="CSS1Compat"===document.compatMode,e(a,"boxModel",a.boxModel,"jQuery.boxModel is deprecated"),e(a.support,"boxModel",a.support.boxModel,"jQuery.support.boxModel is deprecated"),a.sub=function(){function b(a,c){return new b.fn.init(a,c)}a.extend(!0,b,this),b.superclass=this,b.fn=b.prototype=this(),b.fn.constructor=b,b.sub=this.sub,b.fn.init=function(d,e){var f=a.fn.init.call(this,d,e,c);return f instanceof b?f:b(f)},b.fn.init.prototype=b.fn;var c=b(document);return d("jQuery.sub() is deprecated"),b},a.fn.size=function(){return d("jQuery.fn.size() is deprecated; use the .length property"),this.length};var y=!1;a.swap&&a.each(["height","width","reliableMarginRight"],function(b,c){var d=a.cssHooks[c]&&a.cssHooks[c].get;d&&(a.cssHooks[c].get=function(){var a;return y=!0,a=d.apply(this,arguments),y=!1,a})}),a.swap=function(a,b,c,e){var f,g,h={};y||d("jQuery.swap() is undocumented and deprecated");for(g in b)h[g]=a.style[g],a.style[g]=b[g];f=c.apply(a,e||[]);for(g in b)a.style[g]=h[g];return f},a.ajaxSetup({converters:{"text json":a.parseJSON}});var z=a.fn.data;a.fn.data=function(b){var e,f,g=this[0];return!g||"events"!==b||1!==arguments.length||(e=a.data(g,b),f=a._data(g,b),e!==c&&e!==f||f===c)?z.apply(this,arguments):(d("Use of jQuery.fn.data('events') is deprecated"),f)};var A=/\/(java|ecma)script/i;a.clean||(a.clean=function(b,c,e,f){c=c||document,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,d("jQuery.clean() is deprecated");var g,h,i,j,k=[];if(a.merge(k,a.buildFragment(b,c).childNodes),e)for(i=function(a){return!a.type||A.test(a.type)?f?f.push(a.parentNode?a.parentNode.removeChild(a):a):e.appendChild(a):void 0},g=0;null!=(h=k[g]);g++)a.nodeName(h,"script")&&i(h)||(e.appendChild(h),"undefined"!=typeof h.getElementsByTagName&&(j=a.grep(a.merge([],h.getElementsByTagName("script")),i),k.splice.apply(k,[g+1,0].concat(j)),g+=j.length));return k});var B=a.event.add,C=a.event.remove,D=a.event.trigger,E=a.fn.toggle,F=a.fn.live,G=a.fn.die,H=a.fn.load,I="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",J=new RegExp("\\b(?:"+I+")\\b"),K=/(?:^|\s)hover(\.\S+|)\b/,L=function(b){return"string"!=typeof b||a.event.special.hover?b:(K.test(b)&&d("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),b&&b.replace(K,"mouseenter$1 mouseleave$1"))};a.event.props&&"attrChange"!==a.event.props[0]&&a.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),a.event.dispatch&&e(a.event,"handle",a.event.dispatch,"jQuery.event.handle is undocumented and deprecated"),a.event.add=function(a,b,c,e,f){a!==document&&J.test(b)&&d("AJAX events should be attached to document: "+b),B.call(this,a,L(b||""),c,e,f)},a.event.remove=function(a,b,c,d,e){C.call(this,a,L(b)||"",c,d,e)},a.each(["load","unload","error"],function(b,c){a.fn[c]=function(){var a=Array.prototype.slice.call(arguments,0);return"load"===c&&"string"==typeof a[0]?H.apply(this,a):(d("jQuery.fn."+c+"() is deprecated"),a.splice(0,0,c),arguments.length?this.bind.apply(this,a):(this.triggerHandler.apply(this,a),this))}}),a.fn.toggle=function(b,c){if(!a.isFunction(b)||!a.isFunction(c))return E.apply(this,arguments);d("jQuery.fn.toggle(handler, handler...) is deprecated");var e=arguments,f=b.guid||a.guid++,g=0,h=function(c){var d=(a._data(this,"lastToggle"+b.guid)||0)%g;return a._data(this,"lastToggle"+b.guid,d+1),c.preventDefault(),e[d].apply(this,arguments)||!1};for(h.guid=f;ga?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; +}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="
a",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?""!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n(" + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Factivation-issues-and-how-to-solve-them%2F.html b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Factivation-issues-and-how-to-solve-them%2F.html new file mode 100644 index 0000000..04c2a1d --- /dev/null +++ b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Factivation-issues-and-how-to-solve-them%2F.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fblv-and-internet-explorer%2F&format=xml.html b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fblv-and-internet-explorer%2F&format=xml.html new file mode 100644 index 0000000..04c2a1d --- /dev/null +++ b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fblv-and-internet-explorer%2F&format=xml.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fblv-and-internet-explorer%2F.html b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fblv-and-internet-explorer%2F.html new file mode 100644 index 0000000..04c2a1d --- /dev/null +++ b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fblv-and-internet-explorer%2F.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcentering-images-in-better-listview-sub-items%2F&format=xml.html b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcentering-images-in-better-listview-sub-items%2F&format=xml.html new file mode 100644 index 0000000..04c2a1d --- /dev/null +++ b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcentering-images-in-better-listview-sub-items%2F&format=xml.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcentering-images-in-better-listview-sub-items%2F.html b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcentering-images-in-better-listview-sub-items%2F.html new file mode 100644 index 0000000..04c2a1d --- /dev/null +++ b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcentering-images-in-better-listview-sub-items%2F.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fsub-item-check-boxes-in-better-listview%2F&format=xml.html b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fsub-item-check-boxes-in-better-listview%2F&format=xml.html new file mode 100644 index 0000000..04c2a1d --- /dev/null +++ b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fsub-item-check-boxes-in-better-listview%2F&format=xml.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fsub-item-check-boxes-in-better-listview%2F.html b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fsub-item-check-boxes-in-better-listview%2F.html new file mode 100644 index 0000000..04c2a1d --- /dev/null +++ b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fsub-item-check-boxes-in-better-listview%2F.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fthe-three-main-advantages-componentowl-has-over-the-classic-net-framework%2F&format=xml.html b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fthe-three-main-advantages-componentowl-has-over-the-classic-net-framework%2F&format=xml.html new file mode 100644 index 0000000..04c2a1d --- /dev/null +++ b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fthe-three-main-advantages-componentowl-has-over-the-classic-net-framework%2F&format=xml.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fthe-three-main-advantages-componentowl-has-over-the-classic-net-framework%2F.html b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fthe-three-main-advantages-componentowl-has-over-the-classic-net-framework%2F.html new file mode 100644 index 0000000..04c2a1d --- /dev/null +++ b/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fthe-three-main-advantages-componentowl-has-over-the-classic-net-framework%2F.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/blog/xmlrpc.php.html b/blog/xmlrpc.php.html new file mode 100644 index 0000000..04c2a1d --- /dev/null +++ b/blog/xmlrpc.php.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/blog/xmlrpc.php?rsd b/blog/xmlrpc.php?rsd new file mode 100644 index 0000000..2ac2d3a --- /dev/null +++ b/blog/xmlrpc.php?rsd @@ -0,0 +1,14 @@ + + + WordPress + https://wordpress.org/ + http://www.componentowl.com/blog + + + + + + + + + diff --git a/comics.rss b/comics.rss new file mode 100644 index 0000000..f4a1ac3 --- /dev/null +++ b/comics.rss @@ -0,0 +1,68 @@ + + + + Component Owl's Comics + Owl's Components - comic strips for developers by Libor Tinka + http://www.componentowl.com/comics + + Component Owl's Comics: Budget Cuts + Component Owl cares about fun too. Behold, the truth-inspired web comics for puny human developers! + 1 Dec 2012 + http://www.componentowl.com/comics/43 + + + Component Owl's Comics: Extra Dimension + Component Owl cares about fun too. Behold, the truth-inspired web comics for puny human developers! + 12 Nov 2012 + http://www.componentowl.com/comics/42 + + + Component Owl's Comics: The Assassin + A short look on the Mr. Investor's character. + 2 Oct 2012 + http://www.componentowl.com/comics/41 + + + Component Owl's Comics: The Smoker + Component Owl cares about fun too. Behold, the truth-inspired web comics for puny human developers! + 29 Aug 2012 + http://www.componentowl.com/comics/40 + + + Component Owl's Comics: Investment Cloud + Component Owl cares about fun too. Behold, the truth-inspired web comics for puny human developers! + 28 Jun 2012 + http://www.componentowl.com/comics/39 + + + Component Owl's Comics: Project Triangle + Component Owl cares about fun too. Behold, the truth-inspired web comics for puny human developers! + 18 Jun 2012 + http://www.componentowl.com/comics/38 + + + Component Owl's Comics: Office Animals + Component Owl cares about fun too. Behold, the truth-inspired web comics for puny human developers! + 9 Jun 2012 + http://www.componentowl.com/comics/37 + + + Component Owl's Comics: Amphetamine Coffee + Component Owl cares about fun too. Behold, the truth-inspired web comics for puny human developers! + 1 Jun 2012 + http://www.componentowl.com/comics/36 + + + Component Owl's Comics: Coin Machine + Component Owl cares about fun too. Behold, the truth-inspired web comics for puny human developers! + 30 May 2012 + http://www.componentowl.com/comics/35 + + + Component Owl's Comics: Skyscraper + Component Owl cares about fun too. Behold, the truth-inspired web comics for puny human developers! + 26 May 2012 + http://www.componentowl.com/comics/34 + + + diff --git a/comics/42.html b/comics/42.html new file mode 100644 index 0000000..4e04ec4 --- /dev/null +++ b/comics/42.html @@ -0,0 +1,315 @@ + + + + + + + + + + + + + + + +Component Owl's Comics: Extra Dimension + + + + + + + + + + + + + + + +
+ + + + + + + +
+
+ + + +
+ +
+

Component Owl cares about fun too. Behold, the truth-inspired web + comics for puny human developers!

+
+ +
+ Previous +

+ Monday, Nov 12, 2012

+ Next +
+ +
+
+ 0035-extra-dimension-web_web_1352715455 +
+
+ +
+
+
+ + + + + + + +
+
+ + + +

+ All these comics strips are drawn by our lead Better ListView developer + Libor Tinka. He is either restlessly crafting the perfect code, drinking + green Japanese tea, or drawing hilarious comics. +

+ If you like this comics, please share it with your friends! +

+ +
+
+ Better ListView +
+
Better ListView: .NET ListView control for WinForms (C#, VB.NET)
+ Download + More Info +
+
+
+ + + + + + + +
+
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/comics/43.html b/comics/43.html new file mode 100644 index 0000000..80b09d8 --- /dev/null +++ b/comics/43.html @@ -0,0 +1,315 @@ + + + + + + + + + + + + + + + +Component Owl's Comics: Budget Cuts + + + + + + + + + + + + + + + +
+ + + + + + + +
+
+ + + +
+ +
+

Component Owl cares about fun too. Behold, the truth-inspired web + comics for puny human developers!

+
+ +
+ Previous +

+ Saturday, Dec 01, 2012

+ +
+ +
+
+ 0036-budget-cuts-web_web_1354427969 +
+
+ +
+
+
+ + + + + + + +
+
+ + + +

+ All these comics strips are drawn by our lead Better ListView developer + Libor Tinka. He is either restlessly crafting the perfect code, drinking + green Japanese tea, or drawing hilarious comics. +

+ If you like this comics, please share it with your friends! +

+ +
+
+ Better ListView +
+
Better ListView: .NET ListView control for WinForms (C#, VB.NET)
+ Download + More Info +
+
+
+ + + + + + + +
+
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git "a/comics/\\\".html" "b/comics/\\\".html" new file mode 100644 index 0000000..04c2a1d --- /dev/null +++ "b/comics/\\\".html" @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ + + + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/disclaimer.html b/disclaimer.html new file mode 100644 index 0000000..37072ec --- /dev/null +++ b/disclaimer.html @@ -0,0 +1,270 @@ + + + + + + + + + + + + + + + +Component Owl disclaimer + + + + + + + +
+ + + + + + + +
+
+ +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/documentation/better-listview/data/lang-vb.js b/documentation/better-listview/data/lang-vb.js new file mode 100644 index 0000000..5fb4a38 --- /dev/null +++ b/documentation/better-listview/data/lang-vb.js @@ -0,0 +1,61 @@ +// Copyright (C) 2009 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + + +/** + * @fileoverview + * Registers a language handler for various flavors of basic. + * + * + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + *

+ *
+ *
+ * http://msdn.microsoft.com/en-us/library/aa711638(VS.71).aspx defines the
+ * visual basic grammar lexical grammar.
+ *
+ * @author mikesamuel@gmail.com
+ */
+
+PR['registerLangHandler'](
+    PR['createSimpleLexer'](
+        [
+         // Whitespace
+         [PR['PR_PLAIN'],       /^[\t\n\r \xA0\u2028\u2029]+/, null, '\t\n\r \xA0\u2028\u2029'],
+         // A double quoted string with quotes escaped by doubling them.
+         // A single character can be suffixed with C.
+         [PR['PR_STRING'],      /^(?:[\"\u201C\u201D](?:[^\"\u201C\u201D]|[\"\u201C\u201D]{2})(?:[\"\u201C\u201D]c|$)|[\"\u201C\u201D](?:[^\"\u201C\u201D]|[\"\u201C\u201D]{2})*(?:[\"\u201C\u201D]|$))/i, null,
+          '"\u201C\u201D'],
+         // A comment starts with a single quote and runs until the end of the
+         // line.
+         [PR['PR_COMMENT'],     /^[\'\u2018\u2019][^\r\n\u2028\u2029]*/, null, '\'\u2018\u2019']
+        ],
+        [
+         [PR['PR_KEYWORD'], /^(?:AddHandler|AddressOf|Alias|And|AndAlso|Ansi|As|Assembly|Auto|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|CBool|CByte|CChar|CDate|CDbl|CDec|Char|CInt|Class|CLng|CObj|Const|CShort|CSng|CStr|CType|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else|ElseIf|End|EndIf|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get|GetType|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|Let|Lib|Like|Long|Loop|Me|Mod|Module|MustInherit|MustOverride|MyBase|MyClass|Namespace|New|Next|Not|NotInheritable|NotOverridable|Object|On|Option|Optional|Or|OrElse|Overloads|Overridable|Overrides|ParamArray|Preserve|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|Select|Set|Shadows|Shared|Short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TypeOf|Unicode|Until|Variant|Wend|When|While|With|WithEvents|WriteOnly|Xor|EndIf|GoSub|Let|Variant|Wend)\b/i, null],
+         // A second comment form
+         [PR['PR_COMMENT'], /^REM[^\r\n\u2028\u2029]*/i],
+         // A boolean, numeric, or date literal.
+         [PR['PR_LITERAL'],
+          /^(?:True\b|False\b|Nothing\b|\d+(?:E[+\-]?\d+[FRD]?|[FRDSIL])?|(?:&H[0-9A-F]+|&O[0-7]+)[SIL]?|\d*\.\d+(?:E[+\-]?\d+)?[FRD]?|#\s+(?:\d+[\-\/]\d+[\-\/]\d+(?:\s+\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)?|\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)\s+#)/i],
+         // An identifier?
+         [PR['PR_PLAIN'], /^(?:(?:[a-z]|_\w)\w*|\[(?:[a-z]|_\w)\w*\])/i],
+         // A run of punctuation
+         [PR['PR_PUNCTUATION'],
+          /^[^\w\t\n\r \"\'\[\]\xA0\u2018\u2019\u201C\u201D\u2028\u2029]+/],
+         // Square brackets
+         [PR['PR_PUNCTUATION'], /^(?:\[|\])/]
+        ]),
+    ['vb', 'vbs']);
diff --git a/documentation/better-listview/data/prettify.css b/documentation/better-listview/data/prettify.css
new file mode 100644
index 0000000..400fd74
--- /dev/null
+++ b/documentation/better-listview/data/prettify.css
@@ -0,0 +1,52 @@
+/* Pretty printing styles. Used with prettify.js. */
+
+/* SPAN elements with the classes below are added by prettyprint. */
+.pln { color: #000 }  /* plain text */
+
+@media screen {
+  .str { color: #080 }  /* string content */
+  .kwd { color: #008 }  /* a keyword */
+  .com { color: #800 }  /* a comment */
+  .typ { color: #606 }  /* a type name */
+  .lit { color: #066 }  /* a literal value */
+  /* punctuation, lisp open bracket, lisp close bracket */
+  .pun, .opn, .clo { color: #660 }
+  .tag { color: #008 }  /* a markup tag name */
+  .atn { color: #606 }  /* a markup attribute name */
+  .atv { color: #080 }  /* a markup attribute value */
+  .dec, .var { color: #606 }  /* a declaration; a variable name */
+  .fun { color: red }  /* a function name */
+}
+
+/* Use higher contrast and text-weight for printable form. */
+@media print, projection {
+  .str { color: #060 }
+  .kwd { color: #006; font-weight: bold }
+  .com { color: #600; font-style: italic }
+  .typ { color: #404; font-weight: bold }
+  .lit { color: #044 }
+  .pun, .opn, .clo { color: #440 }
+  .tag { color: #006; font-weight: bold }
+  .atn { color: #404 }
+  .atv { color: #060 }
+}
+
+/* Put a border around prettyprinted code snippets. */
+pre.prettyprint { padding: 2px; border: 1px solid #888 }
+
+/* Specify class=linenums on a pre to get line numbering */
+ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */
+li.L0,
+li.L1,
+li.L2,
+li.L3,
+li.L5,
+li.L6,
+li.L7,
+li.L8 { list-style-type: none }
+/* Alternate shading for lines */
+li.L1,
+li.L3,
+li.L5,
+li.L7,
+li.L9 { background: #eee }
diff --git a/documentation/better-listview/data/prettify.js b/documentation/better-listview/data/prettify.js
new file mode 100644
index 0000000..037c26d
--- /dev/null
+++ b/documentation/better-listview/data/prettify.js
@@ -0,0 +1,1477 @@
+// Copyright (C) 2006 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+/**
+ * @fileoverview
+ * some functions for browser-side pretty printing of code contained in html.
+ *
+ * 

+ * For a fairly comprehensive set of languages see the + * README + * file that came with this source. At a minimum, the lexer should work on a + * number of languages including C and friends, Java, Python, Bash, SQL, HTML, + * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk + * and a subset of Perl, but, because of commenting conventions, doesn't work on + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. + *

+ * Usage:

    + *
  1. include this source file in an html page via + * {@code } + *
  2. define style rules. See the example page for examples. + *
  3. mark the {@code
    } and {@code } tags in your source with
    + *    {@code class=prettyprint.}
    + *    You can also use the (html deprecated) {@code } tag, but the pretty
    + *    printer needs to do more substantial DOM manipulations to support that, so
    + *    some css styles may not be preserved.
    + * </ol>
    + * That's it.  I wanted to keep the API as simple as possible, so there's no
    + * need to specify which language the code is in, but if you wish, you can add
    + * another class to the {@code <pre>} or {@code <code>} element to specify the
    + * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    + * starts with "lang-" followed by a file extension, specifies the file type.
    + * See the "lang-*.js" files in this directory for code that implements
    + * per-language file handlers.
    + * <p>
    + * Change log:<br>
    + * cbeust, 2006/08/22
    + * <blockquote>
    + *   Java annotations (start with "@") are now captured as literals ("lit")
    + * </blockquote>
    + * @requires console
    + */
    +
    +// JSLint declarations
    +/*global console, document, navigator, setTimeout, window */
    +
    +/**
    + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    + * UI events.
    + * If set to {@code false}, {@code prettyPrint()} is synchronous.
    + */
    +window['PR_SHOULD_USE_CONTINUATION'] = true;
    +
    +(function () {
    +  // Keyword lists for various languages.
    +  // We use things that coerce to strings to make them compact when minified
    +  // and to defeat aggressive optimizers that fold large string constants.
    +  var FLOW_CONTROL_KEYWORDS = ["break,continue,do,else,for,if,return,while"];
    +  var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS,"auto,case,char,const,default," + 
    +      "double,enum,extern,float,goto,int,long,register,short,signed,sizeof," +
    +      "static,struct,switch,typedef,union,unsigned,void,volatile"];
    +  var COMMON_KEYWORDS = [C_KEYWORDS,"catch,class,delete,false,import," +
    +      "new,operator,private,protected,public,this,throw,true,try,typeof"];
    +  var CPP_KEYWORDS = [COMMON_KEYWORDS,"alignof,align_union,asm,axiom,bool," +
    +      "concept,concept_map,const_cast,constexpr,decltype," +
    +      "dynamic_cast,explicit,export,friend,inline,late_check," +
    +      "mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast," +
    +      "template,typeid,typename,using,virtual,where"];
    +  var JAVA_KEYWORDS = [COMMON_KEYWORDS,
    +      "abstract,boolean,byte,extends,final,finally,implements,import," +
    +      "instanceof,null,native,package,strictfp,super,synchronized,throws," +
    +      "transient"];
    +  var CSHARP_KEYWORDS = [JAVA_KEYWORDS,
    +      "as,base,by,checked,decimal,delegate,descending,dynamic,event," +
    +      "fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock," +
    +      "object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed," +
    +      "stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];
    +  var COFFEE_KEYWORDS = "all,and,by,catch,class,else,extends,false,finally," +
    +      "for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then," +
    +      "true,try,unless,until,when,while,yes";
    +  var JSCRIPT_KEYWORDS = [COMMON_KEYWORDS,
    +      "debugger,eval,export,function,get,null,set,undefined,var,with," +
    +      "Infinity,NaN"];
    +  var PERL_KEYWORDS = "caller,delete,die,do,dump,elsif,eval,exit,foreach,for," +
    +      "goto,if,import,last,local,my,next,no,our,print,package,redo,require," +
    +      "sub,undef,unless,until,use,wantarray,while,BEGIN,END";
    +  var PYTHON_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "and,as,assert,class,def,del," +
    +      "elif,except,exec,finally,from,global,import,in,is,lambda," +
    +      "nonlocal,not,or,pass,print,raise,try,with,yield," +
    +      "False,True,None"];
    +  var RUBY_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "alias,and,begin,case,class," +
    +      "def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo," +
    +      "rescue,retry,self,super,then,true,undef,unless,until,when,yield," +
    +      "BEGIN,END"];
    +  var SH_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "case,done,elif,esac,eval,fi," +
    +      "function,in,local,set,then,until"];
    +  var ALL_KEYWORDS = [
    +      CPP_KEYWORDS, CSHARP_KEYWORDS, JSCRIPT_KEYWORDS, PERL_KEYWORDS +
    +      PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS];
    +  var C_TYPES = /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;
    +
    +  // token style names.  correspond to css classes
    +  /**
    +   * token style for a string literal
    +   * @const
    +   */
    +  var PR_STRING = 'str';
    +  /**
    +   * token style for a keyword
    +   * @const
    +   */
    +  var PR_KEYWORD = 'kwd';
    +  /**
    +   * token style for a comment
    +   * @const
    +   */
    +  var PR_COMMENT = 'com';
    +  /**
    +   * token style for a type
    +   * @const
    +   */
    +  var PR_TYPE = 'typ';
    +  /**
    +   * token style for a literal value.  e.g. 1, null, true.
    +   * @const
    +   */
    +  var PR_LITERAL = 'lit';
    +  /**
    +   * token style for a punctuation string.
    +   * @const
    +   */
    +  var PR_PUNCTUATION = 'pun';
    +  /**
    +   * token style for a punctuation string.
    +   * @const
    +   */
    +  var PR_PLAIN = 'pln';
    +
    +  /**
    +   * token style for an sgml tag.
    +   * @const
    +   */
    +  var PR_TAG = 'tag';
    +  /**
    +   * token style for a markup declaration such as a DOCTYPE.
    +   * @const
    +   */
    +  var PR_DECLARATION = 'dec';
    +  /**
    +   * token style for embedded source.
    +   * @const
    +   */
    +  var PR_SOURCE = 'src';
    +  /**
    +   * token style for an sgml attribute name.
    +   * @const
    +   */
    +  var PR_ATTRIB_NAME = 'atn';
    +  /**
    +   * token style for an sgml attribute value.
    +   * @const
    +   */
    +  var PR_ATTRIB_VALUE = 'atv';
    +
    +  /**
    +   * A class that indicates a section of markup that is not code, e.g. to allow
    +   * embedding of line numbers within code listings.
    +   * @const
    +   */
    +  var PR_NOCODE = 'nocode';
    +
    +
    +
    +/**
    + * A set of tokens that can precede a regular expression literal in
    + * javascript
    + * http://web.archive.org/web/20070717142515/http://www.mozilla.org/js/language/js20/rationale/syntax.html
    + * has the full list, but I've removed ones that might be problematic when
    + * seen in languages that don't support regular expression literals.
    + *
    + * <p>Specifically, I've removed any keywords that can't precede a regexp
    + * literal in a syntactically legal javascript program, and I've removed the
    + * "in" keyword since it's not a keyword in many languages, and might be used
    + * as a count of inches.
    + *
    + * <p>The link a above does not accurately describe EcmaScript rules since
    + * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    + * very well in practice.
    + *
    + * @private
    + * @const
    + */
    +var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*';
    +
    +// CAVEAT: this does not properly handle the case where a regular
    +// expression immediately follows another since a regular expression may
    +// have flags for case-sensitivity and the like.  Having regexp tokens
    +// adjacent is not valid in any language I'm aware of, so I'm punting.
    +// TODO: maybe style special characters inside a regexp as punctuation.
    +
    +
    +  /**
    +   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    +   * matches the union of the sets of strings matched by the input RegExp.
    +   * Since it matches globally, if the input strings have a start-of-input
    +   * anchor (/^.../), it is ignored for the purposes of unioning.
    +   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    +   * @return {RegExp} a global regex.
    +   */
    +  function combinePrefixPatterns(regexs) {
    +    var capturedGroupIndex = 0;
    +  
    +    var needToFoldCase = false;
    +    var ignoreCase = false;
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.ignoreCase) {
    +        ignoreCase = true;
    +      } else if (/[a-z]/i.test(regex.source.replace(
    +                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    +        needToFoldCase = true;
    +        ignoreCase = false;
    +        break;
    +      }
    +    }
    +  
    +    var escapeCharToCodeUnit = {
    +      'b': 8,
    +      't': 9,
    +      'n': 0xa,
    +      'v': 0xb,
    +      'f': 0xc,
    +      'r': 0xd
    +    };
    +  
    +    function decodeEscape(charsetPart) {
    +      var cc0 = charsetPart.charCodeAt(0);
    +      if (cc0 !== 92 /* \\ */) {
    +        return cc0;
    +      }
    +      var c1 = charsetPart.charAt(1);
    +      cc0 = escapeCharToCodeUnit[c1];
    +      if (cc0) {
    +        return cc0;
    +      } else if ('0' <= c1 && c1 <= '7') {
    +        return parseInt(charsetPart.substring(1), 8);
    +      } else if (c1 === 'u' || c1 === 'x') {
    +        return parseInt(charsetPart.substring(2), 16);
    +      } else {
    +        return charsetPart.charCodeAt(1);
    +      }
    +    }
    +  
    +    function encodeEscape(charCode) {
    +      if (charCode < 0x20) {
    +        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    +      }
    +      var ch = String.fromCharCode(charCode);
    +      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    +        ch = '\\' + ch;
    +      }
    +      return ch;
    +    }
    +  
    +    function caseFoldCharset(charSet) {
    +      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    +          new RegExp(
    +              '\\\\u[0-9A-Fa-f]{4}'
    +              + '|\\\\x[0-9A-Fa-f]{2}'
    +              + '|\\\\[0-3][0-7]{0,2}'
    +              + '|\\\\[0-7]{1,2}'
    +              + '|\\\\[\\s\\S]'
    +              + '|-'
    +              + '|[^-\\\\]',
    +              'g'));
    +      var groups = [];
    +      var ranges = [];
    +      var inverse = charsetParts[0] === '^';
    +      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    +        var p = charsetParts[i];
    +        if (/\\[bdsw]/i.test(p)) {  // Don't muck with named groups.
    +          groups.push(p);
    +        } else {
    +          var start = decodeEscape(p);
    +          var end;
    +          if (i + 2 < n && '-' === charsetParts[i + 1]) {
    +            end = decodeEscape(charsetParts[i + 2]);
    +            i += 2;
    +          } else {
    +            end = start;
    +          }
    +          ranges.push([start, end]);
    +          // If the range might intersect letters, then expand it.
    +          // This case handling is too simplistic.
    +          // It does not deal with non-latin case folding.
    +          // It works for latin source code identifiers though.
    +          if (!(end < 65 || start > 122)) {
    +            if (!(end < 65 || start > 90)) {
    +              ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    +            }
    +            if (!(end < 97 || start > 122)) {
    +              ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    +            }
    +          }
    +        }
    +      }
    +  
    +      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    +      // -> [[1, 12], [14, 14], [16, 17]]
    +      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    +      var consolidatedRanges = [];
    +      var lastRange = [NaN, NaN];
    +      for (var i = 0; i < ranges.length; ++i) {
    +        var range = ranges[i];
    +        if (range[0] <= lastRange[1] + 1) {
    +          lastRange[1] = Math.max(lastRange[1], range[1]);
    +        } else {
    +          consolidatedRanges.push(lastRange = range);
    +        }
    +      }
    +  
    +      var out = ['['];
    +      if (inverse) { out.push('^'); }
    +      out.push.apply(out, groups);
    +      for (var i = 0; i < consolidatedRanges.length; ++i) {
    +        var range = consolidatedRanges[i];
    +        out.push(encodeEscape(range[0]));
    +        if (range[1] > range[0]) {
    +          if (range[1] + 1 > range[0]) { out.push('-'); }
    +          out.push(encodeEscape(range[1]));
    +        }
    +      }
    +      out.push(']');
    +      return out.join('');
    +    }
    +  
    +    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    +      // Split into character sets, escape sequences, punctuation strings
    +      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    +      // include any of the above.
    +      var parts = regex.source.match(
    +          new RegExp(
    +              '(?:'
    +              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    +              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    +              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    +              + '|\\\\[0-9]+'  // a back-reference or octal escape
    +              + '|\\\\[^ux0-9]'  // other escape sequence
    +              + '|\\(\\?[:!=]'  // start of a non-capturing group
    +              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    +              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    +              + ')',
    +              'g'));
    +      var n = parts.length;
    +  
    +      // Maps captured group numbers to the number they will occupy in
    +      // the output or to -1 if that has not been determined, or to
    +      // undefined if they need not be capturing in the output.
    +      var capturedGroups = [];
    +  
    +      // Walk over and identify back references to build the capturedGroups
    +      // mapping.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          // groups are 1-indexed, so max group index is count of '('
    +          ++groupIndex;
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            capturedGroups[decimalValue] = -1;
    +          }
    +        }
    +      }
    +  
    +      // Renumber groups and reduce capturing groups to non-capturing groups
    +      // where possible.
    +      for (var i = 1; i < capturedGroups.length; ++i) {
    +        if (-1 === capturedGroups[i]) {
    +          capturedGroups[i] = ++capturedGroupIndex;
    +        }
    +      }
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          ++groupIndex;
    +          if (capturedGroups[groupIndex] === undefined) {
    +            parts[i] = '(?:';
    +          }
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            parts[i] = '\\' + capturedGroups[groupIndex];
    +          }
    +        }
    +      }
    +  
    +      // Remove any prefix anchors so that the output will match anywhere.
    +      // ^^ really does mean an anchored match though.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    +      }
    +  
    +      // Expand letters to groups to handle mixing of case-sensitive and
    +      // case-insensitive patterns if necessary.
    +      if (regex.ignoreCase && needToFoldCase) {
    +        for (var i = 0; i < n; ++i) {
    +          var p = parts[i];
    +          var ch0 = p.charAt(0);
    +          if (p.length >= 2 && ch0 === '[') {
    +            parts[i] = caseFoldCharset(p);
    +          } else if (ch0 !== '\\') {
    +            // TODO: handle letters in numeric escapes.
    +            parts[i] = p.replace(
    +                /[a-zA-Z]/g,
    +                function (ch) {
    +                  var cc = ch.charCodeAt(0);
    +                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    +                });
    +          }
    +        }
    +      }
    +  
    +      return parts.join('');
    +    }
    +  
    +    var rewritten = [];
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    +      rewritten.push(
    +          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    +    }
    +  
    +    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    +  }
    +
    +
    +  /**
    +   * Split markup into a string of source code and an array mapping ranges in
    +   * that string to the text nodes in which they appear.
    +   *
    +   * <p>
    +   * The HTML DOM structure:</p>
    +   * <pre>
    +   * (Element   "p"
    +   *   (Element "b"
    +   *     (Text  "print "))       ; #1
    +   *   (Text    "'Hello '")      ; #2
    +   *   (Element "br")            ; #3
    +   *   (Text    "  + 'World';")) ; #4
    +   * </pre>
    +   * <p>
    +   * corresponds to the HTML
    +   * {@code <p><b>print </b>'Hello '<br>  + 'World';</p>}.</p>
    +   *
    +   * <p>
    +   * It will produce the output:</p>
    +   * <pre>
    +   * {
    +   *   sourceCode: "print 'Hello '\n  + 'World';",
    +   *   //                 1         2
    +   *   //       012345678901234 5678901234567
    +   *   spans: [0, #1, 6, #2, 14, #3, 15, #4]
    +   * }
    +   * </pre>
    +   * <p>
    +   * where #1 is a reference to the {@code "print "} text node above, and so
    +   * on for the other text nodes.
    +   * </p>
    +   *
    +   * <p>
    +   * The {@code} spans array is an array of pairs.  Even elements are the start
    +   * indices of substrings, and odd elements are the text nodes (or BR elements)
    +   * that contain the text for those substrings.
    +   * Substrings continue until the next index or the end of the source.
    +   * </p>
    +   *
    +   * @param {Node} node an HTML DOM subtree containing source-code.
    +   * @return {Object} source code and the text nodes in which they occur.
    +   */
    +  function extractSourceSpans(node) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +  
    +    var chunks = [];
    +    var length = 0;
    +    var spans = [];
    +    var k = 0;
    +  
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +  
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { return; }
    +          for (var child = node.firstChild; child; child = child.nextSibling) {
    +            walk(child);
    +          }
    +          var nodeName = node.nodeName;
    +          if ('BR' === nodeName || 'LI' === nodeName) {
    +            chunks[k] = '\n';
    +            spans[k << 1] = length++;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          var text = node.nodeValue;
    +          if (text.length) {
    +            if (!isPreformatted) {
    +              text = text.replace(/[ \t\r\n]+/g, ' ');
    +            } else {
    +              text = text.replace(/\r\n?/g, '\n');  // Normalize newlines.
    +            }
    +            // TODO: handle tabs here?
    +            chunks[k] = text;
    +            spans[k << 1] = length;
    +            length += text.length;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +      }
    +    }
    +  
    +    walk(node);
    +  
    +    return {
    +      sourceCode: chunks.join('').replace(/\n$/, ''),
    +      spans: spans
    +    };
    +  }
    +
    +
    +  /**
    +   * Apply the given language handler to sourceCode and add the resulting
    +   * decorations to out.
    +   * @param {number} basePos the index of sourceCode within the chunk of source
    +   *    whose decorations are already present on out.
    +   */
    +  function appendDecorations(basePos, sourceCode, langHandler, out) {
    +    if (!sourceCode) { return; }
    +    var job = {
    +      sourceCode: sourceCode,
    +      basePos: basePos
    +    };
    +    langHandler(job);
    +    out.push.apply(out, job.decorations);
    +  }
    +
    +  var notWs = /\S/;
    +
    +  /**
    +   * Given an element, if it contains only one child element and any text nodes
    +   * it contains contain only space characters, return the sole child element.
    +   * Otherwise returns undefined.
    +   * <p>
    +   * This is meant to return the CODE element in {@code <pre><code ...>} when
    +   * there is a single child element that contains all the non-space textual
    +   * content, but not to return anything where there are multiple child elements
    +   * as in {@code <pre><code>...</code><code>...</code></pre>} or when there
    +   * is textual content.
    +   */
    +  function childContentWrapper(element) {
    +    var wrapper = undefined;
    +    for (var c = element.firstChild; c; c = c.nextSibling) {
    +      var type = c.nodeType;
    +      wrapper = (type === 1)  // Element Node
    +          ? (wrapper ? element : c)
    +          : (type === 3)  // Text Node
    +          ? (notWs.test(c.nodeValue) ? element : wrapper)
    +          : wrapper;
    +    }
    +    return wrapper === element ? undefined : wrapper;
    +  }
    +
    +  /** Given triples of [style, pattern, context] returns a lexing function,
    +    * The lexing function interprets the patterns to find token boundaries and
    +    * returns a decoration list of the form
    +    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    +    * where index_n is an index into the sourceCode, and style_n is a style
    +    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    +    * all characters in sourceCode[index_n-1:index_n].
    +    *
    +    * The stylePatterns is a list whose elements have the form
    +    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    +    *
    +    * Style is a style constant like PR_PLAIN, or can be a string of the
    +    * form 'lang-FOO', where FOO is a language extension describing the
    +    * language of the portion of the token in $1 after pattern executes.
    +    * E.g., if style is 'lang-lisp', and group 1 contains the text
    +    * '(hello (world))', then that portion of the token will be passed to the
    +    * registered lisp handler for formatting.
    +    * The text before and after group 1 will be restyled using this decorator
    +    * so decorators should take care that this doesn't result in infinite
    +    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    +    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    +    * '<script>foo()<\/script>', which would cause the current decorator to
    +    * be called with '<script>' which would not match the same rule since
    +    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    +    * the generic tag rule.  The handler registered for the 'js' extension would
    +    * then be called with 'foo()', and finally, the current decorator would
    +    * be called with '<\/script>' which would not match the original rule and
    +    * so the generic tag rule would identify it as a tag.
    +    *
    +    * Pattern must only match prefixes, and if it matches a prefix, then that
    +    * match is considered a token with the same style.
    +    *
    +    * Context is applied to the last non-whitespace, non-comment token
    +    * recognized.
    +    *
    +    * Shortcut is an optional string of characters, any of which, if the first
    +    * character, gurantee that this pattern and only this pattern matches.
    +    *
    +    * @param {Array} shortcutStylePatterns patterns that always start with
    +    *   a known character.  Must have a shortcut string.
    +    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    +    *   order if the shortcut ones fail.  May have shortcuts.
    +    *
    +    * @return {function (Object)} a
    +    *   function that takes source code and returns a list of decorations.
    +    */
    +  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    +    var shortcuts = {};
    +    var tokenizer;
    +    (function () {
    +      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    +      var allRegexs = [];
    +      var regexKeys = {};
    +      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    +        var patternParts = allPatterns[i];
    +        var shortcutChars = patternParts[3];
    +        if (shortcutChars) {
    +          for (var c = shortcutChars.length; --c >= 0;) {
    +            shortcuts[shortcutChars.charAt(c)] = patternParts;
    +          }
    +        }
    +        var regex = patternParts[1];
    +        var k = '' + regex;
    +        if (!regexKeys.hasOwnProperty(k)) {
    +          allRegexs.push(regex);
    +          regexKeys[k] = null;
    +        }
    +      }
    +      allRegexs.push(/[\0-\uffff]/);
    +      tokenizer = combinePrefixPatterns(allRegexs);
    +    })();
    +
    +    var nPatterns = fallthroughStylePatterns.length;
    +
    +    /**
    +     * Lexes job.sourceCode and produces an output array job.decorations of
    +     * style classes preceded by the position at which they start in
    +     * job.sourceCode in order.
    +     *
    +     * @param {Object} job an object like <pre>{
    +     *    sourceCode: {string} sourceText plain text,
    +     *    basePos: {int} position of job.sourceCode in the larger chunk of
    +     *        sourceCode.
    +     * }</pre>
    +     */
    +    var decorate = function (job) {
    +      var sourceCode = job.sourceCode, basePos = job.basePos;
    +      /** Even entries are positions in source in ascending order.  Odd enties
    +        * are style markers (e.g., PR_COMMENT) that run from that position until
    +        * the end.
    +        * @type {Array.<number|string>}
    +        */
    +      var decorations = [basePos, PR_PLAIN];
    +      var pos = 0;  // index into sourceCode
    +      var tokens = sourceCode.match(tokenizer) || [];
    +      var styleCache = {};
    +
    +      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    +        var token = tokens[ti];
    +        var style = styleCache[token];
    +        var match = void 0;
    +
    +        var isEmbedded;
    +        if (typeof style === 'string') {
    +          isEmbedded = false;
    +        } else {
    +          var patternParts = shortcuts[token.charAt(0)];
    +          if (patternParts) {
    +            match = token.match(patternParts[1]);
    +            style = patternParts[0];
    +          } else {
    +            for (var i = 0; i < nPatterns; ++i) {
    +              patternParts = fallthroughStylePatterns[i];
    +              match = token.match(patternParts[1]);
    +              if (match) {
    +                style = patternParts[0];
    +                break;
    +              }
    +            }
    +
    +            if (!match) {  // make sure that we make progress
    +              style = PR_PLAIN;
    +            }
    +          }
    +
    +          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    +          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    +            isEmbedded = false;
    +            style = PR_SOURCE;
    +          }
    +
    +          if (!isEmbedded) { styleCache[token] = style; }
    +        }
    +
    +        var tokenStart = pos;
    +        pos += token.length;
    +
    +        if (!isEmbedded) {
    +          decorations.push(basePos + tokenStart, style);
    +        } else {  // Treat group 1 as an embedded block of source code.
    +          var embeddedSource = match[1];
    +          var embeddedSourceStart = token.indexOf(embeddedSource);
    +          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    +          if (match[2]) {
    +            // If embeddedSource can be blank, then it would match at the
    +            // beginning which would cause us to infinitely recurse on the
    +            // entire token, so we catch the right context in match[2].
    +            embeddedSourceEnd = token.length - match[2].length;
    +            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    +          }
    +          var lang = style.substring(5);
    +          // Decorate the left of the embedded source
    +          appendDecorations(
    +              basePos + tokenStart,
    +              token.substring(0, embeddedSourceStart),
    +              decorate, decorations);
    +          // Decorate the embedded source
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceStart,
    +              embeddedSource,
    +              langHandlerForExtension(lang, embeddedSource),
    +              decorations);
    +          // Decorate the right of the embedded section
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceEnd,
    +              token.substring(embeddedSourceEnd),
    +              decorate, decorations);
    +        }
    +      }
    +      job.decorations = decorations;
    +    };
    +    return decorate;
    +  }
    +
    +  /** returns a function that produces a list of decorations from source text.
    +    *
    +    * This code treats ", ', and ` as string delimiters, and \ as a string
    +    * escape.  It does not recognize perl's qq() style strings.
    +    * It has no special handling for double delimiter escapes as in basic, or
    +    * the tripled delimiters used in python, but should work on those regardless
    +    * although in those cases a single string literal may be broken up into
    +    * multiple adjacent string literals.
    +    *
    +    * It recognizes C, C++, and shell style comments.
    +    *
    +    * @param {Object} options a set of optional parameters.
    +    * @return {function (Object)} a function that examines the source code
    +    *     in the input job and builds the decoration list.
    +    */
    +  function sourceDecorator(options) {
    +    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    +    if (options['tripleQuotedStrings']) {
    +      // '''multi-line-string''', 'single-line-string', and double-quoted
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    +           null, '\'"']);
    +    } else if (options['multiLineStrings']) {
    +      // 'multi-line-string', "multi-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    +           null, '\'"`']);
    +    } else {
    +      // 'single-line-string', "single-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,
    +           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    +           null, '"\'']);
    +    }
    +    if (options['verbatimStrings']) {
    +      // verbatim-string-literal production from the C# grammar.  See issue 93.
    +      fallthroughStylePatterns.push(
    +          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    +    }
    +    var hc = options['hashComments'];
    +    if (hc) {
    +      if (options['cStyleComments']) {
    +        if (hc > 1) {  // multiline hash comments
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']);
    +        } else {
    +          // Stop C preprocessor declarations at an unclosed open comment
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    +               null, '#']);
    +        }
    +        fallthroughStylePatterns.push(
    +            [PR_STRING,
    +             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    +             null]);
    +      } else {
    +        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    +      }
    +    }
    +    if (options['cStyleComments']) {
    +      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    +      fallthroughStylePatterns.push(
    +          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    +    }
    +    if (options['regexLiterals']) {
    +      /**
    +       * @const
    +       */
    +      var REGEX_LITERAL = (
    +          // A regular expression literal starts with a slash that is
    +          // not followed by * or / so that it is not confused with
    +          // comments.
    +          '/(?=[^/*])'
    +          // and then contains any number of raw characters,
    +          + '(?:[^/\\x5B\\x5C]'
    +          // escape sequences (\x5C),
    +          +    '|\\x5C[\\s\\S]'
    +          // or non-nesting character sets (\x5B\x5D);
    +          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    +          // finally closed by a /.
    +          + '/');
    +      fallthroughStylePatterns.push(
    +          ['lang-regex',
    +           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    +           ]);
    +    }
    +
    +    var types = options['types'];
    +    if (types) {
    +      fallthroughStylePatterns.push([PR_TYPE, types]);
    +    }
    +
    +    var keywords = ("" + options['keywords']).replace(/^ | $/g, '');
    +    if (keywords.length) {
    +      fallthroughStylePatterns.push(
    +          [PR_KEYWORD,
    +           new RegExp('^(?:' + keywords.replace(/[\s,]+/g, '|') + ')\\b'),
    +           null]);
    +    }
    +
    +    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    +    fallthroughStylePatterns.push(
    +        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    +        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_TYPE,        /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/, null],
    +        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_LITERAL,
    +         new RegExp(
    +             '^(?:'
    +             // A hex number
    +             + '0x[a-f0-9]+'
    +             // or an octal or decimal number,
    +             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    +             // possibly in scientific notation
    +             + '(?:e[+\\-]?\\d+)?'
    +             + ')'
    +             // with an optional modifier like UL for unsigned long
    +             + '[a-z]*', 'i'),
    +         null, '0123456789'],
    +        // Don't treat escaped quotes in bash as starting strings.  See issue 144.
    +        [PR_PLAIN,       /^\\[\s\S]?/, null],
    +        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null]);
    +
    +    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    +  }
    +
    +  var decorateSource = sourceDecorator({
    +        'keywords': ALL_KEYWORDS,
    +        'hashComments': true,
    +        'cStyleComments': true,
    +        'multiLineStrings': true,
    +        'regexLiterals': true
    +      });
    +
    +  /**
    +   * Given a DOM subtree, wraps it in a list, and puts each line into its own
    +   * list item.
    +   *
    +   * @param {Node} node modified in place.  Its content is pulled into an
    +   *     HTMLOListElement, and each line is moved into a separate list item.
    +   *     This requires cloning elements, so the input might not have unique
    +   *     IDs after numbering.
    +   */
    +  function numberLines(node, opt_startLineNum) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +    var lineBreak = /\r\n?|\n/;
    +  
    +    var document = node.ownerDocument;
    +  
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    // If it's preformatted, then we need to split lines on line breaks
    +    // in addition to <BR>s.
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +  
    +    var li = document.createElement('LI');
    +    while (node.firstChild) {
    +      li.appendChild(node.firstChild);
    +    }
    +    // An array of lines.  We split below, so this is initialized to one
    +    // un-split line.
    +    var listItems = [li];
    +  
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { break; }
    +          if ('BR' === node.nodeName) {
    +            breakAfter(node);
    +            // Discard the <BR> since it is now flush against a </LI>.
    +            if (node.parentNode) {
    +              node.parentNode.removeChild(node);
    +            }
    +          } else {
    +            for (var child = node.firstChild; child; child = child.nextSibling) {
    +              walk(child);
    +            }
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          if (isPreformatted) {
    +            var text = node.nodeValue;
    +            var match = text.match(lineBreak);
    +            if (match) {
    +              var firstLine = text.substring(0, match.index);
    +              node.nodeValue = firstLine;
    +              var tail = text.substring(match.index + match[0].length);
    +              if (tail) {
    +                var parent = node.parentNode;
    +                parent.insertBefore(
    +                    document.createTextNode(tail), node.nextSibling);
    +              }
    +              breakAfter(node);
    +              if (!firstLine) {
    +                // Don't leave blank text nodes in the DOM.
    +                node.parentNode.removeChild(node);
    +              }
    +            }
    +          }
    +          break;
    +      }
    +    }
    +  
    +    // Split a line after the given node.
    +    function breakAfter(lineEndNode) {
    +      // If there's nothing to the right, then we can skip ending the line
    +      // here, and move root-wards since splitting just before an end-tag
    +      // would require us to create a bunch of empty copies.
    +      while (!lineEndNode.nextSibling) {
    +        lineEndNode = lineEndNode.parentNode;
    +        if (!lineEndNode) { return; }
    +      }
    +  
    +      function breakLeftOf(limit, copy) {
    +        // Clone shallowly if this node needs to be on both sides of the break.
    +        var rightSide = copy ? limit.cloneNode(false) : limit;
    +        var parent = limit.parentNode;
    +        if (parent) {
    +          // We clone the parent chain.
    +          // This helps us resurrect important styling elements that cross lines.
    +          // E.g. in <i>Foo<br>Bar</i>
    +          // should be rewritten to <li><i>Foo</i></li><li><i>Bar</i></li>.
    +          var parentClone = breakLeftOf(parent, 1);
    +          // Move the clone and everything to the right of the original
    +          // onto the cloned parent.
    +          var next = limit.nextSibling;
    +          parentClone.appendChild(rightSide);
    +          for (var sibling = next; sibling; sibling = next) {
    +            next = sibling.nextSibling;
    +            parentClone.appendChild(sibling);
    +          }
    +        }
    +        return rightSide;
    +      }
    +  
    +      var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0);
    +  
    +      // Walk the parent chain until we reach an unattached LI.
    +      for (var parent;
    +           // Check nodeType since IE invents document fragments.
    +           (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {
    +        copiedListItem = parent;
    +      }
    +      // Put it on the list of lines for later processing.
    +      listItems.push(copiedListItem);
    +    }
    +  
    +    // Split lines while there are lines left to split.
    +    for (var i = 0;  // Number of lines that have been split so far.
    +         i < listItems.length;  // length updated by breakAfter calls.
    +         ++i) {
    +      walk(listItems[i]);
    +    }
    +  
    +    // Make sure numeric indices show correctly.
    +    if (opt_startLineNum === (opt_startLineNum|0)) {
    +      listItems[0].setAttribute('value', opt_startLineNum);
    +    }
    +  
    +    var ol = document.createElement('OL');
    +    ol.className = 'linenums';
    +    var offset = Math.max(0, ((opt_startLineNum - 1 /* zero index */)) | 0) || 0;
    +    for (var i = 0, n = listItems.length; i < n; ++i) {
    +      li = listItems[i];
    +      // Stick a class on the LIs so that stylesheets can
    +      // color odd/even rows, or any other row pattern that
    +      // is co-prime with 10.
    +      li.className = 'L' + ((i + offset) % 10);
    +      if (!li.firstChild) {
    +        li.appendChild(document.createTextNode('\xA0'));
    +      }
    +      ol.appendChild(li);
    +    }
    +  
    +    node.appendChild(ol);
    +  }
    +
    +  /**
    +   * Breaks {@code job.sourceCode} around style boundaries in
    +   * {@code job.decorations} and modifies {@code job.sourceNode} in place.
    +   * @param {Object} job like <pre>{
    +   *    sourceCode: {string} source as plain text,
    +   *    spans: {Array.<number|Node>} alternating span start indices into source
    +   *       and the text node or element (e.g. {@code <BR>}) corresponding to that
    +   *       span.
    +   *    decorations: {Array.<number|string} an array of style classes preceded
    +   *       by the position at which they start in job.sourceCode in order
    +   * }</pre>
    +   * @private
    +   */
    +  function recombineTagsAndDecorations(job) {
    +    var isIE = /\bMSIE\b/.test(navigator.userAgent);
    +    var newlineRe = /\n/g;
    +  
    +    var source = job.sourceCode;
    +    var sourceLength = source.length;
    +    // Index into source after the last code-unit recombined.
    +    var sourceIndex = 0;
    +  
    +    var spans = job.spans;
    +    var nSpans = spans.length;
    +    // Index into spans after the last span which ends at or before sourceIndex.
    +    var spanIndex = 0;
    +  
    +    var decorations = job.decorations;
    +    var nDecorations = decorations.length;
    +    // Index into decorations after the last decoration which ends at or before
    +    // sourceIndex.
    +    var decorationIndex = 0;
    +  
    +    // Remove all zero-length decorations.
    +    decorations[nDecorations] = sourceLength;
    +    var decPos, i;
    +    for (i = decPos = 0; i < nDecorations;) {
    +      if (decorations[i] !== decorations[i + 2]) {
    +        decorations[decPos++] = decorations[i++];
    +        decorations[decPos++] = decorations[i++];
    +      } else {
    +        i += 2;
    +      }
    +    }
    +    nDecorations = decPos;
    +  
    +    // Simplify decorations.
    +    for (i = decPos = 0; i < nDecorations;) {
    +      var startPos = decorations[i];
    +      // Conflate all adjacent decorations that use the same style.
    +      var startDec = decorations[i + 1];
    +      var end = i + 2;
    +      while (end + 2 <= nDecorations && decorations[end + 1] === startDec) {
    +        end += 2;
    +      }
    +      decorations[decPos++] = startPos;
    +      decorations[decPos++] = startDec;
    +      i = end;
    +    }
    +  
    +    nDecorations = decorations.length = decPos;
    +  
    +    var decoration = null;
    +    while (spanIndex < nSpans) {
    +      var spanStart = spans[spanIndex];
    +      var spanEnd = spans[spanIndex + 2] || sourceLength;
    +  
    +      var decStart = decorations[decorationIndex];
    +      var decEnd = decorations[decorationIndex + 2] || sourceLength;
    +  
    +      var end = Math.min(spanEnd, decEnd);
    +  
    +      var textNode = spans[spanIndex + 1];
    +      var styledText;
    +      if (textNode.nodeType !== 1  // Don't muck with <BR>s or <LI>s
    +          // Don't introduce spans around empty text nodes.
    +          && (styledText = source.substring(sourceIndex, end))) {
    +        // This may seem bizarre, and it is.  Emitting LF on IE causes the
    +        // code to display with spaces instead of line breaks.
    +        // Emitting Windows standard issue linebreaks (CRLF) causes a blank
    +        // space to appear at the beginning of every line but the first.
    +        // Emitting an old Mac OS 9 line separator makes everything spiffy.
    +        if (isIE) { styledText = styledText.replace(newlineRe, '\r'); }
    +        textNode.nodeValue = styledText;
    +        var document = textNode.ownerDocument;
    +        var span = document.createElement('SPAN');
    +        span.className = decorations[decorationIndex + 1];
    +        var parentNode = textNode.parentNode;
    +        parentNode.replaceChild(span, textNode);
    +        span.appendChild(textNode);
    +        if (sourceIndex < spanEnd) {  // Split off a text node.
    +          spans[spanIndex + 1] = textNode
    +              // TODO: Possibly optimize by using '' if there's no flicker.
    +              = document.createTextNode(source.substring(end, spanEnd));
    +          parentNode.insertBefore(textNode, span.nextSibling);
    +        }
    +      }
    +  
    +      sourceIndex = end;
    +  
    +      if (sourceIndex >= spanEnd) {
    +        spanIndex += 2;
    +      }
    +      if (sourceIndex >= decEnd) {
    +        decorationIndex += 2;
    +      }
    +    }
    +  }
    +
    +
    +  /** Maps language-specific file extensions to handlers. */
    +  var langHandlerRegistry = {};
    +  /** Register a language handler for the given file extensions.
    +    * @param {function (Object)} handler a function from source code to a list
    +    *      of decorations.  Takes a single argument job which describes the
    +    *      state of the computation.   The single parameter has the form
    +    *      {@code {
    +    *        sourceCode: {string} as plain text.
    +    *        decorations: {Array.<number|string>} an array of style classes
    +    *                     preceded by the position at which they start in
    +    *                     job.sourceCode in order.
    +    *                     The language handler should assigned this field.
    +    *        basePos: {int} the position of source in the larger source chunk.
    +    *                 All positions in the output decorations array are relative
    +    *                 to the larger source chunk.
    +    *      } }
    +    * @param {Array.<string>} fileExtensions
    +    */
    +  function registerLangHandler(handler, fileExtensions) {
    +    for (var i = fileExtensions.length; --i >= 0;) {
    +      var ext = fileExtensions[i];
    +      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    +        langHandlerRegistry[ext] = handler;
    +      } else if (window['console']) {
    +        console['warn']('cannot override language handler %s', ext);
    +      }
    +    }
    +  }
    +  function langHandlerForExtension(extension, source) {
    +    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    +      // Treat it as markup if the first non whitespace character is a < and
    +      // the last non-whitespace character is a >.
    +      extension = /^\s*</.test(source)
    +          ? 'default-markup'
    +          : 'default-code';
    +    }
    +    return langHandlerRegistry[extension];
    +  }
    +  registerLangHandler(decorateSource, ['default-code']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [],
    +          [
    +           [PR_PLAIN,       /^[^<?]+/],
    +           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    +           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    +           // Unescaped content in an unknown language
    +           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    +           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    +           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    +           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    +           // Unescaped content in javascript.  (Or possibly vbscript).
    +           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    +           // Contains unescaped stylesheet content
    +           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    +           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    +          ]),
    +      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [
    +           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    +           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    +           ],
    +          [
    +           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    +           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    +           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    +           [PR_PUNCTUATION,  /^[=<>\/]+/],
    +           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    +           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    +           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    +           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    +           ]),
    +      ['in.tag']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CPP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'types': C_TYPES
    +        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': 'null,true,false'
    +        }), ['json']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CSHARP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'verbatimStrings': true,
    +          'types': C_TYPES
    +        }), ['cs']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JAVA_KEYWORDS,
    +          'cStyleComments': true
    +        }), ['java']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': SH_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true
    +        }), ['bsh', 'csh', 'sh']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PYTHON_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'tripleQuotedStrings': true
    +        }), ['cv', 'py']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PERL_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['perl', 'pl', 'pm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': RUBY_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['rb']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JSCRIPT_KEYWORDS,
    +          'cStyleComments': true,
    +          'regexLiterals': true
    +        }), ['js']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': COFFEE_KEYWORDS,
    +          'hashComments': 3,  // ### style block comments
    +          'cStyleComments': true,
    +          'multilineStrings': true,
    +          'tripleQuotedStrings': true,
    +          'regexLiterals': true
    +        }), ['coffee']);
    +  registerLangHandler(createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    +
    +  function applyDecorator(job) {
    +    var opt_langExtension = job.langExtension;
    +
    +    try {
    +      // Extract tags, and convert the source code to plain text.
    +      var sourceAndSpans = extractSourceSpans(job.sourceNode);
    +      /** Plain text. @type {string} */
    +      var source = sourceAndSpans.sourceCode;
    +      job.sourceCode = source;
    +      job.spans = sourceAndSpans.spans;
    +      job.basePos = 0;
    +
    +      // Apply the appropriate language handler
    +      langHandlerForExtension(opt_langExtension, source)(job);
    +
    +      // Integrate the decorations and tags back into the source code,
    +      // modifying the sourceNode in place.
    +      recombineTagsAndDecorations(job);
    +    } catch (e) {
    +      if ('console' in window) {
    +        console['log'](e && e['stack'] ? e['stack'] : e);
    +      }
    +    }
    +  }
    +
    +  /**
    +   * @param sourceCodeHtml {string} The HTML to pretty print.
    +   * @param opt_langExtension {string} The language name to use.
    +   *     Typically, a filename extension like 'cpp' or 'java'.
    +   * @param opt_numberLines {number|boolean} True to number lines,
    +   *     or the 1-indexed number of the first line in sourceCodeHtml.
    +   */
    +  function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {
    +    var container = document.createElement('PRE');
    +    // This could cause images to load and onload listeners to fire.
    +    // E.g. <img onerror="alert(1337)" src="nosuchimage.png">.
    +    // We assume that the inner HTML is from a trusted source.
    +    container.innerHTML = sourceCodeHtml;
    +    if (opt_numberLines) {
    +      numberLines(container, opt_numberLines);
    +    }
    +
    +    var job = {
    +      langExtension: opt_langExtension,
    +      numberLines: opt_numberLines,
    +      sourceNode: container
    +    };
    +    applyDecorator(job);
    +    return container.innerHTML;
    +  }
    +
    +  function prettyPrint(opt_whenDone) {
    +    function byTagName(tn) { return document.getElementsByTagName(tn); }
    +    // fetch a list of nodes to rewrite
    +    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    +    var elements = [];
    +    for (var i = 0; i < codeSegments.length; ++i) {
    +      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    +        elements.push(codeSegments[i][j]);
    +      }
    +    }
    +    codeSegments = null;
    +
    +    var clock = Date;
    +    if (!clock['now']) {
    +      clock = { 'now': function () { return +(new Date); } };
    +    }
    +
    +    // The loop is broken into a series of continuations to make sure that we
    +    // don't make the browser unresponsive when rewriting a large page.
    +    var k = 0;
    +    var prettyPrintingJob;
    +
    +    var langExtensionRe = /\blang(?:uage)?-([\w.]+)(?!\S)/;
    +    var prettyPrintRe = /\bprettyprint\b/;
    +
    +    function doWork() {
    +      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    +                     clock['now']() + 250 /* ms */ :
    +                     Infinity);
    +      for (; k < elements.length && clock['now']() < endTime; k++) {
    +        var cs = elements[k];
    +        var className = cs.className;
    +        if (className.indexOf('prettyprint') >= 0) {
    +          // If the classes includes a language extensions, use it.
    +          // Language extensions can be specified like
    +          //     <pre class="prettyprint lang-cpp">
    +          // the language extension "cpp" is used to find a language handler as
    +          // passed to PR.registerLangHandler.
    +          // HTML5 recommends that a language be specified using "language-"
    +          // as the prefix instead.  Google Code Prettify supports both.
    +          // http://dev.w3.org/html5/spec-author-view/the-code-element.html
    +          var langExtension = className.match(langExtensionRe);
    +          // Support <pre class="prettyprint"><code class="language-c">
    +          var wrapper;
    +          if (!langExtension && (wrapper = childContentWrapper(cs))
    +              && "CODE" === wrapper.tagName) {
    +            langExtension = wrapper.className.match(langExtensionRe);
    +          }
    +
    +          if (langExtension) {
    +            langExtension = langExtension[1];
    +          }
    +
    +          // make sure this is not nested in an already prettified element
    +          var nested = false;
    +          for (var p = cs.parentNode; p; p = p.parentNode) {
    +            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    +                 p.tagName === 'xmp') &&
    +                p.className && p.className.indexOf('prettyprint') >= 0) {
    +              nested = true;
    +              break;
    +            }
    +          }
    +          if (!nested) {
    +            // Look for a class like linenums or linenums:<n> where <n> is the
    +            // 1-indexed number of the first line.
    +            var lineNums = cs.className.match(/\blinenums\b(?::(\d+))?/);
    +            lineNums = lineNums
    +                  ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true
    +                  : false;
    +            if (lineNums) { numberLines(cs, lineNums); }
    +
    +            // do the pretty printing
    +            prettyPrintingJob = {
    +              langExtension: langExtension,
    +              sourceNode: cs,
    +              numberLines: lineNums
    +            };
    +            applyDecorator(prettyPrintingJob);
    +          }
    +        }
    +      }
    +      if (k < elements.length) {
    +        // finish up in a continuation
    +        setTimeout(doWork, 250);
    +      } else if (opt_whenDone) {
    +        opt_whenDone();
    +      }
    +    }
    +
    +    doWork();
    +  }
    +
    +   /**
    +    * Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    +    * {@code class=prettyprint} and prettify them.
    +    *
    +    * @param {Function?} opt_whenDone if specified, called when the last entry
    +    *     has been finished.
    +    */
    +  window['prettyPrintOne'] = prettyPrintOne;
    +   /**
    +    * Pretty print a chunk of code.
    +    *
    +    * @param {string} sourceCodeHtml code as html
    +    * @return {string} code as html, but prettier
    +    */
    +  window['prettyPrint'] = prettyPrint;
    +   /**
    +    * Contains functions for creating and registering new language handlers.
    +    * @type {Object}
    +    */
    +  window['PR'] = {
    +        'createSimpleLexer': createSimpleLexer,
    +        'registerLangHandler': registerLangHandler,
    +        'sourceDecorator': sourceDecorator,
    +        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    +        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    +        'PR_COMMENT': PR_COMMENT,
    +        'PR_DECLARATION': PR_DECLARATION,
    +        'PR_KEYWORD': PR_KEYWORD,
    +        'PR_LITERAL': PR_LITERAL,
    +        'PR_NOCODE': PR_NOCODE,
    +        'PR_PLAIN': PR_PLAIN,
    +        'PR_PUNCTUATION': PR_PUNCTUATION,
    +        'PR_SOURCE': PR_SOURCE,
    +        'PR_STRING': PR_STRING,
    +        'PR_TAG': PR_TAG,
    +        'PR_TYPE': PR_TYPE
    +      };
    +})();
    diff --git a/documentation/better-listview/data/style.css b/documentation/better-listview/data/style.css
    new file mode 100644
    index 0000000..f743270
    --- /dev/null
    +++ b/documentation/better-listview/data/style.css
    @@ -0,0 +1,241 @@
    +h1
    +{
    +	text-align: center;
    +	font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    +	font-size: xx-large;
    +	padding-bottom: 1em;
    +	padding-top: 1em;
    +}
    +
    +h2
    +{
    +	text-align: center;
    +	font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    +	font-size: large;
    +	padding-bottom: 1em;
    +	padding-top: 1em;
    +}
    +
    +h3
    +{
    +	text-align: left;
    +	font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    +	font-size: medium;
    +	padding-bottom: 1em;
    +	padding-top: 1em;
    +}
    +
    +p
    +{
    +	font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    +}
    +
    +p.toc-entry
    +{
    +	font-weight:bold;
    +	text-align: center;
    +}
    +
    +p.table-name
    +{
    +	font-weight: bold;
    +	text-align: center;
    +}
    +
    +p.images
    +{
    +	text-align: center;
    +}
    +
    +p.note
    +{
    +	text-align: center;
    +}
    +
    +table
    +{
    +	font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; 
    +}
    +
    +.toc-description
    +{
    +	color: #444444;
    +	font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    +	font-size: small;
    +	font-style: italic;
    +}
    +
    +.code
    +{
    +	color: #006600;
    +	font-family: "Courier New", Courier, monospace;
    +	font-size: medium;
    +}
    +
    +a
    +{
    +	border-bottom: 1px dotted #0000ff;
    +	color: blue;
    +	font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    +	text-decoration: none;
    +	text-align: right;
    +}
    +
    +ul
    +{
    +	font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    +}
    +
    +pre
    +{
    +	background-color: #fafafa;
    +	border: 1px dotted #c0c0c0;
    +	color: black;
    +	font-family: "Courier New", Courier, monospace;
    +	line-height: 1.1em;
    +	margin-left: 2em;
    +	margin-right: 2em;
    +	padding: 0.25em;
    +	text-align: left;
    +	text-indent: 0;
    +	
    +	white-space: pre-wrap;       /* css-3 */
    +	white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
    +	white-space: -pre-wrap;      /* Opera 4-6 */
    +	white-space: -o-pre-wrap;    /* Opera 7 */
    +	word-wrap: break-word;       /* Internet Explorer 5.5+ */
    +}
    +
    +img
    +{
    +	border: 1px solid #c0c0c0;
    +	padding: 4px;
    +	margin: 4px;
    +	vertical-align: middle;
    +}
    +
    +img.small
    +{
    +	vertical-align: middle;
    +}
    +
    +table.navigation
    +{
    +	font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    +	font-size: medium;
    +	font-style: italic;	
    +	width: 100%;
    +}
    +
    +table.footer
    +{
    +	font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    +	font-size: small;
    +	font-style: italic;	
    +	padding-top: 2em;
    +	width: 100%;
    +}
    +
    +table.comparison
    +{
    +	border-collapse: separate;
    +	border-spacing: 1px;
    +	border-style: solid;
    +	border-width: 0px;
    +	font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    +	font-size: small;
    +	text-align: center;
    +	width: 100%;
    +}
    +
    +td.navigation-previous
    +{
    +	width: 30%;
    +}
    +
    +td.navigation-index
    +{
    +	text-align: center;
    +	width: 40%;
    +}
    +
    +td.navigation-next
    +{
    +	text-align: right;
    +	width: 30%;
    +}
    +
    +td.footer-title
    +{
    +	width: 50%;
    +}
    +
    +td.footer-copyright
    +{
    +	text-align: right;
    +	width: 50%;
    +}
    +
    +td.comparison-line-even
    +{
    +	background-color: #F0F0F0;
    +	text-align: left;
    +}
    +
    +td.comparison-line-odd
    +{
    +	text-align: left;
    +}
    +
    +td.comparison-yes
    +{
    +	background-color: #CCFFCC;
    +	color: #008000;
    +	text-align: center;
    +	width: 20%;
    +}
    +
    +td.comparison-no
    +{
    +	background-color: #FFCCCC;
    +	color: #800000;
    +	text-align: center;
    +	width: 20%;
    +}
    +
    +td.comparison-other
    +{
    +	width: 20%;
    +}
    +
    +hr.common
    +{
    +	background-color: gray;	
    +	border-width: 0;
    +	color: gray;
    +	height: 2px;
    +	width: 60%;
    +}
    +
    +.heading-table
    +{
    +	width: 100%;
    +	border: none;
    +	border-spacing: 0;
    +}
    +
    +.heading-table .heading
    +{
    +	width: 1%;
    +	white-space: nowrap;
    +}
    +
    +hr.heading-line
    +{
    +	background-color: #c0c0c0;
    +	border: none;
    +	color: #c0c0c0;
    +	height: 1px;
    +	margin-left: 16px;
    +	padding: 0;
    +}
    \ No newline at end of file
    diff --git a/download/better-listview.html b/download/better-listview.html
    new file mode 100644
    index 0000000..a2223ac
    --- /dev/null
    +++ b/download/better-listview.html
    @@ -0,0 +1,276 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    +<meta name="keywords" content="Better ListView download" />
    +<meta name="description" content="Better ListView download" />
    +<meta name="author" content="Dextronet" />
    +<meta http-equiv="Title" content="Download Better ListView 3.15" />
    +<meta name="copyright" content="(c) 2010-2018 Dextronet" />
    +<meta name="distribution" content="Global" />
    +<meta name="rating" content="General" />
    +<meta name="robots" content="All" />
    +<meta http-equiv="Content-Language" content="en" />
    +<meta name="verify-v1" content="NK0H1gWia1vxGZ2Yhr59gsS0/P2/USBI1DVA18VkzjM=" />
    +<meta name="google-site-verification" content="O7Dwtzu5x_Mob9u98uxqpZ-_wCLGpEkx2IL0UYVQ4ac" />
    +<title>Download Better ListView 3.15</title>
    +<link rel="alternate" type="application/rss+xml" title="Component Owl Feed: Latest releases, news and tips &amp; tricks from our blog" href="../feeds.rss" />
    +<link rel="alternate" type="application/rss+xml" title="Component Owl's Comics: Latest comic strips for developers by Libor Tinka" href="../comics.rss" />
    +    <link href="../stylesheets/base_packaged.css%3F1455269822.css" media="screen" rel="stylesheet" type="text/css" />
    +    
    +  </head>
    +  <body>
    +  
    +    <div class="d-page">
    +      
    +      <script type="text/javascript">
    +//<![CDATA[
    +var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_email":"a valid email","thanks_for_why_uninstall":"Thank you very much for your feedback!","thank_you":"Thank you!","current_email":"valid current email","thanks_for_subscription":"<div class=\"sent-saved-notice\">Thank You for your subscription!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","message":"message","required":"required","download_in_progress":"Your download should be in progress...","your_full_name":"your full name","order_thanks_for_message":"<div class=\"sent-saved-notice\">Thank you very much for your message!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","thanks_for_message":"Thank you very much for your message!<br /><a href="http://www.componentowl.com/download/\&quot;#\"" onclick=\"send_another(); return false;\">Send Another Message</a>"}
    +//]]>
    +</script>
    +
    +<div class="d-header d-placing">
    +  
    +  <ul class="d-menu">
    +    <li class=""><a href="../index.html" class="menu-item">Home</a></li>
    +    <li class=" with-dropdown">
    +      <a href="../better-listview.html" class="menu-item">Products</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 370px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          <div class="dropdown-category">WinForms Components</div>
    +          
    +            
    +            <a href="../better-listview.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-32-1355160256.png?1355135056" /> Better ListView<br /><span class="subline">Ultimate ListView control for .NET</span></a>
    +          
    +            
    +            <a href="../better-thumbnail-browser.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-thumbnail-browser-32-1355160281.png?1355135081" /> Better Thumbnail Browser<br /><span class="subline">Thumbnail loading and browsing control for .NET</span></a>
    +          
    +            
    +            <a href="../better-splitbutton.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-splitbutton-32-1355160307.png?1355135107" /> Better SplitButton<br /><span class="subline">Free customizable dropdown button control</span></a>
    +          
    +            
    +            <a href="../better-listview-express.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-express-32-1355160327.png?1355135127" /> Better ListView Express<br /><span class="subline">Free edition with less features</span></a>
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="">
    +      <a href="../pricing-licensing/better-listview.html" class="menu-item">Purchase</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 330px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          
    +            
    +            <a href="../pricing-licensing/better-listview.html" class="featured-item">Better ListView</a>
    +          
    +        
    +          
    +            
    +            <a href="../pricing-licensing/better-thumbnail-browser.html" class="featured-item">Better Thumbnail Browser</a>
    +          
    +        
    +          
    +            
    +            <a href="../pricing-licensing/better-splitbutton.html">Better SplitButton</a>
    +          
    +        
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class=""><a href="../support.html" class="menu-item">Support</a></li>
    +    <li class=""><a href="../articles.html" class="menu-item">Articles</a></li>
    +    <li class=""><a href="../blog.html" class="menu-item">Blog</a></li>
    +    <li class=""><a href="../comics/43.html" class="menu-item">Comics</a></li>
    +    <li class=""><a href="../about-us.html" class="menu-item">About Us</a></li>
    +  </ul>
    +  <div class="d-logo">
    +    <a href="../index.html" class="logoimg"><img alt="Component Owl" src="../images/componentowl.gif%3F1455269978" /></a>
    +    <g:plusone size="medium" count="false" href="http://www.componentowl.com"></g:plusone>
    +  </div>
    +</div>
    +      
    +      
    +      
    +        <div class="d-placing">
    +          <div class="d-content-wrap">
    +            <div class="download-content" id="download-page">
    +  
    +  <h2>Thank you for downloading <strong>Better ListView 3.15</strong>!</h2>
    +  
    +  <input id="download_url" name="download_url" type="hidden" value="http://www.componentowl.com/betterlistview.exe" />
    +  
    +  <div class="section-info">Your download should begin shortly...</div>
    +  
    +  <p>If the download doesn't start automatically in a few seconds, please use this button:</p>
    +  <form action="../betterlistview.exe" method="post"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="dJeFtbWrARc0arEomU+SG+XtypwJr2F4Kc9v14woStM=" /></div>    <span class="dbtn-c dbtn-hilight" id="send"><span class="dbtn-w"><input class="dbtn" name="commit" type="submit" value="Start Download" /></span></span>
    +  </form>  
    +  <hr />
    +  
    +  <div class="newsletter-ct"><div class="newsletter">
    +  
    +    <h3>Receive <strong>Better ListView News &amp; Updates</strong> via email!</h3>
    +  
    +    <form action="http://www.componentowl.com/subscriptions" class="new_subscription" id="new_subscription" method="post" onsubmit="if (!validate_newsletter_form(this)) return false; jQuery.ajax({data:jQuery.param(jQuery(this).serializeArray()) + '&amp;authenticity_token=' + encodeURIComponent('dJeFtbWrARc0arEomU+SG+XtypwJr2F4Kc9v14woStM='), dataType:'script', type:'post', url:'/subscriptions'}); return false;"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="dJeFtbWrARc0arEomU+SG+XtypwJr2F4Kc9v14woStM=" /></div>      <input id="form_id" name="form_id" type="hidden" value="#new_subscription" />
    +      <div class="field">
    +        <label for="subscription_first_name">First Name</label>
    +        <input class="name stressed" id="subscription_first_name" name="subscription[first_name]" size="30" type="text" />
    +      </div>
    +      <div class="field">
    +        <label for="subscription_email">Your Email</label>
    +        <input class="email stressed" id="subscription_email" name="subscription[email]" size="30" type="text" />
    +      </div>
    +      <input name="subscription[subscription_list_ids][]" type="hidden" value="970100327" />
    +<input name="subscription[subscription_list_ids][]" type="hidden" value="39464128" />
    +<input name="subscription[subscription_list_ids][]" type="hidden" value="1009842129" />
    +      <span class="dbtn-c subscribe" id="send"><span class="dbtn-w"><input class="dbtn" name="commit" type="submit" value="Subscribe" /></span></span>
    +    </form>  </div></div>
    + 
    +</div>
    +          </div>
    +        </div>
    +      
    +      
    +      
    +      <div class="d-footer">
    +  <div class="d-placing">
    +    
    +    <div class="left">
    +      <div class="latest-posts">
    +        <h3 class="latest_from_blog"><a href="../blog.html">Latest From Our Blog</a></h3>
    +        
    +          <h4><a href="../blog/index.html%3Fp=927.html">Activation issues and how to solve them</a></h4>
    +          <div class="post-info">Wednesday, 01 March 2017</div>
    +        
    +          <h4><a href="../blog/index.html%3Fp=921.html">The Three Main Advantages Better ListView has Over the Classic .NET Framework</a></h4>
    +          <div class="post-info">Thursday, 09 February 2017</div>
    +        
    +          <h4><a href="../blog/index.html%3Fp=914.html">BLV and Internet Explorer</a></h4>
    +          <div class="post-info">Sunday, 13 November 2016</div>
    +        
    +          <h4><a href="../blog/index.html%3Fp=906.html">Centering Images in Better ListView Sub-items</a></h4>
    +          <div class="post-info">Wednesday, 06 August 2014</div>
    +        
    +          <h4><a href="../blog/index.html%3Fp=901.html">Sub-item Check Boxes in Better ListView</a></h4>
    +          <div class="post-info">Sunday, 06 July 2014</div>
    +        
    +      </div>
    +      <div class="other-posts"><a href="../blog.html">See more posts &raquo;</a></div>
    +    </div>
    +    
    +    <div class="right">
    +      <div class="news">
    +        <ul class="links">
    +          <li><a href="../feeds.rss" class="rss">Subscribe to our RSS</a></li>
    +          <li><a href="http://twitter.com/ComponentOwl" class="twitter">Follow us on twitter</a></li>
    +        </ul>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="../betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="../betterlistview.exe" onclick="download_email('better-listview');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better SplitButton 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="../bettersplitbutton.exe" onclick="download_email('better-splitbutton');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better Thumbnail Browser 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="../betterthumbnailbrowser.exe" onclick="download_email('better-thumbnail-browser');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item last-item">
    +          <div class="date">08<span>Apr</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.14.0 released!</h4>
    +            <p>
    +              
    +                <a href="../better-listview-express/releases%3Fsince=3.14.0.html">See what's new</a>
    +                or
    +              
    +              <a href="../betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +      </div>
    +    </div>
    +    
    +  </div>
    +  <div class="d-placing">
    +    <hr />
    +    <div class="copy"><div class="social"><a href="../support.html" class="feedback">Contact Us (Feedback)</a> <span>|</span> <a href="../feeds.rss" class="rss">RSS</a> <span>|</span> <a href="http://twitter.com/ComponentOwl" class="twitter">Twitter</a> <span>|</span> <a href="../sitemap.html" class="sitemap">Sitemap</a> <span>|</span> Our <a href="../index.html" class="stdl">task management software</a> that uses Better ListView</div>
    +Copyright &copy; 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our <a href="../eula.html">EULA</a>, <a href="../disclaimer.html">Disclaimer</a> and <a href="../privacy-policy.html">Privacy Policy</a>.<br /></div>
    +  </div>
    +  
    +</div>
    +      
    +    </div>
    +    
    +    <script src="../javascripts/app_packaged.js%3F1455269826" type="text/javascript"></script>
    +    <script type="text/javascript">
    +
    +  var _gaq = _gaq || [];
    +  _gaq.push(['_setAccount', 'UA-16362539-4']);
    +  _gaq.push(['_trackPageview']);
    +
    +  (function() {
    +    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    +    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    +    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    +  })();
    +
    +</script>
    +<script src="http://load.sumome.com/" data-sumo-site-id="854b5e00f297990012cc230023375a00787c0000216621002775a800d79ad500" async="async"></script>
    +    
    +    <!-- Place this tag after the last plusone tag -->
    +    <script type="text/javascript">
    +      (function() {
    +        var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    +        po.src = 'https://apis.google.com/js/plusone.js';
    +        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
    +      })();
    +    </script>
    +  
    +  </body>
    +</html>
    \ No newline at end of file
    diff --git a/eula.html b/eula.html
    new file mode 100644
    index 0000000..d7d6278
    --- /dev/null
    +++ b/eula.html
    @@ -0,0 +1,332 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    +<meta name="keywords" content="Better ListView License, Better ListView EULA, Component Owl EULA, EULA, Component Owl License" />
    +<meta name="description" content="End user license agreement for Component Owl controls and components, including Better ListView." />
    +<meta name="author" content="Dextronet" />
    +<meta http-equiv="Title" content="Component Owl general End User License Agreement" />
    +<meta name="copyright" content="(c) 2010-2018 Dextronet" />
    +<meta name="distribution" content="Global" />
    +<meta name="rating" content="General" />
    +<meta name="robots" content="All" />
    +<meta http-equiv="Content-Language" content="en" />
    +<meta name="verify-v1" content="NK0H1gWia1vxGZ2Yhr59gsS0/P2/USBI1DVA18VkzjM=" />
    +<meta name="google-site-verification" content="O7Dwtzu5x_Mob9u98uxqpZ-_wCLGpEkx2IL0UYVQ4ac" />
    +<title>Component Owl general End User License Agreement</title>
    +<link rel="alternate" type="application/rss+xml" title="Component Owl Feed: Latest releases, news and tips &amp; tricks from our blog" href="feeds.rss" />
    +<link rel="alternate" type="application/rss+xml" title="Component Owl's Comics: Latest comic strips for developers by Libor Tinka" href="comics.rss" />
    +    <link href="stylesheets/base_packaged.css%3F1455269822.css" media="screen" rel="stylesheet" type="text/css" />
    +    
    +  </head>
    +  <body>
    +  
    +    <div class="d-page">
    +      
    +      <script type="text/javascript">
    +//<![CDATA[
    +var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_email":"a valid email","thanks_for_why_uninstall":"Thank you very much for your feedback!","thank_you":"Thank you!","current_email":"valid current email","thanks_for_subscription":"<div class=\"sent-saved-notice\">Thank You for your subscription!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","message":"message","required":"required","download_in_progress":"Your download should be in progress...","your_full_name":"your full name","order_thanks_for_message":"<div class=\"sent-saved-notice\">Thank you very much for your message!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","thanks_for_message":"Thank you very much for your message!<br /><a href="http://www.componentowl.com/\&quot;#\"" onclick=\"send_another(); return false;\">Send Another Message</a>"}
    +//]]>
    +</script>
    +
    +<div class="d-header d-placing">
    +  
    +  <ul class="d-menu">
    +    <li class=""><a href="index.html" class="menu-item">Home</a></li>
    +    <li class=" with-dropdown">
    +      <a href="better-listview.html" class="menu-item">Products</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 370px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          <div class="dropdown-category">WinForms Components</div>
    +          
    +            
    +            <a href="better-listview.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-32-1355160256.png?1355135056" /> Better ListView<br /><span class="subline">Ultimate ListView control for .NET</span></a>
    +          
    +            
    +            <a href="better-thumbnail-browser.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-thumbnail-browser-32-1355160281.png?1355135081" /> Better Thumbnail Browser<br /><span class="subline">Thumbnail loading and browsing control for .NET</span></a>
    +          
    +            
    +            <a href="better-splitbutton.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-splitbutton-32-1355160307.png?1355135107" /> Better SplitButton<br /><span class="subline">Free customizable dropdown button control</span></a>
    +          
    +            
    +            <a href="better-listview-express.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-express-32-1355160327.png?1355135127" /> Better ListView Express<br /><span class="subline">Free edition with less features</span></a>
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="">
    +      <a href="pricing-licensing/better-listview.html" class="menu-item">Purchase</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 330px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-listview.html" class="featured-item">Better ListView</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-thumbnail-browser.html" class="featured-item">Better Thumbnail Browser</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-splitbutton.html">Better SplitButton</a>
    +          
    +        
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="active"><a href="support.html" class="menu-item">Support</a></li>
    +    <li class=""><a href="articles.html" class="menu-item">Articles</a></li>
    +    <li class=""><a href="blog.html" class="menu-item">Blog</a></li>
    +    <li class=""><a href="comics/43.html" class="menu-item">Comics</a></li>
    +    <li class=""><a href="about-us.html" class="menu-item">About Us</a></li>
    +  </ul>
    +  <div class="d-logo">
    +    <a href="index.html" class="logoimg"><img alt="Component Owl" src="images/componentowl.gif%3F1455269978" /></a>
    +    <g:plusone size="medium" count="false" href="http://www.componentowl.com"></g:plusone>
    +  </div>
    +</div>
    +      
    +      
    +      
    +        <div class="d-placing">
    +          <div class="d-content-wrap">
    +            <div class="legal-content">
    +  
    +  
    +  
    +  <h1>Software license agreement (EULA)</h1>
    +  
    +  <p><em><strong>The following license agreement applies to all products published by Component Owl.</strong></em></p>
    +  
    +  <p>Before installing this software on your computer, please carefully read the following terms and conditions.</p>
    +  
    +  <p>If you do not fully accept and agree to these terms, then you are not allowed to install and use this software.</p>
    +
    +  <h2>1. Trialware</h2>
    +  
    +  <p>This Software is distributed as Trialware. It is not free. You may use the Software for a trial period, at no cost to you, to determine if it fits your needs. 
    +    If you decide to use the Software, you must purchase it and pay the applicable fee. You may use the software in your commercial or non-commercial projects 
    +    without purchasing a valid license. The trial version of this software may be used only to determine if the software suits your needs.</p>
    +    
    +  <h2>2. License Grant</h2>
    +  
    +  <p>This is a License between you ("Licensee") and Jiri Novotny ("ComponentOwl.com"). ComponentOwl.com grants to you a non-exclusive license to use the enclosed copy 
    +    of software in accord with the terms set forth in this License Agreement. The software is owned by Jiri Novotny and ComponentOwl.com and protected by copyright laws.</p>
    +
    +  <p>Software is licensed and not sold to you.</p>
    +  
    +  <h2>3. License Permits</h2>
    +  
    +  <p>The software is licensed on per-developer basis. You need a multi-license in order to use the software in projects that more than one developer participates on.
    +    Each developer may use the software on up to 2 machines.</p>
    +  
    +  <h2>4. License Does Not Permit</h2>
    +  
    +  <p>Licenses may not be transferred except with specific written authorization from ComponentOwl.com.</p>
    +  
    +  <p>Licensee may not publicize or distribute any registration code algorithms, information, or license codes used by this software without permission 
    +  of ComponentOwl.com. Licensee may not charge fees for distribution or delivery of the Software without expressed written consent of ComponentOwl.com. 
    +  All granted licenses are non-transferable to other persons outside the organization of licensee.</p>
    +  
    +  <p>Licensee may not decompile, disassemble or reverse engineer this software.</p>
    +  
    +  <p>It's strictly prohibited to sell or rent this software. Full version may be used only by the person to whom it has been licensed to.</p>
    +  
    +  <p>It's strictly prohibited to distribute source code (full or partial) of this software under any circumstances.</p>
    +  
    +  <p>Licensee may not under any circumstances distribute:</p>
    +  
    +  <ul class="common">
    +    <li>Stand-alone components based on CompononetOwl.com software</li>
    +    <li>Products based on ComponentOwl.com software that are similar to ComponentOwl.com software or competing with ComponentOwl.com software</li>
    +  </ul>
    +
    +  <p>(Note: Please contact ComponentOwl.com for a custom license if the above is required by the nature of your project.)</p>
    +
    +  <h2>5. Distribution (Royalty Free)</h2>
    +  
    +  <p>If you have purchased a valid license, compiled binaries (.DLL) of the software may be distributed royalty-free with your products. If you have purchased 
    +  source code, the software may be integrated into your software applications (.EXE).</p>
    +  
    +  <p>The installation package of the trial version of this software may be freely distributed, as long as no fees are charged, and original packaging and 
    +  documentation are retained.</p>
    +
    +  <h2>6. No Warranty</h2>
    +  
    +  <p>This software has no warranty of suitability for a particular purpose or satisfactory quality. This Software is provided to licensee "as is".</p>
    +
    +  <h2>7. Newsletter</h2>
    +  
    +  <p>By ordering this software you agree to receive our software newsletter with information about Software updates. ComponentOwl.com will ensure that it is 
    +  possible to easily unsubscribe from all such newsletters.</p>
    +
    +  <h2>8. Publicity</h2>
    +  
    +  <p>You grant the right to include your company's name and logo as a customer on ComponentOwl.com website and other advertising and promotional materials. 
    +  Within thirty days after your written request (usually sooner), your company's name and other materials will be removed from ComponentOwl.com.</p>
    +
    +  <h2>9. Premium Support</h2>
    +  
    +  <p>Premium support is a paid service that licensee may purchase together with a license of the software. ComponentOwl.com will make reasonable effort to help 
    +  the licensee to resolve issues directly related to software and its defect. ComponentOwl.com can not guarantee successful resolution of all support incidents. 
    +  ComponentOwl.com is not obliged to provide support if more than 20 incidents are raised per year by the licensee or the ComponentOwl.com support service is 
    +  abused in any way. Custom development is not covered by the premium support.</p>
    +  
    +  <p>ComponentOwl.com also reserves the right to terminate any premium support contract with a pro-rated refund.</p>
    +
    +  <h2>10. Disclaimer</h2>
    +  
    +  <p>Licensee hereby disclaims and indemnifies ComponentOwl.com from any juridical claims or complaints about the Software.</p>
    +  
    +</div>
    +          </div>
    +        </div>
    +      
    +      
    +      
    +      <div class="d-footer">
    +  <div class="d-placing">
    +    
    +    <div class="left">
    +      <div class="latest-posts">
    +        <h3 class="latest_from_blog"><a href="blog.html">Latest From Our Blog</a></h3>
    +        
    +          <h4><a href="blog/index.html%3Fp=927.html">Activation issues and how to solve them</a></h4>
    +          <div class="post-info">Wednesday, 01 March 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=921.html">The Three Main Advantages Better ListView has Over the Classic .NET Framework</a></h4>
    +          <div class="post-info">Thursday, 09 February 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=914.html">BLV and Internet Explorer</a></h4>
    +          <div class="post-info">Sunday, 13 November 2016</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=906.html">Centering Images in Better ListView Sub-items</a></h4>
    +          <div class="post-info">Wednesday, 06 August 2014</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=901.html">Sub-item Check Boxes in Better ListView</a></h4>
    +          <div class="post-info">Sunday, 06 July 2014</div>
    +        
    +      </div>
    +      <div class="other-posts"><a href="blog.html">See more posts &raquo;</a></div>
    +    </div>
    +    
    +    <div class="right">
    +      <div class="news">
    +        <ul class="links">
    +          <li><a href="feeds.rss" class="rss">Subscribe to our RSS</a></li>
    +          <li><a href="http://twitter.com/ComponentOwl" class="twitter">Follow us on twitter</a></li>
    +        </ul>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistview.exe" onclick="download_email('better-listview');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better SplitButton 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="bettersplitbutton.exe" onclick="download_email('better-splitbutton');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better Thumbnail Browser 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterthumbnailbrowser.exe" onclick="download_email('better-thumbnail-browser');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item last-item">
    +          <div class="date">08<span>Apr</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.14.0 released!</h4>
    +            <p>
    +              
    +                <a href="better-listview-express/releases%3Fsince=3.14.0.html">See what's new</a>
    +                or
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +      </div>
    +    </div>
    +    
    +  </div>
    +  <div class="d-placing">
    +    <hr />
    +    <div class="copy"><div class="social"><a href="support.html" class="feedback">Contact Us (Feedback)</a> <span>|</span> <a href="feeds.rss" class="rss">RSS</a> <span>|</span> <a href="http://twitter.com/ComponentOwl" class="twitter">Twitter</a> <span>|</span> <a href="sitemap.html" class="sitemap">Sitemap</a> <span>|</span> Our <a href="index.html" class="stdl">task management software</a> that uses Better ListView</div>
    +Copyright &copy; 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our <a href="eula.html">EULA</a>, <a href="disclaimer.html">Disclaimer</a> and <a href="privacy-policy.html">Privacy Policy</a>.<br /></div>
    +  </div>
    +  
    +</div>
    +      
    +    </div>
    +    
    +    <script src="javascripts/app_packaged.js%3F1455269826" type="text/javascript"></script>
    +    <script type="text/javascript">
    +
    +  var _gaq = _gaq || [];
    +  _gaq.push(['_setAccount', 'UA-16362539-4']);
    +  _gaq.push(['_trackPageview']);
    +
    +  (function() {
    +    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    +    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    +    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    +  })();
    +
    +</script>
    +<script src="http://load.sumome.com/" data-sumo-site-id="854b5e00f297990012cc230023375a00787c0000216621002775a800d79ad500" async="async"></script>
    +    
    +    <!-- Place this tag after the last plusone tag -->
    +    <script type="text/javascript">
    +      (function() {
    +        var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    +        po.src = 'https://apis.google.com/js/plusone.js';
    +        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
    +      })();
    +    </script>
    +  
    +  </body>
    +</html>
    \ No newline at end of file
    diff --git a/feeds.rss b/feeds.rss
    new file mode 100644
    index 0000000..45a53b9
    --- /dev/null
    +++ b/feeds.rss
    @@ -0,0 +1,58 @@
    +<?xml version="1.0" encoding="UTF-8"?>
    +<rss version="2.0">
    +  <channel>
    +    <title>Component Owl</title>
    +    <description>Component Owl News &amp; Updates</description>
    +    <link>http://www.componentowl.com/feeds</link>
    +    <item>
    +      <title>Activation issues and how to solve them</title>
    +      <description>Dear Readers,  Periodically we get emails from users having problems with the activation. So we put together a check list on how to deal with the most frequent issues. In case these fixes do not help you solve your problem, please contact contact support at &lt;a href="mailto:support@componentowl.com"&gt;support@componentowl.com&lt;/a&gt; and we will be happy to help [...]</description>
    +      <pubDate>Wed, 01 Mar 2017 17:22:52 +0000</pubDate>
    +      <link>http://www.componentowl.com/blog/activation-issues-and-how-to-solve-them/</link>
    +    </item>
    +    <item>
    +      <title>The Three Main Advantages Better ListView has Over the Classic .NET Framework</title>
    +      <description>Dear Readers,  When evaluating an alternative to replace the .NET ListView you might stumble upon the question: what sets the different solutions available apart from each other? Which one meets my demands the best?  Here are the three main reasons we think Better ListView is the ideal solution for you if you are [...]</description>
    +      <pubDate>Thu, 09 Feb 2017 21:51:12 +0000</pubDate>
    +      <link>http://www.componentowl.com/blog/the-three-main-advantages-componentowl-has-over-the-classic-net-framework/</link>
    +    </item>
    +    <item>
    +      <title>BLV and Internet Explorer</title>
    +      <description>As you all know we are constantly working on improving BetterListView, but once in a while you might encounter a problem which has not found its way to our documentation yet.
    +
    +Today, our blog post covers an interesting case when using Internet Explorer.</description>
    +      <pubDate>Sun, 13 Nov 2016 22:37:47 +0000</pubDate>
    +      <link>http://www.componentowl.com/blog/blv-and-internet-explorer/</link>
    +    </item>
    +    <item>
    +      <title>Better ListView Express 3.15 released!</title>
    +      <description>&lt;a href="http://www.componentowl.com/download/better-listview-express"&gt;&lt;span class="translation_missing"&gt;en, txt, rss, download_latest_release&lt;/span&gt;&lt;/a&gt;</description>
    +      <pubDate>Wed, 27 May 2015 00:00:00 +0000</pubDate>
    +      <link>http://www.componentowl.com/better-listview-express/releases?since=3.15</link>
    +    </item>
    +    <item>
    +      <title>Better ListView 3.15 released!</title>
    +      <description>&lt;a href="http://www.componentowl.com/download/better-listview"&gt;&lt;span class="translation_missing"&gt;en, txt, rss, download_latest_release&lt;/span&gt;&lt;/a&gt;</description>
    +      <pubDate>Wed, 27 May 2015 00:00:00 +0000</pubDate>
    +      <link>http://www.componentowl.com/better-listview/releases?since=3.15</link>
    +    </item>
    +    <item>
    +      <title>Better Thumbnail Browser 3.15 released!</title>
    +      <description>&lt;a href="http://www.componentowl.com/download/better-thumbnail-browser"&gt;&lt;span class="translation_missing"&gt;en, txt, rss, download_latest_release&lt;/span&gt;&lt;/a&gt;</description>
    +      <pubDate>Wed, 27 May 2015 00:00:00 +0000</pubDate>
    +      <link>http://www.componentowl.com/better-thumbnail-browser/releases?since=3.15</link>
    +    </item>
    +    <item>
    +      <title>Better SplitButton 3.15 released!</title>
    +      <description>&lt;a href="http://www.componentowl.com/download/better-splitbutton"&gt;&lt;span class="translation_missing"&gt;en, txt, rss, download_latest_release&lt;/span&gt;&lt;/a&gt;</description>
    +      <pubDate>Wed, 27 May 2015 00:00:00 +0000</pubDate>
    +      <link>http://www.componentowl.com/better-splitbutton/releases?since=3.15</link>
    +    </item>
    +    <item>
    +      <title>Better ListView Express 3.14.0 released!</title>
    +      <description>See &lt;a href="http://www.componentowl.com/better-listview-express/releases?since=3.14.0"&gt;what's new&lt;/a&gt; or &lt;a href="http://www.componentowl.com/download/better-listview-express"&gt;download latest release&lt;/a&gt;.</description>
    +      <pubDate>Wed, 08 Apr 2015 00:00:00 +0000</pubDate>
    +      <link>http://www.componentowl.com/better-listview-express/releases?since=3.14.0</link>
    +    </item>
    +  </channel>
    +</rss>
    diff --git a/images/RSS_32.png b/images/RSS_32.png
    new file mode 100644
    index 0000000..fbde3c7
    Binary files /dev/null and b/images/RSS_32.png differ
    diff --git a/images/arrow-bullet.gif b/images/arrow-bullet.gif
    new file mode 100644
    index 0000000..930e055
    Binary files /dev/null and b/images/arrow-bullet.gif differ
    diff --git a/images/arrow2.gif b/images/arrow2.gif
    new file mode 100644
    index 0000000..7fe83c8
    Binary files /dev/null and b/images/arrow2.gif differ
    diff --git a/images/arrows.png b/images/arrows.png
    new file mode 100644
    index 0000000..46f8191
    Binary files /dev/null and b/images/arrows.png differ
    diff --git a/images/asp_logo-member.png?1455269978 b/images/asp_logo-member.png?1455269978
    new file mode 100644
    index 0000000..42d1be9
    Binary files /dev/null and b/images/asp_logo-member.png?1455269978 differ
    diff --git a/images/bg.png b/images/bg.png
    new file mode 100644
    index 0000000..b725c3b
    Binary files /dev/null and b/images/bg.png differ
    diff --git a/images/blv-users.gif b/images/blv-users.gif
    new file mode 100644
    index 0000000..0506126
    Binary files /dev/null and b/images/blv-users.gif differ
    diff --git a/images/brno.jpg?1455269978 b/images/brno.jpg?1455269978
    new file mode 100644
    index 0000000..2bea969
    Binary files /dev/null and b/images/brno.jpg?1455269978 differ
    diff --git a/images/bubble-small.gif b/images/bubble-small.gif
    new file mode 100644
    index 0000000..9088cb9
    Binary files /dev/null and b/images/bubble-small.gif differ
    diff --git a/images/button-buy-commercial-license.gif b/images/button-buy-commercial-license.gif
    new file mode 100644
    index 0000000..4afafeb
    Binary files /dev/null and b/images/button-buy-commercial-license.gif differ
    diff --git a/images/button-buy-small.gif b/images/button-buy-small.gif
    new file mode 100644
    index 0000000..dd834be
    Binary files /dev/null and b/images/button-buy-small.gif differ
    diff --git a/images/button-download.gif b/images/button-download.gif
    new file mode 100644
    index 0000000..439aa43
    Binary files /dev/null and b/images/button-download.gif differ
    diff --git a/images/button-free-download.gif b/images/button-free-download.gif
    new file mode 100644
    index 0000000..24741e2
    Binary files /dev/null and b/images/button-free-download.gif differ
    diff --git a/images/button-more.gif b/images/button-more.gif
    new file mode 100644
    index 0000000..d17f1af
    Binary files /dev/null and b/images/button-more.gif differ
    diff --git a/images/button-pricing.gif b/images/button-pricing.gif
    new file mode 100644
    index 0000000..ccff2e1
    Binary files /dev/null and b/images/button-pricing.gif differ
    diff --git a/images/button-renew.gif b/images/button-renew.gif
    new file mode 100644
    index 0000000..b4bd773
    Binary files /dev/null and b/images/button-renew.gif differ
    diff --git a/images/comics-next.gif b/images/comics-next.gif
    new file mode 100644
    index 0000000..44a2af7
    Binary files /dev/null and b/images/comics-next.gif differ
    diff --git a/images/comics-prev.gif b/images/comics-prev.gif
    new file mode 100644
    index 0000000..5883279
    Binary files /dev/null and b/images/comics-prev.gif differ
    diff --git a/images/componentowl.gif?1455269978 b/images/componentowl.gif?1455269978
    new file mode 100644
    index 0000000..fd768cb
    Binary files /dev/null and b/images/componentowl.gif?1455269978 differ
    diff --git a/images/dbtn-hilight.png b/images/dbtn-hilight.png
    new file mode 100644
    index 0000000..7c291f3
    Binary files /dev/null and b/images/dbtn-hilight.png differ
    diff --git a/images/dbtn.png b/images/dbtn.png
    new file mode 100644
    index 0000000..0663891
    Binary files /dev/null and b/images/dbtn.png differ
    diff --git a/images/dextronet-small.gif?1455269978 b/images/dextronet-small.gif?1455269978
    new file mode 100644
    index 0000000..95d6897
    Binary files /dev/null and b/images/dextronet-small.gif?1455269978 differ
    diff --git a/images/dextronet.gif b/images/dextronet.gif
    new file mode 100644
    index 0000000..0c52774
    Binary files /dev/null and b/images/dextronet.gif differ
    diff --git a/images/dropdown-o.png b/images/dropdown-o.png
    new file mode 100644
    index 0000000..ca38c87
    Binary files /dev/null and b/images/dropdown-o.png differ
    diff --git a/images/dropdown-s.png b/images/dropdown-s.png
    new file mode 100644
    index 0000000..f887ac8
    Binary files /dev/null and b/images/dropdown-s.png differ
    diff --git a/images/europe.jpg b/images/europe.jpg
    new file mode 100644
    index 0000000..799110a
    Binary files /dev/null and b/images/europe.jpg differ
    diff --git a/images/fancybox/blank.gif b/images/fancybox/blank.gif
    new file mode 100644
    index 0000000..35d42e8
    Binary files /dev/null and b/images/fancybox/blank.gif differ
    diff --git a/images/fancybox/fancy_close.png b/images/fancybox/fancy_close.png
    new file mode 100644
    index 0000000..0703530
    Binary files /dev/null and b/images/fancybox/fancy_close.png differ
    diff --git a/images/fancybox/fancy_loading.png b/images/fancybox/fancy_loading.png
    new file mode 100644
    index 0000000..2503017
    Binary files /dev/null and b/images/fancybox/fancy_loading.png differ
    diff --git a/images/fancybox/fancy_nav_left.png b/images/fancybox/fancy_nav_left.png
    new file mode 100644
    index 0000000..ebaa6a4
    Binary files /dev/null and b/images/fancybox/fancy_nav_left.png differ
    diff --git a/images/fancybox/fancy_nav_right.png b/images/fancybox/fancy_nav_right.png
    new file mode 100644
    index 0000000..873294e
    Binary files /dev/null and b/images/fancybox/fancy_nav_right.png differ
    diff --git a/images/fancybox/fancy_shadow_e.png b/images/fancybox/fancy_shadow_e.png
    new file mode 100644
    index 0000000..2eda089
    Binary files /dev/null and b/images/fancybox/fancy_shadow_e.png differ
    diff --git a/images/fancybox/fancy_shadow_n.png b/images/fancybox/fancy_shadow_n.png
    new file mode 100644
    index 0000000..69aa10e
    Binary files /dev/null and b/images/fancybox/fancy_shadow_n.png differ
    diff --git a/images/fancybox/fancy_shadow_ne.png b/images/fancybox/fancy_shadow_ne.png
    new file mode 100644
    index 0000000..79f6980
    Binary files /dev/null and b/images/fancybox/fancy_shadow_ne.png differ
    diff --git a/images/fancybox/fancy_shadow_nw.png b/images/fancybox/fancy_shadow_nw.png
    new file mode 100644
    index 0000000..7182cd9
    Binary files /dev/null and b/images/fancybox/fancy_shadow_nw.png differ
    diff --git a/images/fancybox/fancy_shadow_s.png b/images/fancybox/fancy_shadow_s.png
    new file mode 100644
    index 0000000..d8858bf
    Binary files /dev/null and b/images/fancybox/fancy_shadow_s.png differ
    diff --git a/images/fancybox/fancy_shadow_se.png b/images/fancybox/fancy_shadow_se.png
    new file mode 100644
    index 0000000..541e3ff
    Binary files /dev/null and b/images/fancybox/fancy_shadow_se.png differ
    diff --git a/images/fancybox/fancy_shadow_sw.png b/images/fancybox/fancy_shadow_sw.png
    new file mode 100644
    index 0000000..b451689
    Binary files /dev/null and b/images/fancybox/fancy_shadow_sw.png differ
    diff --git a/images/fancybox/fancy_shadow_w.png b/images/fancybox/fancy_shadow_w.png
    new file mode 100644
    index 0000000..8a4e4a8
    Binary files /dev/null and b/images/fancybox/fancy_shadow_w.png differ
    diff --git a/images/fancybox/fancy_title_left.png b/images/fancybox/fancy_title_left.png
    new file mode 100644
    index 0000000..6049223
    Binary files /dev/null and b/images/fancybox/fancy_title_left.png differ
    diff --git a/images/fancybox/fancy_title_main.png b/images/fancybox/fancy_title_main.png
    new file mode 100644
    index 0000000..8044271
    Binary files /dev/null and b/images/fancybox/fancy_title_main.png differ
    diff --git a/images/fancybox/fancy_title_over.png b/images/fancybox/fancy_title_over.png
    new file mode 100644
    index 0000000..d9f458f
    Binary files /dev/null and b/images/fancybox/fancy_title_over.png differ
    diff --git a/images/fancybox/fancy_title_right.png b/images/fancybox/fancy_title_right.png
    new file mode 100644
    index 0000000..e36d9db
    Binary files /dev/null and b/images/fancybox/fancy_title_right.png differ
    diff --git a/images/footer-bg.png b/images/footer-bg.png
    new file mode 100644
    index 0000000..10bed95
    Binary files /dev/null and b/images/footer-bg.png differ
    diff --git a/images/heading-latest_from_blog.gif b/images/heading-latest_from_blog.gif
    new file mode 100644
    index 0000000..8404346
    Binary files /dev/null and b/images/heading-latest_from_blog.gif differ
    diff --git a/images/homehd-bg.gif b/images/homehd-bg.gif
    new file mode 100644
    index 0000000..e66b776
    Binary files /dev/null and b/images/homehd-bg.gif differ
    diff --git a/images/homehd-lb.gif b/images/homehd-lb.gif
    new file mode 100644
    index 0000000..d91a783
    Binary files /dev/null and b/images/homehd-lb.gif differ
    diff --git a/images/homehd-rb.gif b/images/homehd-rb.gif
    new file mode 100644
    index 0000000..38a5cef
    Binary files /dev/null and b/images/homehd-rb.gif differ
    diff --git a/images/icons/arrow-270-medium.gif.html b/images/icons/arrow-270-medium.gif.html
    new file mode 100644
    index 0000000..04c2a1d
    --- /dev/null
    +++ b/images/icons/arrow-270-medium.gif.html
    @@ -0,0 +1,580 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
    +  <head>
    +<!-- Google Tag Manager -->
    +<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    +new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    +j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    +'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    +})(window,document,'script','dataLayer','GTM-TMSFLB4');</script>
    +<!-- End Google Tag Manager -->
    +<script>
    +  function gainit()
    +  {
    +    ga('create', 'UA-16362539-4', 'auto');
    +    console.log('ga init');
    +  }
    +  window.onload=gainit;
    +</script>
    +    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    +<meta name="keywords" content="better listview, list view, listview, list view control, list view component, .net list view, list view replacement, list view alternative, improved list view, enhanced list view" />
    +<meta name="description" content="Better ListView is an alternative List View control - the ideal replacement for the regular .NET listview component. For WinForms C#/VB.net." />
    +<meta name="author" content="ComponentOwl" />
    +<meta http-equiv="Title" content="Better ListView for .NET (C#, VB) - Alternative list view component" />
    +<meta name="copyright" content="(c) 2010-2018 ComponentOwl" />
    +<meta name="distribution" content="Global" />
    +<meta name="rating" content="General" />
    +<meta name="robots" content="All" />
    +<meta http-equiv="Content-Language" content="en" />
    +<meta name="verify-v1" content="NK0H1gWia1vxGZ2Yhr59gsS0/P2/USBI1DVA18VkzjM=" />
    +<meta name="google-site-verification" content="O7Dwtzu5x_Mob9u98uxqpZ-_wCLGpEkx2IL0UYVQ4ac" />
    +<title>Better ListView for .NET (C#, VB) - Alternative list view component</title>
    +<link rel="alternate" type="application/rss+xml" title="Component Owl Feed: Latest releases, news and tips &amp; tricks from our blog" href="feeds.rss" />
    +<link rel="alternate" type="application/rss+xml" title="Component Owl's Comics: Latest comic strips for developers by Libor Tinka" href="comics.rss" />
    +    <link href="stylesheets/base_packaged.css%3F1455269822.css" media="screen" rel="stylesheet" type="text/css" />
    +    
    +  </head>
    +  <body>
    +<!-- Google Tag Manager (noscript) -->
    +<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TMSFLB4"
    +height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    +<!-- End Google Tag Manager (noscript) -->
    +    <div class="d-page">
    +
    +<div class="d-header d-placing">
    +  
    +  <ul class="d-menu">
    +    <li class=""><a href="index.html" class="menu-item">Home</a></li>
    +    <li class="active with-dropdown">
    +      <a href="better-listview.html" class="menu-item">Products</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 370px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          <div class="dropdown-category">WinForms Components</div>
    +          
    +            
    +            <a href="better-listview.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-32-1355160256.png?1355135056" /> Better ListView<br /><span class="subline">Ultimate ListView control for .NET</span></a>
    +          
    +            
    +            <a href="better-thumbnail-browser.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-thumbnail-browser-32-1355160281.png?1355135081" /> Better Thumbnail Browser<br /><span class="subline">Thumbnail loading and browsing control for .NET</span></a>
    +          
    +            
    +            <a href="better-splitbutton.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-splitbutton-32-1355160307.png?1355135107" /> Better SplitButton<br /><span class="subline">Free customizable dropdown button control</span></a>
    +          
    +            
    +            <a href="better-listview-express.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-express-32-1355160327.png?1355135127" /> Better ListView Express<br /><span class="subline">Free edition with less features</span></a>
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="">
    +      <a href="pricing-licensing/better-listview.html" class="menu-item">Purchase</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 330px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-listview.html" class="featured-item">Better ListView</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-thumbnail-browser.html" class="featured-item">Better Thumbnail Browser</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-splitbutton.html">Better SplitButton</a>
    +          
    +        
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class=""><a href="support.html" class="menu-item">Support</a></li>
    +    <li class=""><a href="articles.html" class="menu-item">Articles</a></li>
    +    <li class=""><a href="blog.html" class="menu-item">Blog</a></li>
    +    <li class=""><a href="comics/43.html" class="menu-item">Comics</a></li>
    +    <li class=""><a href="about-us.html" class="menu-item">About Us</a></li>
    +  </ul>
    +  <div class="d-logo">
    +    <a href="index.html" class="logoimg"><img alt="Component Owl" src="images/componentowl.gif%3F1455269978" /></a>
    +    <g:plusone size="medium" count="false" href="http://www.componentowl.com"></g:plusone>
    +  </div>
    +</div>
    +      
    +      
    +      
    +        <div class="d-placing">
    +          <div class="d-content-wrap">
    +            <div class="subpage product-content">
    +  <h1>Better ListView: Alternative list view control for .NET</h1>
    +  
    +  <p class="section-info">Ideal .NET WinForms (C#, VB.net) replacement list view component. More features, less limitations, fast and optimized.</p>
    +  
    +  <div class="sides">
    +    
    +    <div class="right">
    +      
    +    
    +
    +        
    +        
    +      <input id="tabs-initial-index" name="tabs-initial-index" type="hidden" value="-1" />
    +      
    +      <ul id="nav" class="nav">
    +        
    +        <li><a href="better-listview.html" class="current">Overview</a></li>
    +        
    +        <li><a href="better-listview/screenshots.html" class="">Screenshots</a></li>
    +        
    +        <li><a href="better-listview/comparison-table.html" class="">Comparison</a></li>
    +        
    +        <li><a href="better-listview/resources.html" class="">Resources</a></li>
    +        
    +        <li><a href="better-listview/story.html" class="">Story</a></li>
    +        
    +      </ul>
    +      
    +      <div id="nav-panel" class="nav-panel product-detail"><div class="features-page">
    +  <ul class="common">
    +        <li>Better ListView is a <strong>list view control for .NET Windows Forms</strong></li>
    +        <li>Designed as a replacement for the regular .NET list view control.</li>
    +        <li>Compatible with: Visual Studio 2015, 2013, 2012, 2010, 2008, 2005, with full designer support.</li>
    +        <li>For C#, Visual Basic .NET (VB.NET), managed C++, and other CLI languages.</li>
    +        <li>Compatible with .NET 4.5, .NET 4, .NET 3.5, .NET 3, .NET 2, and newer. Supports .NET Client Profile.</li>
    +        <li>Runs on Windows 10, 8, 7, Vista, 2003, XP, 2000, and newer, both 32-bit and 64-bit.</li>
    +        <li>Better ListView has <strong>more features and flexibility</strong>, always uses the <strong>current system theme</strong> (including <strong>Aero</strong> support), and <strong>removes limitations</strong> of the regular .NET list view control.</li>
    +        <li><strong>Minimum learning needed</strong>. Better ListView can be used just like the regular list view.</li>
    +        <li>Written in <strong>pure managed C# code</strong>. It is fast, <strong>light-weight</strong> and optimized for 10k+ items.</li>
    +        <li>Easy royalty-free deployment. Single DLL file that has just 250kB when compressed.</li>
    +		<li>The assembly is <strong><a href="http://www.nist.gov/itl/fipsinfo.cfm" target="_blank">FIPS-compliant</a></strong>, CLS-compliant, <strong>digitally signed</strong> and strongly named.</li>
    +        <li>Tested in the real world by thousands of users</li>
    +  </ul>
    +  
    +<div class="image"><img alt="Better ListView control" src="http://assets.componentowl.com/images/7/Overview Collage_original_1367470843.png?1367445643" /></div>
    +  
    +<h2>Extra features summary</h2>
    +
    +Better ListView is fast and flicker-free, supports hierarchical items, has improved grouping, better drag &amp; drop and item reordering support, better column headers, inbuilt sorting, multi-column sorting, better images support, context menus for column headers and items, embedded controls for editing support, automatic and custom sizing of items and images, thumbnails view, richer event data, item text formatting, XML and binary serialization, data-binding, owner-drawing options, better tooltips, powerful hit-test, improved usability, easy saving/loading of contents into file or string, multi-line items, and more.
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +Component Owl created <b>the one and only tool I don’t want to be without when it comes to software developing in Visual Studio</b>. Also, I’ve been working as software user/developer for the last 26 years, and <b>I have never before experienced a support that really goes the needed extra mile to make things work</b>, like the guys at Component Owl do.
    +</em></blockquote><strong>Göran Alfvén, Sweden</strong></div></div>
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +The control is <b>very easy and intuitive to use and is well documented</b>.
    +</em></blockquote><strong>DevProConnections.com Review</strong></div></div>
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +Better List View is <b>awesome</b>.
    +</em></blockquote><strong>Daniel N</strong></div></div>
    +
    +<h3>Hierarchical items</h3>
    +
    +You can create tree-like structures in Better ListView; inbuilt drag &amp; drop hierarchical reordering of items.
    +
    +<h3>Improved grouping</h3>
    +
    +Better grouping – customizable group headers look and behavior, collapsible, image support, context menu support, focusable, etc. Each group header can be customized individually.
    +
    +<h3>Save/load contents with 1 line of code</h3>
    +
    +You can save or load the contents of Better ListView in just 1 line of code, either to file or string. Both XML and binary serialization is supported.
    +
    +<h3>Double-buffered and flicker free</h3>
    +
    +Simply put, Better ListView is smooth. Regular listview requires multiple anti-flicker techniques, but you do not have to worry about that with Better ListView. Better ListView is optimized for 100k+ items.
    +
    +<h3>Column header images</h3>
    +
    +You can use images in column headers. Custom image sizes are supported.
    +
    +<div class="image"><img alt="Column Header Images" src="http://assets.componentowl.com/images/8/Column Header Images_original_1298620501.png?1298595301" /></div>
    +  
    +<h3>Sub-item images</h3>
    +
    +You can set images to list view sub-items. Regular list view allows you to set only one image per list view item, but Better ListView can show image for every sub-item (in every column).
    +
    +<h3>Image-List and Image Support</h3>
    +
    +Better ListView supports both image list, or individual image objects (System.Drawing.Image). Regular list view forces you to use ImageList object.
    +
    +<h3>Custom list view Image size</h3>
    +
    +You can use any image size in the list view. Better ListView can also automatically resize images with preserving aspect ratio.
    +  
    +<h3>Drag &amp; drop with insertion mark</h3>
    +
    +Highly customizable drag-drop for both internal and external drag-drop. You can use drop highlight or insertion mark drag drop modes.
    +  
    +<div class="image"><img alt="List View Item Reordering Mark Preview" src="http://assets.componentowl.com/images/21/List View Item Reordering Mark Preview_original_1298631798.png?1298606598" /></div>
    +  
    +<h3>List view item reordering</h3>
    +  
    +Better ListView has inbuilt item reordering and item drag &amp; drop inserting at the position specified by user. Drag &amp; drop preview is shown using an insertion mark.
    +  
    +<h3>Column-header reordering</h3>
    +  
    +Better ListView has inbuilt easy drag &amp; drop column header reordering that is much easier to use than in the regular list view. Insertion mark is shown, auto-scrolling is supported.
    +  
    +<div class="image"><img alt="Column Header Reordering With Insertion Mark" src="http://assets.componentowl.com/images/9/Column Header Reordering With Insertion Mark_original_1298621331.png?1298596131" /></div>
    +  
    +<h3>Auto-scroll for column header reordering and item reordering</h3>
    +
    +Better ListView has inbuilt auto-scrolling for column header and item reordering.
    +  
    +<h3>Column headers can be shown in all views</h3>
    +
    +Better ListView can display column headers in all views - Details, SmallIcons, LargeIcons, List, Tile, Thumbnails. This allows users to sort items in all views. Additionally, you can also hide the column headers even in the details view.
    +  
    +<div class="image"><img alt="Column Headers in LargeIcons View" src="http://assets.componentowl.com/images/10/Column Headers In LargeIcons View_original_1298622038.png?1298596838" /></div>
    +  
    +<h3>Thumbnails view mode</h3>
    +
    +Better ListView supports additional "thumbnails" view mode that allows you to view images of large sizes. The images are automatically and smoothly resized with preserved aspect ratio. You can define the maximum/minimum desired image sizes.
    +
    +<h3>Image shadows, borders and padding</h3>
    +All images in Better ListView can have border or shadow specified. You can also specify padding that gives you space for owner drawing (eg. overlay images). This can be used in all views.
    +  
    +Image shadows like in Windows 7 theme are supported. Windows Explorer uses very similar shadows for image thumbnails.
    +  
    +<div class="image"><img alt="ListView Image Shadows and Image Borders" src="http://assets.componentowl.com/images/11/ListView Image Shadows and Image Borders_original_1298622678.png?1298597478" /></div>
    +  
    +<h3>Multi-column sorting</h3>
    +
    +You can sort by multiple columns in Better ListView. Simply shift+click a secondary (or third, etc) column to add it to the current sort. Zero code needed. Additionally, the background of the primary (first) sort column can be highlighted.
    +  
    +<div class="image"><img alt="Multi Column Sort in List View" src="http://assets.componentowl.com/images/12/Multi Column Sort in List View_original_1298623013.png?1298597813" /></div>
    +  
    +<h3>Inbuilt sorting and natural sorting</h3>
    +  
    +Better ListView has inbuilt list view sorting that works out of the box. You no longer need to implement your own item comparer. If custom comparer is needed, you can inherit from the Better ListView comparer to save time.
    +  
    +<h3>Richer event data</h3>
    +  
    +Many events have richer event data that allow you to do extra operations or tell you extra useful information. The richer events include: AfterItemSort, BeforeDrag, BeforeItemSort, ColumnClick (allows you to cancel sort), DragDropException, DrawBackground, DrawColumnHeaderBackground, DrawColumnHeader, DrawItemBackground, DrawItem, HitTestChanged, ItemActivate (event data tells you how the item got activated - mouse, keyboard or code), ItemDrag, ItemDrop, ItemReorder, ItemSearch, LabelEdit, RequestEmebeddedControl.
    +
    +<h3>Checkboxes in all views</h3>
    +
    +You can have checkboxes in LargeIcons view, SmallIcons view, List view, Thumbnails view and of course also in the Details view.
    +  
    +<div class="image"><img alt="Checkboxes In LargeIcons View" src="http://assets.componentowl.com/images/13/Checkboxes In LargeIcons View_original_1298623385.png?1298598185" /></div>
    +  
    +<h3>Three state checkboxes</h3>
    +Three state checkboxes are supported in Better ListView:
    +  
    +<div class="image"><img alt="Three-State Checkboxes in List View" src="http://assets.componentowl.com/images/14/Three State Checkboxes in List View_original_1298624577.png?1298599377" /></div>
    +
    +<h3>Hide or show checkboxes of specific ListView Items</h3>
    +
    +You can hide checkbox for any ListViewItem. You can also show checkboxes only for specified items. All list items in Better ListView have "AllowShowCheckBox" property.
    +
    +<div class="image"><img alt="Show or hide checkboxes for specific listview items" src="http://assets.componentowl.com/images/23/show-or-hide-checkboxes-for-specific-listview-items_original_1299748307.png?1299723107" title="Show or hide checkboxes for specific listview items" /></div>
    +  
    +<h3>Powerful list view tooltips</h3>
    +
    +You can display tooltips for nearly any part of Better ListView - tooltips for items, sub-items, checkboxes, item images, sub-item images, column headers, column header images, column header borders, and even for custom areas (regions). Owner-drawn tooltips are supported.
    +  
    +<div class="image"><img alt="List View Regional Tooltips and Owner Drawn Tooltips" src="http://assets.componentowl.com/images/15/List View Tooltips Region And Owner Drawn Tooltips_original_1298632357.png?1298607157" /></div>
    +  
    +<h3>Uses current Windows theme</h3>
    +  
    +Instead of implementing custom, un-native look and feel, Better ListView always automatically fully uses the current system theme. It supports Aero as well. Better ListView always looks great and feels right to the user.
    + 
    +<h3>XML and binary serialization of everything</h3>
    +  
    +Every part of Better ListView (items, sub-items, column headers) can be both binary and XML serialized. You can easily XML serialize whole list view (or binary serialize) to save it to file or transfer items between controls. Standard ways of .NET serialization can be used (BinaryFormatter, XmlSerializer).
    +  
    +<h3>Owner drawing</h3>
    +
    +Better ListView allows you to draw over the client area, items and column headers. Contrary to .NET ListView, owner drawing is fully operational even when the system uses Aero theme. You can draw separately to background and foreground parts of Better ListView without worrying about proper drawing order. Owner drawing events provide rich data, including exact item state and areas of every item part.
    +  
    +<div class="image"><img alt="List View Owner Drawing Background Gradient" src="http://assets.componentowl.com/images/22/List View Owner Drawing Background Gradient_original_1298633053.png?1298607853" /></div>
    +
    +<h3>Multi-line items</h3>
    +
    +Better ListView supports multi-line items. Items with very long text can be displayed on multiple lines. Highly customizable and powerful: Focused items can have custom number of lines; hard line breaks supported as well. Foreground overlay "watermark" images are easily achievable using owner-drawing.
    +
    +<div class="image"><img src="http://assets.componentowl.com/screenshots/21/multi-line-items_original_1312133213.png?1312133213" alt="Multi-line items"></div>
    +  
    +<h3>Background image support</h3>
    +
    +Display background image in Better ListView easily using the BackgroundImage property. Many layouts (stretch, tile, none), alignments (top, bottom, left, right, center and combinations) are supported, as well as customizable opacity.
    +
    +<div class="image"><img alt="ListView Background Image" src="http://assets.componentowl.com/images/27/Background-Images_original_1326106027.png?1326080827" title="ListView Background Image" /></div>
    +
    +<h3>Context menu for column headers, list items, and empty area</h3>
    +
    +Better ListView supports 3 types of context menus: Column header context menu, list view items context menu, and empty area context menu (when right-clicking white space).
    +  
    +<div class="image"><img alt="Column Header Context Menu in List View" src="http://assets.componentowl.com/images/17/Column Header Context Menu in List View_original_1298721855.png?1298696655" /></div>
    +  
    +<h3>Advanced hit-test with detailed information</h3>
    +The hit test in Better ListView returns very detailed information. It tells you not only the location (Client Area, Sub-Item, Sub-Item Text, Sub-Item Image, Checkbox, Column Header Image, and many more), but it also tells you the state of the item, and part of the item (left or right).
    +
    +<div class="image"><img alt="Advanced Hit-Test With Detailed Information" src="http://assets.componentowl.com/images/26/Advanced-Hit-Test_original_1326105831.png?1326080631" title="Advanced Hit-Test With Detailed Information" /></div>
    +
    +<h3>Customizable search-by-typing</h3>
    +
    +Better ListView has excellent customization functionality for find-as-you-type item searching. The search modes include: Prefix (searchs from beginning of items), Substring (search any part of item text), Prefix + Substring, or Disabled. Additionally, search options include: Case sensitive, search first word only, play sound when item not found, prefer prefixes, search whole words. You can also restrict the search to only certain columns. You can also call "FindItemsWithText" function to find items from code.
    +
    +<h3>Display text when the list view is empty</h3>
    +You can display a gray text centered in the list view if it's empty to hint or educate users. This will make your software more user friendly.
    +  
    +<div class="image"><img alt="Show Text When List View is Empty" src="http://assets.componentowl.com/images/18/Show Text When List View is Empty_original_1298629916.png?1298604716" /></div>
    +  
    +<h3>Embed controls for item editing</h3>
    +Inbuilt in-line editing support includes label edit, combobox edit, date picker edit. You can also embed any custom control for in-line editing. Sub-item editing is supported. Highly customizable.
    +  
    +<div class="image"><img alt="Custom Embedded Control in List View for Editing" src="http://assets.componentowl.com/images/19/Custom Embedded Control in List View for Editing_original_1298630263.png?1298605063" /></div>
    +  
    +<h3>ListView item text formatting</h3>
    +
    +Supports both text trimming and auto-ellipsis for text that's too long. You can choose from: TrimCharacter, TrimWord, EllipsisCharacter, EllipsisWord, EllipsisPath (for file paths). Column header text can be broken into multiple lines.
    +
    +<h3>Focusable ListView sub-items and groups</h3>
    +
    +Focus sub-items or groups in Better ListView easily with keyboard. Just use the arrow keys. (This is impossible with the regular .NET ListView)
    +<div class="image"><img alt="Focusable sub-items in Better ListView" src="http://assets.componentowl.com/images/25/focus-list-view-sub-items_original_1313674098.png?1313648898" title="Focusable sub-items in Better ListView" /></div>
    +
    +<h3>Automatic list view layout</h3>
    +
    +Better ListView can auto-size item images, item text, column header images, column header text.
    +  
    +<h3>Custom list view item size</h3>
    +
    +You can set custom sizes for item text area and item images. You can also set custom size for column header text area and column header images. (Text area size is different from font size, text area size basically defines the size of the list view item.) This enables you to make tiny/huge column headers or list view items.
    +  
    +<div class="image"><img alt="Custom Item Size in List View" src="http://assets.componentowl.com/images/20/Custom Item Size in List View_original_1298630739.png?1298605539" /></div>
    +  
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +It's an odd thing when you're inspired by a form component, but Component Owl 
    +with their Better ListView has done it. Love its native feel.
    +</em></blockquote><strong>Daniel N, USA</strong></div></div>
    +
    +  <h2>More advantages of our improved list view component:</h2>
    +  <ul class="common">
    +        <li><strong>Developer friendly</strong>: All classes and properties are as similar to the regular list view as possible. Everything is intuitive, very little learning is needed. You can use Better ListView immediately. <strong>Save time and ship sooner</strong>.</li>
    +        <li><strong>Better ListView has improved usability and fixed behavior</strong>. All Windows users are familiar with the list view used in Windows Explorer. Better ListView mimicks behavior and look &amp; feel of the Windows Explorer list view as much as possible to leverage the existing user knowledge. <strong>Using Better ListView is pleasant for users.</strong> Many other list view components implement custom look and behavior and can oftentimes downright frustrate users (many controls don't even support mouse-wheel scrolling!) This doesn't happen with Better ListView.</li>
    +        <li><strong>Guaranteed support and continued development</strong>: Better ListView is developed as a joint-venture of two software companies that use Better ListView in their main products (popular <strong><a href="http://www.dextronet.com/swift-to-do-list-software" target="_blank">Swift To-Do List</a></strong> and <strong><a href="http://www.imagingshop.com" target="_blank">ImagingShop</a></strong>). These applications are used by thousands of users daily. This is your guarantee that Better ListView will be supported and developed in the future.</li>
    +        <li><strong>Tested in real world applications by thousands of users</strong>: Because Better ListView is used in professional consumer desktop software applications - Swift To-Do List and ImagingShop, thousands of users work with Better ListView every day. Although we use unit tests that cover most of code, and do thorough inhouse testing, this is your true guarantee that it is tested thoroughly in the real world. It is <strong>extremely stable</strong>.</li>
    +        <li>Better ListView does <strong>not</strong> inherit from the regular .NET list view. It is written in pure managed C# code and is flexible, light weight, and fast. Extensions of the regular .net list view only go so far. Better ListView goes further. Soure code licenses are also available for ultimate customization.</li>
    +  </ul>
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +In addition to creating a new List View control to incorporate <b>broader flexibility and functionality</b>, Better ListView could also be called <b>Fixed ListView</b>, as it corrects a number of annoying problems with the standard List View that Microsoft delivers to Visual Studio customers.
    +</em></blockquote><strong>DevProConnections.com Review</strong></div></div>
    +
    +</div></div>
    +      
    +        
    +        
    +    
    +    
    +    </div>
    +    
    +    <div class="left">
    +      
    +      <div class="buttons-box">
    +        <a onclick="ga('send', 'event', 'trial', 'click');" data-sumome-listbuilder-id="4016d967-e098-487d-a20e-da328d2345df" class="standard-download image-link">Download Free Trial - With sample projects</a>
    +          <a href="pricing-licensing/better-listview.html" class="standard-buy image-link">See Pricing &amp; Licensing</a>
    +        <p>Version 3.15 / May 27, 2015</p>
    +      </div>
    +      <div class="compatibility">
    +        <p><strong>Seamless integration with .NET 2.0 and higher</strong></p>
    +        <div class="documentation">
    +          <p><a href="better-listview/quick-start-guide.html" onclick="window.open(this.href); return false">See Quick Start Guide</a></p>
    +          <p><a href="better-listview/documentation.html" onclick="window.open(this.href); return false">See Documentation</a></p>
    +        
    +          <p><a href="better-listview/class-reference.html" onclick="window.open(this.href); return false">See Class Reference</a></p>
    +        
    +        </div>
    +      </div>
    +      
    +  
    +    
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/15/blv-overview_original_1326499754.png?1326474554" class="screenshot" title="Better ListView control"><img alt="Better ListView" src="http://assets.componentowl.com/screenshots/15/blv-overview_thumb_1326499754.png?1326474554" /></a></p>
    +      </div>
    +      <div class="newsletter">
    +  <form action="http://www.componentowl.com/subscriptions" class="new_subscription" id="new_subscription_product" method="post" onsubmit="if (!validate_newsletter_form(this)) return false; jQuery.ajax({data:jQuery.param(jQuery(this).serializeArray()) + '&amp;authenticity_token=' + encodeURIComponent('dJeFtbWrARc0arEomU+SG+XtypwJr2F4Kc9v14woStM='), dataType:'script', type:'post', url:'/subscriptions'}); return false;"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="dJeFtbWrARc0arEomU+SG+XtypwJr2F4Kc9v14woStM=" /></div>  <input id="subscription_subscription_location_id" name="subscription[subscription_location_id]" type="hidden" value="512994065" />
    +  <input id="form_id" name="form_id" type="hidden" value="#new_subscription_product" />  
    +  <strong>Receive product updates<br />and news via email:</strong>
    +    <div><input class="email inline-label" id="product-newsletter-email" name="subscription[email]" size="30" type="text" value="Your Email" /></div>
    +    <div id="product-newsleter-lists" class="subscription-lists-ct" style="display: none"><input name="subscription[subscription_list_ids][]" type="hidden" value="970100327" />
    +<input name="subscription[subscription_list_ids][]" type="hidden" value="1009842129" /></div>
    +    <span class="dbtn-c subscribe dbtn-small" id="send"><span class="dbtn-w"><input class="dbtn" name="commit" type="submit" value="Subscribe" /></span></span>
    +  </form></div>
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/16/thumbnails_original_1312133021.png?1312107821" class="screenshot" title="Image thumbnails in groups"><img alt="Thumbnails" src="http://assets.componentowl.com/screenshots/16/thumbnails_thumb_1312133021.png?1312107821" /></a></p>
    +      </div>
    +      
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/21/multi-line-items_original_1312133213.png?1312108013" class="screenshot" title="Items with multi-line text"><img alt="Multi-line Items" src="http://assets.componentowl.com/screenshots/21/multi-line-items_thumb_1312133213.png?1312108013" /></a></p>
    +      </div>
    +      
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/18/betterlistview-tree-hierarchy_original_1313676477.png?1313651277" class="screenshot" title="Items organized in a tree-like hierarchy"><img alt="Item Hierarchy" src="http://assets.componentowl.com/screenshots/18/betterlistview-tree-hierarchy_thumb_1313676477.png?1313651277" /></a></p>
    +      </div>
    +      
    +    
    +      
    +    
    +      <div class="small-button-ct">
    +        <a href="better-listview/screenshots.html" class="small-button"><span>More Screenshots</span></a>
    +      </div>
    +    
    +    
    +    
    +    
    +  
    +      
    +    </div>
    +    
    +  </div>
    +  
    +  <div class="buttons-wrap">
    +    <div class="buttons">
    +      <a onclick="ga('send', 'event', 'trial', 'click');" data-sumome-listbuilder-id="4016d967-e098-487d-a20e-da328d2345df" class="standard-download image-link">Download Free Trial - With sample projects</a>
    +      
    +        <a href="pricing-licensing/better-listview.html" class="standard-buy image-link">See Pricing &amp; Licensing</a>
    +      
    +    </div>
    +  </div>
    +  
    +</div>
    +
    +<div id="screenshot-buttons" style="display: none">
    +  <div class="buttons">
    +    <a href="betterlistview.exe" class="small-download image-link" onclick="download_email('better-listview');">Free Download</a>
    +    <a href="pricing-licensing/better-listview.html" class="small-buy image-link">See Pricing &amp; Licensing</a>
    +  </div>
    +</div>
    +          </div>
    +        </div>
    +      
    +      
    +      
    +      <div class="d-footer">
    +  <div class="d-placing">
    +    
    +    <div class="left">
    +      <div class="latest-posts">
    +        <h3 class="latest_from_blog"><a href="blog.html">Latest From Our Blog</a></h3>
    +        
    +          <h4><a href="blog/index.html%3Fp=927.html">Activation issues and how to solve them</a></h4>
    +          <div class="post-info">Wednesday, 01 March 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=921.html">The Three Main Advantages Better ListView has Over the Classic .NET Framework</a></h4>
    +          <div class="post-info">Thursday, 09 February 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=914.html">BLV and Internet Explorer</a></h4>
    +          <div class="post-info">Sunday, 13 November 2016</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=906.html">Centering Images in Better ListView Sub-items</a></h4>
    +          <div class="post-info">Wednesday, 06 August 2014</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=901.html">Sub-item Check Boxes in Better ListView</a></h4>
    +          <div class="post-info">Sunday, 06 July 2014</div>
    +        
    +      </div>
    +      <div class="other-posts"><a href="blog.html">See more posts &raquo;</a></div>
    +    </div>
    +    
    +    <div class="right">
    +      <div class="news">
    +        <ul class="links">
    +          <li><a href="feeds.rss" class="rss">Subscribe to our RSS</a></li>
    +          <li><a href="http://twitter.com/ComponentOwl" class="twitter">Follow us on twitter</a></li>
    +        </ul>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistview.exe" onclick="download_email('better-listview');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better SplitButton 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="bettersplitbutton.exe" onclick="download_email('better-splitbutton');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better Thumbnail Browser 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterthumbnailbrowser.exe" onclick="download_email('better-thumbnail-browser');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item last-item">
    +          <div class="date">08<span>Apr</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.14.0 released!</h4>
    +            <p>
    +              
    +                <a href="better-listview-express/releases%3Fsince=3.14.0.html">See what's new</a>
    +                or
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +      </div>
    +    </div>
    +    
    +  </div>
    +  <div class="d-placing">
    +    <hr />
    +    <div class="copy"><div class="social"><a href="support.html" class="feedback">Contact Us (Feedback)</a> <span>|</span> <a href="feeds.rss" class="rss">RSS</a> <span>|</span> <a href="https://twitter.com/ComponentOwl" class="twitter">Twitter</a> <span>|</span> <a href="sitemap.html" class="sitemap">Sitemap</a> <span>|</span> Our <a href="index.html" class="stdl">task management software</a> that uses Better ListView</div>
    +Copyright &copy; 2021 ComponentOwl.com, All rights reserved. Read our <a href="eula.html">EULA</a>, <a href="disclaimer.html">Disclaimer</a> and <a href="privacy-policy.html">Privacy Policy</a>.<br /></div>
    +  </div>
    +  
    +</div>
    +      
    +    </div>
    +    
    +    <script src="javascripts/app_packaged.js%3F1455269826" type="text/javascript"></script>
    +<script async>(function(s,u,m,o,j,v){j=u.createElement(m);v=u.getElementsByTagName(m)[0];j.async=1;j.src=o;j.dataset.sumoSiteId='854b5e00f297990012cc230023375a00787c0000216621002775a800d79ad500';v.parentNode.insertBefore(j,v)})(window,document,'script','//load.sumo.com/');</script>
    +  </body>
    +</html>
    diff --git a/images/icons/arrow-popup.gif b/images/icons/arrow-popup.gif
    new file mode 100644
    index 0000000..3728460
    Binary files /dev/null and b/images/icons/arrow-popup.gif differ
    diff --git a/images/icons/book.gif b/images/icons/book.gif
    new file mode 100644
    index 0000000..16f1282
    Binary files /dev/null and b/images/icons/book.gif differ
    diff --git a/images/icons/component-owl-gray.jpg b/images/icons/component-owl-gray.jpg
    new file mode 100644
    index 0000000..5224883
    Binary files /dev/null and b/images/icons/component-owl-gray.jpg differ
    diff --git a/images/icons/dextronet-bird-gray.jpg b/images/icons/dextronet-bird-gray.jpg
    new file mode 100644
    index 0000000..5ebc6ec
    Binary files /dev/null and b/images/icons/dextronet-bird-gray.jpg differ
    diff --git a/images/icons/documentation.gif b/images/icons/documentation.gif
    new file mode 100644
    index 0000000..b7bba3a
    Binary files /dev/null and b/images/icons/documentation.gif differ
    diff --git a/images/icons/facebook-32.png b/images/icons/facebook-32.png
    new file mode 100644
    index 0000000..9eda9bc
    Binary files /dev/null and b/images/icons/facebook-32.png differ
    diff --git a/images/icons/info.gif b/images/icons/info.gif
    new file mode 100644
    index 0000000..f96b9c0
    Binary files /dev/null and b/images/icons/info.gif differ
    diff --git a/images/icons/mail.gif b/images/icons/mail.gif
    new file mode 100644
    index 0000000..e929388
    Binary files /dev/null and b/images/icons/mail.gif differ
    diff --git a/images/icons/pencil.gif b/images/icons/pencil.gif
    new file mode 100644
    index 0000000..74d4ef9
    Binary files /dev/null and b/images/icons/pencil.gif differ
    diff --git a/images/icons/rss-32.png b/images/icons/rss-32.png
    new file mode 100644
    index 0000000..fbde3c7
    Binary files /dev/null and b/images/icons/rss-32.png differ
    diff --git a/images/icons/stackoverflow.gif b/images/icons/stackoverflow.gif
    new file mode 100644
    index 0000000..93457fc
    Binary files /dev/null and b/images/icons/stackoverflow.gif differ
    diff --git a/images/icons/tick.gif b/images/icons/tick.gif
    new file mode 100644
    index 0000000..807e69d
    Binary files /dev/null and b/images/icons/tick.gif differ
    diff --git a/images/icons/twitter-32.png b/images/icons/twitter-32.png
    new file mode 100644
    index 0000000..ae29a5d
    Binary files /dev/null and b/images/icons/twitter-32.png differ
    diff --git a/images/icons/user.gif b/images/icons/user.gif
    new file mode 100644
    index 0000000..758ae00
    Binary files /dev/null and b/images/icons/user.gif differ
    diff --git a/images/libor.jpg?1455269978 b/images/libor.jpg?1455269978
    new file mode 100644
    index 0000000..07ee05f
    Binary files /dev/null and b/images/libor.jpg?1455269978 differ
    diff --git a/images/logo-dotnet-big.gif?1455269978 b/images/logo-dotnet-big.gif?1455269978
    new file mode 100644
    index 0000000..1ee80d2
    Binary files /dev/null and b/images/logo-dotnet-big.gif?1455269978 differ
    diff --git a/images/logo-dotnet.gif?1455269978 b/images/logo-dotnet.gif?1455269978
    new file mode 100644
    index 0000000..38f66ff
    Binary files /dev/null and b/images/logo-dotnet.gif?1455269978 differ
    diff --git a/images/logo-vs-big.gif?1455269978 b/images/logo-vs-big.gif?1455269978
    new file mode 100644
    index 0000000..788e024
    Binary files /dev/null and b/images/logo-vs-big.gif?1455269978 differ
    diff --git a/images/logo-vs.gif?1455269978 b/images/logo-vs.gif?1455269978
    new file mode 100644
    index 0000000..1ad4474
    Binary files /dev/null and b/images/logo-vs.gif?1455269978 differ
    diff --git a/images/logo-win.gif?1455269978 b/images/logo-win.gif?1455269978
    new file mode 100644
    index 0000000..f187f74
    Binary files /dev/null and b/images/logo-win.gif?1455269978 differ
    diff --git a/images/lower-side-bg.jpg.html b/images/lower-side-bg.jpg.html
    new file mode 100644
    index 0000000..04c2a1d
    --- /dev/null
    +++ b/images/lower-side-bg.jpg.html
    @@ -0,0 +1,580 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
    +  <head>
    +<!-- Google Tag Manager -->
    +<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    +new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    +j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    +'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    +})(window,document,'script','dataLayer','GTM-TMSFLB4');</script>
    +<!-- End Google Tag Manager -->
    +<script>
    +  function gainit()
    +  {
    +    ga('create', 'UA-16362539-4', 'auto');
    +    console.log('ga init');
    +  }
    +  window.onload=gainit;
    +</script>
    +    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    +<meta name="keywords" content="better listview, list view, listview, list view control, list view component, .net list view, list view replacement, list view alternative, improved list view, enhanced list view" />
    +<meta name="description" content="Better ListView is an alternative List View control - the ideal replacement for the regular .NET listview component. For WinForms C#/VB.net." />
    +<meta name="author" content="ComponentOwl" />
    +<meta http-equiv="Title" content="Better ListView for .NET (C#, VB) - Alternative list view component" />
    +<meta name="copyright" content="(c) 2010-2018 ComponentOwl" />
    +<meta name="distribution" content="Global" />
    +<meta name="rating" content="General" />
    +<meta name="robots" content="All" />
    +<meta http-equiv="Content-Language" content="en" />
    +<meta name="verify-v1" content="NK0H1gWia1vxGZ2Yhr59gsS0/P2/USBI1DVA18VkzjM=" />
    +<meta name="google-site-verification" content="O7Dwtzu5x_Mob9u98uxqpZ-_wCLGpEkx2IL0UYVQ4ac" />
    +<title>Better ListView for .NET (C#, VB) - Alternative list view component</title>
    +<link rel="alternate" type="application/rss+xml" title="Component Owl Feed: Latest releases, news and tips &amp; tricks from our blog" href="feeds.rss" />
    +<link rel="alternate" type="application/rss+xml" title="Component Owl's Comics: Latest comic strips for developers by Libor Tinka" href="comics.rss" />
    +    <link href="stylesheets/base_packaged.css%3F1455269822.css" media="screen" rel="stylesheet" type="text/css" />
    +    
    +  </head>
    +  <body>
    +<!-- Google Tag Manager (noscript) -->
    +<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TMSFLB4"
    +height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    +<!-- End Google Tag Manager (noscript) -->
    +    <div class="d-page">
    +
    +<div class="d-header d-placing">
    +  
    +  <ul class="d-menu">
    +    <li class=""><a href="index.html" class="menu-item">Home</a></li>
    +    <li class="active with-dropdown">
    +      <a href="better-listview.html" class="menu-item">Products</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 370px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          <div class="dropdown-category">WinForms Components</div>
    +          
    +            
    +            <a href="better-listview.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-32-1355160256.png?1355135056" /> Better ListView<br /><span class="subline">Ultimate ListView control for .NET</span></a>
    +          
    +            
    +            <a href="better-thumbnail-browser.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-thumbnail-browser-32-1355160281.png?1355135081" /> Better Thumbnail Browser<br /><span class="subline">Thumbnail loading and browsing control for .NET</span></a>
    +          
    +            
    +            <a href="better-splitbutton.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-splitbutton-32-1355160307.png?1355135107" /> Better SplitButton<br /><span class="subline">Free customizable dropdown button control</span></a>
    +          
    +            
    +            <a href="better-listview-express.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-express-32-1355160327.png?1355135127" /> Better ListView Express<br /><span class="subline">Free edition with less features</span></a>
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="">
    +      <a href="pricing-licensing/better-listview.html" class="menu-item">Purchase</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 330px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-listview.html" class="featured-item">Better ListView</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-thumbnail-browser.html" class="featured-item">Better Thumbnail Browser</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-splitbutton.html">Better SplitButton</a>
    +          
    +        
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class=""><a href="support.html" class="menu-item">Support</a></li>
    +    <li class=""><a href="articles.html" class="menu-item">Articles</a></li>
    +    <li class=""><a href="blog.html" class="menu-item">Blog</a></li>
    +    <li class=""><a href="comics/43.html" class="menu-item">Comics</a></li>
    +    <li class=""><a href="about-us.html" class="menu-item">About Us</a></li>
    +  </ul>
    +  <div class="d-logo">
    +    <a href="index.html" class="logoimg"><img alt="Component Owl" src="images/componentowl.gif%3F1455269978" /></a>
    +    <g:plusone size="medium" count="false" href="http://www.componentowl.com"></g:plusone>
    +  </div>
    +</div>
    +      
    +      
    +      
    +        <div class="d-placing">
    +          <div class="d-content-wrap">
    +            <div class="subpage product-content">
    +  <h1>Better ListView: Alternative list view control for .NET</h1>
    +  
    +  <p class="section-info">Ideal .NET WinForms (C#, VB.net) replacement list view component. More features, less limitations, fast and optimized.</p>
    +  
    +  <div class="sides">
    +    
    +    <div class="right">
    +      
    +    
    +
    +        
    +        
    +      <input id="tabs-initial-index" name="tabs-initial-index" type="hidden" value="-1" />
    +      
    +      <ul id="nav" class="nav">
    +        
    +        <li><a href="better-listview.html" class="current">Overview</a></li>
    +        
    +        <li><a href="better-listview/screenshots.html" class="">Screenshots</a></li>
    +        
    +        <li><a href="better-listview/comparison-table.html" class="">Comparison</a></li>
    +        
    +        <li><a href="better-listview/resources.html" class="">Resources</a></li>
    +        
    +        <li><a href="better-listview/story.html" class="">Story</a></li>
    +        
    +      </ul>
    +      
    +      <div id="nav-panel" class="nav-panel product-detail"><div class="features-page">
    +  <ul class="common">
    +        <li>Better ListView is a <strong>list view control for .NET Windows Forms</strong></li>
    +        <li>Designed as a replacement for the regular .NET list view control.</li>
    +        <li>Compatible with: Visual Studio 2015, 2013, 2012, 2010, 2008, 2005, with full designer support.</li>
    +        <li>For C#, Visual Basic .NET (VB.NET), managed C++, and other CLI languages.</li>
    +        <li>Compatible with .NET 4.5, .NET 4, .NET 3.5, .NET 3, .NET 2, and newer. Supports .NET Client Profile.</li>
    +        <li>Runs on Windows 10, 8, 7, Vista, 2003, XP, 2000, and newer, both 32-bit and 64-bit.</li>
    +        <li>Better ListView has <strong>more features and flexibility</strong>, always uses the <strong>current system theme</strong> (including <strong>Aero</strong> support), and <strong>removes limitations</strong> of the regular .NET list view control.</li>
    +        <li><strong>Minimum learning needed</strong>. Better ListView can be used just like the regular list view.</li>
    +        <li>Written in <strong>pure managed C# code</strong>. It is fast, <strong>light-weight</strong> and optimized for 10k+ items.</li>
    +        <li>Easy royalty-free deployment. Single DLL file that has just 250kB when compressed.</li>
    +		<li>The assembly is <strong><a href="http://www.nist.gov/itl/fipsinfo.cfm" target="_blank">FIPS-compliant</a></strong>, CLS-compliant, <strong>digitally signed</strong> and strongly named.</li>
    +        <li>Tested in the real world by thousands of users</li>
    +  </ul>
    +  
    +<div class="image"><img alt="Better ListView control" src="http://assets.componentowl.com/images/7/Overview Collage_original_1367470843.png?1367445643" /></div>
    +  
    +<h2>Extra features summary</h2>
    +
    +Better ListView is fast and flicker-free, supports hierarchical items, has improved grouping, better drag &amp; drop and item reordering support, better column headers, inbuilt sorting, multi-column sorting, better images support, context menus for column headers and items, embedded controls for editing support, automatic and custom sizing of items and images, thumbnails view, richer event data, item text formatting, XML and binary serialization, data-binding, owner-drawing options, better tooltips, powerful hit-test, improved usability, easy saving/loading of contents into file or string, multi-line items, and more.
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +Component Owl created <b>the one and only tool I don’t want to be without when it comes to software developing in Visual Studio</b>. Also, I’ve been working as software user/developer for the last 26 years, and <b>I have never before experienced a support that really goes the needed extra mile to make things work</b>, like the guys at Component Owl do.
    +</em></blockquote><strong>Göran Alfvén, Sweden</strong></div></div>
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +The control is <b>very easy and intuitive to use and is well documented</b>.
    +</em></blockquote><strong>DevProConnections.com Review</strong></div></div>
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +Better List View is <b>awesome</b>.
    +</em></blockquote><strong>Daniel N</strong></div></div>
    +
    +<h3>Hierarchical items</h3>
    +
    +You can create tree-like structures in Better ListView; inbuilt drag &amp; drop hierarchical reordering of items.
    +
    +<h3>Improved grouping</h3>
    +
    +Better grouping – customizable group headers look and behavior, collapsible, image support, context menu support, focusable, etc. Each group header can be customized individually.
    +
    +<h3>Save/load contents with 1 line of code</h3>
    +
    +You can save or load the contents of Better ListView in just 1 line of code, either to file or string. Both XML and binary serialization is supported.
    +
    +<h3>Double-buffered and flicker free</h3>
    +
    +Simply put, Better ListView is smooth. Regular listview requires multiple anti-flicker techniques, but you do not have to worry about that with Better ListView. Better ListView is optimized for 100k+ items.
    +
    +<h3>Column header images</h3>
    +
    +You can use images in column headers. Custom image sizes are supported.
    +
    +<div class="image"><img alt="Column Header Images" src="http://assets.componentowl.com/images/8/Column Header Images_original_1298620501.png?1298595301" /></div>
    +  
    +<h3>Sub-item images</h3>
    +
    +You can set images to list view sub-items. Regular list view allows you to set only one image per list view item, but Better ListView can show image for every sub-item (in every column).
    +
    +<h3>Image-List and Image Support</h3>
    +
    +Better ListView supports both image list, or individual image objects (System.Drawing.Image). Regular list view forces you to use ImageList object.
    +
    +<h3>Custom list view Image size</h3>
    +
    +You can use any image size in the list view. Better ListView can also automatically resize images with preserving aspect ratio.
    +  
    +<h3>Drag &amp; drop with insertion mark</h3>
    +
    +Highly customizable drag-drop for both internal and external drag-drop. You can use drop highlight or insertion mark drag drop modes.
    +  
    +<div class="image"><img alt="List View Item Reordering Mark Preview" src="http://assets.componentowl.com/images/21/List View Item Reordering Mark Preview_original_1298631798.png?1298606598" /></div>
    +  
    +<h3>List view item reordering</h3>
    +  
    +Better ListView has inbuilt item reordering and item drag &amp; drop inserting at the position specified by user. Drag &amp; drop preview is shown using an insertion mark.
    +  
    +<h3>Column-header reordering</h3>
    +  
    +Better ListView has inbuilt easy drag &amp; drop column header reordering that is much easier to use than in the regular list view. Insertion mark is shown, auto-scrolling is supported.
    +  
    +<div class="image"><img alt="Column Header Reordering With Insertion Mark" src="http://assets.componentowl.com/images/9/Column Header Reordering With Insertion Mark_original_1298621331.png?1298596131" /></div>
    +  
    +<h3>Auto-scroll for column header reordering and item reordering</h3>
    +
    +Better ListView has inbuilt auto-scrolling for column header and item reordering.
    +  
    +<h3>Column headers can be shown in all views</h3>
    +
    +Better ListView can display column headers in all views - Details, SmallIcons, LargeIcons, List, Tile, Thumbnails. This allows users to sort items in all views. Additionally, you can also hide the column headers even in the details view.
    +  
    +<div class="image"><img alt="Column Headers in LargeIcons View" src="http://assets.componentowl.com/images/10/Column Headers In LargeIcons View_original_1298622038.png?1298596838" /></div>
    +  
    +<h3>Thumbnails view mode</h3>
    +
    +Better ListView supports additional "thumbnails" view mode that allows you to view images of large sizes. The images are automatically and smoothly resized with preserved aspect ratio. You can define the maximum/minimum desired image sizes.
    +
    +<h3>Image shadows, borders and padding</h3>
    +All images in Better ListView can have border or shadow specified. You can also specify padding that gives you space for owner drawing (eg. overlay images). This can be used in all views.
    +  
    +Image shadows like in Windows 7 theme are supported. Windows Explorer uses very similar shadows for image thumbnails.
    +  
    +<div class="image"><img alt="ListView Image Shadows and Image Borders" src="http://assets.componentowl.com/images/11/ListView Image Shadows and Image Borders_original_1298622678.png?1298597478" /></div>
    +  
    +<h3>Multi-column sorting</h3>
    +
    +You can sort by multiple columns in Better ListView. Simply shift+click a secondary (or third, etc) column to add it to the current sort. Zero code needed. Additionally, the background of the primary (first) sort column can be highlighted.
    +  
    +<div class="image"><img alt="Multi Column Sort in List View" src="http://assets.componentowl.com/images/12/Multi Column Sort in List View_original_1298623013.png?1298597813" /></div>
    +  
    +<h3>Inbuilt sorting and natural sorting</h3>
    +  
    +Better ListView has inbuilt list view sorting that works out of the box. You no longer need to implement your own item comparer. If custom comparer is needed, you can inherit from the Better ListView comparer to save time.
    +  
    +<h3>Richer event data</h3>
    +  
    +Many events have richer event data that allow you to do extra operations or tell you extra useful information. The richer events include: AfterItemSort, BeforeDrag, BeforeItemSort, ColumnClick (allows you to cancel sort), DragDropException, DrawBackground, DrawColumnHeaderBackground, DrawColumnHeader, DrawItemBackground, DrawItem, HitTestChanged, ItemActivate (event data tells you how the item got activated - mouse, keyboard or code), ItemDrag, ItemDrop, ItemReorder, ItemSearch, LabelEdit, RequestEmebeddedControl.
    +
    +<h3>Checkboxes in all views</h3>
    +
    +You can have checkboxes in LargeIcons view, SmallIcons view, List view, Thumbnails view and of course also in the Details view.
    +  
    +<div class="image"><img alt="Checkboxes In LargeIcons View" src="http://assets.componentowl.com/images/13/Checkboxes In LargeIcons View_original_1298623385.png?1298598185" /></div>
    +  
    +<h3>Three state checkboxes</h3>
    +Three state checkboxes are supported in Better ListView:
    +  
    +<div class="image"><img alt="Three-State Checkboxes in List View" src="http://assets.componentowl.com/images/14/Three State Checkboxes in List View_original_1298624577.png?1298599377" /></div>
    +
    +<h3>Hide or show checkboxes of specific ListView Items</h3>
    +
    +You can hide checkbox for any ListViewItem. You can also show checkboxes only for specified items. All list items in Better ListView have "AllowShowCheckBox" property.
    +
    +<div class="image"><img alt="Show or hide checkboxes for specific listview items" src="http://assets.componentowl.com/images/23/show-or-hide-checkboxes-for-specific-listview-items_original_1299748307.png?1299723107" title="Show or hide checkboxes for specific listview items" /></div>
    +  
    +<h3>Powerful list view tooltips</h3>
    +
    +You can display tooltips for nearly any part of Better ListView - tooltips for items, sub-items, checkboxes, item images, sub-item images, column headers, column header images, column header borders, and even for custom areas (regions). Owner-drawn tooltips are supported.
    +  
    +<div class="image"><img alt="List View Regional Tooltips and Owner Drawn Tooltips" src="http://assets.componentowl.com/images/15/List View Tooltips Region And Owner Drawn Tooltips_original_1298632357.png?1298607157" /></div>
    +  
    +<h3>Uses current Windows theme</h3>
    +  
    +Instead of implementing custom, un-native look and feel, Better ListView always automatically fully uses the current system theme. It supports Aero as well. Better ListView always looks great and feels right to the user.
    + 
    +<h3>XML and binary serialization of everything</h3>
    +  
    +Every part of Better ListView (items, sub-items, column headers) can be both binary and XML serialized. You can easily XML serialize whole list view (or binary serialize) to save it to file or transfer items between controls. Standard ways of .NET serialization can be used (BinaryFormatter, XmlSerializer).
    +  
    +<h3>Owner drawing</h3>
    +
    +Better ListView allows you to draw over the client area, items and column headers. Contrary to .NET ListView, owner drawing is fully operational even when the system uses Aero theme. You can draw separately to background and foreground parts of Better ListView without worrying about proper drawing order. Owner drawing events provide rich data, including exact item state and areas of every item part.
    +  
    +<div class="image"><img alt="List View Owner Drawing Background Gradient" src="http://assets.componentowl.com/images/22/List View Owner Drawing Background Gradient_original_1298633053.png?1298607853" /></div>
    +
    +<h3>Multi-line items</h3>
    +
    +Better ListView supports multi-line items. Items with very long text can be displayed on multiple lines. Highly customizable and powerful: Focused items can have custom number of lines; hard line breaks supported as well. Foreground overlay "watermark" images are easily achievable using owner-drawing.
    +
    +<div class="image"><img src="http://assets.componentowl.com/screenshots/21/multi-line-items_original_1312133213.png?1312133213" alt="Multi-line items"></div>
    +  
    +<h3>Background image support</h3>
    +
    +Display background image in Better ListView easily using the BackgroundImage property. Many layouts (stretch, tile, none), alignments (top, bottom, left, right, center and combinations) are supported, as well as customizable opacity.
    +
    +<div class="image"><img alt="ListView Background Image" src="http://assets.componentowl.com/images/27/Background-Images_original_1326106027.png?1326080827" title="ListView Background Image" /></div>
    +
    +<h3>Context menu for column headers, list items, and empty area</h3>
    +
    +Better ListView supports 3 types of context menus: Column header context menu, list view items context menu, and empty area context menu (when right-clicking white space).
    +  
    +<div class="image"><img alt="Column Header Context Menu in List View" src="http://assets.componentowl.com/images/17/Column Header Context Menu in List View_original_1298721855.png?1298696655" /></div>
    +  
    +<h3>Advanced hit-test with detailed information</h3>
    +The hit test in Better ListView returns very detailed information. It tells you not only the location (Client Area, Sub-Item, Sub-Item Text, Sub-Item Image, Checkbox, Column Header Image, and many more), but it also tells you the state of the item, and part of the item (left or right).
    +
    +<div class="image"><img alt="Advanced Hit-Test With Detailed Information" src="http://assets.componentowl.com/images/26/Advanced-Hit-Test_original_1326105831.png?1326080631" title="Advanced Hit-Test With Detailed Information" /></div>
    +
    +<h3>Customizable search-by-typing</h3>
    +
    +Better ListView has excellent customization functionality for find-as-you-type item searching. The search modes include: Prefix (searchs from beginning of items), Substring (search any part of item text), Prefix + Substring, or Disabled. Additionally, search options include: Case sensitive, search first word only, play sound when item not found, prefer prefixes, search whole words. You can also restrict the search to only certain columns. You can also call "FindItemsWithText" function to find items from code.
    +
    +<h3>Display text when the list view is empty</h3>
    +You can display a gray text centered in the list view if it's empty to hint or educate users. This will make your software more user friendly.
    +  
    +<div class="image"><img alt="Show Text When List View is Empty" src="http://assets.componentowl.com/images/18/Show Text When List View is Empty_original_1298629916.png?1298604716" /></div>
    +  
    +<h3>Embed controls for item editing</h3>
    +Inbuilt in-line editing support includes label edit, combobox edit, date picker edit. You can also embed any custom control for in-line editing. Sub-item editing is supported. Highly customizable.
    +  
    +<div class="image"><img alt="Custom Embedded Control in List View for Editing" src="http://assets.componentowl.com/images/19/Custom Embedded Control in List View for Editing_original_1298630263.png?1298605063" /></div>
    +  
    +<h3>ListView item text formatting</h3>
    +
    +Supports both text trimming and auto-ellipsis for text that's too long. You can choose from: TrimCharacter, TrimWord, EllipsisCharacter, EllipsisWord, EllipsisPath (for file paths). Column header text can be broken into multiple lines.
    +
    +<h3>Focusable ListView sub-items and groups</h3>
    +
    +Focus sub-items or groups in Better ListView easily with keyboard. Just use the arrow keys. (This is impossible with the regular .NET ListView)
    +<div class="image"><img alt="Focusable sub-items in Better ListView" src="http://assets.componentowl.com/images/25/focus-list-view-sub-items_original_1313674098.png?1313648898" title="Focusable sub-items in Better ListView" /></div>
    +
    +<h3>Automatic list view layout</h3>
    +
    +Better ListView can auto-size item images, item text, column header images, column header text.
    +  
    +<h3>Custom list view item size</h3>
    +
    +You can set custom sizes for item text area and item images. You can also set custom size for column header text area and column header images. (Text area size is different from font size, text area size basically defines the size of the list view item.) This enables you to make tiny/huge column headers or list view items.
    +  
    +<div class="image"><img alt="Custom Item Size in List View" src="http://assets.componentowl.com/images/20/Custom Item Size in List View_original_1298630739.png?1298605539" /></div>
    +  
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +It's an odd thing when you're inspired by a form component, but Component Owl 
    +with their Better ListView has done it. Love its native feel.
    +</em></blockquote><strong>Daniel N, USA</strong></div></div>
    +
    +  <h2>More advantages of our improved list view component:</h2>
    +  <ul class="common">
    +        <li><strong>Developer friendly</strong>: All classes and properties are as similar to the regular list view as possible. Everything is intuitive, very little learning is needed. You can use Better ListView immediately. <strong>Save time and ship sooner</strong>.</li>
    +        <li><strong>Better ListView has improved usability and fixed behavior</strong>. All Windows users are familiar with the list view used in Windows Explorer. Better ListView mimicks behavior and look &amp; feel of the Windows Explorer list view as much as possible to leverage the existing user knowledge. <strong>Using Better ListView is pleasant for users.</strong> Many other list view components implement custom look and behavior and can oftentimes downright frustrate users (many controls don't even support mouse-wheel scrolling!) This doesn't happen with Better ListView.</li>
    +        <li><strong>Guaranteed support and continued development</strong>: Better ListView is developed as a joint-venture of two software companies that use Better ListView in their main products (popular <strong><a href="http://www.dextronet.com/swift-to-do-list-software" target="_blank">Swift To-Do List</a></strong> and <strong><a href="http://www.imagingshop.com" target="_blank">ImagingShop</a></strong>). These applications are used by thousands of users daily. This is your guarantee that Better ListView will be supported and developed in the future.</li>
    +        <li><strong>Tested in real world applications by thousands of users</strong>: Because Better ListView is used in professional consumer desktop software applications - Swift To-Do List and ImagingShop, thousands of users work with Better ListView every day. Although we use unit tests that cover most of code, and do thorough inhouse testing, this is your true guarantee that it is tested thoroughly in the real world. It is <strong>extremely stable</strong>.</li>
    +        <li>Better ListView does <strong>not</strong> inherit from the regular .NET list view. It is written in pure managed C# code and is flexible, light weight, and fast. Extensions of the regular .net list view only go so far. Better ListView goes further. Soure code licenses are also available for ultimate customization.</li>
    +  </ul>
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +In addition to creating a new List View control to incorporate <b>broader flexibility and functionality</b>, Better ListView could also be called <b>Fixed ListView</b>, as it corrects a number of annoying problems with the standard List View that Microsoft delivers to Visual Studio customers.
    +</em></blockquote><strong>DevProConnections.com Review</strong></div></div>
    +
    +</div></div>
    +      
    +        
    +        
    +    
    +    
    +    </div>
    +    
    +    <div class="left">
    +      
    +      <div class="buttons-box">
    +        <a onclick="ga('send', 'event', 'trial', 'click');" data-sumome-listbuilder-id="4016d967-e098-487d-a20e-da328d2345df" class="standard-download image-link">Download Free Trial - With sample projects</a>
    +          <a href="pricing-licensing/better-listview.html" class="standard-buy image-link">See Pricing &amp; Licensing</a>
    +        <p>Version 3.15 / May 27, 2015</p>
    +      </div>
    +      <div class="compatibility">
    +        <p><strong>Seamless integration with .NET 2.0 and higher</strong></p>
    +        <div class="documentation">
    +          <p><a href="better-listview/quick-start-guide.html" onclick="window.open(this.href); return false">See Quick Start Guide</a></p>
    +          <p><a href="better-listview/documentation.html" onclick="window.open(this.href); return false">See Documentation</a></p>
    +        
    +          <p><a href="better-listview/class-reference.html" onclick="window.open(this.href); return false">See Class Reference</a></p>
    +        
    +        </div>
    +      </div>
    +      
    +  
    +    
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/15/blv-overview_original_1326499754.png?1326474554" class="screenshot" title="Better ListView control"><img alt="Better ListView" src="http://assets.componentowl.com/screenshots/15/blv-overview_thumb_1326499754.png?1326474554" /></a></p>
    +      </div>
    +      <div class="newsletter">
    +  <form action="http://www.componentowl.com/subscriptions" class="new_subscription" id="new_subscription_product" method="post" onsubmit="if (!validate_newsletter_form(this)) return false; jQuery.ajax({data:jQuery.param(jQuery(this).serializeArray()) + '&amp;authenticity_token=' + encodeURIComponent('dJeFtbWrARc0arEomU+SG+XtypwJr2F4Kc9v14woStM='), dataType:'script', type:'post', url:'/subscriptions'}); return false;"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="dJeFtbWrARc0arEomU+SG+XtypwJr2F4Kc9v14woStM=" /></div>  <input id="subscription_subscription_location_id" name="subscription[subscription_location_id]" type="hidden" value="512994065" />
    +  <input id="form_id" name="form_id" type="hidden" value="#new_subscription_product" />  
    +  <strong>Receive product updates<br />and news via email:</strong>
    +    <div><input class="email inline-label" id="product-newsletter-email" name="subscription[email]" size="30" type="text" value="Your Email" /></div>
    +    <div id="product-newsleter-lists" class="subscription-lists-ct" style="display: none"><input name="subscription[subscription_list_ids][]" type="hidden" value="970100327" />
    +<input name="subscription[subscription_list_ids][]" type="hidden" value="1009842129" /></div>
    +    <span class="dbtn-c subscribe dbtn-small" id="send"><span class="dbtn-w"><input class="dbtn" name="commit" type="submit" value="Subscribe" /></span></span>
    +  </form></div>
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/16/thumbnails_original_1312133021.png?1312107821" class="screenshot" title="Image thumbnails in groups"><img alt="Thumbnails" src="http://assets.componentowl.com/screenshots/16/thumbnails_thumb_1312133021.png?1312107821" /></a></p>
    +      </div>
    +      
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/21/multi-line-items_original_1312133213.png?1312108013" class="screenshot" title="Items with multi-line text"><img alt="Multi-line Items" src="http://assets.componentowl.com/screenshots/21/multi-line-items_thumb_1312133213.png?1312108013" /></a></p>
    +      </div>
    +      
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/18/betterlistview-tree-hierarchy_original_1313676477.png?1313651277" class="screenshot" title="Items organized in a tree-like hierarchy"><img alt="Item Hierarchy" src="http://assets.componentowl.com/screenshots/18/betterlistview-tree-hierarchy_thumb_1313676477.png?1313651277" /></a></p>
    +      </div>
    +      
    +    
    +      
    +    
    +      <div class="small-button-ct">
    +        <a href="better-listview/screenshots.html" class="small-button"><span>More Screenshots</span></a>
    +      </div>
    +    
    +    
    +    
    +    
    +  
    +      
    +    </div>
    +    
    +  </div>
    +  
    +  <div class="buttons-wrap">
    +    <div class="buttons">
    +      <a onclick="ga('send', 'event', 'trial', 'click');" data-sumome-listbuilder-id="4016d967-e098-487d-a20e-da328d2345df" class="standard-download image-link">Download Free Trial - With sample projects</a>
    +      
    +        <a href="pricing-licensing/better-listview.html" class="standard-buy image-link">See Pricing &amp; Licensing</a>
    +      
    +    </div>
    +  </div>
    +  
    +</div>
    +
    +<div id="screenshot-buttons" style="display: none">
    +  <div class="buttons">
    +    <a href="betterlistview.exe" class="small-download image-link" onclick="download_email('better-listview');">Free Download</a>
    +    <a href="pricing-licensing/better-listview.html" class="small-buy image-link">See Pricing &amp; Licensing</a>
    +  </div>
    +</div>
    +          </div>
    +        </div>
    +      
    +      
    +      
    +      <div class="d-footer">
    +  <div class="d-placing">
    +    
    +    <div class="left">
    +      <div class="latest-posts">
    +        <h3 class="latest_from_blog"><a href="blog.html">Latest From Our Blog</a></h3>
    +        
    +          <h4><a href="blog/index.html%3Fp=927.html">Activation issues and how to solve them</a></h4>
    +          <div class="post-info">Wednesday, 01 March 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=921.html">The Three Main Advantages Better ListView has Over the Classic .NET Framework</a></h4>
    +          <div class="post-info">Thursday, 09 February 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=914.html">BLV and Internet Explorer</a></h4>
    +          <div class="post-info">Sunday, 13 November 2016</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=906.html">Centering Images in Better ListView Sub-items</a></h4>
    +          <div class="post-info">Wednesday, 06 August 2014</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=901.html">Sub-item Check Boxes in Better ListView</a></h4>
    +          <div class="post-info">Sunday, 06 July 2014</div>
    +        
    +      </div>
    +      <div class="other-posts"><a href="blog.html">See more posts &raquo;</a></div>
    +    </div>
    +    
    +    <div class="right">
    +      <div class="news">
    +        <ul class="links">
    +          <li><a href="feeds.rss" class="rss">Subscribe to our RSS</a></li>
    +          <li><a href="http://twitter.com/ComponentOwl" class="twitter">Follow us on twitter</a></li>
    +        </ul>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistview.exe" onclick="download_email('better-listview');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better SplitButton 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="bettersplitbutton.exe" onclick="download_email('better-splitbutton');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better Thumbnail Browser 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterthumbnailbrowser.exe" onclick="download_email('better-thumbnail-browser');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item last-item">
    +          <div class="date">08<span>Apr</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.14.0 released!</h4>
    +            <p>
    +              
    +                <a href="better-listview-express/releases%3Fsince=3.14.0.html">See what's new</a>
    +                or
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +      </div>
    +    </div>
    +    
    +  </div>
    +  <div class="d-placing">
    +    <hr />
    +    <div class="copy"><div class="social"><a href="support.html" class="feedback">Contact Us (Feedback)</a> <span>|</span> <a href="feeds.rss" class="rss">RSS</a> <span>|</span> <a href="https://twitter.com/ComponentOwl" class="twitter">Twitter</a> <span>|</span> <a href="sitemap.html" class="sitemap">Sitemap</a> <span>|</span> Our <a href="index.html" class="stdl">task management software</a> that uses Better ListView</div>
    +Copyright &copy; 2021 ComponentOwl.com, All rights reserved. Read our <a href="eula.html">EULA</a>, <a href="disclaimer.html">Disclaimer</a> and <a href="privacy-policy.html">Privacy Policy</a>.<br /></div>
    +  </div>
    +  
    +</div>
    +      
    +    </div>
    +    
    +    <script src="javascripts/app_packaged.js%3F1455269826" type="text/javascript"></script>
    +<script async>(function(s,u,m,o,j,v){j=u.createElement(m);v=u.getElementsByTagName(m)[0];j.async=1;j.src=o;j.dataset.sumoSiteId='854b5e00f297990012cc230023375a00787c0000216621002775a800d79ad500';v.parentNode.insertBefore(j,v)})(window,document,'script','//load.sumo.com/');</script>
    +  </body>
    +</html>
    diff --git a/images/microsoft-partner.png?1455269978 b/images/microsoft-partner.png?1455269978
    new file mode 100644
    index 0000000..18b2296
    Binary files /dev/null and b/images/microsoft-partner.png?1455269978 differ
    diff --git a/images/overview.gif?1455269978 b/images/overview.gif?1455269978
    new file mode 100644
    index 0000000..734bf6e
    Binary files /dev/null and b/images/overview.gif?1455269978 differ
    diff --git a/images/owl-flag.gif?1455269978 b/images/owl-flag.gif?1455269978
    new file mode 100644
    index 0000000..6109e94
    Binary files /dev/null and b/images/owl-flag.gif?1455269978 differ
    diff --git a/images/owl-small.gif b/images/owl-small.gif
    new file mode 100644
    index 0000000..304e2db
    Binary files /dev/null and b/images/owl-small.gif differ
    diff --git a/images/rss.gif b/images/rss.gif
    new file mode 100644
    index 0000000..6fa716e
    Binary files /dev/null and b/images/rss.gif differ
    diff --git a/images/ss-overview.png?1455269978 b/images/ss-overview.png?1455269978
    new file mode 100644
    index 0000000..457ebd2
    Binary files /dev/null and b/images/ss-overview.png?1455269978 differ
    diff --git a/images/subhd-bg.gif b/images/subhd-bg.gif
    new file mode 100644
    index 0000000..31ebdae
    Binary files /dev/null and b/images/subhd-bg.gif differ
    diff --git a/images/subhd-lb.gif b/images/subhd-lb.gif
    new file mode 100644
    index 0000000..e86f3d8
    Binary files /dev/null and b/images/subhd-lb.gif differ
    diff --git a/images/subhd-rb.gif b/images/subhd-rb.gif
    new file mode 100644
    index 0000000..79307d2
    Binary files /dev/null and b/images/subhd-rb.gif differ
    diff --git a/images/testimonial-intext.gif b/images/testimonial-intext.gif
    new file mode 100644
    index 0000000..aa081ae
    Binary files /dev/null and b/images/testimonial-intext.gif differ
    diff --git a/images/testimonial.gif b/images/testimonial.gif
    new file mode 100644
    index 0000000..2af00d5
    Binary files /dev/null and b/images/testimonial.gif differ
    diff --git a/images/tick.gif.html b/images/tick.gif.html
    new file mode 100644
    index 0000000..04c2a1d
    --- /dev/null
    +++ b/images/tick.gif.html
    @@ -0,0 +1,580 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
    +  <head>
    +<!-- Google Tag Manager -->
    +<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    +new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    +j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    +'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    +})(window,document,'script','dataLayer','GTM-TMSFLB4');</script>
    +<!-- End Google Tag Manager -->
    +<script>
    +  function gainit()
    +  {
    +    ga('create', 'UA-16362539-4', 'auto');
    +    console.log('ga init');
    +  }
    +  window.onload=gainit;
    +</script>
    +    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    +<meta name="keywords" content="better listview, list view, listview, list view control, list view component, .net list view, list view replacement, list view alternative, improved list view, enhanced list view" />
    +<meta name="description" content="Better ListView is an alternative List View control - the ideal replacement for the regular .NET listview component. For WinForms C#/VB.net." />
    +<meta name="author" content="ComponentOwl" />
    +<meta http-equiv="Title" content="Better ListView for .NET (C#, VB) - Alternative list view component" />
    +<meta name="copyright" content="(c) 2010-2018 ComponentOwl" />
    +<meta name="distribution" content="Global" />
    +<meta name="rating" content="General" />
    +<meta name="robots" content="All" />
    +<meta http-equiv="Content-Language" content="en" />
    +<meta name="verify-v1" content="NK0H1gWia1vxGZ2Yhr59gsS0/P2/USBI1DVA18VkzjM=" />
    +<meta name="google-site-verification" content="O7Dwtzu5x_Mob9u98uxqpZ-_wCLGpEkx2IL0UYVQ4ac" />
    +<title>Better ListView for .NET (C#, VB) - Alternative list view component</title>
    +<link rel="alternate" type="application/rss+xml" title="Component Owl Feed: Latest releases, news and tips &amp; tricks from our blog" href="feeds.rss" />
    +<link rel="alternate" type="application/rss+xml" title="Component Owl's Comics: Latest comic strips for developers by Libor Tinka" href="comics.rss" />
    +    <link href="stylesheets/base_packaged.css%3F1455269822.css" media="screen" rel="stylesheet" type="text/css" />
    +    
    +  </head>
    +  <body>
    +<!-- Google Tag Manager (noscript) -->
    +<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TMSFLB4"
    +height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    +<!-- End Google Tag Manager (noscript) -->
    +    <div class="d-page">
    +
    +<div class="d-header d-placing">
    +  
    +  <ul class="d-menu">
    +    <li class=""><a href="index.html" class="menu-item">Home</a></li>
    +    <li class="active with-dropdown">
    +      <a href="better-listview.html" class="menu-item">Products</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 370px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          <div class="dropdown-category">WinForms Components</div>
    +          
    +            
    +            <a href="better-listview.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-32-1355160256.png?1355135056" /> Better ListView<br /><span class="subline">Ultimate ListView control for .NET</span></a>
    +          
    +            
    +            <a href="better-thumbnail-browser.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-thumbnail-browser-32-1355160281.png?1355135081" /> Better Thumbnail Browser<br /><span class="subline">Thumbnail loading and browsing control for .NET</span></a>
    +          
    +            
    +            <a href="better-splitbutton.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-splitbutton-32-1355160307.png?1355135107" /> Better SplitButton<br /><span class="subline">Free customizable dropdown button control</span></a>
    +          
    +            
    +            <a href="better-listview-express.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-express-32-1355160327.png?1355135127" /> Better ListView Express<br /><span class="subline">Free edition with less features</span></a>
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="">
    +      <a href="pricing-licensing/better-listview.html" class="menu-item">Purchase</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 330px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-listview.html" class="featured-item">Better ListView</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-thumbnail-browser.html" class="featured-item">Better Thumbnail Browser</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-splitbutton.html">Better SplitButton</a>
    +          
    +        
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class=""><a href="support.html" class="menu-item">Support</a></li>
    +    <li class=""><a href="articles.html" class="menu-item">Articles</a></li>
    +    <li class=""><a href="blog.html" class="menu-item">Blog</a></li>
    +    <li class=""><a href="comics/43.html" class="menu-item">Comics</a></li>
    +    <li class=""><a href="about-us.html" class="menu-item">About Us</a></li>
    +  </ul>
    +  <div class="d-logo">
    +    <a href="index.html" class="logoimg"><img alt="Component Owl" src="images/componentowl.gif%3F1455269978" /></a>
    +    <g:plusone size="medium" count="false" href="http://www.componentowl.com"></g:plusone>
    +  </div>
    +</div>
    +      
    +      
    +      
    +        <div class="d-placing">
    +          <div class="d-content-wrap">
    +            <div class="subpage product-content">
    +  <h1>Better ListView: Alternative list view control for .NET</h1>
    +  
    +  <p class="section-info">Ideal .NET WinForms (C#, VB.net) replacement list view component. More features, less limitations, fast and optimized.</p>
    +  
    +  <div class="sides">
    +    
    +    <div class="right">
    +      
    +    
    +
    +        
    +        
    +      <input id="tabs-initial-index" name="tabs-initial-index" type="hidden" value="-1" />
    +      
    +      <ul id="nav" class="nav">
    +        
    +        <li><a href="better-listview.html" class="current">Overview</a></li>
    +        
    +        <li><a href="better-listview/screenshots.html" class="">Screenshots</a></li>
    +        
    +        <li><a href="better-listview/comparison-table.html" class="">Comparison</a></li>
    +        
    +        <li><a href="better-listview/resources.html" class="">Resources</a></li>
    +        
    +        <li><a href="better-listview/story.html" class="">Story</a></li>
    +        
    +      </ul>
    +      
    +      <div id="nav-panel" class="nav-panel product-detail"><div class="features-page">
    +  <ul class="common">
    +        <li>Better ListView is a <strong>list view control for .NET Windows Forms</strong></li>
    +        <li>Designed as a replacement for the regular .NET list view control.</li>
    +        <li>Compatible with: Visual Studio 2015, 2013, 2012, 2010, 2008, 2005, with full designer support.</li>
    +        <li>For C#, Visual Basic .NET (VB.NET), managed C++, and other CLI languages.</li>
    +        <li>Compatible with .NET 4.5, .NET 4, .NET 3.5, .NET 3, .NET 2, and newer. Supports .NET Client Profile.</li>
    +        <li>Runs on Windows 10, 8, 7, Vista, 2003, XP, 2000, and newer, both 32-bit and 64-bit.</li>
    +        <li>Better ListView has <strong>more features and flexibility</strong>, always uses the <strong>current system theme</strong> (including <strong>Aero</strong> support), and <strong>removes limitations</strong> of the regular .NET list view control.</li>
    +        <li><strong>Minimum learning needed</strong>. Better ListView can be used just like the regular list view.</li>
    +        <li>Written in <strong>pure managed C# code</strong>. It is fast, <strong>light-weight</strong> and optimized for 10k+ items.</li>
    +        <li>Easy royalty-free deployment. Single DLL file that has just 250kB when compressed.</li>
    +		<li>The assembly is <strong><a href="http://www.nist.gov/itl/fipsinfo.cfm" target="_blank">FIPS-compliant</a></strong>, CLS-compliant, <strong>digitally signed</strong> and strongly named.</li>
    +        <li>Tested in the real world by thousands of users</li>
    +  </ul>
    +  
    +<div class="image"><img alt="Better ListView control" src="http://assets.componentowl.com/images/7/Overview Collage_original_1367470843.png?1367445643" /></div>
    +  
    +<h2>Extra features summary</h2>
    +
    +Better ListView is fast and flicker-free, supports hierarchical items, has improved grouping, better drag &amp; drop and item reordering support, better column headers, inbuilt sorting, multi-column sorting, better images support, context menus for column headers and items, embedded controls for editing support, automatic and custom sizing of items and images, thumbnails view, richer event data, item text formatting, XML and binary serialization, data-binding, owner-drawing options, better tooltips, powerful hit-test, improved usability, easy saving/loading of contents into file or string, multi-line items, and more.
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +Component Owl created <b>the one and only tool I don’t want to be without when it comes to software developing in Visual Studio</b>. Also, I’ve been working as software user/developer for the last 26 years, and <b>I have never before experienced a support that really goes the needed extra mile to make things work</b>, like the guys at Component Owl do.
    +</em></blockquote><strong>Göran Alfvén, Sweden</strong></div></div>
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +The control is <b>very easy and intuitive to use and is well documented</b>.
    +</em></blockquote><strong>DevProConnections.com Review</strong></div></div>
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +Better List View is <b>awesome</b>.
    +</em></blockquote><strong>Daniel N</strong></div></div>
    +
    +<h3>Hierarchical items</h3>
    +
    +You can create tree-like structures in Better ListView; inbuilt drag &amp; drop hierarchical reordering of items.
    +
    +<h3>Improved grouping</h3>
    +
    +Better grouping – customizable group headers look and behavior, collapsible, image support, context menu support, focusable, etc. Each group header can be customized individually.
    +
    +<h3>Save/load contents with 1 line of code</h3>
    +
    +You can save or load the contents of Better ListView in just 1 line of code, either to file or string. Both XML and binary serialization is supported.
    +
    +<h3>Double-buffered and flicker free</h3>
    +
    +Simply put, Better ListView is smooth. Regular listview requires multiple anti-flicker techniques, but you do not have to worry about that with Better ListView. Better ListView is optimized for 100k+ items.
    +
    +<h3>Column header images</h3>
    +
    +You can use images in column headers. Custom image sizes are supported.
    +
    +<div class="image"><img alt="Column Header Images" src="http://assets.componentowl.com/images/8/Column Header Images_original_1298620501.png?1298595301" /></div>
    +  
    +<h3>Sub-item images</h3>
    +
    +You can set images to list view sub-items. Regular list view allows you to set only one image per list view item, but Better ListView can show image for every sub-item (in every column).
    +
    +<h3>Image-List and Image Support</h3>
    +
    +Better ListView supports both image list, or individual image objects (System.Drawing.Image). Regular list view forces you to use ImageList object.
    +
    +<h3>Custom list view Image size</h3>
    +
    +You can use any image size in the list view. Better ListView can also automatically resize images with preserving aspect ratio.
    +  
    +<h3>Drag &amp; drop with insertion mark</h3>
    +
    +Highly customizable drag-drop for both internal and external drag-drop. You can use drop highlight or insertion mark drag drop modes.
    +  
    +<div class="image"><img alt="List View Item Reordering Mark Preview" src="http://assets.componentowl.com/images/21/List View Item Reordering Mark Preview_original_1298631798.png?1298606598" /></div>
    +  
    +<h3>List view item reordering</h3>
    +  
    +Better ListView has inbuilt item reordering and item drag &amp; drop inserting at the position specified by user. Drag &amp; drop preview is shown using an insertion mark.
    +  
    +<h3>Column-header reordering</h3>
    +  
    +Better ListView has inbuilt easy drag &amp; drop column header reordering that is much easier to use than in the regular list view. Insertion mark is shown, auto-scrolling is supported.
    +  
    +<div class="image"><img alt="Column Header Reordering With Insertion Mark" src="http://assets.componentowl.com/images/9/Column Header Reordering With Insertion Mark_original_1298621331.png?1298596131" /></div>
    +  
    +<h3>Auto-scroll for column header reordering and item reordering</h3>
    +
    +Better ListView has inbuilt auto-scrolling for column header and item reordering.
    +  
    +<h3>Column headers can be shown in all views</h3>
    +
    +Better ListView can display column headers in all views - Details, SmallIcons, LargeIcons, List, Tile, Thumbnails. This allows users to sort items in all views. Additionally, you can also hide the column headers even in the details view.
    +  
    +<div class="image"><img alt="Column Headers in LargeIcons View" src="http://assets.componentowl.com/images/10/Column Headers In LargeIcons View_original_1298622038.png?1298596838" /></div>
    +  
    +<h3>Thumbnails view mode</h3>
    +
    +Better ListView supports additional "thumbnails" view mode that allows you to view images of large sizes. The images are automatically and smoothly resized with preserved aspect ratio. You can define the maximum/minimum desired image sizes.
    +
    +<h3>Image shadows, borders and padding</h3>
    +All images in Better ListView can have border or shadow specified. You can also specify padding that gives you space for owner drawing (eg. overlay images). This can be used in all views.
    +  
    +Image shadows like in Windows 7 theme are supported. Windows Explorer uses very similar shadows for image thumbnails.
    +  
    +<div class="image"><img alt="ListView Image Shadows and Image Borders" src="http://assets.componentowl.com/images/11/ListView Image Shadows and Image Borders_original_1298622678.png?1298597478" /></div>
    +  
    +<h3>Multi-column sorting</h3>
    +
    +You can sort by multiple columns in Better ListView. Simply shift+click a secondary (or third, etc) column to add it to the current sort. Zero code needed. Additionally, the background of the primary (first) sort column can be highlighted.
    +  
    +<div class="image"><img alt="Multi Column Sort in List View" src="http://assets.componentowl.com/images/12/Multi Column Sort in List View_original_1298623013.png?1298597813" /></div>
    +  
    +<h3>Inbuilt sorting and natural sorting</h3>
    +  
    +Better ListView has inbuilt list view sorting that works out of the box. You no longer need to implement your own item comparer. If custom comparer is needed, you can inherit from the Better ListView comparer to save time.
    +  
    +<h3>Richer event data</h3>
    +  
    +Many events have richer event data that allow you to do extra operations or tell you extra useful information. The richer events include: AfterItemSort, BeforeDrag, BeforeItemSort, ColumnClick (allows you to cancel sort), DragDropException, DrawBackground, DrawColumnHeaderBackground, DrawColumnHeader, DrawItemBackground, DrawItem, HitTestChanged, ItemActivate (event data tells you how the item got activated - mouse, keyboard or code), ItemDrag, ItemDrop, ItemReorder, ItemSearch, LabelEdit, RequestEmebeddedControl.
    +
    +<h3>Checkboxes in all views</h3>
    +
    +You can have checkboxes in LargeIcons view, SmallIcons view, List view, Thumbnails view and of course also in the Details view.
    +  
    +<div class="image"><img alt="Checkboxes In LargeIcons View" src="http://assets.componentowl.com/images/13/Checkboxes In LargeIcons View_original_1298623385.png?1298598185" /></div>
    +  
    +<h3>Three state checkboxes</h3>
    +Three state checkboxes are supported in Better ListView:
    +  
    +<div class="image"><img alt="Three-State Checkboxes in List View" src="http://assets.componentowl.com/images/14/Three State Checkboxes in List View_original_1298624577.png?1298599377" /></div>
    +
    +<h3>Hide or show checkboxes of specific ListView Items</h3>
    +
    +You can hide checkbox for any ListViewItem. You can also show checkboxes only for specified items. All list items in Better ListView have "AllowShowCheckBox" property.
    +
    +<div class="image"><img alt="Show or hide checkboxes for specific listview items" src="http://assets.componentowl.com/images/23/show-or-hide-checkboxes-for-specific-listview-items_original_1299748307.png?1299723107" title="Show or hide checkboxes for specific listview items" /></div>
    +  
    +<h3>Powerful list view tooltips</h3>
    +
    +You can display tooltips for nearly any part of Better ListView - tooltips for items, sub-items, checkboxes, item images, sub-item images, column headers, column header images, column header borders, and even for custom areas (regions). Owner-drawn tooltips are supported.
    +  
    +<div class="image"><img alt="List View Regional Tooltips and Owner Drawn Tooltips" src="http://assets.componentowl.com/images/15/List View Tooltips Region And Owner Drawn Tooltips_original_1298632357.png?1298607157" /></div>
    +  
    +<h3>Uses current Windows theme</h3>
    +  
    +Instead of implementing custom, un-native look and feel, Better ListView always automatically fully uses the current system theme. It supports Aero as well. Better ListView always looks great and feels right to the user.
    + 
    +<h3>XML and binary serialization of everything</h3>
    +  
    +Every part of Better ListView (items, sub-items, column headers) can be both binary and XML serialized. You can easily XML serialize whole list view (or binary serialize) to save it to file or transfer items between controls. Standard ways of .NET serialization can be used (BinaryFormatter, XmlSerializer).
    +  
    +<h3>Owner drawing</h3>
    +
    +Better ListView allows you to draw over the client area, items and column headers. Contrary to .NET ListView, owner drawing is fully operational even when the system uses Aero theme. You can draw separately to background and foreground parts of Better ListView without worrying about proper drawing order. Owner drawing events provide rich data, including exact item state and areas of every item part.
    +  
    +<div class="image"><img alt="List View Owner Drawing Background Gradient" src="http://assets.componentowl.com/images/22/List View Owner Drawing Background Gradient_original_1298633053.png?1298607853" /></div>
    +
    +<h3>Multi-line items</h3>
    +
    +Better ListView supports multi-line items. Items with very long text can be displayed on multiple lines. Highly customizable and powerful: Focused items can have custom number of lines; hard line breaks supported as well. Foreground overlay "watermark" images are easily achievable using owner-drawing.
    +
    +<div class="image"><img src="http://assets.componentowl.com/screenshots/21/multi-line-items_original_1312133213.png?1312133213" alt="Multi-line items"></div>
    +  
    +<h3>Background image support</h3>
    +
    +Display background image in Better ListView easily using the BackgroundImage property. Many layouts (stretch, tile, none), alignments (top, bottom, left, right, center and combinations) are supported, as well as customizable opacity.
    +
    +<div class="image"><img alt="ListView Background Image" src="http://assets.componentowl.com/images/27/Background-Images_original_1326106027.png?1326080827" title="ListView Background Image" /></div>
    +
    +<h3>Context menu for column headers, list items, and empty area</h3>
    +
    +Better ListView supports 3 types of context menus: Column header context menu, list view items context menu, and empty area context menu (when right-clicking white space).
    +  
    +<div class="image"><img alt="Column Header Context Menu in List View" src="http://assets.componentowl.com/images/17/Column Header Context Menu in List View_original_1298721855.png?1298696655" /></div>
    +  
    +<h3>Advanced hit-test with detailed information</h3>
    +The hit test in Better ListView returns very detailed information. It tells you not only the location (Client Area, Sub-Item, Sub-Item Text, Sub-Item Image, Checkbox, Column Header Image, and many more), but it also tells you the state of the item, and part of the item (left or right).
    +
    +<div class="image"><img alt="Advanced Hit-Test With Detailed Information" src="http://assets.componentowl.com/images/26/Advanced-Hit-Test_original_1326105831.png?1326080631" title="Advanced Hit-Test With Detailed Information" /></div>
    +
    +<h3>Customizable search-by-typing</h3>
    +
    +Better ListView has excellent customization functionality for find-as-you-type item searching. The search modes include: Prefix (searchs from beginning of items), Substring (search any part of item text), Prefix + Substring, or Disabled. Additionally, search options include: Case sensitive, search first word only, play sound when item not found, prefer prefixes, search whole words. You can also restrict the search to only certain columns. You can also call "FindItemsWithText" function to find items from code.
    +
    +<h3>Display text when the list view is empty</h3>
    +You can display a gray text centered in the list view if it's empty to hint or educate users. This will make your software more user friendly.
    +  
    +<div class="image"><img alt="Show Text When List View is Empty" src="http://assets.componentowl.com/images/18/Show Text When List View is Empty_original_1298629916.png?1298604716" /></div>
    +  
    +<h3>Embed controls for item editing</h3>
    +Inbuilt in-line editing support includes label edit, combobox edit, date picker edit. You can also embed any custom control for in-line editing. Sub-item editing is supported. Highly customizable.
    +  
    +<div class="image"><img alt="Custom Embedded Control in List View for Editing" src="http://assets.componentowl.com/images/19/Custom Embedded Control in List View for Editing_original_1298630263.png?1298605063" /></div>
    +  
    +<h3>ListView item text formatting</h3>
    +
    +Supports both text trimming and auto-ellipsis for text that's too long. You can choose from: TrimCharacter, TrimWord, EllipsisCharacter, EllipsisWord, EllipsisPath (for file paths). Column header text can be broken into multiple lines.
    +
    +<h3>Focusable ListView sub-items and groups</h3>
    +
    +Focus sub-items or groups in Better ListView easily with keyboard. Just use the arrow keys. (This is impossible with the regular .NET ListView)
    +<div class="image"><img alt="Focusable sub-items in Better ListView" src="http://assets.componentowl.com/images/25/focus-list-view-sub-items_original_1313674098.png?1313648898" title="Focusable sub-items in Better ListView" /></div>
    +
    +<h3>Automatic list view layout</h3>
    +
    +Better ListView can auto-size item images, item text, column header images, column header text.
    +  
    +<h3>Custom list view item size</h3>
    +
    +You can set custom sizes for item text area and item images. You can also set custom size for column header text area and column header images. (Text area size is different from font size, text area size basically defines the size of the list view item.) This enables you to make tiny/huge column headers or list view items.
    +  
    +<div class="image"><img alt="Custom Item Size in List View" src="http://assets.componentowl.com/images/20/Custom Item Size in List View_original_1298630739.png?1298605539" /></div>
    +  
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +It's an odd thing when you're inspired by a form component, but Component Owl 
    +with their Better ListView has done it. Love its native feel.
    +</em></blockquote><strong>Daniel N, USA</strong></div></div>
    +
    +  <h2>More advantages of our improved list view component:</h2>
    +  <ul class="common">
    +        <li><strong>Developer friendly</strong>: All classes and properties are as similar to the regular list view as possible. Everything is intuitive, very little learning is needed. You can use Better ListView immediately. <strong>Save time and ship sooner</strong>.</li>
    +        <li><strong>Better ListView has improved usability and fixed behavior</strong>. All Windows users are familiar with the list view used in Windows Explorer. Better ListView mimicks behavior and look &amp; feel of the Windows Explorer list view as much as possible to leverage the existing user knowledge. <strong>Using Better ListView is pleasant for users.</strong> Many other list view components implement custom look and behavior and can oftentimes downright frustrate users (many controls don't even support mouse-wheel scrolling!) This doesn't happen with Better ListView.</li>
    +        <li><strong>Guaranteed support and continued development</strong>: Better ListView is developed as a joint-venture of two software companies that use Better ListView in their main products (popular <strong><a href="http://www.dextronet.com/swift-to-do-list-software" target="_blank">Swift To-Do List</a></strong> and <strong><a href="http://www.imagingshop.com" target="_blank">ImagingShop</a></strong>). These applications are used by thousands of users daily. This is your guarantee that Better ListView will be supported and developed in the future.</li>
    +        <li><strong>Tested in real world applications by thousands of users</strong>: Because Better ListView is used in professional consumer desktop software applications - Swift To-Do List and ImagingShop, thousands of users work with Better ListView every day. Although we use unit tests that cover most of code, and do thorough inhouse testing, this is your true guarantee that it is tested thoroughly in the real world. It is <strong>extremely stable</strong>.</li>
    +        <li>Better ListView does <strong>not</strong> inherit from the regular .NET list view. It is written in pure managed C# code and is flexible, light weight, and fast. Extensions of the regular .net list view only go so far. Better ListView goes further. Soure code licenses are also available for ultimate customization.</li>
    +  </ul>
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +In addition to creating a new List View control to incorporate <b>broader flexibility and functionality</b>, Better ListView could also be called <b>Fixed ListView</b>, as it corrects a number of annoying problems with the standard List View that Microsoft delivers to Visual Studio customers.
    +</em></blockquote><strong>DevProConnections.com Review</strong></div></div>
    +
    +</div></div>
    +      
    +        
    +        
    +    
    +    
    +    </div>
    +    
    +    <div class="left">
    +      
    +      <div class="buttons-box">
    +        <a onclick="ga('send', 'event', 'trial', 'click');" data-sumome-listbuilder-id="4016d967-e098-487d-a20e-da328d2345df" class="standard-download image-link">Download Free Trial - With sample projects</a>
    +          <a href="pricing-licensing/better-listview.html" class="standard-buy image-link">See Pricing &amp; Licensing</a>
    +        <p>Version 3.15 / May 27, 2015</p>
    +      </div>
    +      <div class="compatibility">
    +        <p><strong>Seamless integration with .NET 2.0 and higher</strong></p>
    +        <div class="documentation">
    +          <p><a href="better-listview/quick-start-guide.html" onclick="window.open(this.href); return false">See Quick Start Guide</a></p>
    +          <p><a href="better-listview/documentation.html" onclick="window.open(this.href); return false">See Documentation</a></p>
    +        
    +          <p><a href="better-listview/class-reference.html" onclick="window.open(this.href); return false">See Class Reference</a></p>
    +        
    +        </div>
    +      </div>
    +      
    +  
    +    
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/15/blv-overview_original_1326499754.png?1326474554" class="screenshot" title="Better ListView control"><img alt="Better ListView" src="http://assets.componentowl.com/screenshots/15/blv-overview_thumb_1326499754.png?1326474554" /></a></p>
    +      </div>
    +      <div class="newsletter">
    +  <form action="http://www.componentowl.com/subscriptions" class="new_subscription" id="new_subscription_product" method="post" onsubmit="if (!validate_newsletter_form(this)) return false; jQuery.ajax({data:jQuery.param(jQuery(this).serializeArray()) + '&amp;authenticity_token=' + encodeURIComponent('dJeFtbWrARc0arEomU+SG+XtypwJr2F4Kc9v14woStM='), dataType:'script', type:'post', url:'/subscriptions'}); return false;"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="dJeFtbWrARc0arEomU+SG+XtypwJr2F4Kc9v14woStM=" /></div>  <input id="subscription_subscription_location_id" name="subscription[subscription_location_id]" type="hidden" value="512994065" />
    +  <input id="form_id" name="form_id" type="hidden" value="#new_subscription_product" />  
    +  <strong>Receive product updates<br />and news via email:</strong>
    +    <div><input class="email inline-label" id="product-newsletter-email" name="subscription[email]" size="30" type="text" value="Your Email" /></div>
    +    <div id="product-newsleter-lists" class="subscription-lists-ct" style="display: none"><input name="subscription[subscription_list_ids][]" type="hidden" value="970100327" />
    +<input name="subscription[subscription_list_ids][]" type="hidden" value="1009842129" /></div>
    +    <span class="dbtn-c subscribe dbtn-small" id="send"><span class="dbtn-w"><input class="dbtn" name="commit" type="submit" value="Subscribe" /></span></span>
    +  </form></div>
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/16/thumbnails_original_1312133021.png?1312107821" class="screenshot" title="Image thumbnails in groups"><img alt="Thumbnails" src="http://assets.componentowl.com/screenshots/16/thumbnails_thumb_1312133021.png?1312107821" /></a></p>
    +      </div>
    +      
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/21/multi-line-items_original_1312133213.png?1312108013" class="screenshot" title="Items with multi-line text"><img alt="Multi-line Items" src="http://assets.componentowl.com/screenshots/21/multi-line-items_thumb_1312133213.png?1312108013" /></a></p>
    +      </div>
    +      
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/18/betterlistview-tree-hierarchy_original_1313676477.png?1313651277" class="screenshot" title="Items organized in a tree-like hierarchy"><img alt="Item Hierarchy" src="http://assets.componentowl.com/screenshots/18/betterlistview-tree-hierarchy_thumb_1313676477.png?1313651277" /></a></p>
    +      </div>
    +      
    +    
    +      
    +    
    +      <div class="small-button-ct">
    +        <a href="better-listview/screenshots.html" class="small-button"><span>More Screenshots</span></a>
    +      </div>
    +    
    +    
    +    
    +    
    +  
    +      
    +    </div>
    +    
    +  </div>
    +  
    +  <div class="buttons-wrap">
    +    <div class="buttons">
    +      <a onclick="ga('send', 'event', 'trial', 'click');" data-sumome-listbuilder-id="4016d967-e098-487d-a20e-da328d2345df" class="standard-download image-link">Download Free Trial - With sample projects</a>
    +      
    +        <a href="pricing-licensing/better-listview.html" class="standard-buy image-link">See Pricing &amp; Licensing</a>
    +      
    +    </div>
    +  </div>
    +  
    +</div>
    +
    +<div id="screenshot-buttons" style="display: none">
    +  <div class="buttons">
    +    <a href="betterlistview.exe" class="small-download image-link" onclick="download_email('better-listview');">Free Download</a>
    +    <a href="pricing-licensing/better-listview.html" class="small-buy image-link">See Pricing &amp; Licensing</a>
    +  </div>
    +</div>
    +          </div>
    +        </div>
    +      
    +      
    +      
    +      <div class="d-footer">
    +  <div class="d-placing">
    +    
    +    <div class="left">
    +      <div class="latest-posts">
    +        <h3 class="latest_from_blog"><a href="blog.html">Latest From Our Blog</a></h3>
    +        
    +          <h4><a href="blog/index.html%3Fp=927.html">Activation issues and how to solve them</a></h4>
    +          <div class="post-info">Wednesday, 01 March 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=921.html">The Three Main Advantages Better ListView has Over the Classic .NET Framework</a></h4>
    +          <div class="post-info">Thursday, 09 February 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=914.html">BLV and Internet Explorer</a></h4>
    +          <div class="post-info">Sunday, 13 November 2016</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=906.html">Centering Images in Better ListView Sub-items</a></h4>
    +          <div class="post-info">Wednesday, 06 August 2014</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=901.html">Sub-item Check Boxes in Better ListView</a></h4>
    +          <div class="post-info">Sunday, 06 July 2014</div>
    +        
    +      </div>
    +      <div class="other-posts"><a href="blog.html">See more posts &raquo;</a></div>
    +    </div>
    +    
    +    <div class="right">
    +      <div class="news">
    +        <ul class="links">
    +          <li><a href="feeds.rss" class="rss">Subscribe to our RSS</a></li>
    +          <li><a href="http://twitter.com/ComponentOwl" class="twitter">Follow us on twitter</a></li>
    +        </ul>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistview.exe" onclick="download_email('better-listview');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better SplitButton 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="bettersplitbutton.exe" onclick="download_email('better-splitbutton');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better Thumbnail Browser 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterthumbnailbrowser.exe" onclick="download_email('better-thumbnail-browser');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item last-item">
    +          <div class="date">08<span>Apr</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.14.0 released!</h4>
    +            <p>
    +              
    +                <a href="better-listview-express/releases%3Fsince=3.14.0.html">See what's new</a>
    +                or
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +      </div>
    +    </div>
    +    
    +  </div>
    +  <div class="d-placing">
    +    <hr />
    +    <div class="copy"><div class="social"><a href="support.html" class="feedback">Contact Us (Feedback)</a> <span>|</span> <a href="feeds.rss" class="rss">RSS</a> <span>|</span> <a href="https://twitter.com/ComponentOwl" class="twitter">Twitter</a> <span>|</span> <a href="sitemap.html" class="sitemap">Sitemap</a> <span>|</span> Our <a href="index.html" class="stdl">task management software</a> that uses Better ListView</div>
    +Copyright &copy; 2021 ComponentOwl.com, All rights reserved. Read our <a href="eula.html">EULA</a>, <a href="disclaimer.html">Disclaimer</a> and <a href="privacy-policy.html">Privacy Policy</a>.<br /></div>
    +  </div>
    +  
    +</div>
    +      
    +    </div>
    +    
    +    <script src="javascripts/app_packaged.js%3F1455269826" type="text/javascript"></script>
    +<script async>(function(s,u,m,o,j,v){j=u.createElement(m);v=u.getElementsByTagName(m)[0];j.async=1;j.src=o;j.dataset.sumoSiteId='854b5e00f297990012cc230023375a00787c0000216621002775a800d79ad500';v.parentNode.insertBefore(j,v)})(window,document,'script','//load.sumo.com/');</script>
    +  </body>
    +</html>
    diff --git a/images/twitter.gif b/images/twitter.gif
    new file mode 100644
    index 0000000..6d197d3
    Binary files /dev/null and b/images/twitter.gif differ
    diff --git a/images/web-comics.gif b/images/web-comics.gif
    new file mode 100644
    index 0000000..7958294
    Binary files /dev/null and b/images/web-comics.gif differ
    diff --git a/index.html b/index.html
    new file mode 100644
    index 0000000..e2fdfed
    --- /dev/null
    +++ b/index.html
    @@ -0,0 +1,404 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
    +<head>
    +<!-- Google Tag Manager -->
    +<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    +new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    +j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    +'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    +})(window,document,'script','dataLayer','GTM-TMSFLB4');</script>
    +<!-- End Google Tag Manager -->
    +<script>
    +  function gainit()
    +  {
    +    ga('create', 'UA-16362539-4', 'auto');
    +    console.log('ga init');
    +  }
    +  window.onload=gainit;
    +</script>
    +
    +<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    +<meta name="keywords" content="list view, listview, list view control, list view component, .net list view, list view replacement, list view alternative, improved list view, enhanced list view" />
    +<meta name="description" content="Better ListView by Component Owl is a .NET WinForms control designed to replace the standard list view control included with C#/VB.net." />
    +<meta name="author" content="ComponentOwl" />
    +<meta http-equiv="Title" content="Better ListView .NET control: Improved List View control for C# and VB.NET (Windows Forms)" />
    +<meta name="copyright" content="(c) 2010-2021 Porterhouse Management, LLC" />
    +<meta name="distribution" content="Global" />
    +<meta name="rating" content="General" />
    +<meta name="robots" content="All" />
    +<meta http-equiv="Content-Language" content="en" />
    +<meta name="verify-v1" content="NK0H1gWia1vxGZ2Yhr59gsS0/P2/USBI1DVA18VkzjM=" />
    +<meta name="google-site-verification" content="O7Dwtzu5x_Mob9u98uxqpZ-_wCLGpEkx2IL0UYVQ4ac" />
    +<title>Better ListView .NET control: Improved List View control for C# and VB.NET (Windows Forms)</title>
    +<link rel="alternate" type="application/rss+xml" title="Component Owl Feed: Latest releases, news and tips &amp; tricks from our blog" href="feeds.rss" />
    +<link rel="alternate" type="application/rss+xml" title="Component Owl's Comics: Latest comic strips for developers by Libor Tinka" href="comics.rss" />
    +    <link href="stylesheets/base_packaged.css%3F1455269822.css" media="screen" rel="stylesheet" type="text/css" />
    +
    +  </head>
    +  <body class="d-homepage">
    +<!-- Google Tag Manager (noscript) -->
    +<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TMSFLB4"
    +height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    +<!-- End Google Tag Manager (noscript) -->
    +    <div class="d-page">
    +
    +<div class="d-header d-placing">
    +
    +  <ul class="d-menu">
    +    <li class="active"><a href="index.html" class="menu-item">Home</a></li>
    +    <li class=" with-dropdown">
    +      <a href="better-listview.html" class="menu-item">Products</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 370px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +
    +          <div class="dropdown-category">WinForms Components</div>
    +
    +
    +            <a href="better-listview.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-32-1355160256.png?1355135056" /> Better ListView<br /><span class="subline">Ultimate ListView control for .NET</span></a>
    +
    +
    +            <a href="better-thumbnail-browser.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-thumbnail-browser-32-1355160281.png?1355135081" /> Better Thumbnail Browser<br /><span class="subline">Thumbnail loading and browsing control for .NET</span></a>
    +
    +
    +            <a href="better-splitbutton.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-splitbutton-32-1355160307.png?1355135107" /> Better SplitButton<br /><span class="subline">Free customizable dropdown button control</span></a>
    +
    +
    +            <a href="better-listview-express.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-express-32-1355160327.png?1355135127" /> Better ListView Express<br /><span class="subline">Free edition with less features</span></a>
    +
    +
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="">
    +      <a href="pricing-licensing/better-listview.html" class="menu-item">Purchase</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 330px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +
    +
    +
    +            <a href="pricing-licensing/better-listview.html" class="featured-item">Better ListView</a>
    +
    +
    +
    +
    +            <a href="pricing-licensing/better-thumbnail-browser.html" class="featured-item">Better Thumbnail Browser</a>
    +
    +
    +
    +
    +            <a href="pricing-licensing/better-splitbutton.html">Better SplitButton</a>
    +
    +
    +
    +
    +      </div></div></div></div></div>
    +    </li>
    +    <li class=""><a href="support.html" class="menu-item">Support</a></li>
    +    <li class=""><a href="articles.html" class="menu-item">Articles</a></li>
    +    <li class=""><a href="blog.html" class="menu-item">Blog</a></li>
    +    <li class=""><a href="comics/43.html" class="menu-item">Comics</a></li>
    +    <li class=""><a href="about-us.html" class="menu-item">About Us</a></li>
    +  </ul>
    +  <div class="d-logo">
    +    <a href="index.html" class="logoimg"><img alt="Component Owl" src="images/componentowl.gif%3F1455269978" /></a>
    +    <g:plusone size="medium" count="false" href="http://www.componentowl.com"></g:plusone>
    +  </div>
    +</div>
    +
    +
    +
    +        <div class="d-content-wrap">
    +          <div class="d-placing">
    +
    +  <h1 class="homehd"><span>Better ListView alternative - .NET control for WinForms</span></h1>
    +  <h2 class="homeph">The number one replacement component for the regular .NET ListView control.</h2>
    +  <h2 class="homeph">We&rsquo;ve rewritten the .NET ListView control. Great look and feel, more features, better behavior. No learning needed.</h2>
    +
    +  <div class="hp-wrap">
    +    <div class="buttons-hp buttons-hp-vertical">
    +  <a onclick="ga('send', 'event', 'trial', 'click');" data-sumome-listbuilder-id="4016d967-e098-487d-a20e-da328d2345df" class="standard-download image-link">Download Free Trial - With sample projects</a>
    +  <a href="better-listview.html" class="standard-more image-link">Learn More - Features &amp; Screenshots</a>
    +  <a href="pricing-licensing/better-listview.html" class="standard-buy image-link">See Pricing &amp; Licensing</a>
    +  <div class="logos">
    +    <img alt="Microsoft .NET" src="images/logo-dotnet.gif%3F1455269978" />
    +    <img alt="Microsoft Visual Studio" src="images/logo-vs.gif%3F1455269978" />
    +    <img alt="Microsoft Windows" src="images/logo-win.gif%3F1455269978" />
    +  </div>
    +</div>
    +    <iframe width="560" height="315" src="https://www.youtube.com/embed/hsY5OLRwNYw" frameborder="0" allowfullscreen></iframe>
    +  </div>
    +
    +  <div class="home-static">
    +
    +    <hr class="hpline" />
    +    <h3 class="sshd">New Better ListView 3.15</h3>
    +    <div class="ss-overview"><img alt="Better ListView 2.0" src="images/ss-overview.png%3F1455269978" /></div>
    +    <hr class="hpline" />
    +
    +<h3 class="compatiblehd">Excellent compatibility of Better ListView:</h3>
    +
    +<div class="compatiblelists">
    +  <ul class="compatiblelist list-l">
    +    <li class="logo vs"><img alt="Logo-vs-big" src="images/logo-vs-big.gif%3F1455269978" /></li>
    +    <li>Visual Studio 2015, 2013, 2012, 2010, 2008, 2005.</li>
    +    <li>C#, Visual Basic .NET (VB.NET), managed<br />C++, and other CLI languages.</li>
    +  </ul>
    +
    +  <ul class="compatiblelist list-r">
    +    <li class="logo dotnet"><img alt="Logo-dotnet-big" src="images/logo-dotnet-big.gif%3F1455269978" /></li>
    +    <li>.NET 4.5, .NET 4, .NET 3.5, .NET 3, .NET 2, and newer.</li>
    +    <li>Windows 10, 8, 7, Vista, 2003, XP, 2000, and newer, both 32-bit and 64-bit.</li>
    +  </ul>
    +</div>
    +
    +<div class="lists">
    +
    +  <div class="list-l">
    +    <h3>Better ListView<strong> advantages:</strong></h3>
    +
    +    <ul class="common checklist">
    +      <li>Single small DLL file (less than 250kB when compressed).</li>
    +      <li>FIPS-compliant, CLS-compliant, digitally signed and strongly named.</li>
    +      <li>Easy deployment (xcopy). No dependencies. No installation.</li>
    +      <li>Royalty-free distribution. No runtime licensing.</li>
    +      <li>Written from scratch in pure managed code.</li>
    +      <li>Fast, optimized for 10.000+ items.</li>
    +      <li>No learning needed. Very similar to regular .NET ListView control.</li>
    +      <li>User-friendly and developer-friendly.</li>
    +      <li>No limits of the regular Microsoft .NET ListView control bundled with Visual Studio!</li>
    +      <li>Tested by thousands of users world-wide.</li>
    +      <li>Guaranteed continued support and development. We use Better ListView ourselves in our
    +        popular and successful desktop products, like
    +        <a href="http://www.dextronet.com/swift-to-do-list-software" class="nowrap">Swift To-Do List</a>.</li>
    +      <li>Well documented, intuitive method/properties names.</li>
    +      <li>Always looks great. Always fully uses the current Windows theme, including Aero support.</li>
    +      <li>Enterprise source code licenses available.</li>
    +      <li>Fast 24-hour or faster support.</li>
    +    </ul>
    +  </div>
    +
    +  <div class="list-r">
    +    <h3>BetterListView<strong> extra features:</strong></h3>
    +
    +    <p>Better ListView has hundreds of extra features, compared to the regular .NET ListView control.
    +      Plus, it removes all its limitations and bugs. Some of the most notable extra features include:</p>
    +
    +    <ul class="common checklist">
    +      <li>Hierarchical items. Supports sub-items like in the tree view control.</li>
    +      <li>Thumbnails view.</li>
    +      <li>Serialization – XML and Binary</li>
    +      <li>Save/load Better ListView content into XML or binary, string or file, in just 1 line of code.</li>
    +      <li>Inbuilt drag &amp; drop reordering (with insertion mark indicator).</li>
    +      <li>Sub-item images</li>
    +      <li>Double-buffered and flicker-free.</li>
    +      <li>Highly customizable and flexible.</li>
    +      <li>Multi-column sorting.</li>
    +      <li>Inbuilt sorting (zero code needed).</li>
    +      <li>Checkboxes in all views, 3-state support</li>
    +      <li>Better grouping – preserves item order, customizable group headers look and behavior,
    +        collapsible, image support, context menu support, focusable, etc.</li>
    +      <li>Embedded editing controls, support for custom controls.</li>
    +      <li>Complex data binding with custom column mapping.</li>
    +      <li>Many other useful features - <a href="better-listview.html">see more Better ListView features</a>.</li>
    +    </ul>
    +  </div>
    +</div>
    +
    +<div class="testimonial-wide">
    +  <blockquote>&ldquo;Better List View is <b>awesome</b>.&rdquo; &ndash; Daniel Nolan</blockquote>
    +</div>
    +
    +<div class="tellingct">
    +  <div class="tellingcnt">
    +    <h3 class="tellinghd">Why is Better ListView the best ListView<br />replacement component for .NET (C#, VB)?</h3>
    +
    +    <p>To put it simply, there is nothing like Better ListView out there. Nothing.</p>
    +
    +    <p>Better ListView has been designed as a component that can easily replace the original
    +      ListView control supplied with .NET.</p>
    +
    +    <p>There is virtually no learning needed. It’s just intuitive.</p>
    +
    +    <p>Better ListView looks native and always fully utilizes the current system theme (so there is
    +      no weird inconsistent look), and it also behaves exactly like it should. We’ve modeled it after
    +      the original list view component and the list view used in Windows Explorer – everyone already
    +      knows how to use it. It fully leverages the previous user knowledge.</p>
    +
    +    <p>We put extreme attention to details. All the little quirks and nuances that drive us crazy when
    +      it comes to components of many smaller vendors are resolved in Better ListView. You will be
    +      amazed how flexible and customizable it is, and how great it feels to use it. The users of your
    +      application will feel right at home.</p>
    +
    +    <p>Most importantly, <strong>Better ListView is packed full of great features</strong>.</p>
    +
    +    <p>If you are wondering why we created Better ListView, you can read
    +      <a href="better-listview/story.html">our story</a>.</p>
    +
    +    <p class="ending">And by the way, Better ListView comes with awesome samples explorer. Download and install
    +      the trial package right now and see for yourself what Better ListView can do.</p>
    +  </div>
    +
    +  <div class="testimonial ">
    +    <blockquote>Better ListView really is better - <b>it kills the standard .NET ListView</b> in
    +both performance and flexibility. I'll never use anything else.</blockquote>
    +    <em>Mitchell Vincent, <a href="http://www.ksoftware.net" target="_blank">KSoftware</a></em>
    +  </div>
    +
    +  <div class="testimonial ">
    +    <blockquote>"Wow! This is so easy to use. I'm not a very experienced VB.NET programmer, but I was up and running w/ Better List View in a matter of minutes. Great product! <b>It's just what I needed.</b>"
    +</blockquote>
    +    <em>Bret Reece, <a href="http://www.custodytoolbox.com" target="_blank">Five O'clock Software</a></em>
    +  </div>
    +
    +  <div class="testimonial ">
    +    <blockquote>Overall what I really like about Better ListView is that <b>you've gone for elegance, simplicity and consistency</b> in the appearance and the behaviour of the control.
    +</blockquote>
    +    <em><a href="http://danere.com" target="_blank">Daniel Nolan</a></em>
    +  </div>
    +
    +  <div class="testimonial ">
    +    <blockquote>The control is very <b>easy and intuitive to use and is well documented</b>.</blockquote>
    +    <em><a href="http://www.devproconnections.com/article/product-review/review-componentowl-s-better-listview" target="_blank">DevProConnections.com Review</a></em>
    +  </div>
    +
    +</div>
    +
    +
    +    <div class="darrows"></div>
    +    <div class="buttons-hp buttons-hp-horizontal">
    +  <a onclick="ga('send', 'event', 'trial', 'click');" data-sumome-listbuilder-id="4016d967-e098-487d-a20e-da328d2345df" class="standard-download image-link">Download Free Trial - With sample projects</a>
    +  <a href="better-listview.html" class="standard-more image-link">Learn More - Features &amp; Screenshots</a>
    +  <a href="pricing-licensing/better-listview.html" class="standard-buy image-link">See Pricing &amp; Licensing</a>
    +  <div class="logos">
    +    <img alt="Microsoft .NET" src="images/logo-dotnet.gif%3F1455269978" />
    +    <img alt="Microsoft Visual Studio" src="images/logo-vs.gif%3F1455269978" />
    +    <img alt="Microsoft Windows" src="images/logo-win.gif%3F1455269978" />
    +  </div>
    +</div>
    +
    +    <div class="sharethis">
    +</div>
    +
    +  </div>
    +</div>
    +        </div>
    +
    +
    +
    +      <div class="d-footer">
    +  <div class="d-placing">
    +
    +    <div class="left">
    +      <div class="latest-posts">
    +        <h3 class="latest_from_blog"><a href="blog.html">Latest From Our Blog</a></h3>
    +
    +          <h4><a href="blog/index.html%3Fp=927.html">Activation issues and how to solve them</a></h4>
    +          <div class="post-info">Wednesday, 01 March 2017</div>
    +
    +          <h4><a href="blog/index.html%3Fp=921.html">The Three Main Advantages Better ListView has Over the Classic .NET Framework</a></h4>
    +          <div class="post-info">Thursday, 09 February 2017</div>
    +
    +          <h4><a href="blog/index.html%3Fp=914.html">BLV and Internet Explorer</a></h4>
    +          <div class="post-info">Sunday, 13 November 2016</div>
    +
    +          <h4><a href="blog/index.html%3Fp=906.html">Centering Images in Better ListView Sub-items</a></h4>
    +          <div class="post-info">Wednesday, 06 August 2014</div>
    +
    +          <h4><a href="blog/index.html%3Fp=901.html">Sub-item Check Boxes in Better ListView</a></h4>
    +          <div class="post-info">Sunday, 06 July 2014</div>
    +
    +      </div>
    +      <div class="other-posts"><a href="blog.html">See more posts &raquo;</a></div>
    +    </div>
    +
    +    <div class="right">
    +      <div class="news">
    +        <ul class="links">
    +          <li><a href="feeds.rss" class="rss">Subscribe to our RSS</a></li>
    +          <li><a href="https://twitter.com/ComponentOwl" class="twitter">Follow us on twitter</a></li>
    +        </ul>
    +
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +
    +            <h4>Better ListView Express 3.15 released!</h4>
    +            <p>
    +
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +
    +          </div>
    +        </div>
    +
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +
    +            <h4>Better ListView 3.15 released!</h4>
    +            <p>
    +
    +              <a href="betterlistview.exe" onclick="download_email('better-listview');">Download latest release</a>
    +            </p>
    +
    +          </div>
    +        </div>
    +
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +
    +            <h4>Better SplitButton 3.15 released!</h4>
    +            <p>
    +
    +              <a href="bettersplitbutton.exe" onclick="download_email('better-splitbutton');">Download latest release</a>
    +            </p>
    +
    +          </div>
    +        </div>
    +
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +
    +            <h4>Better Thumbnail Browser 3.15 released!</h4>
    +            <p>
    +
    +              <a href="betterthumbnailbrowser.exe" onclick="download_email('better-thumbnail-browser');">Download latest release</a>
    +            </p>
    +
    +          </div>
    +        </div>
    +
    +        <div class="news-item last-item">
    +          <div class="date">08<span>Apr</span></div>
    +          <div class="message">
    +
    +            <h4>Better ListView Express 3.14.0 released!</h4>
    +            <p>
    +
    +                <a href="better-listview-express/releases%3Fsince=3.14.0.html">See what's new</a>
    +                or
    +
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +
    +          </div>
    +        </div>
    +
    +      </div>
    +    </div>
    +
    +  </div>
    +  <div class="d-placing">
    +    <hr />
    +    <div class="copy"><div class="social"><a href="support.html" class="feedback">Contact Us (Feedback)</a> <span>|</span> <a href="feeds.rss" class="rss">RSS</a> <span>|</span> <a href="https://twitter.com/ComponentOwl" class="twitter">Twitter</a> <span>|</span> <a href="sitemap.html" class="sitemap">Sitemap</a> <span>|</span> Our <a href="index.html" class="stdl">task management software</a> that uses Better ListView</div>
    +Copyright &copy; 2018 ComponentOwl.com, All rights reserved. Read our <a href="eula.html">EULA</a>, <a href="disclaimer.html">Disclaimer</a> and <a href="privacy-policy.html">Privacy Policy</a>.<br /></div>
    +  </div>
    +
    +</div>
    +
    +    </div>
    +
    +    <script src="javascripts/app_packaged.js%3F1455269826" type="text/javascript"></script>
    +<script async>(function(s,u,m,o,j,v){j=u.createElement(m);v=u.getElementsByTagName(m)[0];j.async=1;j.src=o;j.dataset.sumoSiteId='854b5e00f297990012cc230023375a00787c0000216621002775a800d79ad500';v.parentNode.insertBefore(j,v)})(window,document,'script','//load.sumo.com/');</script>
    +  </body>
    +</html>
    diff --git a/javascripts/app_packaged.js?1455269826 b/javascripts/app_packaged.js?1455269826
    new file mode 100644
    index 0000000..4166e1c
    --- /dev/null
    +++ b/javascripts/app_packaged.js?1455269826
    @@ -0,0 +1,16 @@
    +/*
    + * jQuery JavaScript Library v1.4.2
    + * http://jquery.com/
    + *
    + * Copyright 2010, John Resig
    + * Dual licensed under the MIT or GPL Version 2 licenses.
    + * http://jquery.org/license
    + *
    + * Includes Sizzle.js
    + * http://sizzlejs.com/
    + * Copyright 2010, The Dojo Foundation
    + * Released under the MIT, BSD, and GPL Licenses.
    + *
    + * Date: Sat Feb 13 22:33:48 2010 -0500
    + */
    +(function(aQ,S){function a2(){if(!aj.isReady){try{U.documentElement.doScroll("left")}catch(c){setTimeout(a2,1);return}aj.ready()}}function I(s,c){c.src?aj.ajax({url:c.src,async:false,dataType:"script"}):aj.globalEval(c.text||c.textContent||c.innerHTML||"");c.parentNode&&c.parentNode.removeChild(c)}function ar(s,c,K,F,G,w){var A=s.length;if(typeof c==="object"){for(var J in c){ar(s,J,c[J],F,G,K)}return s}if(K!==S){F=!w&&F&&aj.isFunction(K);for(J=0;J<A;J++){G(s[J],c,F?K.call(s[J],J,G(s[J],c)):K,w)}return s}return A?G(s[0],c):S}function aH(){return(new Date).getTime()}function aq(){return false}function ao(){return true}function aM(s,c,w){w[0].type=s;return aj.event.handle.apply(c,w)}function ai(O){var N,L=[],J=[],K=arguments,F,G,s,A,w,c;G=aj.data(this,"events");if(!(O.liveFired===this||!G||!G.live||O.button&&O.type==="click")){O.liveFired=this;var P=G.live.slice(0);for(A=0;A<P.length;A++){G=P[A];G.origType.replace(aB,"")===O.type?J.push(G.selector):P.splice(A--,1)}F=aj(O.target).closest(J,O.currentTarget);w=0;for(c=F.length;w<c;w++){for(A=0;A<P.length;A++){G=P[A];if(F[w].selector===G.selector){s=F[w].elem;J=null;if(G.preType==="mouseenter"||G.preType==="mouseleave"){J=aj(O.relatedTarget).closest(G.selector)[0]}if(!J||J!==s){L.push({elem:s,handleObj:G})}}}}w=0;for(c=L.length;w<c;w++){F=L[w];O.currentTarget=F.elem;O.data=F.handleObj.data;O.handleObj=F.handleObj;if(F.handleObj.origHandler.apply(F.elem,K)===false){N=false;break}}return N}}function C(s,c){return"live."+(s&&s!=="*"?s+".":"")+c.replace(/\./g,"`").replace(/ /g,"&")}function m(c){return !c||!c.parentNode||c.parentNode.nodeType===11}function bl(s,c){var w=0;c.each(function(){if(this.nodeName===(s[w]&&s[w].nodeName)){var G=aj.data(s[w++]),J=aj.data(this,G);if(G=G&&G.events){delete J.handle;J.events={};for(var A in G){for(var F in G[A]){aj.event.add(this,A,G[A][F],G[A][F].data)}}}}})}function a5(s,c,G){var A,F,w;c=c&&c[0]?c[0].ownerDocument||c[0]:U;if(s.length===1&&typeof s[0]==="string"&&s[0].length<512&&c===U&&!aR.test(s[0])&&(aj.support.checkClone||!am.test(s[0]))){F=true;if(w=aj.fragments[s[0]]){if(w!==1){A=w}}}if(!A){A=c.createDocumentFragment();aj.clean(s,c,A,G)}if(F){aj.fragments[s[0]]=w?A:1}return{fragment:A,cacheable:F}}function aE(s,c){var w={};aj.each(H.concat.apply([],H.slice(0,c)),function(){w[this]=s});return w}function p(c){return"scrollTo" in c&&c.document?c:c.nodeType===9?c.defaultView||c.parentWindow:false}var aj=function(s,c){return new aj.fn.init(s,c)},q=aQ.jQuery,d=aQ.$,U=aQ.document,av,a9=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,aV=/^.[^:#\[\.,]*$/,ap=/\S/,M=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,r=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,az=navigator.userAgent,b=false,ax=[],aD,a3=Object.prototype.toString,aX=Object.prototype.hasOwnProperty,aA=Array.prototype.push,aw=Array.prototype.slice,a8=Array.prototype.indexOf;aj.fn=aj.prototype={init:function(s,c){var A,w;if(!s){return this}if(s.nodeType){this.context=this[0]=s;this.length=1;return this}if(s==="body"&&!c){this.context=U;this[0]=U.body;this.selector="body";this.length=1;return this}if(typeof s==="string"){if((A=a9.exec(s))&&(A[1]||!c)){if(A[1]){w=c?c.ownerDocument||c:U;if(s=r.exec(s)){if(aj.isPlainObject(c)){s=[U.createElement(s[1])];aj.fn.attr.call(s,c,true)}else{s=[w.createElement(s[1])]}}else{s=a5([A[1]],[w]);s=(s.cacheable?s.fragment.cloneNode(true):s.fragment).childNodes}return aj.merge(this,s)}else{if(c=U.getElementById(A[2])){if(c.id!==A[2]){return av.find(s)}this.length=1;this[0]=c}this.context=U;this.selector=s;return this}}else{if(!c&&/^\w+$/.test(s)){this.selector=s;this.context=U;s=U.getElementsByTagName(s);return aj.merge(this,s)}else{return !c||c.jquery?(c||av).find(s):aj(c).find(s)}}}else{if(aj.isFunction(s)){return av.ready(s)}}if(s.selector!==S){this.selector=s.selector;this.context=s.context}return aj.makeArray(s,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return aw.call(this,0)},get:function(c){return c==null?this.toArray():c<0?this.slice(c)[0]:this[c]},pushStack:function(s,c,A){var w=aj();aj.isArray(s)?aA.apply(w,s):aj.merge(w,s);w.prevObject=this;w.context=this.context;if(c==="find"){w.selector=this.selector+(this.selector?" ":"")+A}else{if(c){w.selector=this.selector+"."+c+"("+A+")"}}return w},each:function(s,c){return aj.each(this,s,c)},ready:function(c){aj.bindReady();if(aj.isReady){c.call(U,aj)}else{ax&&ax.push(c)}return this},eq:function(c){return c===-1?this.slice(c):this.slice(c,+c+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(aw.apply(this,arguments),"slice",aw.call(arguments).join(","))},map:function(c){return this.pushStack(aj.map(this,function(s,w){return c.call(s,w,s)}))},end:function(){return this.prevObject||aj(null)},push:aA,sort:[].sort,splice:[].splice};aj.fn.init.prototype=aj.fn;aj.extend=aj.fn.extend=function(){var s=arguments[0]||{},c=1,K=arguments.length,F=false,G,w,A,J;if(typeof s==="boolean"){F=s;s=arguments[1]||{};c=2}if(typeof s!=="object"&&!aj.isFunction(s)){s={}}if(K===c){s=this;--c}for(;c<K;c++){if((G=arguments[c])!=null){for(w in G){A=s[w];J=G[w];if(s!==J){if(F&&J&&(aj.isPlainObject(J)||aj.isArray(J))){A=A&&(aj.isPlainObject(A)||aj.isArray(A))?A:aj.isArray(J)?[]:{};s[w]=aj.extend(F,A,J)}else{if(J!==S){s[w]=J}}}}}}return s};aj.extend({noConflict:function(c){aQ.$=d;if(c){aQ.jQuery=q}return aj},isReady:false,ready:function(){if(!aj.isReady){if(!U.body){return setTimeout(aj.ready,13)}aj.isReady=true;if(ax){for(var s,c=0;s=ax[c++];){s.call(U,aj)}ax=null}aj.fn.triggerHandler&&aj(U).triggerHandler("ready")}},bindReady:function(){if(!b){b=true;if(U.readyState==="complete"){return aj.ready()}if(U.addEventListener){U.addEventListener("DOMContentLoaded",aD,false);aQ.addEventListener("load",aj.ready,false)}else{if(U.attachEvent){U.attachEvent("onreadystatechange",aD);aQ.attachEvent("onload",aj.ready);var s=false;try{s=aQ.frameElement==null}catch(c){}U.documentElement.doScroll&&s&&a2()}}}},isFunction:function(c){return a3.call(c)==="[object Function]"},isArray:function(c){return a3.call(c)==="[object Array]"},isPlainObject:function(s){if(!s||a3.call(s)!=="[object Object]"||s.nodeType||s.setInterval){return false}if(s.constructor&&!aX.call(s,"constructor")&&!aX.call(s.constructor.prototype,"isPrototypeOf")){return false}var c;for(c in s){}return c===S||aX.call(s,c)},isEmptyObject:function(s){for(var c in s){return false}return true},error:function(c){throw c},parseJSON:function(c){if(typeof c!=="string"||!c){return null}c=aj.trim(c);if(/^[\],:{}\s]*$/.test(c.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){return aQ.JSON&&aQ.JSON.parse?aQ.JSON.parse(c):(new Function("return "+c))()}else{aj.error("Invalid JSON: "+c)}},noop:function(){},globalEval:function(s){if(s&&ap.test(s)){var c=U.getElementsByTagName("head")[0]||U.documentElement,w=U.createElement("script");w.type="text/javascript";if(aj.support.scriptEval){w.appendChild(U.createTextNode(s))}else{w.text=s}c.insertBefore(w,c.firstChild);c.removeChild(w)}},nodeName:function(s,c){return s.nodeName&&s.nodeName.toUpperCase()===c.toUpperCase()},each:function(s,c,J){var F,G=0,w=s.length,A=w===S||aj.isFunction(s);if(J){if(A){for(F in s){if(c.apply(s[F],J)===false){break}}}else{for(;G<w;){if(c.apply(s[G++],J)===false){break}}}}else{if(A){for(F in s){if(c.call(s[F],F,s[F])===false){break}}}else{for(J=s[0];G<w&&c.call(J,G,J)!==false;J=s[++G]){}}}return s},trim:function(c){return(c||"").replace(M,"")},makeArray:function(s,c){c=c||[];if(s!=null){s.length==null||typeof s==="string"||aj.isFunction(s)||typeof s!=="function"&&s.setInterval?aA.call(c,s):aj.merge(c,s)}return c},inArray:function(s,c){if(c.indexOf){return c.indexOf(s)}for(var A=0,w=c.length;A<w;A++){if(c[A]===s){return A}}return -1},merge:function(s,c){var F=s.length,w=0;if(typeof c.length==="number"){for(var A=c.length;w<A;w++){s[F++]=c[w]}}else{for(;c[w]!==S;){s[F++]=c[w++]}}s.length=F;return s},grep:function(s,c,G){for(var A=[],F=0,w=s.length;F<w;F++){!G!==!c(s[F],F)&&A.push(s[F])}return A},map:function(s,c,J){for(var F=[],G,w=0,A=s.length;w<A;w++){G=c(s[w],w,J);if(G!=null){F[F.length]=G}}return F.concat.apply([],F)},guid:1,proxy:function(s,c,w){if(arguments.length===2){if(typeof c==="string"){w=s;s=w[c];c=S}else{if(c&&!aj.isFunction(c)){w=c;c=S}}}if(!c&&s){c=function(){return s.apply(w||this,arguments)}}if(s){c.guid=s.guid=s.guid||c.guid||aj.guid++}return c},uaMatch:function(c){c=c.toLowerCase();c=/(webkit)[ \/]([\w.]+)/.exec(c)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(c)||/(msie) ([\w.]+)/.exec(c)||!/compatible/.test(c)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(c)||[];return{browser:c[1]||"",version:c[2]||"0"}},browser:{}});az=aj.uaMatch(az);if(az.browser){aj.browser[az.browser]=true;aj.browser.version=az.version}if(aj.browser.webkit){aj.browser.safari=true}if(a8){aj.inArray=function(s,c){return a8.call(c,s)}}av=aj(U);if(U.addEventListener){aD=function(){U.removeEventListener("DOMContentLoaded",aD,false);aj.ready()}}else{if(U.attachEvent){aD=function(){if(U.readyState==="complete"){U.detachEvent("onreadystatechange",aD);aj.ready()}}}}(function(){aj.support={};var L=U.documentElement,K=U.createElement("script"),J=U.createElement("div"),F="script"+aH();J.style.display="none";J.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var G=J.getElementsByTagName("*"),w=J.getElementsByTagName("a")[0];if(!(!G||!G.length||!w)){aj.support={leadingWhitespace:J.firstChild.nodeType===3,tbody:!J.getElementsByTagName("tbody").length,htmlSerialize:!!J.getElementsByTagName("link").length,style:/red/.test(w.getAttribute("style")),hrefNormalized:w.getAttribute("href")==="/a",opacity:/^0.55$/.test(w.style.opacity),cssFloat:!!w.style.cssFloat,checkOn:J.getElementsByTagName("input")[0].value==="on",optSelected:U.createElement("select").appendChild(U.createElement("option")).selected,parentNode:J.removeChild(J.appendChild(U.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};K.type="text/javascript";try{K.appendChild(U.createTextNode("window."+F+"=1;"))}catch(A){}L.insertBefore(K,L.firstChild);if(aQ[F]){aj.support.scriptEval=true;delete aQ[F]}try{delete K.test}catch(c){aj.support.deleteExpando=false}L.removeChild(K);if(J.attachEvent&&J.fireEvent){J.attachEvent("onclick",function s(){aj.support.noCloneEvent=false;J.detachEvent("onclick",s)});J.cloneNode(true).fireEvent("onclick")}J=U.createElement("div");J.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";L=U.createDocumentFragment();L.appendChild(J.firstChild);aj.support.checkClone=L.cloneNode(true).cloneNode(true).lastChild.checked;aj(function(){var N=U.createElement("div");N.style.width=N.style.paddingLeft="1px";U.body.appendChild(N);aj.boxModel=aj.support.boxModel=N.offsetWidth===2;U.body.removeChild(N).style.display="none"});L=function(N){var P=U.createElement("div");N="on"+N;var O=N in P;if(!O){P.setAttribute(N,"return;");O=typeof P[N]==="function"}return O};aj.support.submitBubbles=L("submit");aj.support.changeBubbles=L("change");L=K=J=G=w=null}})();aj.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var aJ="jQuery"+aH(),f=0,aU={};aj.extend({cache:{},expando:aJ,noData:{embed:true,object:true,applet:true},data:function(s,c,F){if(!(s.nodeName&&aj.noData[s.nodeName.toLowerCase()])){s=s==aQ?aU:s;var w=s[aJ],A=aj.cache;if(!w&&typeof c==="string"&&F===S){return null}w||(w=++f);if(typeof c==="object"){s[aJ]=w;A[w]=aj.extend(true,{},c)}else{if(!A[w]){s[aJ]=w;A[w]={}}}s=A[w];if(F!==S){s[c]=F}return typeof c==="string"?s[c]:s}},removeData:function(s,c){if(!(s.nodeName&&aj.noData[s.nodeName.toLowerCase()])){s=s==aQ?aU:s;var F=s[aJ],w=aj.cache,A=w[F];if(c){if(A){delete A[c];aj.isEmptyObject(A)&&aj.removeData(s)}}else{if(aj.support.deleteExpando){delete s[aj.expando]}else{s.removeAttribute&&s.removeAttribute(aj.expando)}delete w[F]}}}});aj.fn.extend({data:function(s,c){if(typeof s==="undefined"&&this.length){return aj.data(this[0])}else{if(typeof s==="object"){return this.each(function(){aj.data(this,s)})}}var A=s.split(".");A[1]=A[1]?"."+A[1]:"";if(c===S){var w=this.triggerHandler("getData"+A[1]+"!",[A[0]]);if(w===S&&this.length){w=aj.data(this[0],s)}return w===S&&A[1]?this.data(A[0]):w}else{return this.trigger("setData"+A[1]+"!",[A[0],c]).each(function(){aj.data(this,s,c)})}},removeData:function(c){return this.each(function(){aj.removeData(this,c)})}});aj.extend({queue:function(s,c,A){if(s){c=(c||"fx")+"queue";var w=aj.data(s,c);if(!A){return w||[]}if(!w||aj.isArray(A)){w=aj.data(s,c,aj.makeArray(A))}else{w.push(A)}return w}},dequeue:function(s,c){c=c||"fx";var A=aj.queue(s,c),w=A.shift();if(w==="inprogress"){w=A.shift()}if(w){c==="fx"&&A.unshift("inprogress");w.call(s,function(){aj.dequeue(s,c)})}}});aj.fn.extend({queue:function(s,c){if(typeof s!=="string"){c=s;s="fx"}if(c===S){return aj.queue(this[0],s)}return this.each(function(){var w=aj.queue(this,s,c);s==="fx"&&w[0]!=="inprogress"&&aj.dequeue(this,s)})},dequeue:function(c){return this.each(function(){aj.dequeue(this,c)})},delay:function(s,c){s=aj.fx?aj.fx.speeds[s]||s:s;c=c||"fx";return this.queue(c,function(){var w=this;setTimeout(function(){aj.dequeue(w,c)},s)})},clearQueue:function(c){return this.queue(c||"fx",[])}});var bg=/[\n\t]/g,ad=/\s+/,bc=/\r/g,aO=/href|src|style/,aW=/(button|input)/i,ay=/(button|input|object|select|textarea)/i,ac=/^(a|area)$/i,a0=/radio|checkbox/;aj.fn.extend({attr:function(s,c){return ar(this,s,c,true,aj.attr)},removeAttr:function(c){return this.each(function(){aj.attr(this,c,"");this.nodeType===1&&this.removeAttribute(c)})},addClass:function(L){if(aj.isFunction(L)){return this.each(function(O){var N=aj(this);N.addClass(L.call(this,O,N.attr("class")))})}if(L&&typeof L==="string"){for(var K=(L||"").split(ad),J=0,F=this.length;J<F;J++){var G=this[J];if(G.nodeType===1){if(G.className){for(var w=" "+G.className+" ",A=G.className,c=0,s=K.length;c<s;c++){if(w.indexOf(" "+K[c]+" ")<0){A+=" "+K[c]}}G.className=aj.trim(A)}else{G.className=L}}}}return this},removeClass:function(s){if(aj.isFunction(s)){return this.each(function(L){var N=aj(this);N.removeClass(s.call(this,L,N.attr("class")))})}if(s&&typeof s==="string"||s===S){for(var c=(s||"").split(ad),K=0,F=this.length;K<F;K++){var G=this[K];if(G.nodeType===1&&G.className){if(s){for(var w=(" "+G.className+" ").replace(bg," "),A=0,J=c.length;A<J;A++){w=w.replace(" "+c[A]+" "," ")}G.className=aj.trim(w)}else{G.className=""}}}}return this},toggleClass:function(s,c){var A=typeof s,w=typeof c==="boolean";if(aj.isFunction(s)){return this.each(function(G){var F=aj(this);F.toggleClass(s.call(this,G,F.attr("class"),c),c)})}return this.each(function(){if(A==="string"){for(var K,G=0,J=aj(this),L=c,F=s.split(ad);K=F[G++];){L=w?L:!J.hasClass(K);J[L?"addClass":"removeClass"](K)}}else{if(A==="undefined"||A==="boolean"){this.className&&aj.data(this,"__className__",this.className);this.className=this.className||s===false?"":aj.data(this,"__className__")||""}}})},hasClass:function(s){s=" "+s+" ";for(var c=0,w=this.length;c<w;c++){if((" "+this[c].className+" ").replace(bg," ").indexOf(s)>-1){return true}}return false},val:function(s){if(s===S){var c=this[0];if(c){if(aj.nodeName(c,"option")){return(c.attributes.value||{}).specified?c.value:c.text}if(aj.nodeName(c,"select")){var K=c.selectedIndex,F=[],G=c.options;c=c.type==="select-one";if(K<0){return null}var w=c?K:0;for(K=c?K+1:G.length;w<K;w++){var A=G[w];if(A.selected){s=aj(A).val();if(c){return s}F.push(s)}}return F}if(a0.test(c.type)&&!aj.support.checkOn){return c.getAttribute("value")===null?"on":c.value}return(c.value||"").replace(bc,"")}return S}var J=aj.isFunction(s);return this.each(function(L){var P=aj(this),O=s;if(this.nodeType===1){if(J){O=s.call(this,L,P.val())}if(typeof O==="number"){O+=""}if(aj.isArray(O)&&a0.test(this.type)){this.checked=aj.inArray(P.val(),O)>=0}else{if(aj.nodeName(this,"select")){var N=aj.makeArray(O);aj("option",this).each(function(){this.selected=aj.inArray(aj(this).val(),N)>=0});if(!N.length){this.selectedIndex=-1}}else{this.value=O}}}})}});aj.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(s,c,G,A){if(!s||s.nodeType===3||s.nodeType===8){return S}if(A&&c in aj.attrFn){return aj(s)[c](G)}A=s.nodeType!==1||!aj.isXMLDoc(s);var F=G!==S;c=A&&aj.props[c]||c;if(s.nodeType===1){var w=aO.test(c);if(c in s&&A&&!w){if(F){c==="type"&&aW.test(s.nodeName)&&s.parentNode&&aj.error("type property can't be changed");s[c]=G}if(aj.nodeName(s,"form")&&s.getAttributeNode(c)){return s.getAttributeNode(c).nodeValue}if(c==="tabIndex"){return(c=s.getAttributeNode("tabIndex"))&&c.specified?c.value:ay.test(s.nodeName)||ac.test(s.nodeName)&&s.href?0:S}return s[c]}if(!aj.support.style&&A&&c==="style"){if(F){s.style.cssText=""+G}return s.style.cssText}F&&s.setAttribute(c,""+G);s=!aj.support.hrefNormalized&&A&&w?s.getAttribute(c,2):s.getAttribute(c);return s===null?S:s}return aj.style(s,c,G)}});var aB=/\.(.*)$/,u=function(c){return c.replace(/[^\w\s\.\|`]/g,function(s){return"\\"+s})};aj.event={add:function(P,O,L,J){if(!(P.nodeType===3||P.nodeType===8)){if(P.setInterval&&P!==aQ&&!P.frameElement){P=aQ}var K,F;if(L.handler){K=L;L=K.handler}if(!L.guid){L.guid=aj.guid++}if(F=aj.data(P)){var G=F.events=F.events||{},s=F.handle;if(!s){F.handle=s=function(){return typeof aj!=="undefined"&&!aj.event.triggered?aj.event.handle.apply(s.elem,arguments):S}}s.elem=P;O=O.split(" ");for(var A,w=0,c;A=O[w++];){F=K?aj.extend({},K):{handler:L,data:J};if(A.indexOf(".")>-1){c=A.split(".");A=c.shift();F.namespace=c.slice(0).sort().join(".")}else{c=[];F.namespace=""}F.type=A;F.guid=L.guid;var Q=G[A],N=aj.event.special[A]||{};if(!Q){Q=G[A]=[];if(!N.setup||N.setup.call(P,J,c,s)===false){if(P.addEventListener){P.addEventListener(A,s,false)}else{P.attachEvent&&P.attachEvent("on"+A,s)}}}if(N.add){N.add.call(P,F);if(!F.handler.guid){F.handler.guid=L.guid}}Q.push(F);aj.event.global[A]=true}P=null}}},global:{},remove:function(R,Q,O,L){if(!(R.nodeType===3||R.nodeType===8)){var N,J=0,K,A,G,F,c,T,P=aj.data(R),s=P&&P.events;if(P&&s){if(Q&&Q.type){O=Q.handler;Q=Q.type}if(!Q||typeof Q==="string"&&Q.charAt(0)==="."){Q=Q||"";for(N in s){aj.event.remove(R,N+Q)}}else{for(Q=Q.split(" ");N=Q[J++];){F=N;K=N.indexOf(".")<0;A=[];if(!K){A=N.split(".");N=A.shift();G=new RegExp("(^|\\.)"+aj.map(A.slice(0).sort(),u).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(c=s[N]){if(O){F=aj.event.special[N]||{};for(w=L||0;w<c.length;w++){T=c[w];if(O.guid===T.guid){if(K||G.test(T.namespace)){L==null&&c.splice(w--,1);F.remove&&F.remove.call(R,T)}if(L!=null){break}}}if(c.length===0||L!=null&&c.length===1){if(!F.teardown||F.teardown.call(R,A)===false){aI(R,N,P.handle)}delete s[N]}}else{for(var w=0;w<c.length;w++){T=c[w];if(K||G.test(T.namespace)){aj.event.remove(R,F,T.handler,w);c.splice(w--,1)}}}}}if(aj.isEmptyObject(s)){if(Q=P.handle){Q.elem=null}delete P.events;delete P.handle;aj.isEmptyObject(P)&&aj.removeData(R)}}}}},trigger:function(N,L,K,G){var J=N.type||N;if(!G){N=typeof N==="object"?N[aJ]?N:aj.extend(aj.Event(J),N):aj.Event(J);if(J.indexOf("!")>=0){N.type=J=J.slice(0,-1);N.exclusive=true}if(!K){N.stopPropagation();aj.event.global[J]&&aj.each(aj.cache,function(){this.events&&this.events[J]&&aj.event.trigger(N,L,this.handle.elem)})}if(!K||K.nodeType===3||K.nodeType===8){return S}N.result=S;N.target=K;L=aj.makeArray(L);L.unshift(N)}N.currentTarget=K;(G=aj.data(K,"handle"))&&G.apply(K,L);G=K.parentNode||K.ownerDocument;try{if(!(K&&K.nodeName&&aj.noData[K.nodeName.toLowerCase()])){if(K["on"+J]&&K["on"+J].apply(K,L)===false){N.result=false}}}catch(A){}if(!N.isPropagationStopped()&&G){aj.event.trigger(N,L,G,true)}else{if(!N.isDefaultPrevented()){G=N.target;var F,c=aj.nodeName(G,"a")&&J==="click",w=aj.event.special[J]||{};if((!w._default||w._default.call(K,N)===false)&&!c&&!(G&&G.nodeName&&aj.noData[G.nodeName.toLowerCase()])){try{if(G[J]){if(F=G["on"+J]){G["on"+J]=null}aj.event.triggered=true;G[J]()}}catch(s){}if(F){G["on"+J]=F}aj.event.triggered=false}}}},handle:function(s){var c,J,F,G;s=arguments[0]=aj.event.fix(s||aQ.event);s.currentTarget=this;c=s.type.indexOf(".")<0&&!s.exclusive;if(!c){J=s.type.split(".");s.type=J.shift();F=new RegExp("(^|\\.)"+J.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}G=aj.data(this,"events");J=G[s.type];if(G&&J){J=J.slice(0);G=0;for(var w=J.length;G<w;G++){var A=J[G];if(c||F.test(A.namespace)){s.handler=A.handler;s.data=A.data;s.handleObj=A;A=A.handler.apply(this,arguments);if(A!==S){s.result=A;if(A===false){s.preventDefault();s.stopPropagation()}}if(s.isImmediatePropagationStopped()){break}}}}return s.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(s){if(s[aJ]){return s}var c=s;s=aj.Event(c);for(var A=this.props.length,w;A;){w=this.props[--A];s[w]=c[w]}if(!s.target){s.target=s.srcElement||U}if(s.target.nodeType===3){s.target=s.target.parentNode}if(!s.relatedTarget&&s.fromElement){s.relatedTarget=s.fromElement===s.target?s.toElement:s.fromElement}if(s.pageX==null&&s.clientX!=null){c=U.documentElement;A=U.body;s.pageX=s.clientX+(c&&c.scrollLeft||A&&A.scrollLeft||0)-(c&&c.clientLeft||A&&A.clientLeft||0);s.pageY=s.clientY+(c&&c.scrollTop||A&&A.scrollTop||0)-(c&&c.clientTop||A&&A.clientTop||0)}if(!s.which&&(s.charCode||s.charCode===0?s.charCode:s.keyCode)){s.which=s.charCode||s.keyCode}if(!s.metaKey&&s.ctrlKey){s.metaKey=s.ctrlKey}if(!s.which&&s.button!==S){s.which=s.button&1?1:s.button&2?3:s.button&4?2:0}return s},guid:100000000,proxy:aj.proxy,special:{ready:{setup:aj.bindReady,teardown:aj.noop},live:{add:function(c){aj.event.add(this,c.origType,aj.extend({},c,{handler:ai}))},remove:function(s){var c=true,w=s.origType.replace(aB,"");aj.each(aj.data(this,"events").live||[],function(){if(w===this.origType.replace(aB,"")){return c=false}});c&&aj.event.remove(this,s.origType,ai)}},beforeunload:{setup:function(s,c,w){if(this.setInterval){this.onbeforeunload=w}return false},teardown:function(s,c){if(this.onbeforeunload===c){this.onbeforeunload=null}}}}};var aI=U.removeEventListener?function(s,c,w){s.removeEventListener(c,w,false)}:function(s,c,w){s.detachEvent("on"+c,w)};aj.Event=function(c){if(!this.preventDefault){return new aj.Event(c)}if(c&&c.type){this.originalEvent=c;this.type=c.type}else{this.type=c}this.timeStamp=aH();this[aJ]=true};aj.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ao;var c=this.originalEvent;if(c){c.preventDefault&&c.preventDefault();c.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=ao;var c=this.originalEvent;if(c){c.stopPropagation&&c.stopPropagation();c.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ao;this.stopPropagation()},isDefaultPrevented:aq,isPropagationStopped:aq,isImmediatePropagationStopped:aq};var ag=function(s){var c=s.relatedTarget;try{for(;c&&c!==this;){c=c.parentNode}if(c!==this){s.type=s.data;aj.event.handle.apply(this,arguments)}}catch(w){}},z=function(c){c.type=c.data;aj.event.handle.apply(this,arguments)};aj.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(s,c){aj.event.special[s]={setup:function(w){aj.event.add(this,c,w&&w.selector?z:ag,s)},teardown:function(w){aj.event.remove(this,c,w&&w.selector?z:ag)}}});if(!aj.support.submitBubbles){aj.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!=="form"){aj.event.add(this,"click.specialSubmit",function(s){var c=s.target,w=c.type;if((w==="submit"||w==="image")&&aj(c).closest("form").length){return aM("submit",this,arguments)}});aj.event.add(this,"keypress.specialSubmit",function(s){var c=s.target,w=c.type;if((w==="text"||w==="password")&&aj(c).closest("form").length&&s.keyCode===13){return aM("submit",this,arguments)}})}else{return false}},teardown:function(){aj.event.remove(this,".specialSubmit")}}}if(!aj.support.changeBubbles){var v=/textarea|input|select/i,h,k=function(s){var c=s.type,w=s.value;if(c==="radio"||c==="checkbox"){w=s.checked}else{if(c==="select-multiple"){w=s.selectedIndex>-1?aj.map(s.options,function(A){return A.selected}).join("-"):""}else{if(s.nodeName.toLowerCase()==="select"){w=s.selectedIndex}}}return w},bf=function(s,c){var F=s.target,w,A;if(!(!v.test(F.nodeName)||F.readOnly)){w=aj.data(F,"_change_data");A=k(F);if(s.type!=="focusout"||F.type!=="radio"){aj.data(F,"_change_data",A)}if(!(w===S||A===w)){if(w!=null||A){s.type="change";return aj.event.trigger(s,c,F)}}}};aj.event.special.change={filters:{focusout:bf,click:function(s){var c=s.target,w=c.type;if(w==="radio"||w==="checkbox"||c.nodeName.toLowerCase()==="select"){return bf.call(this,s)}},keydown:function(s){var c=s.target,w=c.type;if(s.keyCode===13&&c.nodeName.toLowerCase()!=="textarea"||s.keyCode===32&&(w==="checkbox"||w==="radio")||w==="select-multiple"){return bf.call(this,s)}},beforeactivate:function(c){c=c.target;aj.data(c,"_change_data",k(c))}},setup:function(){if(this.type==="file"){return false}for(var c in h){aj.event.add(this,c+".specialChange",h[c])}return v.test(this.nodeName)},teardown:function(){aj.event.remove(this,".specialChange");return v.test(this.nodeName)}};h=aj.event.special.change.filters}U.addEventListener&&aj.each({focus:"focusin",blur:"focusout"},function(s,c){function w(A){A=aj.event.fix(A);A.type=c;return aj.event.handle.call(this,A)}aj.event.special[c]={setup:function(){this.addEventListener(s,w,true)},teardown:function(){this.removeEventListener(s,w,true)}}});aj.each(["bind","one"],function(s,c){aj.fn[c]=function(K,F,G){if(typeof K==="object"){for(var w in K){this[c](w,F,K[w],G)}return this}if(aj.isFunction(F)){G=F;F=S}var A=c==="one"?aj.proxy(G,function(L){aj(this).unbind(L,A);return G.apply(this,arguments)}):G;if(K==="unload"&&c!=="one"){this.one(K,F,G)}else{w=0;for(var J=this.length;w<J;w++){aj.event.add(this[w],K,A,F)}}return this}});aj.fn.extend({unbind:function(s,c){if(typeof s==="object"&&!s.preventDefault){for(var A in s){this.unbind(A,s[A])}}else{A=0;for(var w=this.length;A<w;A++){aj.event.remove(this[A],s,c)}}return this},delegate:function(s,c,A,w){return this.live(c,A,w,s)},undelegate:function(s,c,w){return arguments.length===0?this.unbind("live"):this.die(c,null,w,s)},trigger:function(s,c){return this.each(function(){aj.event.trigger(s,c,this)})},triggerHandler:function(s,c){if(this[0]){s=aj.Event(s);s.preventDefault();s.stopPropagation();aj.event.trigger(s,c,this[0]);return s.result}},toggle:function(s){for(var c=arguments,w=1;w<c.length;){aj.proxy(s,c[w++])}return this.click(aj.proxy(s,function(A){var F=(aj.data(this,"lastToggle"+s.guid)||0)%w;aj.data(this,"lastToggle"+s.guid,F+1);A.preventDefault();return c[F].apply(this,arguments)||false}))},hover:function(s,c){return this.mouseenter(s).mouseleave(c||s)}});var bj={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};aj.each(["live","die"],function(s,c){aj.fn[c]=function(O,L,N,J){var K,A=0,G,F,w=J||this.selector,P=J?this:aj(this.context);if(aj.isFunction(L)){N=L;L=S}for(O=(O||"").split(" ");(K=O[A++])!=null;){J=aB.exec(K);G="";if(J){G=J[0];K=K.replace(aB,"")}if(K==="hover"){O.push("mouseenter"+G,"mouseleave"+G)}else{F=K;if(K==="focus"||K==="blur"){O.push(bj[K]+G);K+=G}else{K=(bj[K]||K)+G}c==="live"?P.each(function(){aj.event.add(this,C(K,w),{data:L,selector:w,handler:N,origType:K,origHandler:N,preType:F})}):P.unbind(C(K,w),N)}}return this}});aj.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(s,c){aj.fn[c]=function(w){return w?this.bind(c,w):this.trigger(c)};if(aj.attrFn){aj.attrFn[c]=true}});aQ.attachEvent&&!aQ.addEventListener&&aQ.attachEvent("onunload",function(){for(var s in aj.cache){if(aj.cache[s].handle){try{aj.event.remove(aj.cache[s].handle.elem)}catch(c){}}}});(function(){function W(ab){for(var aa="",Z,Y=0;ab[Y];Y++){Z=ab[Y];if(Z.nodeType===3||Z.nodeType===4){aa+=Z.nodeValue}else{if(Z.nodeType!==8){aa+=W(Z.childNodes)}}}return aa}function V(bb,ba,ab,aa,Y,Z){Y=0;for(var bo=aa.length;Y<bo;Y++){var bp=aa[Y];if(bp){bp=bp[bb];for(var bn=false;bp;){if(bp.sizcache===ab){bn=aa[bp.sizset];break}if(bp.nodeType===1&&!Z){bp.sizcache=ab;bp.sizset=Y}if(bp.nodeName.toLowerCase()===ba){bn=bp;break}bp=bp[bb]}aa[Y]=bn}}}function T(bb,ba,ab,aa,Y,Z){Y=0;for(var bo=aa.length;Y<bo;Y++){var bp=aa[Y];if(bp){bp=bp[bb];for(var bn=false;bp;){if(bp.sizcache===ab){bn=aa[bp.sizset];break}if(bp.nodeType===1){if(!Z){bp.sizcache=ab;bp.sizset=Y}if(typeof ba!=="string"){if(bp===ba){bn=true;break}}else{if(N.filter(ba,[bp]).length>0){bn=bp;break}}}bp=bp[bb]}aa[Y]=bn}}}var Q=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,R=0,O=Object.prototype.toString,P=false,K=true;[0,0].sort(function(){K=false;return 0});var N=function(bo,bn,ba,ab){ba=ba||[];var Z=bn=bn||U;if(bn.nodeType!==1&&bn.nodeType!==9){return[]}if(!bo||typeof bo!=="string"){return ba}for(var aa=[],bt,bu,bq,bb,bs=true,bp=s(bn),br=bo;(Q.exec(""),bt=Q.exec(br))!==null;){br=bt[3];aa.push(bt[1]);if(bt[2]){bb=bt[3];break}}if(aa.length>1&&G.exec(bo)){if(aa.length===2&&L.relative[aa[0]]){bu=X(aa[0]+aa[1],bn)}else{for(bu=L.relative[aa[0]]?[bn]:N(aa.shift(),bn);aa.length;){bo=aa.shift();if(L.relative[bo]){bo+=aa.shift()}bu=X(bo,bu)}}}else{if(!ab&&aa.length>1&&bn.nodeType===9&&!bp&&L.match.ID.test(aa[0])&&!L.match.ID.test(aa[aa.length-1])){bt=N.find(aa.shift(),bn,bp);bn=bt.expr?N.filter(bt.expr,bt.set)[0]:bt.set[0]}if(bn){bt=ab?{expr:aa.pop(),set:c(ab)}:N.find(aa.pop(),aa.length===1&&(aa[0]==="~"||aa[0]==="+")&&bn.parentNode?bn.parentNode:bn,bp);bu=bt.expr?N.filter(bt.expr,bt.set):bt.set;if(aa.length>0){bq=c(bu)}else{bs=false}for(;aa.length;){var Y=aa.pop();bt=Y;if(L.relative[Y]){bt=aa.pop()}else{Y=""}if(bt==null){bt=bn}L.relative[Y](bq,bt,bp)}}else{bq=[]}}bq||(bq=bu);bq||N.error(Y||bo);if(O.call(bq)==="[object Array]"){if(bs){if(bn&&bn.nodeType===1){for(bo=0;bq[bo]!=null;bo++){if(bq[bo]&&(bq[bo]===true||bq[bo].nodeType===1&&A(bn,bq[bo]))){ba.push(bu[bo])}}}else{for(bo=0;bq[bo]!=null;bo++){bq[bo]&&bq[bo].nodeType===1&&ba.push(bu[bo])}}}else{ba.push.apply(ba,bq)}}else{c(bq,ba)}if(bb){N(bb,Z,ba,ab);N.uniqueSort(ba)}return ba};N.uniqueSort=function(Z){if(J){P=K;Z.sort(J);if(P){for(var Y=1;Y<Z.length;Y++){Z[Y]===Z[Y-1]&&Z.splice(Y--,1)}}}return Z};N.matches=function(Z,Y){return N(Z,null,null,Y)};N.find=function(bb,ba,ab){var aa,Y;if(!bb){return[]}for(var Z=0,bo=L.order.length;Z<bo;Z++){var bp=L.order[Z];if(Y=L.leftMatch[bp].exec(bb)){var bn=Y[1];Y.splice(1,1);if(bn.substr(bn.length-1)!=="\\"){Y[1]=(Y[1]||"").replace(/\\/g,"");aa=L.find[bp](Y,ba,ab);if(aa!=null){bb=bb.replace(L.match[bp],"");break}}}}aa||(aa=ba.getElementsByTagName("*"));return{set:aa,expr:bb}};N.filter=function(bp,bo,bb,ab){for(var Z=bp,aa=[],bv=bo,bw,bs,bn=bo&&bo[0]&&s(bo[0]);bp&&bo.length;){for(var bu in L.filter){if((bw=L.leftMatch[bu].exec(bp))!=null&&bw[2]){var bq=L.filter[bu],bt,Y;Y=bw[1];bs=false;bw.splice(1,1);if(Y.substr(Y.length-1)!=="\\"){if(bv===aa){aa=[]}if(L.preFilter[bu]){if(bw=L.preFilter[bu](bw,bv,bb,aa,ab,bn)){if(bw===true){continue}}else{bs=bt=true}}if(bw){for(var ba=0;(Y=bv[ba])!=null;ba++){if(Y){bt=bq(Y,bw,ba,bv);var br=ab^!!bt;if(bb&&bt!=null){if(br){bs=true}else{bv[ba]=false}}else{if(br){aa.push(Y);bs=true}}}}}if(bt!==S){bb||(bv=aa);bp=bp.replace(L.match[bu],"");if(!bs){return[]}break}}}}if(bp===Z){if(bs==null){N.error(bp)}else{break}}Z=bp}return bv};N.error=function(Y){throw"Syntax error, unrecognized expression: "+Y};var L=N.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(Y){return Y.getAttribute("href")}},relative:{"+":function(ab,aa){var Z=typeof aa==="string",Y=Z&&!/\W/.test(aa);Z=Z&&!Y;if(Y){aa=aa.toLowerCase()}Y=0;for(var ba=ab.length,bb;Y<ba;Y++){if(bb=ab[Y]){for(;(bb=bb.previousSibling)&&bb.nodeType!==1;){}ab[Y]=Z||bb&&bb.nodeName.toLowerCase()===aa?bb||false:bb===aa}}Z&&N.filter(aa,ab,true)},">":function(ab,aa){var Z=typeof aa==="string";if(Z&&!/\W/.test(aa)){aa=aa.toLowerCase();for(var Y=0,ba=ab.length;Y<ba;Y++){var bb=ab[Y];if(bb){Z=bb.parentNode;ab[Y]=Z.nodeName.toLowerCase()===aa?Z:false}}}else{Y=0;for(ba=ab.length;Y<ba;Y++){if(bb=ab[Y]){ab[Y]=Z?bb.parentNode:bb.parentNode===aa}}Z&&N.filter(aa,ab,true)}},"":function(ab,aa,Z){var Y=R++,ba=T;if(typeof aa==="string"&&!/\W/.test(aa)){var bb=aa=aa.toLowerCase();ba=V}ba("parentNode",aa,Y,ab,bb,Z)},"~":function(ab,aa,Z){var Y=R++,ba=T;if(typeof aa==="string"&&!/\W/.test(aa)){var bb=aa=aa.toLowerCase();ba=V}ba("previousSibling",aa,Y,ab,bb,Z)}},find:{ID:function(aa,Z,Y){if(typeof Z.getElementById!=="undefined"&&!Y){return(aa=Z.getElementById(aa[1]))?[aa]:[]}},NAME:function(ab,aa){if(typeof aa.getElementsByName!=="undefined"){var Z=[];aa=aa.getElementsByName(ab[1]);for(var Y=0,ba=aa.length;Y<ba;Y++){aa[Y].getAttribute("name")===ab[1]&&Z.push(aa[Y])}return Z.length===0?null:Z}},TAG:function(Z,Y){return Y.getElementsByTagName(Z[1])}},preFilter:{CLASS:function(ba,ab,Z,Y,bb,bn){ba=" "+ba[1].replace(/\\/g,"")+" ";if(bn){return ba}bn=0;for(var aa;(aa=ab[bn])!=null;bn++){if(aa){if(bb^(aa.className&&(" "+aa.className+" ").replace(/[\t\n]/g," ").indexOf(ba)>=0)){Z||Y.push(aa)}else{if(Z){ab[bn]=false}}}}return false},ID:function(Y){return Y[1].replace(/\\/g,"")},TAG:function(Y){return Y[1].toLowerCase()},CHILD:function(Z){if(Z[1]==="nth"){var Y=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(Z[2]==="even"&&"2n"||Z[2]==="odd"&&"2n+1"||!/\D/.test(Z[2])&&"0n+"+Z[2]||Z[2]);Z[2]=Y[1]+(Y[2]||1)-0;Z[3]=Y[3]-0}Z[0]=R++;return Z},ATTR:function(ab,aa,Z,Y,ba,bb){aa=ab[1].replace(/\\/g,"");if(!bb&&L.attrMap[aa]){ab[1]=L.attrMap[aa]}if(ab[2]==="~="){ab[4]=" "+ab[4]+" "}return ab},PSEUDO:function(ab,aa,Z,Y,ba){if(ab[1]==="not"){if((Q.exec(ab[3])||"").length>1||/^\w/.test(ab[3])){ab[3]=N(ab[3],null,null,aa)}else{ab=N.filter(ab[3],aa,Z,true^ba);Z||Y.push.apply(Y,ab);return false}}else{if(L.match.POS.test(ab[0])||L.match.CHILD.test(ab[0])){return true}}return ab},POS:function(Y){Y.unshift(true);return Y}},filters:{enabled:function(Y){return Y.disabled===false&&Y.type!=="hidden"},disabled:function(Y){return Y.disabled===true},checked:function(Y){return Y.checked===true},selected:function(Y){return Y.selected===true},parent:function(Y){return !!Y.firstChild},empty:function(Y){return !Y.firstChild},has:function(aa,Z,Y){return !!N(Y[3],aa).length},header:function(Y){return/h\d/i.test(Y.nodeName)},text:function(Y){return"text"===Y.type},radio:function(Y){return"radio"===Y.type},checkbox:function(Y){return"checkbox"===Y.type},file:function(Y){return"file"===Y.type},password:function(Y){return"password"===Y.type},submit:function(Y){return"submit"===Y.type},image:function(Y){return"image"===Y.type},reset:function(Y){return"reset"===Y.type},button:function(Y){return"button"===Y.type||Y.nodeName.toLowerCase()==="button"},input:function(Y){return/input|select|textarea|button/i.test(Y.nodeName)}},setFilters:{first:function(Z,Y){return Y===0},last:function(ab,aa,Z,Y){return aa===Y.length-1},even:function(Z,Y){return Y%2===0},odd:function(Z,Y){return Y%2===1},lt:function(aa,Z,Y){return Z<Y[3]-0},gt:function(aa,Z,Y){return Z>Y[3]-0},nth:function(aa,Z,Y){return Y[3]-0===Z},eq:function(aa,Z,Y){return Y[3]-0===Z}},filter:{PSEUDO:function(ab,aa,Z,Y){var ba=aa[1],bb=L.filters[ba];if(bb){return bb(ab,Z,aa,Y)}else{if(ba==="contains"){return(ab.textContent||ab.innerText||W([ab])||"").indexOf(aa[3])>=0}else{if(ba==="not"){aa=aa[3];Z=0;for(Y=aa.length;Z<Y;Z++){if(aa[Z]===ab){return false}}return true}else{N.error("Syntax error, unrecognized expression: "+ba)}}}},CHILD:function(ba,ab){var Z=ab[1],Y=ba;switch(Z){case"only":case"first":for(;Y=Y.previousSibling;){if(Y.nodeType===1){return false}}if(Z==="first"){return true}Y=ba;case"last":for(;Y=Y.nextSibling;){if(Y.nodeType===1){return false}}return true;case"nth":Z=ab[2];var bb=ab[3];if(Z===1&&bb===0){return true}ab=ab[0];var bn=ba.parentNode;if(bn&&(bn.sizcache!==ab||!ba.nodeIndex)){var aa=0;for(Y=bn.firstChild;Y;Y=Y.nextSibling){if(Y.nodeType===1){Y.nodeIndex=++aa}}bn.sizcache=ab}ba=ba.nodeIndex-bb;return Z===0?ba===0:ba%Z===0&&ba/Z>=0}},ID:function(Z,Y){return Z.nodeType===1&&Z.getAttribute("id")===Y},TAG:function(Z,Y){return Y==="*"&&Z.nodeType===1||Z.nodeName.toLowerCase()===Y},CLASS:function(Z,Y){return(" "+(Z.className||Z.getAttribute("class"))+" ").indexOf(Y)>-1},ATTR:function(ab,aa){var Z=aa[1];ab=L.attrHandle[Z]?L.attrHandle[Z](ab):ab[Z]!=null?ab[Z]:ab.getAttribute(Z);Z=ab+"";var Y=aa[2];aa=aa[4];return ab==null?Y==="!=":Y==="="?Z===aa:Y==="*="?Z.indexOf(aa)>=0:Y==="~="?(" "+Z+" ").indexOf(aa)>=0:!aa?Z&&ab!==false:Y==="!="?Z!==aa:Y==="^="?Z.indexOf(aa)===0:Y==="$="?Z.substr(Z.length-aa.length)===aa:Y==="|="?Z===aa||Z.substr(0,aa.length+1)===aa+"-":false},POS:function(ab,aa,Z,Y){var ba=L.setFilters[aa[2]];if(ba){return ba(ab,Z,aa,Y)}}}},G=L.match.POS;for(var w in L.match){L.match[w]=new RegExp(L.match[w].source+/(?![^\[]*\])(?![^\(]*\))/.source);L.leftMatch[w]=new RegExp(/(^(?:.|\r|\n)*?)/.source+L.match[w].source.replace(/\\(\d+)/g,function(Z,Y){return"\\"+(Y-0+1)}))}var c=function(Z,Y){Z=Array.prototype.slice.call(Z,0);if(Y){Y.push.apply(Y,Z);return Y}return Z};try{Array.prototype.slice.call(U.documentElement.childNodes,0)}catch(F){c=function(ab,aa){aa=aa||[];if(O.call(ab)==="[object Array]"){Array.prototype.push.apply(aa,ab)}else{if(typeof ab.length==="number"){for(var Z=0,Y=ab.length;Z<Y;Z++){aa.push(ab[Z])}}else{for(Z=0;ab[Z];Z++){aa.push(ab[Z])}}}return aa}}var J;if(U.documentElement.compareDocumentPosition){J=function(Z,Y){if(!Z.compareDocumentPosition||!Y.compareDocumentPosition){if(Z==Y){P=true}return Z.compareDocumentPosition?-1:1}Z=Z.compareDocumentPosition(Y)&4?-1:Z===Y?0:1;if(Z===0){P=true}return Z}}else{if("sourceIndex" in U.documentElement){J=function(Z,Y){if(!Z.sourceIndex||!Y.sourceIndex){if(Z==Y){P=true}return Z.sourceIndex?-1:1}Z=Z.sourceIndex-Y.sourceIndex;if(Z===0){P=true}return Z}}else{if(U.createRange){J=function(ab,aa){if(!ab.ownerDocument||!aa.ownerDocument){if(ab==aa){P=true}return ab.ownerDocument?-1:1}var Z=ab.ownerDocument.createRange(),Y=aa.ownerDocument.createRange();Z.setStart(ab,0);Z.setEnd(ab,0);Y.setStart(aa,0);Y.setEnd(aa,0);ab=Z.compareBoundaryPoints(Range.START_TO_END,Y);if(ab===0){P=true}return ab}}}}(function(){var aa=U.createElement("div"),Z="script"+(new Date).getTime();aa.innerHTML="<a name='"+Z+"'/>";var Y=U.documentElement;Y.insertBefore(aa,Y.firstChild);if(U.getElementById(Z)){L.find.ID=function(ab,ba,bb){if(typeof ba.getElementById!=="undefined"&&!bb){return(ba=ba.getElementById(ab[1]))?ba.id===ab[1]||typeof ba.getAttributeNode!=="undefined"&&ba.getAttributeNode("id").nodeValue===ab[1]?[ba]:S:[]}};L.filter.ID=function(ab,ba){var bb=typeof ab.getAttributeNode!=="undefined"&&ab.getAttributeNode("id");return ab.nodeType===1&&bb&&bb.nodeValue===ba}}Y.removeChild(aa);Y=aa=null})();(function(){var Y=U.createElement("div");Y.appendChild(U.createComment(""));if(Y.getElementsByTagName("*").length>0){L.find.TAG=function(ab,aa){aa=aa.getElementsByTagName(ab[1]);if(ab[1]==="*"){ab=[];for(var Z=0;aa[Z];Z++){aa[Z].nodeType===1&&ab.push(aa[Z])}aa=ab}return aa}}Y.innerHTML="<a href='#'></a>";if(Y.firstChild&&typeof Y.firstChild.getAttribute!=="undefined"&&Y.firstChild.getAttribute("href")!=="#"){L.attrHandle.href=function(Z){return Z.getAttribute("href",2)}}Y=null})();U.querySelectorAll&&function(){var aa=N,Z=U.createElement("div");Z.innerHTML="<p class='TEST'></p>";if(!(Z.querySelectorAll&&Z.querySelectorAll(".TEST").length===0)){N=function(ab,bn,bo,ba){bn=bn||U;if(!ba&&bn.nodeType===9&&!s(bn)){try{return c(bn.querySelectorAll(ab),bo)}catch(bb){}}return aa(ab,bn,bo,ba)};for(var Y in aa){N[Y]=aa[Y]}Z=null}}();(function(){var Y=U.createElement("div");Y.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!Y.getElementsByClassName||Y.getElementsByClassName("e").length===0)){Y.lastChild.className="e";if(Y.getElementsByClassName("e").length!==1){L.order.splice(1,0,"CLASS");L.find.CLASS=function(ab,aa,Z){if(typeof aa.getElementsByClassName!=="undefined"&&!Z){return aa.getElementsByClassName(ab[1])}};Y=null}}})();var A=U.compareDocumentPosition?function(Z,Y){return !!(Z.compareDocumentPosition(Y)&16)}:function(Z,Y){return Z!==Y&&(Z.contains?Z.contains(Y):true)},s=function(Y){return(Y=(Y?Y.ownerDocument||Y:0).documentElement)?Y.nodeName!=="HTML":false},X=function(ab,aa){var Z=[],Y="",ba;for(aa=aa.nodeType?[aa]:aa;ba=L.match.PSEUDO.exec(ab);){Y+=ba[0];ab=ab.replace(L.match.PSEUDO,"")}ab=L.relative[ab]?ab+"*":ab;ba=0;for(var bb=aa.length;ba<bb;ba++){N(ab,aa[ba],Z)}return N.filter(Y,Z)};aj.find=N;aj.expr=N.selectors;aj.expr[":"]=aj.expr.filters;aj.unique=N.uniqueSort;aj.text=W;aj.isXMLDoc=s;aj.contains=A})();var g=/Until$/,bd=/^(?:parents|prevUntil|prevAll)/,aY=/,/;aw=Array.prototype.slice;var aN=function(s,c,A){if(aj.isFunction(c)){return aj.grep(s,function(G,F){return !!c.call(G,F,G)===A})}else{if(c.nodeType){return aj.grep(s,function(F){return F===c===A})}else{if(typeof c==="string"){var w=aj.grep(s,function(F){return F.nodeType===1});if(aV.test(c)){return aj.filter(c,w,!A)}else{c=aj.filter(c,w)}}}}return aj.grep(s,function(F){return aj.inArray(F,c)>=0===A})};aj.fn.extend({find:function(s){for(var c=this.pushStack("","find",s),J=0,F=0,G=this.length;F<G;F++){J=c.length;aj.find(s,this[F],c);if(F>0){for(var w=J;w<c.length;w++){for(var A=0;A<J;A++){if(c[A]===c[w]){c.splice(w--,1);break}}}}}return c},has:function(s){var c=aj(s);return this.filter(function(){for(var A=0,w=c.length;A<w;A++){if(aj.contains(this,c[A])){return true}}})},not:function(c){return this.pushStack(aN(this,c,false),"not",c)},filter:function(c){return this.pushStack(aN(this,c,true),"filter",c)},is:function(c){return !!c&&aj.filter(c,this).length>0},closest:function(L,K){if(aj.isArray(L)){var J=[],F=this[0],G,w={},A;if(F&&L.length){G=0;for(var c=L.length;G<c;G++){A=L[G];w[A]||(w[A]=aj.expr.match.POS.test(A)?aj(A,K||this.context):A)}for(;F&&F.ownerDocument&&F!==K;){for(A in w){G=w[A];if(G.jquery?G.index(F)>-1:aj(F).is(G)){J.push({selector:A,elem:F});delete w[A]}}F=F.parentNode}}return J}var s=aj.expr.match.POS.test(L)?aj(L,K||this.context):null;return this.map(function(O,N){for(;N&&N.ownerDocument&&N!==K;){if(s?s.index(N)>-1:aj(N).is(L)){return N}N=N.parentNode}return null})},index:function(c){if(!c||typeof c==="string"){return aj.inArray(this[0],c?aj(c):this.parent().children())}return aj.inArray(c.jquery?c[0]:c,this)},add:function(s,c){s=typeof s==="string"?aj(s,c||this.context):aj.makeArray(s);c=aj.merge(this.get(),s);return this.pushStack(m(s[0])||m(c[0])?c:aj.unique(c))},andSelf:function(){return this.add(this.prevObject)}});aj.each({parent:function(c){return(c=c.parentNode)&&c.nodeType!==11?c:null},parents:function(c){return aj.dir(c,"parentNode")},parentsUntil:function(s,c,w){return aj.dir(s,"parentNode",w)},next:function(c){return aj.nth(c,2,"nextSibling")},prev:function(c){return aj.nth(c,2,"previousSibling")},nextAll:function(c){return aj.dir(c,"nextSibling")},prevAll:function(c){return aj.dir(c,"previousSibling")},nextUntil:function(s,c,w){return aj.dir(s,"nextSibling",w)},prevUntil:function(s,c,w){return aj.dir(s,"previousSibling",w)},siblings:function(c){return aj.sibling(c.parentNode.firstChild,c)},children:function(c){return aj.sibling(c.firstChild)},contents:function(c){return aj.nodeName(c,"iframe")?c.contentDocument||c.contentWindow.document:aj.makeArray(c.childNodes)}},function(s,c){aj.fn[s]=function(F,w){var A=aj.map(this,c,F);g.test(s)||(w=F);if(w&&typeof w==="string"){A=aj.filter(w,A)}A=this.length>1?aj.unique(A):A;if((this.length>1||aY.test(w))&&bd.test(s)){A=A.reverse()}return this.pushStack(A,s,aw.call(arguments).join(","))}});aj.extend({filter:function(s,c,w){if(w){s=":not("+s+")"}return aj.find.matches(s,c)},dir:function(s,c,A){var w=[];for(s=s[c];s&&s.nodeType!==9&&(A===S||s.nodeType!==1||!aj(s).is(A));){s.nodeType===1&&w.push(s);s=s[c]}return w},nth:function(s,c,A){c=c||1;for(var w=0;s;s=s[A]){if(s.nodeType===1&&++w===c){break}}return s},sibling:function(s,c){for(var w=[];s;s=s.nextSibling){s.nodeType===1&&s!==c&&w.push(s)}return w}});var ak=/ jQuery\d+="(?:\d+|null)"/g,au=/^\s+/,D=/(<([\w:]+)[^>]*?)\/>/g,aF=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,n=/<([\w:]+)/,ae=/<tbody/i,x=/<|&#?\w+;/,aR=/<script|<object|<embed|<option|<style/i,am=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=function(s,c,w){return aF.test(w)?s:c+"></"+w+">"},aL={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};aL.optgroup=aL.option;aL.tbody=aL.tfoot=aL.colgroup=aL.caption=aL.thead;aL.th=aL.td;if(!aj.support.htmlSerialize){aL._default=[1,"div<div>","</div>"]}aj.fn.extend({text:function(c){if(aj.isFunction(c)){return this.each(function(s){var w=aj(this);w.text(c.call(this,s,w.text()))})}if(typeof c!=="object"&&c!==S){return this.empty().append((this[0]&&this[0].ownerDocument||U).createTextNode(c))}return aj.text(this)},wrapAll:function(s){if(aj.isFunction(s)){return this.each(function(w){aj(this).wrapAll(s.call(this,w))})}if(this[0]){var c=aj(s,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&c.insertBefore(this[0]);c.map(function(){for(var w=this;w.firstChild&&w.firstChild.nodeType===1;){w=w.firstChild}return w}).append(this)}return this},wrapInner:function(c){if(aj.isFunction(c)){return this.each(function(s){aj(this).wrapInner(c.call(this,s))})}return this.each(function(){var s=aj(this),w=s.contents();w.length?w.wrapAll(c):s.append(c)})},wrap:function(c){return this.each(function(){aj(this).wrapAll(c)})},unwrap:function(){return this.parent().each(function(){aj.nodeName(this,"body")||aj(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(c){this.nodeType===1&&this.appendChild(c)})},prepend:function(){return this.domManip(arguments,true,function(c){this.nodeType===1&&this.insertBefore(c,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(s){this.parentNode.insertBefore(s,this)})}else{if(arguments.length){var c=aj(arguments[0]);c.push.apply(c,this.toArray());return this.pushStack(c,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(s){this.parentNode.insertBefore(s,this.nextSibling)})}else{if(arguments.length){var c=this.pushStack(this,"after",arguments);c.push.apply(c,aj(arguments[0]).toArray());return c}}},remove:function(s,c){for(var A=0,w;(w=this[A])!=null;A++){if(!s||aj.filter(s,[w]).length){if(!c&&w.nodeType===1){aj.cleanData(w.getElementsByTagName("*"));aj.cleanData([w])}w.parentNode&&w.parentNode.removeChild(w)}}return this},empty:function(){for(var s=0,c;(c=this[s])!=null;s++){for(c.nodeType===1&&aj.cleanData(c.getElementsByTagName("*"));c.firstChild;){c.removeChild(c.firstChild)}}return this},clone:function(s){var c=this.map(function(){if(!aj.support.noCloneEvent&&!aj.isXMLDoc(this)){var A=this.outerHTML,w=this.ownerDocument;if(!A){A=w.createElement("div");A.appendChild(this.cloneNode(true));A=A.innerHTML}return aj.clean([A.replace(ak,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(au,"")],w)[0]}else{return this.cloneNode(true)}});if(s===true){bl(this,c);bl(this.find("*"),c.find("*"))}return c},html:function(s){if(s===S){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ak,""):null}else{if(typeof s==="string"&&!aR.test(s)&&(aj.support.leadingWhitespace||!au.test(s))&&!aL[(n.exec(s)||["",""])[1].toLowerCase()]){s=s.replace(D,bm);try{for(var c=0,A=this.length;c<A;c++){if(this[c].nodeType===1){aj.cleanData(this[c].getElementsByTagName("*"));this[c].innerHTML=s}}}catch(w){this.empty().append(s)}}else{aj.isFunction(s)?this.each(function(J){var F=aj(this),G=F.html();F.empty().append(function(){return s.call(this,J,G)})}):this.empty().append(s)}}return this},replaceWith:function(c){if(this[0]&&this[0].parentNode){if(aj.isFunction(c)){return this.each(function(s){var A=aj(this),w=A.html();A.replaceWith(c.call(this,s,w))})}if(typeof c!=="string"){c=aj(c).detach()}return this.each(function(){var s=this.nextSibling,w=this.parentNode;aj(this).remove();s?aj(s).before(c):aj(w).append(c)})}else{return this.pushStack(aj(aj.isFunction(c)?c():c),"replaceWith",c)}},detach:function(c){return this.remove(c,true)},domManip:function(O,N,L){function J(P){return aj.nodeName(P,"table")?P.getElementsByTagName("tbody")[0]||P.appendChild(P.ownerDocument.createElement("tbody")):P}var K,F,G=O[0],s=[],A;if(!aj.support.checkClone&&arguments.length===3&&typeof G==="string"&&am.test(G)){return this.each(function(){aj(this).domManip(O,N,L,true)})}if(aj.isFunction(G)){return this.each(function(P){var Q=aj(this);O[0]=G.call(this,P,N?Q.html():S);Q.domManip(O,N,L)})}if(this[0]){K=G&&G.parentNode;K=aj.support.parentNode&&K&&K.nodeType===11&&K.childNodes.length===this.length?{fragment:K}:a5(O,this,s);A=K.fragment;if(F=A.childNodes.length===1?(A=A.firstChild):A.firstChild){N=N&&aj.nodeName(F,"tr");for(var w=0,c=this.length;w<c;w++){L.call(N?J(this[w],F):this[w],w>0||K.cacheable||this.length>1?A.cloneNode(true):A)}}s.length&&aj.each(s,I)}return this}});aj.fragments={};aj.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(s,c){aj.fn[s]=function(J){var F=[];J=aj(J);var G=this.length===1&&this[0].parentNode;if(G&&G.nodeType===11&&G.childNodes.length===1&&J.length===1){J[c](this[0]);return this}else{G=0;for(var w=J.length;G<w;G++){var A=(G>0?this.clone(true):this).get();aj.fn[c].apply(aj(J[G]),A);F=F.concat(A)}return this.pushStack(F,s,J.selector)}}});aj.extend({clean:function(O,N,L,J){N=N||U;if(typeof N.createElement==="undefined"){N=N.ownerDocument||N[0]&&N[0].ownerDocument||U}for(var K=[],F=0,G;(G=O[F])!=null;F++){if(typeof G==="number"){G+=""}if(G){if(typeof G==="string"&&!x.test(G)){G=N.createTextNode(G)}else{if(typeof G==="string"){G=G.replace(D,bm);var s=(n.exec(G)||["",""])[1].toLowerCase(),A=aL[s]||aL._default,w=A[0],c=N.createElement("div");for(c.innerHTML=A[1]+G+A[2];w--;){c=c.lastChild}if(!aj.support.tbody){w=ae.test(G);s=s==="table"&&!w?c.firstChild&&c.firstChild.childNodes:A[1]==="<table>"&&!w?c.childNodes:[];for(A=s.length-1;A>=0;--A){aj.nodeName(s[A],"tbody")&&!s[A].childNodes.length&&s[A].parentNode.removeChild(s[A])}}!aj.support.leadingWhitespace&&au.test(G)&&c.insertBefore(N.createTextNode(au.exec(G)[0]),c.firstChild);G=c.childNodes}}if(G.nodeType){K.push(G)}else{K=aj.merge(K,G)}}}if(L){for(F=0;K[F];F++){if(J&&aj.nodeName(K[F],"script")&&(!K[F].type||K[F].type.toLowerCase()==="text/javascript")){J.push(K[F].parentNode?K[F].parentNode.removeChild(K[F]):K[F])}else{K[F].nodeType===1&&K.splice.apply(K,[F+1,0].concat(aj.makeArray(K[F].getElementsByTagName("script"))));L.appendChild(K[F])}}}return K},cleanData:function(L){for(var K,J,F=aj.cache,G=aj.event.special,w=aj.support.deleteExpando,A=0,c;(c=L[A])!=null;A++){if(J=c[aj.expando]){K=F[J];if(K.events){for(var s in K.events){G[s]?aj.event.remove(c,s):aI(c,s,K.handle)}}if(w){delete c[aj.expando]}else{c.removeAttribute&&c.removeAttribute(aj.expando)}delete F[J]}}}});var i=/z-?index|font-?weight|opacity|zoom|line-?height/i,a6=/alpha\([^)]*\)/,aS=/opacity=([^)]*)/,aG=/float/i,af=/-([a-z])/ig,bh=/([A-Z])/g,a1=/^-?\d+(?:px)?$/i,aK=/^-?\d/,ah={position:"absolute",visibility:"hidden",display:"block"},B=["Left","Right"],l=["Top","Bottom"],bk=U.defaultView&&U.defaultView.getComputedStyle,an=aj.support.cssFloat?"cssFloat":"styleFloat",y=function(s,c){return c.toUpperCase()};aj.fn.css=function(s,c){return ar(this,s,c,true,function(F,w,A){if(A===S){return aj.curCSS(F,w)}if(typeof A==="number"&&!i.test(w)){A+="px"}aj.style(F,w,A)})};aj.extend({style:function(s,c,F){if(!s||s.nodeType===3||s.nodeType===8){return S}if((c==="width"||c==="height")&&parseFloat(F)<0){F=S}var w=s.style||s,A=F!==S;if(!aj.support.opacity&&c==="opacity"){if(A){w.zoom=1;c=parseInt(F,10)+""==="NaN"?"":"alpha(opacity="+F*100+")";s=w.filter||aj.curCSS(s,"filter")||"";w.filter=a6.test(s)?s.replace(a6,c):c}return w.filter&&w.filter.indexOf("opacity=")>=0?parseFloat(aS.exec(w.filter)[1])/100+"":""}if(aG.test(c)){c=an}c=c.replace(af,y);if(A){w[c]=F}return w[c]},css:function(s,c,J,F){if(c==="width"||c==="height"){var G,w=c==="width"?B:l;function A(){G=c==="width"?s.offsetWidth:s.offsetHeight;F!=="border"&&aj.each(w,function(){F||(G-=parseFloat(aj.curCSS(s,"padding"+this,true))||0);if(F==="margin"){G+=parseFloat(aj.curCSS(s,"margin"+this,true))||0}else{G-=parseFloat(aj.curCSS(s,"border"+this+"Width",true))||0}})}s.offsetWidth!==0?A():aj.swap(s,ah,A);return Math.max(0,Math.round(G))}return aj.curCSS(s,c,J)},curCSS:function(s,c,G){var A,F=s.style;if(!aj.support.opacity&&c==="opacity"&&s.currentStyle){A=aS.test(s.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return A===""?"1":A}if(aG.test(c)){c=an}if(!G&&F&&F[c]){A=F[c]}else{if(bk){if(aG.test(c)){c="float"}c=c.replace(bh,"-$1").toLowerCase();F=s.ownerDocument.defaultView;if(!F){return null}if(s=F.getComputedStyle(s,null)){A=s.getPropertyValue(c)}if(c==="opacity"&&A===""){A="1"}}else{if(s.currentStyle){G=c.replace(af,y);A=s.currentStyle[c]||s.currentStyle[G];if(!a1.test(A)&&aK.test(A)){c=F.left;var w=s.runtimeStyle.left;s.runtimeStyle.left=s.currentStyle.left;F.left=G==="fontSize"?"1em":A||0;A=F.pixelLeft+"px";F.left=c;s.runtimeStyle.left=w}}}}return A},swap:function(s,c,F){var w={};for(var A in c){w[A]=s.style[A];s.style[A]=c[A]}F.call(s);for(A in c){s.style[A]=w[A]}}});if(aj.expr&&aj.expr.filters){aj.expr.filters.hidden=function(s){var c=s.offsetWidth,A=s.offsetHeight,w=s.nodeName.toLowerCase()==="tr";return c===0&&A===0&&!w?true:c>0&&A>0&&!w?false:aj.curCSS(s,"display")==="none"};aj.expr.filters.visible=function(c){return !aj.expr.filters.hidden(c)}}var a4=aH(),aP=/<script(.|\s)*?\/script>/gi,al=/select|textarea/i,E=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,aC=/=\?(&|$)/,j=/\?/,o=/(\?|&)_=.*?(&|$)/,a=/^(\w+:)?\/\/([^\/?#]+)/,a7=/%20/g,aT=aj.fn.load;aj.fn.extend({load:function(s,c,G){if(typeof s!=="string"){return aT.call(this,s)}else{if(!this.length){return this}}var A=s.indexOf(" ");if(A>=0){var F=s.slice(A,s.length);s=s.slice(0,A)}A="GET";if(c){if(aj.isFunction(c)){G=c;c=null}else{if(typeof c==="object"){c=aj.param(c,aj.ajaxSettings.traditional);A="POST"}}}var w=this;aj.ajax({url:s,type:A,dataType:"html",data:c,complete:function(J,K){if(K==="success"||K==="notmodified"){w.html(F?aj("<div />").append(J.responseText.replace(aP,"")).find(F):J.responseText)}G&&w.each(G,[J.responseText,K,J])}});return this},serialize:function(){return aj.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?aj.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||al.test(this.nodeName)||E.test(this.type))}).map(function(s,c){s=aj(this).val();return s==null?null:aj.isArray(s)?aj.map(s,function(w){return{name:c.name,value:w}}):{name:c.name,value:s}}).get()}});aj.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(s,c){aj.fn[c]=function(w){return this.bind(c,w)}});aj.extend({get:function(s,c,A,w){if(aj.isFunction(c)){w=w||A;A=c;c=null}return aj.ajax({type:"GET",url:s,data:c,success:A,dataType:w})},getScript:function(s,c){return aj.get(s,null,c,"script")},getJSON:function(s,c,w){return aj.get(s,c,w,"json")},post:function(s,c,A,w){if(aj.isFunction(c)){w=w||A;A=c;c={}}return aj.ajax({type:"POST",url:s,data:c,success:A,dataType:w})},ajaxSetup:function(c){aj.extend(aj.ajaxSettings,c)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:aQ.XMLHttpRequest&&(aQ.location.protocol!=="file:"||!aQ.ActiveXObject)?function(){return new aQ.XMLHttpRequest}:function(){try{return new aQ.ActiveXObject("Microsoft.XMLHTTP")}catch(c){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(aa){function Z(){X.success&&X.success.call(P,K,R,s);X.global&&W("ajaxSuccess",[s,X])}function Y(){X.complete&&X.complete.call(P,s,R);X.global&&W("ajaxComplete",[s,X]);X.global&&!--aj.active&&aj.event.trigger("ajaxStop")}function W(ba,bb){(X.context?aj(X.context):aj.event).trigger(ba,bb)}var X=aj.extend(true,{},aj.ajaxSettings,aa),Q,R,K,P=aa&&aa.context||X,L=X.type.toUpperCase();if(X.data&&X.processData&&typeof X.data!=="string"){X.data=aj.param(X.data,X.traditional)}if(X.dataType==="jsonp"){if(L==="GET"){aC.test(X.url)||(X.url+=(j.test(X.url)?"&":"?")+(X.jsonp||"callback")+"=?")}else{if(!X.data||!aC.test(X.data)){X.data=(X.data?X.data+"&":"")+(X.jsonp||"callback")+"=?"}}X.dataType="json"}if(X.dataType==="json"&&(X.data&&aC.test(X.data)||aC.test(X.url))){Q=X.jsonpCallback||"jsonp"+a4++;if(X.data){X.data=(X.data+"").replace(aC,"="+Q+"$1")}X.url=X.url.replace(aC,"="+Q+"$1");X.dataType="script";aQ[Q]=aQ[Q]||function(ba){K=ba;Z();Y();aQ[Q]=S;try{delete aQ[Q]}catch(bb){}c&&c.removeChild(F)}}if(X.dataType==="script"&&X.cache===null){X.cache=false}if(X.cache===false&&L==="GET"){var G=aH(),w=X.url.replace(o,"$1_="+G+"$2");X.url=w+(w===X.url?(j.test(X.url)?"&":"?")+"_="+G:"")}if(X.data&&L==="GET"){X.url+=(j.test(X.url)?"&":"?")+X.data}X.global&&!aj.active++&&aj.event.trigger("ajaxStart");G=(G=a.exec(X.url))&&(G[1]&&G[1]!==location.protocol||G[2]!==location.host);if(X.dataType==="script"&&L==="GET"&&G){var c=U.getElementsByTagName("head")[0]||U.documentElement,F=U.createElement("script");F.src=X.url;if(X.scriptCharset){F.charset=X.scriptCharset}if(!Q){var J=false;F.onload=F.onreadystatechange=function(){if(!J&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){J=true;Z();Y();F.onload=F.onreadystatechange=null;c&&F.parentNode&&c.removeChild(F)}}}c.insertBefore(F,c.firstChild);return S}var A=false,s=X.xhr();if(s){X.username?s.open(L,X.url,X.async,X.username,X.password):s.open(L,X.url,X.async);try{if(X.data||aa&&aa.contentType){s.setRequestHeader("Content-Type",X.contentType)}if(X.ifModified){aj.lastModified[X.url]&&s.setRequestHeader("If-Modified-Since",aj.lastModified[X.url]);aj.etag[X.url]&&s.setRequestHeader("If-None-Match",aj.etag[X.url])}G||s.setRequestHeader("X-Requested-With","XMLHttpRequest");s.setRequestHeader("Accept",X.dataType&&X.accepts[X.dataType]?X.accepts[X.dataType]+", */*":X.accepts._default)}catch(ab){}if(X.beforeSend&&X.beforeSend.call(P,s,X)===false){X.global&&!--aj.active&&aj.event.trigger("ajaxStop");s.abort();return false}X.global&&W("ajaxSend",[s,X]);var V=s.onreadystatechange=function(bb){if(!s||s.readyState===0||bb==="abort"){A||Y();A=true;if(s){s.onreadystatechange=aj.noop}}else{if(!A&&s&&(s.readyState===4||bb==="timeout")){A=true;s.onreadystatechange=aj.noop;R=bb==="timeout"?"timeout":!aj.httpSuccess(s)?"error":X.ifModified&&aj.httpNotModified(s,X.url)?"notmodified":"success";var bn;if(R==="success"){try{K=aj.httpData(s,X.dataType,X)}catch(ba){R="parsererror";bn=ba}}if(R==="success"||R==="notmodified"){Q||Z()}else{aj.handleError(X,s,R,bn)}Y();bb==="timeout"&&s.abort();if(X.async){s=null}}}};try{var T=s.abort;s.abort=function(){s&&T.call(s);V("abort")}}catch(O){}X.async&&X.timeout>0&&setTimeout(function(){s&&!A&&V("timeout")},X.timeout);try{s.send(L==="POST"||L==="PUT"||L==="DELETE"?X.data:null)}catch(N){aj.handleError(X,s,null,N);Y()}X.async||V();return s}},handleError:function(s,c,A,w){if(s.error){s.error.call(s.context||s,c,A,w)}if(s.global){(s.context?aj(s.context):aj.event).trigger("ajaxError",[c,s,w])}},active:0,httpSuccess:function(s){try{return !s.status&&location.protocol==="file:"||s.status>=200&&s.status<300||s.status===304||s.status===1223||s.status===0}catch(c){}return false},httpNotModified:function(s,c){var A=s.getResponseHeader("Last-Modified"),w=s.getResponseHeader("Etag");if(A){aj.lastModified[c]=A}if(w){aj.etag[c]=w}return s.status===304||s.status===0},httpData:function(s,c,F){var w=s.getResponseHeader("content-type")||"",A=c==="xml"||!c&&w.indexOf("xml")>=0;s=A?s.responseXML:s.responseText;A&&s.documentElement.nodeName==="parsererror"&&aj.error("parsererror");if(F&&F.dataFilter){s=F.dataFilter(s,c)}if(typeof s==="string"){if(c==="json"||!c&&w.indexOf("json")>=0){s=aj.parseJSON(s)}else{if(c==="script"||!c&&w.indexOf("javascript")>=0){aj.globalEval(s)}}}return s},param:function(s,c){function G(J,K){if(aj.isArray(K)){aj.each(K,function(L,N){c||/\[\]$/.test(J)?A(J,N):G(J+"["+(typeof N==="object"||aj.isArray(N)?L:"")+"]",N)})}else{!c&&K!=null&&typeof K==="object"?aj.each(K,function(L,N){G(J+"["+L+"]",N)}):A(J,K)}}function A(J,K){K=aj.isFunction(K)?K():K;F[F.length]=encodeURIComponent(J)+"="+encodeURIComponent(K)}var F=[];if(c===S){c=aj.ajaxSettings.traditional}if(aj.isArray(s)||s.jquery){aj.each(s,function(){A(this.name,this.value)})}else{for(var w in s){G(w,s[w])}}return F.join("&").replace(a7,"+")}});var bi={},be=/toggle|show|hide/,aZ=/^([+-]=)?([\d+-.]+)(.*)$/,at,H=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];aj.fn.extend({show:function(s,c){if(s||s===0){return this.animate(aE("show",3),s,c)}else{s=0;for(c=this.length;s<c;s++){var F=aj.data(this[s],"olddisplay");this[s].style.display=F||"";if(aj.css(this[s],"display")==="none"){F=this[s].nodeName;var w;if(bi[F]){w=bi[F]}else{var A=aj("<"+F+" />").appendTo("body");w=A.css("display");if(w==="none"){w="block"}A.remove();bi[F]=w}aj.data(this[s],"olddisplay",w)}}s=0;for(c=this.length;s<c;s++){this[s].style.display=aj.data(this[s],"olddisplay")||""}return this}},hide:function(s,c){if(s||s===0){return this.animate(aE("hide",3),s,c)}else{s=0;for(c=this.length;s<c;s++){var w=aj.data(this[s],"olddisplay");!w&&w!=="none"&&aj.data(this[s],"olddisplay",aj.css(this[s],"display"))}s=0;for(c=this.length;s<c;s++){this[s].style.display="none"}return this}},_toggle:aj.fn.toggle,toggle:function(s,c){var w=typeof s==="boolean";if(aj.isFunction(s)&&aj.isFunction(c)){this._toggle.apply(this,arguments)}else{s==null||w?this.each(function(){var A=w?s:aj(this).is(":hidden");aj(this)[A?"show":"hide"]()}):this.animate(aE("toggle",3),s,c)}return this},fadeTo:function(s,c,w){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:c},s,w)},animate:function(s,c,F,w){var A=aj.speed(c,F,w);if(aj.isEmptyObject(s)){return this.each(A.complete)}return this[A.queue===false?"each":"queue"](function(){var J=aj.extend({},A),K,L=this.nodeType===1&&aj(this).is(":hidden"),G=this;for(K in s){var N=K.replace(af,y);if(K!==N){s[N]=s[K];delete s[K];K=N}if(s[K]==="hide"&&L||s[K]==="show"&&!L){return J.complete.call(this)}if((K==="height"||K==="width")&&this.style){J.display=aj.css(this,"display");J.overflow=this.style.overflow}if(aj.isArray(s[K])){(J.specialEasing=J.specialEasing||{})[K]=s[K][1];s[K]=s[K][0]}}if(J.overflow!=null){this.style.overflow="hidden"}J.curAnim=aj.extend({},s);aj.each(s,function(P,O){var T=new aj.fx(G,J,P);if(be.test(O)){T[O==="toggle"?L?"show":"hide":O](s)}else{var R=aZ.exec(O),V=T.cur(true)||0;if(R){O=parseFloat(R[2]);var Q=R[3]||"px";if(Q!=="px"){G.style[P]=(O||1)+Q;V=(O||1)/T.cur(true)*V;G.style[P]=V+Q}if(R[1]){O=(R[1]==="-="?-1:1)*O+V}T.custom(V,O,Q)}else{T.custom(V,O,"")}}});return true})},stop:function(s,c){var w=aj.timers;s&&this.queue([]);this.each(function(){for(var A=w.length-1;A>=0;A--){if(w[A].elem===this){c&&w[A](true);w.splice(A,1)}}});c||this.dequeue();return this}});aj.each({slideDown:aE("show",1),slideUp:aE("hide",1),slideToggle:aE("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(s,c){aj.fn[s]=function(A,w){return this.animate(c,A,w)}});aj.extend({speed:function(s,c,A){var w=s&&typeof s==="object"?s:{complete:A||!A&&c||aj.isFunction(s)&&s,duration:s,easing:A&&c||c&&!aj.isFunction(c)&&c};w.duration=aj.fx.off?0:typeof w.duration==="number"?w.duration:aj.fx.speeds[w.duration]||aj.fx.speeds._default;w.old=w.complete;w.complete=function(){w.queue!==false&&aj(this).dequeue();aj.isFunction(w.old)&&w.old.call(this)};return w},easing:{linear:function(s,c,A,w){return A+w*s},swing:function(s,c,A,w){return(-Math.cos(s*Math.PI)/2+0.5)*w+A}},timers:[],fx:function(s,c,w){this.options=c;this.elem=s;this.prop=w;if(!c.orig){c.orig={}}}});aj.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(aj.fx.step[this.prop]||aj.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(c){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}return(c=parseFloat(aj.css(this.elem,this.prop,c)))&&c>-10000?c:parseFloat(aj.curCSS(this.elem,this.prop))||0},custom:function(s,c,F){function w(G){return A.step(G)}this.startTime=aH();this.start=s;this.end=c;this.unit=F||this.unit||"px";this.now=this.start;this.pos=this.state=0;var A=this;w.elem=this.elem;if(w()&&aj.timers.push(w)&&!at){at=setInterval(aj.fx.tick,13)}},show:function(){this.options.orig[this.prop]=aj.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());aj(this.elem).show()},hide:function(){this.options.orig[this.prop]=aj.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(s){var c=aH(),F=true;if(s||c>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var w in this.options.curAnim){if(this.options.curAnim[w]!==true){F=false}}if(F){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;s=aj.data(this.elem,"olddisplay");this.elem.style.display=s?s:this.options.display;if(aj.css(this.elem,"display")==="none"){this.elem.style.display="block"}}this.options.hide&&aj(this.elem).hide();if(this.options.hide||this.options.show){for(var A in this.options.curAnim){aj.style(this.elem,A,this.options.orig[A])}}this.options.complete.call(this.elem)}return false}else{A=c-this.startTime;this.state=A/this.options.duration;s=this.options.easing||(aj.easing.swing?"swing":"linear");this.pos=aj.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||s](this.state,A,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};aj.extend(aj.fx,{tick:function(){for(var s=aj.timers,c=0;c<s.length;c++){s[c]()||s.splice(c--,1)}s.length||aj.fx.stop()},stop:function(){clearInterval(at);at=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(c){aj.style(c.elem,"opacity",c.now)},_default:function(c){if(c.elem.style&&c.elem.style[c.prop]!=null){c.elem.style[c.prop]=(c.prop==="width"||c.prop==="height"?Math.max(0,c.now):c.now)+c.unit}else{c.elem[c.prop]=c.now}}}});if(aj.expr&&aj.expr.filters){aj.expr.filters.animated=function(c){return aj.grep(aj.timers,function(s){return c===s.elem}).length}}aj.fn.offset="getBoundingClientRect" in U.documentElement?function(s){var c=this[0];if(s){return this.each(function(F){aj.offset.setOffset(this,s,F)})}if(!c||!c.ownerDocument){return null}if(c===c.ownerDocument.body){return aj.offset.bodyOffset(c)}var A=c.getBoundingClientRect(),w=c.ownerDocument;c=w.body;w=w.documentElement;return{top:A.top+(self.pageYOffset||aj.support.boxModel&&w.scrollTop||c.scrollTop)-(w.clientTop||c.clientTop||0),left:A.left+(self.pageXOffset||aj.support.boxModel&&w.scrollLeft||c.scrollLeft)-(w.clientLeft||c.clientLeft||0)}}:function(N){var L=this[0];if(N){return this.each(function(O){aj.offset.setOffset(this,N,O)})}if(!L||!L.ownerDocument){return null}if(L===L.ownerDocument.body){return aj.offset.bodyOffset(L)}aj.offset.initialize();var K=L.offsetParent,G=L,J=L.ownerDocument,A,F=J.documentElement,c=J.body;G=(J=J.defaultView)?J.getComputedStyle(L,null):L.currentStyle;for(var w=L.offsetTop,s=L.offsetLeft;(L=L.parentNode)&&L!==c&&L!==F;){if(aj.offset.supportsFixedPosition&&G.position==="fixed"){break}A=J?J.getComputedStyle(L,null):L.currentStyle;w-=L.scrollTop;s-=L.scrollLeft;if(L===K){w+=L.offsetTop;s+=L.offsetLeft;if(aj.offset.doesNotAddBorder&&!(aj.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(L.nodeName))){w+=parseFloat(A.borderTopWidth)||0;s+=parseFloat(A.borderLeftWidth)||0}G=K;K=L.offsetParent}if(aj.offset.subtractsBorderForOverflowNotVisible&&A.overflow!=="visible"){w+=parseFloat(A.borderTopWidth)||0;s+=parseFloat(A.borderLeftWidth)||0}G=A}if(G.position==="relative"||G.position==="static"){w+=c.offsetTop;s+=c.offsetLeft}if(aj.offset.supportsFixedPosition&&G.position==="fixed"){w+=Math.max(F.scrollTop,c.scrollTop);s+=Math.max(F.scrollLeft,c.scrollLeft)}return{top:w,left:s}};aj.offset={initialize:function(){var s=U.body,c=U.createElement("div"),G,A,F,w=parseFloat(aj.curCSS(s,"marginTop",true))||0;aj.extend(c.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});c.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";s.insertBefore(c,s.firstChild);G=c.firstChild;A=G.firstChild;F=G.nextSibling.firstChild.firstChild;this.doesNotAddBorder=A.offsetTop!==5;this.doesAddBorderForTableAndCells=F.offsetTop===5;A.style.position="fixed";A.style.top="20px";this.supportsFixedPosition=A.offsetTop===20||A.offsetTop===15;A.style.position=A.style.top="";G.style.overflow="hidden";G.style.position="relative";this.subtractsBorderForOverflowNotVisible=A.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=s.offsetTop!==w;s.removeChild(c);aj.offset.initialize=aj.noop},bodyOffset:function(s){var c=s.offsetTop,w=s.offsetLeft;aj.offset.initialize();if(aj.offset.doesNotIncludeMarginInBodyOffset){c+=parseFloat(aj.curCSS(s,"marginTop",true))||0;w+=parseFloat(aj.curCSS(s,"marginLeft",true))||0}return{top:c,left:w}},setOffset:function(s,c,J){if(/static/.test(aj.curCSS(s,"position"))){s.style.position="relative"}var F=aj(s),G=F.offset(),w=parseInt(aj.curCSS(s,"top",true),10)||0,A=parseInt(aj.curCSS(s,"left",true),10)||0;if(aj.isFunction(c)){c=c.call(s,J,G)}J={top:c.top-G.top+w,left:c.left-G.left+A};"using" in c?c.using.call(s,J):F.css(J)}};aj.fn.extend({position:function(){if(!this[0]){return null}var s=this[0],c=this.offsetParent(),A=this.offset(),w=/^body|html$/i.test(c[0].nodeName)?{top:0,left:0}:c.offset();A.top-=parseFloat(aj.curCSS(s,"marginTop",true))||0;A.left-=parseFloat(aj.curCSS(s,"marginLeft",true))||0;w.top+=parseFloat(aj.curCSS(c[0],"borderTopWidth",true))||0;w.left+=parseFloat(aj.curCSS(c[0],"borderLeftWidth",true))||0;return{top:A.top-w.top,left:A.left-w.left}},offsetParent:function(){return this.map(function(){for(var c=this.offsetParent||U.body;c&&!/^body|html$/i.test(c.nodeName)&&aj.css(c,"position")==="static";){c=c.offsetParent}return c})}});aj.each(["Left","Top"],function(s,c){var w="scroll"+c;aj.fn[w]=function(F){var G=this[0],A;if(!G){return null}if(F!==S){return this.each(function(){if(A=p(this)){A.scrollTo(!s?F:aj(A).scrollLeft(),s?F:aj(A).scrollTop())}else{this[w]=F}})}else{return(A=p(G))?"pageXOffset" in A?A[s?"pageYOffset":"pageXOffset"]:aj.support.boxModel&&A.document.documentElement[w]||A.document.body[w]:G[w]}}});aj.each(["Height","Width"],function(s,c){var w=c.toLowerCase();aj.fn["inner"+c]=function(){return this[0]?aj.css(this[0],w,false,"padding"):null};aj.fn["outer"+c]=function(A){return this[0]?aj.css(this[0],w,false,A?"margin":"border"):null};aj.fn[w]=function(A){var F=this[0];if(!F){return A==null?null:this}if(aj.isFunction(A)){return this.each(function(G){var J=aj(this);J[w](A.call(this,G,J[w]()))})}return"scrollTo" in F&&F.document?F.document.compatMode==="CSS1Compat"&&F.document.documentElement["client"+c]||F.document.body["client"+c]:F.nodeType===9?Math.max(F.documentElement["client"+c],F.body["scroll"+c],F.documentElement["scroll"+c],F.body["offset"+c],F.documentElement["offset"+c]):A===S?aj.css(F,w):this.css(w,typeof A==="string"?A:A+"px")}});aQ.jQuery=aQ.$=aj})(window);jQuery.ui||(function(c){var j=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(l,m,o){var n=c.ui[l].prototype;for(var k in o){n.plugins[k]=n.plugins[k]||[];n.plugins[k].push([m,o[k]])}},call:function(k,m,l){var o=k.plugins[m];if(!o||!k.element[0].parentNode){return}for(var n=0;n<o.length;n++){if(k.options[o[n][0]]){o[n][1].apply(k.element,l)}}}},contains:function(l,k){return document.compareDocumentPosition?l.compareDocumentPosition(k)&16:l!==k&&l.contains(k)},hasScroll:function(n,l){if(c(n).css("overflow")=="hidden"){return false}var k=(l&&l=="left")?"scrollLeft":"scrollTop",m=false;if(n[k]>0){return true}n[k]=1;m=(n[k]>0);n[k]=0;return m},isOverAxis:function(l,k,m){return(l>k)&&(l<(k+m))},isOver:function(p,l,o,n,k,m){return c.ui.isOverAxis(p,o,k)&&c.ui.isOverAxis(l,n,m)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var g=c.attr,f=c.fn.removeAttr,i="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(l,k,m){var n=m!==undefined;return(k=="role"?(n?g.call(this,l,k,"wairole:"+m):(g.apply(this,arguments)||"").replace(b,"")):(a.test(k)?(n?l.setAttributeNS(i,k.replace(a,"aaa:"),m):g.call(this,l,k.replace(a,"aaa:"))):g.apply(this,arguments)))};c.fn.removeAttr=function(k){return(a.test(k)?this.each(function(){this.removeAttributeNS(i,k.replace(a,""))}):f.call(this,k))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return j.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var k;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){k=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{k=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!k.length?c(document):k}});c.extend(c.expr[":"],{data:function(m,l,k){return !!c.data(m,k[3])},focusable:function(l){var m=l.nodeName.toLowerCase(),k=c.attr(l,"tabindex");return(/input|select|textarea|button|object/.test(m)?!l.disabled:"a"==m||"area"==m?l.href||!isNaN(k):!isNaN(k))&&!c(l)["area"==m?"parents":"closest"](":hidden").length},tabbable:function(l){var k=c.attr(l,"tabindex");return(isNaN(k)||k>=0)&&c(l).is(":focusable")}});function h(n,o,p,m){function l(r){var q=c[n][o][r]||[];return(typeof q=="string"?q.split(/,?\s+/):q)}var k=l("getter");if(m.length==1&&typeof m[0]=="string"){k=k.concat(l("getterSetter"))}return(c.inArray(p,k)!=-1)}c.widget=function(l,k){var m=l.split(".")[0];l=l.split(".")[1];c.fn[l]=function(q){var o=(typeof q=="string"),p=Array.prototype.slice.call(arguments,1);if(o&&q.substring(0,1)=="_"){return this}if(o&&h(m,l,q,p)){var n=c.data(this[0],l);return(n?n[q].apply(n,p):undefined)}return this.each(function(){var r=c.data(this,l);(!r&&!o&&c.data(this,l,new c[m][l](this,q))._init());(r&&o&&c.isFunction(r[q])&&r[q].apply(r,p))})};c[m]=c[m]||{};c[m][l]=function(p,o){var n=this;this.namespace=m;this.widgetName=l;this.widgetEventPrefix=c[m][l].eventPrefix||l;this.widgetBaseClass=m+"-"+l;this.options=c.extend({},c.widget.defaults,c[m][l].defaults,c.metadata&&c.metadata.get(p)[l],o);this.element=c(p).bind("setData."+l,function(r,q,s){if(r.target==p){return n._setData(q,s)}}).bind("getData."+l,function(r,q){if(r.target==p){return n._getData(q)}}).bind("remove",function(){return n.destroy()})};c[m][l].prototype=c.extend({},c.widget.prototype,k);c[m][l].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(m,n){var l=m,k=this;if(typeof m=="string"){if(n===undefined){return this._getData(m)}l={};l[m]=n}c.each(l,function(o,p){k._setData(o,p)})},_getData:function(k){return this.options[k]},_setData:function(k,l){this.options[k]=l;if(k=="disabled"){this.element[l?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",l)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(m,n,o){var q=this.options[m],k=(m==this.widgetEventPrefix?m:this.widgetEventPrefix+m);n=c.Event(n);n.type=k;if(n.originalEvent){for(var l=c.event.props.length,p;l;){p=c.event.props[--l];n[p]=n.originalEvent[p]}}this.element.trigger(n,o);return !(c.isFunction(q)&&q.call(this.element[0],n,o)===false||n.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var k=this;this.element.bind("mousedown."+this.widgetName,function(l){return k._mouseDown(l)}).bind("click."+this.widgetName,function(l){if(k._preventClickEvent){k._preventClickEvent=false;l.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(m){m.originalEvent=m.originalEvent||{};if(m.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(m));this._mouseDownEvent=m;var l=this,n=(m.which==1),k=(typeof this.options.cancel=="string"?c(m.target).parents().add(m.target).filter(this.options.cancel).length:false);if(!n||k||!this._mouseCapture(m)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){l.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(m)&&this._mouseDelayMet(m)){this._mouseStarted=(this._mouseStart(m)!==false);if(!this._mouseStarted){m.preventDefault();return true}}this._mouseMoveDelegate=function(o){return l._mouseMove(o)};this._mouseUpDelegate=function(o){return l._mouseUp(o)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||m.preventDefault());m.originalEvent.mouseHandled=true;return true},_mouseMove:function(k){if(c.browser.msie&&!k.button){return this._mouseUp(k)}if(this._mouseStarted){this._mouseDrag(k);return k.preventDefault()}if(this._mouseDistanceMet(k)&&this._mouseDelayMet(k)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,k)!==false);(this._mouseStarted?this._mouseDrag(k):this._mouseUp(k))}return !this._mouseStarted},_mouseUp:function(k){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(k.target==this._mouseDownEvent.target);this._mouseStop(k)}return false},_mouseDistanceMet:function(k){return(Math.max(Math.abs(this._mouseDownEvent.pageX-k.pageX),Math.abs(this._mouseDownEvent.pageY-k.pageY))>=this.options.distance)},_mouseDelayMet:function(k){return this.mouseDelayMet},_mouseStart:function(k){},_mouseDrag:function(k){},_mouseStop:function(k){},_mouseCapture:function(k){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);(function(a){a.ajaxSettings.accepts._default="text/javascript, text/html, application/xml, text/xml, */*"})(jQuery);(function(a){a.fn.reset=function(){return this.each(function(){if(typeof this.reset=="function"||(typeof this.reset=="object"&&!this.reset.nodeType)){this.reset()}})};a.fn.enable=function(){return this.each(function(){this.disabled=false})};a.fn.disable=function(){return this.each(function(){this.disabled=true})}})(jQuery);(function(a){a.extend({fieldEvent:function(b,f){var d=b[0]||b,c="change";if(d.type=="radio"||d.type=="checkbox"){c="click"}else{if(f&&(d.type=="text"||d.type=="textarea"||d.type=="password")){c="keyup"}}return c}});a.fn.extend({delayedObserver:function(b,f){var c=a(this);if(typeof window.delayedObserverStack=="undefined"){window.delayedObserverStack=[]}if(typeof window.delayedObserverCallback=="undefined"){window.delayedObserverCallback=function(h){var g=window.delayedObserverStack[h];if(g.timer){clearTimeout(g.timer)}g.timer=setTimeout(function(){g.timer=null;g.callback(g.obj,g.obj.formVal())},g.delay*1000);g.oldVal=g.obj.formVal()}}window.delayedObserverStack.push({obj:c,timer:null,delay:b,oldVal:c.formVal(),callback:f});var d=window.delayedObserverStack.length-1;if(c[0].tagName=="FORM"){a(":input",c).each(function(){var g=a(this);g.bind(a.fieldEvent(g,b),function(){var h=window.delayedObserverStack[d];if(h.obj.formVal()==h.oldVal){return}else{window.delayedObserverCallback(d)}})})}else{c.bind(a.fieldEvent(c,b),function(){var g=window.delayedObserverStack[d];if(g.obj.formVal()==g.oldVal){return}else{window.delayedObserverCallback(d)}})}},formVal:function(){var b=this[0];if(b.tagName=="FORM"){return this.serialize()}if(b.type=="checkbox"||b.type=="radio"){return this.filter("input:checked").val()||""}else{return this.val()}}})})(jQuery);(function($){$.fn.extend({visualEffect:function(o,options){if(options){speed=options.duration*1000}else{speed=null}e=o.replace(/\_(.)/g,function(m,l){return l.toUpperCase()});return eval("$(this)."+e+"("+speed+")")},appear:function(speed,callback){return this.fadeIn(speed,callback)},blindDown:function(speed,callback){return this.show("blind",{direction:"vertical"},speed,callback)},blindUp:function(speed,callback){return this.hide("blind",{direction:"vertical"},speed,callback)},blindRight:function(speed,callback){return this.show("blind",{direction:"horizontal"},speed,callback)},blindLeft:function(speed,callback){this.hide("blind",{direction:"horizontal"},speed,callback);return this},dropOut:function(speed,callback){return this.hide("drop",{direction:"down"},speed,callback)},dropIn:function(speed,callback){return this.show("drop",{direction:"up"},speed,callback)},fade:function(speed,callback){return this.fadeOut(speed,callback)},fadeToggle:function(speed,callback){return this.animate({opacity:"toggle"},speed,callback)},fold:function(speed,callback){return this.hide("fold",{},speed,callback)},foldOut:function(speed,callback){return this.show("fold",{},speed,callback)},grow:function(speed,callback){return this.show("scale",{},speed,callback)},highlight:function(speed,callback){return this.show("highlight",{},speed,callback)},puff:function(speed,callback){return this.hide("puff",{},speed,callback)},pulsate:function(speed,callback){return this.show("pulsate",{},speed,callback)},shake:function(speed,callback){return this.show("shake",{},speed,callback)},shrink:function(speed,callback){return this.hide("scale",{},speed,callback)},squish:function(speed,callback){return this.hide("scale",{origin:["top","left"]},speed,callback)},slideUp:function(speed,callback){return this.hide("slide",{direction:"up"},speed,callback)},slideDown:function(speed,callback){return this.show("slide",{direction:"up"},speed,callback)},switchOff:function(speed,callback){return this.hide("clip",{},speed,callback)},switchOn:function(speed,callback){return this.show("clip",{},speed,callback)}})})(jQuery);function bmtForm(b){var a=jQuery(b);jQuery(".product-id").val(a.attr("data-value"))}function fillDiscountCode(a){jQuery("#DISCOUNTCODE").val(a)}function fillBmtId(b,a){jQuery("#BMTID_"+a).val(b)}function download(a){setTimeout(function(){location.href=a},500);jQuery("#subscription_first_name").focus()}function subscribing(a){var c=jQuery(".subscribe",a);c.hide();var d=a.attr("data-progress")||"Subscribing...";var b=jQuery("<div/>").addClass("subscribing").html(d);c.after(b)}function validate_newsletter_form(c){var a=jQuery(c);var d="Please fill in ";var b=jQuery.validation.getRule("email").check(jQuery(".email",a).val());if(b){a.find("input").removeClass(t.required);subscribing(a);return true}else{jQuery(".email",a).addClass(t.required).focus();d+=t.valid_email;alert(d);return false}}function validate_uninstall_from(c){var a=jQuery(c);var d="";var b=jQuery.validation.getRule("email").check(jQuery(".email",a).val());var f=jQuery("#support_request_message").val();if(!b&&!f){d="Please type in the main issue or your comments or valid email.";alert(d);return false}a.find("input[name=magicwand]").val(t.antispam);sending();return true}function sending(){var a=jQuery("#send");a.hide();var b=jQuery("<div/>").attr("id","sending").addClass("sending").html("Sending message...");a.after(b)}function validate_contact_from(b){var c="Please fill in ";var a=jQuery.validation.getRule("email").check(jQuery("#support_request_email").val());var d=jQuery.validation.getRule("required").check(jQuery("#support_request_message").val());if(a&&d){jQuery(b).find("input, textarea").removeClass(t.required);jQuery(b).find("input[name=magicwand]").val(t.antispam);sending();return true}else{if(!a){c+=t.valid_email;jQuery("#support_request_email").addClass(t.required);jQuery("#support_request_email").focus()}if(!a&&!d){c+=" and "}if(!d){c+=t.message;jQuery("#support_request_message").addClass(t.required);if(a){jQuery("#support_request_message").focus()}}c+=".";alert(c);return false}}function feedback_sent(){jQuery("#sending").remove();jQuery("#support_request_name").val("");jQuery("#support_request_email").val("");jQuery("#support_request_message").val("");var a=jQuery("<div/>").addClass("sent-notice").html(t.thanks_for_message);jQuery("#send").after(a)}function why_uninstall_sent(){jQuery("#sending").remove();var a=jQuery("<div/>").addClass("sent-notice").html(t.thanks_for_why_uninstall);jQuery("#send").after(a)}function subscription_saved(c){var a=jQuery(c);var b=jQuery(".subscribing",a);b.addClass("subscribed").html(t.thank_you);jQuery(".email",a).val("").blur();jQuery(".name",a).val("");setTimeout(function(){b.fadeOut(150,function(){jQuery(".subscribe",a).fadeIn(150);b.remove()})},7000)}function download_subscription_saved(a){parent.jQuery("#fancybox-outer").removeClass("fancybox-highlight");parent.jQuery.fancybox(t.thanks_for_subscription)}function feedback_not_sent(a){jQuery("#sending").remove();jQuery("#send").show();alert(a)}function subscription_not_saved(a){jQuery(".subscribing").remove();jQuery(".subscribe").show();alert(a)}function order_feedback_sent(a){jQuery.fancybox(t.order_thanks_for_message)}function send_another(){jQuery(".sent-notice").remove();jQuery("#send").show();jQuery("#support_request_name").focus()}function order_send_another(){jQuery("#show-contact-form").click()}function close_fancybox(){jQuery.fancybox.close()}function rot13(a){return a.replace(/[a-zA-Z]/g,function(b){return String.fromCharCode((b<="Z"?90:122)>=(b=b.charCodeAt(0)+13)?b:b-26)})}function download_email(a){setTimeout(function(){jQuery.fancybox("<a/>",{href:"/subscriptions/from_download/"+a,type:"iframe",transitionIn:"elastic",centerOnScroll:true,width:600,height:215,onStart:function(){jQuery("#fancybox-outer").addClass("fancybox-highlight")},onClosed:function(){jQuery("#fancybox-outer").removeClass("fancybox-highlight")}})},10)}(function(b){var a=function(){var d={email:{check:function(g){if(g){var f=/^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}$/;return c(g,f)}return false},msg:""},required:{check:function(f){if(f){return true}else{return false}},msg:""}};var c=function(g,f){return f.test(g)};return{addRule:function(f,g){d[f]=g},getRule:function(f){return d[f]}}};b.validation=new a()})(jQuery);(function(C){var M,V,T,N,d,y,l,L,Q,B;var F=0,J={},h=[],f=0,H={},A=[];var g=null,n=new Image,K=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,k=/[^\.]\.(swf)\s*$/i;var r,O=1;var a,c,R=false,E=20,v=C.extend(C("<div/>")[0],{prop:0}),j=0,U=!C.support.opacity&&!window.XMLHttpRequest;C.fn.fixPNG=function(){return this.each(function(){var Y=C(this).css("backgroundImage");if(Y.match(/^url\(["']?(.*\.png)["']?\)$/i)){Y=RegExp.$1;C(this).css({backgroundImage:"none",filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod="+(C(this).css("backgroundRepeat")=="no-repeat"?"crop":"scale")+", src='"+Y+"')"}).each(function(){var Z=C(this).css("position");if(Z!="absolute"&&Z!="relative"){C(this).css("position","relative")}}).css("zoom",1)}})};C.fn.fancybox=function(Y){C(this).data("fancybox",C.extend({},Y));C(this).unbind("click.fb").bind("click.fb",function(aa){aa.preventDefault();if(R){return}R=true;C(this).blur();h=[];F=0;var Z=C(this).attr("rel")||"";if(!Z||Z==""||Z==="nofollow"){h.push(this)}else{h=C("a[rel="+Z+"], area[rel="+Z+"]");F=h.index(this)}m();return false});return this};C.fancybox=function(ab,aa){if(R){return}R=true;h=[];F=0;if(C.isArray(ab)){for(var Z=0,Y=ab.length;Z<Y;Z++){if(typeof ab[Z]=="object"){C(ab[Z]).data("fancybox",C.extend({},aa,ab[Z]))}else{ab[Z]=C({}).data("fancybox",C.extend({content:ab[Z]},aa))}}h=jQuery.merge(h,ab)}else{if(typeof ab=="object"){C(ab).data("fancybox",C.extend({},aa,ab))}else{ab=C({}).data("fancybox",C.extend({content:ab},aa))}h.push(ab)}m()};C.fancybox.showActivity=function(){clearInterval(r);V.show();r=setInterval(o,66)};C.fancybox.hideActivity=function(){V.hide()};C.fancybox.next=function(){return C.fancybox.pos(f+1)};C.fancybox.prev=function(){return C.fancybox.pos(f-1)};C.fancybox.pos=function(Y){if(R){return}Y=parseInt(Y);if(Y>-1&&A.length>Y){F=Y;m()}if(H.cyclic&&A.length>1&&Y<0){F=A.length-1;m()}if(H.cyclic&&A.length>1&&Y>=A.length){F=0;m()}return};C.fancybox.cancel=function(){if(R){return}R=true;C.event.trigger("fancybox-cancel");i();if(J&&C.isFunction(J.onCancel)){J.onCancel(h,F,J)}R=false};C.fancybox.close=function(){if(R||N.is(":hidden")){return}R=true;if(H&&C.isFunction(H.onCleanup)){if(H.onCleanup(A,f,H)===false){R=false;return}}i();C(L.add(Q).add(B)).hide();C("#fancybox-title").remove();N.add(y).add(T).unbind();C(window).unbind("resize.fb scroll.fb");C(document).unbind("keydown.fb");function Y(){T.fadeOut("fast");N.hide();C.event.trigger("fancybox-cleanup");y.empty();if(C.isFunction(H.onClosed)){H.onClosed(A,f,H)}A=J=[];f=F=0;H=J={};R=false}y.css("overflow","hidden");if(H.transitionOut=="elastic"){a=X();var Z=N.position();c={top:Z.top,left:Z.left,width:N.width(),height:N.height()};if(H.opacity){c.opacity=1}v.prop=1;C(v).animate({prop:0},{duration:H.speedOut,easing:H.easingOut,step:I,complete:Y})}else{N.fadeOut(H.transitionOut=="none"?0:H.speedOut,Y)}};C.fancybox.resize=function(){if(R||N.is(":hidden")){return}R=true;var Z=y.wrapInner("<div style='overflow:auto'></div>").children();var Y=Z.height();N.css({height:Y+(H.padding*2)+j});y.css({height:Y});Z.replaceWith(Z.children());C.fancybox.center()};C.fancybox.center=function(){R=true;var Y=G();var Z=H.margin;var aa={};aa.top=Y[3]+((Y[1]-((N.height()-j)+(E*2)))*0.5);aa.left=Y[2]+((Y[0]-(N.width()+(E*2)))*0.5);aa.top=Math.max(Y[3]+Z,aa.top);aa.left=Math.max(Y[2]+Z,aa.left);N.css(aa);R=false};function i(){V.hide();n.onerror=n.onload=null;if(g){g.abort()}M.empty()}function q(){C.fancybox('<p id="fancybox_error">The requested content cannot be loaded.<br />Please try again later.</p>',{scrolling:"no",padding:20,transitionIn:"none",transitionOut:"none"})}function m(){i();var ad=h[F];J=C.extend({},C.fn.fancybox.defaults,(typeof C(ad).data("fancybox")=="undefined"?J:C(ad).data("fancybox")));var aa,ab,af=ad.title||C(ad).title||J.title||"";if(ad.nodeName&&!J.orig){J.orig=C(ad).children("img:first").length?C(ad).children("img:first"):C(ad)}if(af==""&&J.orig){af=J.orig.attr("alt")}if(ad.nodeName&&(/^(?:javascript|#)/i).test(ad.href)){aa=J.href||null}else{aa=J.href||ad.href||null}if(J.type){ab=J.type;if(!aa){aa=J.content}}else{if(J.content){ab="html"}else{if(aa){if(aa.match(K)){ab="image"}else{if(aa.match(k)){ab="swf"}else{if(C(ad).hasClass("iframe")){ab="iframe"}else{if(aa.match(/#/)){ad=aa.substr(aa.indexOf("#"));ab=C(ad).length>0?"inline":"ajax"}else{ab="ajax"}}}}}else{ab="inline"}}}J.type=ab;J.href=aa;J.title=af;if(J.autoDimensions&&J.type!=="iframe"&&J.type!=="swf"){J.width="auto";J.height="auto"}if(J.modal){J.overlayShow=true;J.hideOnOverlayClick=false;J.hideOnContentClick=false;J.enableEscapeButton=false;J.showCloseButton=false}if(C.isFunction(J.onStart)){if(J.onStart(h,F,J)===false){R=false;return}}M.css("padding",(E+J.padding+J.margin));C(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){C(this).replaceWith(y.children())});switch(ab){case"html":M.html(J.content);u();break;case"inline":C('<div class="fancybox-inline-tmp" />').hide().insertBefore(C(ad)).bind("fancybox-cleanup",function(){C(this).replaceWith(y.children())}).bind("fancybox-cancel",function(){C(this).replaceWith(M.children())});C(ad).appendTo(M);u();break;case"image":R=false;C.fancybox.showActivity();n=new Image;n.onerror=function(){q()};n.onload=function(){n.onerror=null;n.onload=null;S()};n.src=aa;break;case"swf":var ae="";var Z="";ae+='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+J.width+'" height="'+J.height+'"><param name="movie" value="'+aa+'"></param>';C.each(J.swf,function(ag,ah){ae+='<param name="'+ag+'" value="'+ah+'"></param>';Z+=" "+ag+'="'+ah+'"'});ae+='<embed src="'+aa+'" type="application/x-shockwave-flash" width="'+J.width+'" height="'+J.height+'"'+Z+"></embed></object>";M.html(ae);u();break;case"ajax":var Y=aa.split("#",2);var ac=J.ajax.data||{};if(Y.length>1){aa=Y[0];typeof ac=="string"?ac+="&selector="+Y[1]:ac.selector=Y[1]}R=false;C.fancybox.showActivity();g=C.ajax(C.extend(J.ajax,{url:aa,data:ac,error:q,success:function(ah,ai,ag){if(g.status==200){M.html(ah);u()}}}));break;case"iframe":C('<iframe id="fancybox-frame" name="fancybox-frame'+new Date().getTime()+'" frameborder="0" hspace="0" scrolling="'+J.scrolling+'" src="'+J.href+'"></iframe>').appendTo(M);w();break}}function S(){R=true;J.width=n.width;J.height=n.height;C("<img />").attr({id:"fancybox-img",src:n.src,alt:J.title}).appendTo(M);w()}function u(){M.width(J.width);M.height(J.height);if(J.width=="auto"){J.width=M.width()}if(J.height=="auto"){J.height=M.height()}w()}function w(){V.hide();if(N.is(":visible")&&C.isFunction(H.onCleanup)){if(H.onCleanup(A,f,H)===false){C.event.trigger("fancybox-cancel");R=false;return}}A=h;f=F;H=J;y.get(0).scrollTop=0;y.get(0).scrollLeft=0;if(H.overlayShow){if(U){C("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"})}T.css({"background-color":H.overlayColor,opacity:H.overlayOpacity}).unbind().show()}c=b();s();if(N.is(":visible")){C(L.add(Q).add(B)).hide();var Z=N.position();a={top:Z.top,left:Z.left,width:N.width(),height:N.height()};var Y=(a.width==c.width&&a.height==c.height);y.fadeOut(H.changeFade,function(){C.event.trigger("fancybox-change");y.css({top:H.padding,left:H.padding,width:Math.max(a.width-(H.padding*2),1),height:Math.max(a.height-(H.padding*2),1)}).empty().css("overflow","hidden");function aa(){y.html(M.contents()).fadeIn(H.changeFade,x)}v.prop=0;C(v).animate({prop:1},{duration:Y?0:H.changeSpeed,easing:H.easingChange,step:I,complete:aa})});return}N.css("opacity",1);if(H.transitionIn=="elastic"){a=X();y.css({top:H.padding,left:H.padding,width:Math.max(a.width-(H.padding*2),1),height:Math.max(a.height-(H.padding*2),1)}).html(M.contents());N.css(a).show();if(H.opacity){c.opacity=0}v.prop=0;C(v).animate({prop:1},{duration:H.speedIn,easing:H.easingIn,step:I,complete:x})}else{y.css({top:H.padding,left:H.padding,width:Math.max(c.width-(H.padding*2),1),height:Math.max(c.height-(H.padding*2)-j,1)}).html(M.contents());N.css(c).fadeIn(H.transitionIn=="none"?0:H.speedIn,x)}}function I(ac){var Z=Math.round(a.width+(c.width-a.width)*ac);var Y=Math.round(a.height+(c.height-a.height)*ac);var ab=Math.round(a.top+(c.top-a.top)*ac);var aa=Math.round(a.left+(c.left-a.left)*ac);N.css({width:Z+"px",height:Y+"px",top:ab+"px",left:aa+"px"});Z=Math.max(Z-H.padding*2,0);Y=Math.max(Y-(H.padding*2+(j*ac)),0);y.css({width:Z+"px",height:Y+"px"});if(typeof c.opacity!=="undefined"){N.css("opacity",(ac<0.5?0.5:ac))}}function x(){y.css("overflow",overflow=(H.scrolling=="auto"?(H.type=="image"||H.type=="iframe"||H.type=="swf"?"hidden":"auto"):(H.scrolling=="yes"?"auto":"visible")));if(!C.support.opacity){y.get(0).style.removeAttribute("filter");N.get(0).style.removeAttribute("filter")}C("#fancybox-title").show();if(H.hideOnContentClick){y.one("click",C.fancybox.close)}if(H.hideOnOverlayClick){T.one("click",C.fancybox.close)}if(H.showCloseButton){L.show()}p();C(window).bind("resize.fb",C.fancybox.center);H.centerOnScroll?C(window).bind("scroll.fb",C.fancybox.center):C(window).unbind("scroll.fb");if(C.isFunction(H.onComplete)){H.onComplete(A,f,H)}R=false;W()}function b(){var Y=G();var af={};var ad=H.margin;var Z=H.autoScale;var ae=(E+ad)*2;var ac=(E+ad)*2;var aa=(H.padding*2);if(H.width.toString().indexOf("%")>-1){af.width=((Y[0]*parseFloat(H.width))/100)-(E*2);Z=false}else{af.width=H.width+aa}if(H.height.toString().indexOf("%")>-1){af.height=((Y[1]*parseFloat(H.height))/100)-(E*2);Z=false}else{af.height=H.height+aa}if(Z&&(af.width>(Y[0]-ae)||af.height>(Y[1]-ac))){if(J.type=="image"||J.type=="swf"){ae+=aa;ac+=aa;var ab=Math.min(Math.min(Y[0]-ae,H.width)/H.width,Math.min(Y[1]-ac,H.height)/H.height);af.width=Math.round(ab*(af.width-aa))+aa;af.height=Math.round(ab*(af.height-aa))+aa}else{af.width=Math.min(af.width,(Y[0]-ae));af.height=Math.min(af.height,(Y[1]-ac))}}af.top=Y[3]+((Y[1]-(af.height+(E*2)))*0.5);af.left=Y[2]+((Y[0]-(af.width+(E*2)))*0.5);if(H.autoScale==false){af.top=Math.max(Y[3]+ad,af.top);af.left=Math.max(Y[2]+ad,af.left)}return af}function X(){var ab=J.orig?C(J.orig):false;var aa={};if(ab&&ab.length){var Z=z(ab);aa={width:(Z.width+(H.padding*2)),height:(Z.height+(H.padding*2)),top:(Z.top-H.padding-E),left:(Z.left-H.padding-E)}}else{var Y=G();aa={width:1,height:1,top:Y[3]+Y[1]*0.5,left:Y[2]+Y[0]*0.5}}return aa}function p(){C(document).unbind("keydown.fb").bind("keydown.fb",function(Y){if(Y.keyCode==27&&H.enableEscapeButton){Y.preventDefault();C.fancybox.close()}else{if(Y.keyCode==37){Y.preventDefault();C.fancybox.prev()}else{if(Y.keyCode==39){Y.preventDefault();C.fancybox.next()}}}});if(C.fn.mousewheel){N.unbind("mousewheel.fb");if(A.length>1){N.bind("mousewheel.fb",function(Y,Z){Y.preventDefault();if(R||Z==0){return}Z>0?C.fancybox.prev():C.fancybox.next()})}}if(!H.showNavArrows){return}if((H.cyclic&&A.length>1)||f!=0){Q.show()}if((H.cyclic&&A.length>1)||f!=(A.length-1)){B.show()}}function W(){if((A.length-1)>f){var Y=A[f+1].href;if(typeof Y!=="undefined"&&Y.match(K)){var Z=new Image();Z.src=Y}}if(f>0){var Y=A[f-1].href;if(typeof Y!=="undefined"&&Y.match(K)){var Z=new Image();Z.src=Y}}}function o(){if(!V.is(":visible")){clearInterval(r);return}C("div",V).css("top",(O*-40)+"px");O=(O+1)%12}function G(){return[C(window).width(),C(window).height(),C(document).scrollLeft(),C(document).scrollTop()]}function z(Y){var Z=Y.offset();Z.top+=parseFloat(Y.css("paddingTop"))||0;Z.left+=parseFloat(Y.css("paddingLeft"))||0;Z.top+=parseFloat(Y.css("border-top-width"))||0;Z.left+=parseFloat(Y.css("border-left-width"))||0;Z.width=Y.width();Z.height=Y.height();return Z}function s(){C("#fancybox-title").remove();j=0;if(H.titleShow==false){return}var aa=A[f];var ab=H.title;ab=C.isFunction(H.titleFormat)?H.titleFormat(ab,A,f,H):P(ab);if(!ab||ab==""){return}var Z=c.width-(H.padding*2);var Y="fancybox-title-"+H.titlePosition;C('<div id="fancybox-title" class="'+Y+'" />').css({width:Z,paddingLeft:H.padding,paddingRight:H.padding}).html(ab).appendTo("body");switch(H.titlePosition){case"inside":j=C("#fancybox-title").outerHeight(true)-H.padding;c.top-=Math.floor(j/2);c.height+=j;break;case"over":C("#fancybox-title").css("bottom",H.padding);break;default:C("#fancybox-title").css("bottom",C("#fancybox-title").outerHeight(true)*-1);break}C("#fancybox-title").appendTo(d).hide();if(U){C("#fancybox-title span").fixPNG()}}function P(Y){if(Y&&Y.length){switch(H.titlePosition){case"inside":return Y;break;case"over":return'<span id="fancybox-title-over">'+Y+"</span>";break;default:return'<span id="fancybox-title-wrap"><span id="fancybox-title-left"></span><span id="fancybox-title-main">'+Y+'</span><span id="fancybox-title-right"></span></span>';break}}return false}function D(){if(C("#fancybox-wrap").length){return}C("body").append(M=C('<div id="fancybox-tmp"></div>'),V=C('<div id="fancybox-loading"><div></div></div>'),T=C('<div id="fancybox-overlay"></div>'),N=C('<div id="fancybox-wrap"></div>'));d=C('<div id="fancybox-outer"></div>').append('<div class="fancy-bg" id="fancy-bg-n"></div><div class="fancy-bg" id="fancy-bg-ne"></div><div class="fancy-bg" id="fancy-bg-e"></div><div class="fancy-bg" id="fancy-bg-se"></div><div class="fancy-bg" id="fancy-bg-s"></div><div class="fancy-bg" id="fancy-bg-sw"></div><div class="fancy-bg" id="fancy-bg-w"></div><div class="fancy-bg" id="fancy-bg-nw"></div>').appendTo(N);d.append(y=C('<div id="fancybox-inner"></div>'),L=C('<a id="fancybox-close"></a>'),Q=C('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),B=C('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>'));L.click(C.fancybox.close);V.click(C.fancybox.cancel);Q.click(function(Y){Y.preventDefault();C.fancybox.prev()});B.click(function(Y){Y.preventDefault();C.fancybox.next()});if(!C.support.opacity){d.find(".fancy-bg").fixPNG()}if(U){C(L.add(".fancy-ico").add("div",V)).fixPNG();T.get(0).style.setExpression("height","document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'");V.get(0).style.setExpression("top","(-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px'");d.prepend('<iframe id="fancybox-hide-sel-frame" src="javascript:\'\';" scrolling="no" frameborder="0" ></iframe>')}}C.fn.fancybox.defaults={padding:10,margin:20,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.3,overlayColor:"#666",titleShow:true,titlePosition:"outside",titleFormat:null,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing",easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,onStart:null,onCancel:null,onComplete:null,onCleanup:null,onClosed:null};C(document).ready(function(){D()})})(jQuery);(function(f){function b(p,c,k){var q=this,g=p.add(this),o=p.find(k.tabs),n=c.jquery?c:p.children(c),m;o.length||(o=p.children());n.length||(n=p.parent().find(c));n.length||(n=f(c));f.extend(this,{click:function(j,i){var h=o.eq(j);if(typeof j=="string"&&j.replace("#","")){h=o.filter("[href*="+j.replace("#","")+"]");j=Math.max(o.index(h),0)}if(k.rotate){var l=o.length-1;if(j<0){return q.click(l,i)}if(j>l){return q.click(0,i)}}if(!h.length){if(m>=0){return q}j=k.initialIndex;h=o.eq(j)}if(j===m){return q}i=i||f.Event();i.type="onBeforeClick";g.trigger(i,[j]);if(!i.isDefaultPrevented()){d[k.effect].call(q,j,function(){i.type="onClick";g.trigger(i,[j])});m=j;o.removeClass(k.current);h.addClass(k.current);return q}},getConf:function(){return k},getTabs:function(){return o},getPanes:function(){return n},getCurrentPane:function(){return n.eq(m)},getCurrentTab:function(){return o.eq(m)},getIndex:function(){return m},next:function(){return q.click(m+1)},prev:function(){return q.click(m-1)},destroy:function(){o.unbind(k.event).removeClass(k.current);n.find("a[href^=#]").unbind("click.T");return q}});f.each("onBeforeClick,onClick".split(","),function(i,h){f.isFunction(k[h])&&f(q).bind(h,k[h]);q[h]=function(j){f(q).bind(h,j);return q}});if(k.history&&f.fn.history){f.tools.history.init(o);k.event="history"}o.each(function(h){f(this).bind(k.event,function(i){q.click(h,i);return i.preventDefault()})});n.find("a[href^=#]").bind("click.T",function(h){q.click(f(this).attr("href"),h)});if(location.hash){q.click(location.hash)}else{if(k.initialIndex===0||k.initialIndex>0){q.click(k.initialIndex)}}}f.tools=f.tools||{version:"1.2.3"};f.tools.tabs={conf:{tabs:"a",current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",rotate:false,history:false},addEffect:function(g,c){d[g]=c}};var d={"default":function(g,c){this.getPanes().hide().eq(g).show();c.call()},fade:function(i,c){var h=this.getConf(),j=h.fadeOutSpeed,g=this.getPanes();j?g.fadeOut(j):g.hide();g.eq(i).fadeIn(h.fadeInSpeed,c)},slide:function(g,c){this.getPanes().slideUp(200);this.getPanes().eq(g).slideDown(400,c)},ajax:function(g,c){this.getPanes().eq(0).load(this.getTabs().eq(g).attr("href"),c)}},a;f.tools.tabs.addEffect("horizontal",function(g,c){a||(a=this.getPanes().eq(0).width());this.getCurrentPane().animate({width:0},function(){f(this).hide()});this.getPanes().eq(g).animate({width:a},function(){f(this).show();c.call()})});f.fn.tabs=function(h,c){var g=this.data("tabs");if(g){g.destroy();this.removeData("tabs")}if(f.isFunction(c)){c={onBeforeClick:c}}c=f.extend({},f.tools.tabs.conf,c);this.each(function(){g=new b(f(this),h,c);f(this).data("tabs",g)});return c.api?g:this}})(jQuery);(function(c){function d(h,i){var g=c(i);return g.length<2?g:h.parent().find(i)}function b(w,x){var y=this,q=w.add(y),v=w.children(),u=0,n=x.vertical;a||(a=y);if(v.length>1){v=c(x.items,w)}c.extend(y,{getConf:function(){return x},getIndex:function(){return u},getSize:function(){return y.getItems().size()},getNaviButtons:function(){return j.add(i)},getRoot:function(){return w},getItemWrap:function(){return v},getItems:function(){return v.children(x.item).not("."+x.clonedClass)},move:function(f,g){return y.seekTo(u+f,g)},next:function(f){return y.move(1,f)},prev:function(f){return y.move(-1,f)},begin:function(f){return y.seekTo(0,f)},end:function(f){return y.seekTo(y.getSize()-1,f)},focus:function(){return a=y},addItem:function(f){f=c(f);if(x.circular){c(".cloned:last").before(f);c(".cloned:first").replaceWith(f.clone().addClass(x.clonedClass))}else{v.append(f)}q.trigger("onAddItem",[f]);return y},seekTo:function(f,m,k){if(x.circular&&f===0&&u==-1&&m!==0){return y}if(!x.circular&&f<0||f>y.getSize()||f<-1){return y}var g=f;if(f.jquery){f=y.getItems().index(f)}else{g=y.getItems().eq(f)}var l=c.Event("onBeforeSeek");if(!k){q.trigger(l,[f,m]);if(l.isDefaultPrevented()||!g.length){return y}}g=n?{top:-g.position().top}:{left:-g.position().left};u=f;a=y;if(m===undefined){m=x.speed}v.animate(g,m,x.easing,k||function(){q.trigger("onSeek",[f])});return y}});c.each(["onBeforeSeek","onSeek","onAddItem"],function(f,g){c.isFunction(x[g])&&c(y).bind(g,x[g]);y[g]=function(k){c(y).bind(g,k);return y}});if(x.circular){var h=y.getItems().slice(-1).clone().prependTo(v),z=y.getItems().eq(1).clone().appendTo(v);h.add(z).addClass(x.clonedClass);y.onBeforeSeek(function(f,k,g){if(!f.isDefaultPrevented()){if(k==-1){y.seekTo(h,g,function(){y.end(0)});return f.preventDefault()}else{k==y.getSize()&&y.seekTo(z,g,function(){y.begin(0)})}}});y.seekTo(0,0)}var j=d(w,x.prev).click(function(){y.prev()}),i=d(w,x.next).click(function(){y.next()});!x.circular&&y.getSize()>1&&y.onBeforeSeek(function(f,g){setTimeout(function(){if(!f.isDefaultPrevented()){j.toggleClass(x.disabledClass,g<=0);i.toggleClass(x.disabledClass,g>=y.getSize()-1)}},1)});x.mousewheel&&c.fn.mousewheel&&w.mousewheel(function(f,g){if(x.mousewheel){y.move(g<0?1:-1,x.wheelSpeed||50);return false}});x.keyboard&&c(document).bind("keydown.scrollable",function(f){if(!(!x.keyboard||f.altKey||f.ctrlKey||c(f.target).is(":input"))){if(!(x.keyboard!="static"&&a!=y)){var g=f.keyCode;if(n&&(g==38||g==40)){y.move(g==38?-1:1);return f.preventDefault()}if(!n&&(g==37||g==39)){y.move(g==37?-1:1);return f.preventDefault()}}}});c(y).trigger("onBeforeSeek",[x.initialIndex])}c.tools=c.tools||{version:"1.2.3"};c.tools.scrollable={conf:{activeClass:"active",circular:false,clonedClass:"cloned",disabledClass:"disabled",easing:"swing",initialIndex:0,item:null,items:".items",keyboard:true,mousewheel:false,next:".next",prev:".prev",speed:400,vertical:false,wheelSpeed:0}};var a;c.fn.scrollable=function(g){var h=this.data("scrollable");if(h){return h}g=c.extend({},c.tools.scrollable.conf,g);this.each(function(){h=new b(c(this),g);c(this).data("scrollable",h)});return g.api?h:this}})(jQuery);$(document).ready(function(){if($("#download-page").size()){download($("#download_url").val())}$(".d-menu li").each(function(){var c=$(this);var d=c.find(".dropdown");if(d.size()==1){c.hover(function(){c.addClass("with-dropdown-hover");d.show()},function(){c.removeClass("with-dropdown-hover");d.hide()})}});var b=$("#buy-nav");if(b.size()>0){b.tabs("#buy-panels .panel")}$(".autosubmit").change(function(){$(this).closest("form").submit()});$("a.screenshot:not(.nozoom)").fancybox({titlePosition:"inside",transitionIn:"elastic",transitionOut:"elastic",hideOnContentClick:true,autoScale:false,titleFormat:function(d){var c=d;if($("#screenshot-buttons").size()>0){c='<div class="screenshot-title">'+d+'</div><div class="screenshot-buttons">'+$("#screenshot-buttons").html()+"</div>"}return c}});$("span.emil").each(function(){var d=$(this);var f=d.text().replace(" (at) ","@").replace(" (dot) ",".");var c=$("<a/>").attr("href","mailto:"+f).text(f);d.after(c);d.remove()});$(".obfmail").each(function(){var c=$(this);c.attr("href","mailto:"+rot13(c.attr("rel")))});$("#show-contact-form").fancybox({onComplete:function(){$("#contact_name").focus()},onStart:function(){$("#contact_name").val("");$("#contact_email").val("");$("#contact_message").val("");$("#sending").remove();$("#send").show()}});$(".static-popup-link").fancybox({ajax:{type:"GET"},hideOnContentClick:true});$(".inline-popup-link").fancybox({hideOnContentClick:true});$(".popup-link").fancybox({ajax:{type:"GET"},hideOnContentClick:false});$("input.inline-label").each(function(){$(this).data("initial_value",$(this).val())});$("input.inline-label").focus(function(){var c=$(this);c.addClass("inline-label-focus");if(c.val()==c.data("initial_value")){c.val("")}});$(".history-back").click(function(c){c.preventDefault();history.go(-1)});$("form.prevent-return input").keypress(function(c){if(c.keyCode==13){c.preventDefault()}});$(".pr-content a.img").click(function(c){window.open(this.href);c.preventDefault()});var a=$("#cscontact-nav");if(a.size()>0){a.tabs("#cscontact .panel")}});
    \ No newline at end of file
    diff --git a/javascripts/dextronet.js b/javascripts/dextronet.js
    new file mode 100644
    index 0000000..7ab45c1
    --- /dev/null
    +++ b/javascripts/dextronet.js
    @@ -0,0 +1,200 @@
    +function bmtForm(el) {
    +  var $el = jQuery(el);
    +  jQuery(".product-id").val($el.attr("data-value"));
    +}
    +
    +function fillDiscountCode(code) {
    +  jQuery("#DISCOUNTCODE").val(code);
    +}
    +
    +function fillBmtId(id, key) {
    +  jQuery("#BMTID_"+key).val(id);
    +}
    +
    +function download(url)
    +{
    +  setTimeout(function() { location.href = url; }, 500);
    +  jQuery("#subscription_first_name").focus();
    +}
    +
    +function subscribing($form) {
    +  var $this = jQuery(".subscribe", $form);
    +  $this.hide();
    +  var text = $form.attr("data-progress") || "Subscribing..."
    +  var subscribing = jQuery("<div/>").addClass('subscribing').html(text);
    +  $this.after(subscribing);
    +}
    +
    +function validate_newsletter_form(form) 
    +{
    +  var $form = jQuery(form);
    +  var info = "Please fill in ";
    +  var email = jQuery.validation.getRule('email').check(jQuery('.email', $form).val());
    +  if (email) {
    +    $form.find("input").removeClass(t.required);
    +    subscribing($form);
    +    return true;
    +  } else {
    +    jQuery('.email', $form).addClass(t.required).focus();
    +    info += t.valid_email;
    +    //jQuery(".subscribing", $form).remove();
    +    //jQuery(".subscribe", $form).show();
    +    alert(info);
    +    return false;
    +  }
    +}
    +
    +function validate_uninstall_from(form) 
    +{
    +  var $form = jQuery(form);
    +  var info = "";
    +  var email = jQuery.validation.getRule('email').check(jQuery('.email', $form).val());
    +  var comments = jQuery('#support_request_message').val();
    +  if (!email && !comments) {
    +    info = "Please type in the main issue or your comments or valid email.";
    +    //jQuery("#sending").remove();
    +    //jQuery("#send").show();
    +    alert(info);
    +    return false;
    +  }
    +  $form.find("input[name=magicwand]").val(t.antispam);
    +  sending();
    +  return true;
    +}
    +
    +function sending() {
    +  var $el = jQuery("#send");
    +  $el.hide();
    +  var sending = jQuery("<div/>").attr("id", "sending").addClass("sending").html('Sending message...');
    +  $el.after(sending);
    +}
    +
    +function validate_contact_from(form) 
    +{
    +  var info = "Please fill in ";
    +  var email = jQuery.validation.getRule('email').check(jQuery('#support_request_email').val());
    +  var msg = jQuery.validation.getRule('required').check(jQuery('#support_request_message').val());
    +  
    +  if (email && msg) {
    +    jQuery(form).find("input, textarea").removeClass(t.required);
    +    jQuery(form).find("input[name=magicwand]").val(t.antispam);
    +    sending();
    +    return true;
    +  } else {
    +    if (!email) { 
    +      info += t.valid_email; 
    +      jQuery('#support_request_email').addClass(t.required);
    +      jQuery('#support_request_email').focus();
    +    }
    +    if (!email && !msg) { info += " and "; }
    +    if (!msg) { 
    +      info += t.message;
    +      jQuery('#support_request_message').addClass(t.required);
    +      if (email) jQuery('#support_request_message').focus();
    +     }
    +    info += ".";
    +    //jQuery("#sending").remove();
    +    //jQuery("#send").show();
    +    alert(info);
    +    return false;
    +  }
    +};
    +
    +function feedback_sent() 
    +{
    +  jQuery("#sending").remove();
    +  jQuery("#support_request_name").val("");
    +  jQuery("#support_request_email").val("");
    +  jQuery("#support_request_message").val("");
    +  var bar = jQuery("<div/>").addClass("sent-notice").html(t.thanks_for_message);
    +  jQuery("#send").after(bar);
    +};
    +
    +function why_uninstall_sent()
    +{
    +  jQuery("#sending").remove();
    +  var bar = jQuery("<div/>").addClass("sent-notice").html(t.thanks_for_why_uninstall);
    +  jQuery("#send").after(bar);
    +};
    +
    +function subscription_saved(formId)
    +{
    +  var $form = jQuery(formId);
    +  var subscribing = jQuery(".subscribing", $form);
    +  subscribing.addClass("subscribed").html(t.thank_you);
    +  jQuery(".email", $form).val("").blur();
    +  jQuery(".name", $form).val("");
    +  setTimeout(function() {
    +    subscribing.fadeOut(150, function() {
    +      jQuery(".subscribe", $form).fadeIn(150);
    +      subscribing.remove();
    +    });
    +  }, 7000);
    +};
    +
    +function download_subscription_saved(formId)
    +{
    +  parent.jQuery("#fancybox-outer").removeClass("fancybox-highlight");
    +  parent.jQuery.fancybox(t.thanks_for_subscription);
    +};
    +
    +function feedback_not_sent(msg)
    +{
    +  jQuery("#sending").remove();
    +  jQuery("#send").show();
    +  alert(msg);
    +};
    +
    +function subscription_not_saved(msg)
    +{
    +  jQuery(".subscribing").remove();
    +  jQuery(".subscribe").show();
    +  alert(msg);
    +};
    +
    +function order_feedback_sent(notice)
    +{
    +  jQuery.fancybox(t.order_thanks_for_message);
    +};
    +
    +function send_another()
    +{
    +  jQuery(".sent-notice").remove();
    +  jQuery("#send").show();
    +  jQuery("#support_request_name").focus();
    +};
    +
    +function order_send_another()
    +{
    +  jQuery("#show-contact-form").click();
    +};
    +
    +function close_fancybox()
    +{
    +  jQuery.fancybox.close();
    +};
    +
    +function rot13(str) {
    +	return str.replace(/[a-zA-Z]/g, function(c){
    +		return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);
    +	});
    +};
    +
    +function download_email(product_code) {
    +  setTimeout(function() { 
    +    jQuery.fancybox('<a/>', { 
    +      href: '/subscriptions/from_download/'+product_code, 
    +      type: 'iframe', 
    +      transitionIn: 'elastic',
    +      centerOnScroll: true,
    +      width: 600,
    +      height: 215,
    +      onStart: function() {
    +        jQuery("#fancybox-outer").addClass("fancybox-highlight");
    +      }, 
    +      onClosed: function() {
    +        jQuery("#fancybox-outer").removeClass("fancybox-highlight");
    +      }
    +    });
    +  }, 10);
    +}
    \ No newline at end of file
    diff --git a/javascripts/plugins/jquery.validation.js b/javascripts/plugins/jquery.validation.js
    new file mode 100644
    index 0000000..dfdc0c6
    --- /dev/null
    +++ b/javascripts/plugins/jquery.validation.js
    @@ -0,0 +1,49 @@
    +(function($) {
    +
    +    var validation = function() {
    +        
    +        var rules = {  // Private object
    +            
    +            email : {
    +               check: function(value) {
    +                   
    +                   if(value) {
    +                      var pattern = /^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}$/;
    +                       return testValue(value, pattern);
    +                   }
    +                   return false;
    +               },
    +               msg : ""
    +            },
    +            required : {
    +                
    +               check: function(value) {
    +
    +                   if(value) {
    +                       return true;
    +                   }
    +                   else {
    +                       return false;
    +                   }
    +               },
    +               msg : ""
    +            }
    +        }
    +        var testValue = function(value, pattern) {   // Private Method
    +            return pattern.test(value);
    +        }
    +        return { // Public methods
    +            
    +            addRule : function(name, rule) {
    +
    +                rules[name] = rule;
    +            },
    +            getRule : function(name) {
    +
    +                return rules[name];
    +            }
    +        }
    +    }
    +    //A new instance of our object in the jQuery namespace.
    +    $.validation = new validation();
    +})(jQuery); 
    \ No newline at end of file
    diff --git "a/pricing-licensing/\\\".html" "b/pricing-licensing/\\\".html"
    new file mode 100644
    index 0000000..04c2a1d
    --- /dev/null
    +++ "b/pricing-licensing/\\\".html"
    @@ -0,0 +1,580 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
    +  <head>
    +<!-- Google Tag Manager -->
    +<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    +new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    +j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    +'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    +})(window,document,'script','dataLayer','GTM-TMSFLB4');</script>
    +<!-- End Google Tag Manager -->
    +<script>
    +  function gainit()
    +  {
    +    ga('create', 'UA-16362539-4', 'auto');
    +    console.log('ga init');
    +  }
    +  window.onload=gainit;
    +</script>
    +    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    +<meta name="keywords" content="better listview, list view, listview, list view control, list view component, .net list view, list view replacement, list view alternative, improved list view, enhanced list view" />
    +<meta name="description" content="Better ListView is an alternative List View control - the ideal replacement for the regular .NET listview component. For WinForms C#/VB.net." />
    +<meta name="author" content="ComponentOwl" />
    +<meta http-equiv="Title" content="Better ListView for .NET (C#, VB) - Alternative list view component" />
    +<meta name="copyright" content="(c) 2010-2018 ComponentOwl" />
    +<meta name="distribution" content="Global" />
    +<meta name="rating" content="General" />
    +<meta name="robots" content="All" />
    +<meta http-equiv="Content-Language" content="en" />
    +<meta name="verify-v1" content="NK0H1gWia1vxGZ2Yhr59gsS0/P2/USBI1DVA18VkzjM=" />
    +<meta name="google-site-verification" content="O7Dwtzu5x_Mob9u98uxqpZ-_wCLGpEkx2IL0UYVQ4ac" />
    +<title>Better ListView for .NET (C#, VB) - Alternative list view component</title>
    +<link rel="alternate" type="application/rss+xml" title="Component Owl Feed: Latest releases, news and tips &amp; tricks from our blog" href="feeds.rss" />
    +<link rel="alternate" type="application/rss+xml" title="Component Owl's Comics: Latest comic strips for developers by Libor Tinka" href="comics.rss" />
    +    <link href="stylesheets/base_packaged.css%3F1455269822.css" media="screen" rel="stylesheet" type="text/css" />
    +    
    +  </head>
    +  <body>
    +<!-- Google Tag Manager (noscript) -->
    +<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TMSFLB4"
    +height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    +<!-- End Google Tag Manager (noscript) -->
    +    <div class="d-page">
    +
    +<div class="d-header d-placing">
    +  
    +  <ul class="d-menu">
    +    <li class=""><a href="index.html" class="menu-item">Home</a></li>
    +    <li class="active with-dropdown">
    +      <a href="better-listview.html" class="menu-item">Products</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 370px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          <div class="dropdown-category">WinForms Components</div>
    +          
    +            
    +            <a href="better-listview.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-32-1355160256.png?1355135056" /> Better ListView<br /><span class="subline">Ultimate ListView control for .NET</span></a>
    +          
    +            
    +            <a href="better-thumbnail-browser.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-thumbnail-browser-32-1355160281.png?1355135081" /> Better Thumbnail Browser<br /><span class="subline">Thumbnail loading and browsing control for .NET</span></a>
    +          
    +            
    +            <a href="better-splitbutton.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-splitbutton-32-1355160307.png?1355135107" /> Better SplitButton<br /><span class="subline">Free customizable dropdown button control</span></a>
    +          
    +            
    +            <a href="better-listview-express.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-express-32-1355160327.png?1355135127" /> Better ListView Express<br /><span class="subline">Free edition with less features</span></a>
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="">
    +      <a href="pricing-licensing/better-listview.html" class="menu-item">Purchase</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 330px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-listview.html" class="featured-item">Better ListView</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-thumbnail-browser.html" class="featured-item">Better Thumbnail Browser</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-splitbutton.html">Better SplitButton</a>
    +          
    +        
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class=""><a href="support.html" class="menu-item">Support</a></li>
    +    <li class=""><a href="articles.html" class="menu-item">Articles</a></li>
    +    <li class=""><a href="blog.html" class="menu-item">Blog</a></li>
    +    <li class=""><a href="comics/43.html" class="menu-item">Comics</a></li>
    +    <li class=""><a href="about-us.html" class="menu-item">About Us</a></li>
    +  </ul>
    +  <div class="d-logo">
    +    <a href="index.html" class="logoimg"><img alt="Component Owl" src="images/componentowl.gif%3F1455269978" /></a>
    +    <g:plusone size="medium" count="false" href="http://www.componentowl.com"></g:plusone>
    +  </div>
    +</div>
    +      
    +      
    +      
    +        <div class="d-placing">
    +          <div class="d-content-wrap">
    +            <div class="subpage product-content">
    +  <h1>Better ListView: Alternative list view control for .NET</h1>
    +  
    +  <p class="section-info">Ideal .NET WinForms (C#, VB.net) replacement list view component. More features, less limitations, fast and optimized.</p>
    +  
    +  <div class="sides">
    +    
    +    <div class="right">
    +      
    +    
    +
    +        
    +        
    +      <input id="tabs-initial-index" name="tabs-initial-index" type="hidden" value="-1" />
    +      
    +      <ul id="nav" class="nav">
    +        
    +        <li><a href="better-listview.html" class="current">Overview</a></li>
    +        
    +        <li><a href="better-listview/screenshots.html" class="">Screenshots</a></li>
    +        
    +        <li><a href="better-listview/comparison-table.html" class="">Comparison</a></li>
    +        
    +        <li><a href="better-listview/resources.html" class="">Resources</a></li>
    +        
    +        <li><a href="better-listview/story.html" class="">Story</a></li>
    +        
    +      </ul>
    +      
    +      <div id="nav-panel" class="nav-panel product-detail"><div class="features-page">
    +  <ul class="common">
    +        <li>Better ListView is a <strong>list view control for .NET Windows Forms</strong></li>
    +        <li>Designed as a replacement for the regular .NET list view control.</li>
    +        <li>Compatible with: Visual Studio 2015, 2013, 2012, 2010, 2008, 2005, with full designer support.</li>
    +        <li>For C#, Visual Basic .NET (VB.NET), managed C++, and other CLI languages.</li>
    +        <li>Compatible with .NET 4.5, .NET 4, .NET 3.5, .NET 3, .NET 2, and newer. Supports .NET Client Profile.</li>
    +        <li>Runs on Windows 10, 8, 7, Vista, 2003, XP, 2000, and newer, both 32-bit and 64-bit.</li>
    +        <li>Better ListView has <strong>more features and flexibility</strong>, always uses the <strong>current system theme</strong> (including <strong>Aero</strong> support), and <strong>removes limitations</strong> of the regular .NET list view control.</li>
    +        <li><strong>Minimum learning needed</strong>. Better ListView can be used just like the regular list view.</li>
    +        <li>Written in <strong>pure managed C# code</strong>. It is fast, <strong>light-weight</strong> and optimized for 10k+ items.</li>
    +        <li>Easy royalty-free deployment. Single DLL file that has just 250kB when compressed.</li>
    +		<li>The assembly is <strong><a href="http://www.nist.gov/itl/fipsinfo.cfm" target="_blank">FIPS-compliant</a></strong>, CLS-compliant, <strong>digitally signed</strong> and strongly named.</li>
    +        <li>Tested in the real world by thousands of users</li>
    +  </ul>
    +  
    +<div class="image"><img alt="Better ListView control" src="http://assets.componentowl.com/images/7/Overview Collage_original_1367470843.png?1367445643" /></div>
    +  
    +<h2>Extra features summary</h2>
    +
    +Better ListView is fast and flicker-free, supports hierarchical items, has improved grouping, better drag &amp; drop and item reordering support, better column headers, inbuilt sorting, multi-column sorting, better images support, context menus for column headers and items, embedded controls for editing support, automatic and custom sizing of items and images, thumbnails view, richer event data, item text formatting, XML and binary serialization, data-binding, owner-drawing options, better tooltips, powerful hit-test, improved usability, easy saving/loading of contents into file or string, multi-line items, and more.
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +Component Owl created <b>the one and only tool I don’t want to be without when it comes to software developing in Visual Studio</b>. Also, I’ve been working as software user/developer for the last 26 years, and <b>I have never before experienced a support that really goes the needed extra mile to make things work</b>, like the guys at Component Owl do.
    +</em></blockquote><strong>Göran Alfvén, Sweden</strong></div></div>
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +The control is <b>very easy and intuitive to use and is well documented</b>.
    +</em></blockquote><strong>DevProConnections.com Review</strong></div></div>
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +Better List View is <b>awesome</b>.
    +</em></blockquote><strong>Daniel N</strong></div></div>
    +
    +<h3>Hierarchical items</h3>
    +
    +You can create tree-like structures in Better ListView; inbuilt drag &amp; drop hierarchical reordering of items.
    +
    +<h3>Improved grouping</h3>
    +
    +Better grouping – customizable group headers look and behavior, collapsible, image support, context menu support, focusable, etc. Each group header can be customized individually.
    +
    +<h3>Save/load contents with 1 line of code</h3>
    +
    +You can save or load the contents of Better ListView in just 1 line of code, either to file or string. Both XML and binary serialization is supported.
    +
    +<h3>Double-buffered and flicker free</h3>
    +
    +Simply put, Better ListView is smooth. Regular listview requires multiple anti-flicker techniques, but you do not have to worry about that with Better ListView. Better ListView is optimized for 100k+ items.
    +
    +<h3>Column header images</h3>
    +
    +You can use images in column headers. Custom image sizes are supported.
    +
    +<div class="image"><img alt="Column Header Images" src="http://assets.componentowl.com/images/8/Column Header Images_original_1298620501.png?1298595301" /></div>
    +  
    +<h3>Sub-item images</h3>
    +
    +You can set images to list view sub-items. Regular list view allows you to set only one image per list view item, but Better ListView can show image for every sub-item (in every column).
    +
    +<h3>Image-List and Image Support</h3>
    +
    +Better ListView supports both image list, or individual image objects (System.Drawing.Image). Regular list view forces you to use ImageList object.
    +
    +<h3>Custom list view Image size</h3>
    +
    +You can use any image size in the list view. Better ListView can also automatically resize images with preserving aspect ratio.
    +  
    +<h3>Drag &amp; drop with insertion mark</h3>
    +
    +Highly customizable drag-drop for both internal and external drag-drop. You can use drop highlight or insertion mark drag drop modes.
    +  
    +<div class="image"><img alt="List View Item Reordering Mark Preview" src="http://assets.componentowl.com/images/21/List View Item Reordering Mark Preview_original_1298631798.png?1298606598" /></div>
    +  
    +<h3>List view item reordering</h3>
    +  
    +Better ListView has inbuilt item reordering and item drag &amp; drop inserting at the position specified by user. Drag &amp; drop preview is shown using an insertion mark.
    +  
    +<h3>Column-header reordering</h3>
    +  
    +Better ListView has inbuilt easy drag &amp; drop column header reordering that is much easier to use than in the regular list view. Insertion mark is shown, auto-scrolling is supported.
    +  
    +<div class="image"><img alt="Column Header Reordering With Insertion Mark" src="http://assets.componentowl.com/images/9/Column Header Reordering With Insertion Mark_original_1298621331.png?1298596131" /></div>
    +  
    +<h3>Auto-scroll for column header reordering and item reordering</h3>
    +
    +Better ListView has inbuilt auto-scrolling for column header and item reordering.
    +  
    +<h3>Column headers can be shown in all views</h3>
    +
    +Better ListView can display column headers in all views - Details, SmallIcons, LargeIcons, List, Tile, Thumbnails. This allows users to sort items in all views. Additionally, you can also hide the column headers even in the details view.
    +  
    +<div class="image"><img alt="Column Headers in LargeIcons View" src="http://assets.componentowl.com/images/10/Column Headers In LargeIcons View_original_1298622038.png?1298596838" /></div>
    +  
    +<h3>Thumbnails view mode</h3>
    +
    +Better ListView supports additional "thumbnails" view mode that allows you to view images of large sizes. The images are automatically and smoothly resized with preserved aspect ratio. You can define the maximum/minimum desired image sizes.
    +
    +<h3>Image shadows, borders and padding</h3>
    +All images in Better ListView can have border or shadow specified. You can also specify padding that gives you space for owner drawing (eg. overlay images). This can be used in all views.
    +  
    +Image shadows like in Windows 7 theme are supported. Windows Explorer uses very similar shadows for image thumbnails.
    +  
    +<div class="image"><img alt="ListView Image Shadows and Image Borders" src="http://assets.componentowl.com/images/11/ListView Image Shadows and Image Borders_original_1298622678.png?1298597478" /></div>
    +  
    +<h3>Multi-column sorting</h3>
    +
    +You can sort by multiple columns in Better ListView. Simply shift+click a secondary (or third, etc) column to add it to the current sort. Zero code needed. Additionally, the background of the primary (first) sort column can be highlighted.
    +  
    +<div class="image"><img alt="Multi Column Sort in List View" src="http://assets.componentowl.com/images/12/Multi Column Sort in List View_original_1298623013.png?1298597813" /></div>
    +  
    +<h3>Inbuilt sorting and natural sorting</h3>
    +  
    +Better ListView has inbuilt list view sorting that works out of the box. You no longer need to implement your own item comparer. If custom comparer is needed, you can inherit from the Better ListView comparer to save time.
    +  
    +<h3>Richer event data</h3>
    +  
    +Many events have richer event data that allow you to do extra operations or tell you extra useful information. The richer events include: AfterItemSort, BeforeDrag, BeforeItemSort, ColumnClick (allows you to cancel sort), DragDropException, DrawBackground, DrawColumnHeaderBackground, DrawColumnHeader, DrawItemBackground, DrawItem, HitTestChanged, ItemActivate (event data tells you how the item got activated - mouse, keyboard or code), ItemDrag, ItemDrop, ItemReorder, ItemSearch, LabelEdit, RequestEmebeddedControl.
    +
    +<h3>Checkboxes in all views</h3>
    +
    +You can have checkboxes in LargeIcons view, SmallIcons view, List view, Thumbnails view and of course also in the Details view.
    +  
    +<div class="image"><img alt="Checkboxes In LargeIcons View" src="http://assets.componentowl.com/images/13/Checkboxes In LargeIcons View_original_1298623385.png?1298598185" /></div>
    +  
    +<h3>Three state checkboxes</h3>
    +Three state checkboxes are supported in Better ListView:
    +  
    +<div class="image"><img alt="Three-State Checkboxes in List View" src="http://assets.componentowl.com/images/14/Three State Checkboxes in List View_original_1298624577.png?1298599377" /></div>
    +
    +<h3>Hide or show checkboxes of specific ListView Items</h3>
    +
    +You can hide checkbox for any ListViewItem. You can also show checkboxes only for specified items. All list items in Better ListView have "AllowShowCheckBox" property.
    +
    +<div class="image"><img alt="Show or hide checkboxes for specific listview items" src="http://assets.componentowl.com/images/23/show-or-hide-checkboxes-for-specific-listview-items_original_1299748307.png?1299723107" title="Show or hide checkboxes for specific listview items" /></div>
    +  
    +<h3>Powerful list view tooltips</h3>
    +
    +You can display tooltips for nearly any part of Better ListView - tooltips for items, sub-items, checkboxes, item images, sub-item images, column headers, column header images, column header borders, and even for custom areas (regions). Owner-drawn tooltips are supported.
    +  
    +<div class="image"><img alt="List View Regional Tooltips and Owner Drawn Tooltips" src="http://assets.componentowl.com/images/15/List View Tooltips Region And Owner Drawn Tooltips_original_1298632357.png?1298607157" /></div>
    +  
    +<h3>Uses current Windows theme</h3>
    +  
    +Instead of implementing custom, un-native look and feel, Better ListView always automatically fully uses the current system theme. It supports Aero as well. Better ListView always looks great and feels right to the user.
    + 
    +<h3>XML and binary serialization of everything</h3>
    +  
    +Every part of Better ListView (items, sub-items, column headers) can be both binary and XML serialized. You can easily XML serialize whole list view (or binary serialize) to save it to file or transfer items between controls. Standard ways of .NET serialization can be used (BinaryFormatter, XmlSerializer).
    +  
    +<h3>Owner drawing</h3>
    +
    +Better ListView allows you to draw over the client area, items and column headers. Contrary to .NET ListView, owner drawing is fully operational even when the system uses Aero theme. You can draw separately to background and foreground parts of Better ListView without worrying about proper drawing order. Owner drawing events provide rich data, including exact item state and areas of every item part.
    +  
    +<div class="image"><img alt="List View Owner Drawing Background Gradient" src="http://assets.componentowl.com/images/22/List View Owner Drawing Background Gradient_original_1298633053.png?1298607853" /></div>
    +
    +<h3>Multi-line items</h3>
    +
    +Better ListView supports multi-line items. Items with very long text can be displayed on multiple lines. Highly customizable and powerful: Focused items can have custom number of lines; hard line breaks supported as well. Foreground overlay "watermark" images are easily achievable using owner-drawing.
    +
    +<div class="image"><img src="http://assets.componentowl.com/screenshots/21/multi-line-items_original_1312133213.png?1312133213" alt="Multi-line items"></div>
    +  
    +<h3>Background image support</h3>
    +
    +Display background image in Better ListView easily using the BackgroundImage property. Many layouts (stretch, tile, none), alignments (top, bottom, left, right, center and combinations) are supported, as well as customizable opacity.
    +
    +<div class="image"><img alt="ListView Background Image" src="http://assets.componentowl.com/images/27/Background-Images_original_1326106027.png?1326080827" title="ListView Background Image" /></div>
    +
    +<h3>Context menu for column headers, list items, and empty area</h3>
    +
    +Better ListView supports 3 types of context menus: Column header context menu, list view items context menu, and empty area context menu (when right-clicking white space).
    +  
    +<div class="image"><img alt="Column Header Context Menu in List View" src="http://assets.componentowl.com/images/17/Column Header Context Menu in List View_original_1298721855.png?1298696655" /></div>
    +  
    +<h3>Advanced hit-test with detailed information</h3>
    +The hit test in Better ListView returns very detailed information. It tells you not only the location (Client Area, Sub-Item, Sub-Item Text, Sub-Item Image, Checkbox, Column Header Image, and many more), but it also tells you the state of the item, and part of the item (left or right).
    +
    +<div class="image"><img alt="Advanced Hit-Test With Detailed Information" src="http://assets.componentowl.com/images/26/Advanced-Hit-Test_original_1326105831.png?1326080631" title="Advanced Hit-Test With Detailed Information" /></div>
    +
    +<h3>Customizable search-by-typing</h3>
    +
    +Better ListView has excellent customization functionality for find-as-you-type item searching. The search modes include: Prefix (searchs from beginning of items), Substring (search any part of item text), Prefix + Substring, or Disabled. Additionally, search options include: Case sensitive, search first word only, play sound when item not found, prefer prefixes, search whole words. You can also restrict the search to only certain columns. You can also call "FindItemsWithText" function to find items from code.
    +
    +<h3>Display text when the list view is empty</h3>
    +You can display a gray text centered in the list view if it's empty to hint or educate users. This will make your software more user friendly.
    +  
    +<div class="image"><img alt="Show Text When List View is Empty" src="http://assets.componentowl.com/images/18/Show Text When List View is Empty_original_1298629916.png?1298604716" /></div>
    +  
    +<h3>Embed controls for item editing</h3>
    +Inbuilt in-line editing support includes label edit, combobox edit, date picker edit. You can also embed any custom control for in-line editing. Sub-item editing is supported. Highly customizable.
    +  
    +<div class="image"><img alt="Custom Embedded Control in List View for Editing" src="http://assets.componentowl.com/images/19/Custom Embedded Control in List View for Editing_original_1298630263.png?1298605063" /></div>
    +  
    +<h3>ListView item text formatting</h3>
    +
    +Supports both text trimming and auto-ellipsis for text that's too long. You can choose from: TrimCharacter, TrimWord, EllipsisCharacter, EllipsisWord, EllipsisPath (for file paths). Column header text can be broken into multiple lines.
    +
    +<h3>Focusable ListView sub-items and groups</h3>
    +
    +Focus sub-items or groups in Better ListView easily with keyboard. Just use the arrow keys. (This is impossible with the regular .NET ListView)
    +<div class="image"><img alt="Focusable sub-items in Better ListView" src="http://assets.componentowl.com/images/25/focus-list-view-sub-items_original_1313674098.png?1313648898" title="Focusable sub-items in Better ListView" /></div>
    +
    +<h3>Automatic list view layout</h3>
    +
    +Better ListView can auto-size item images, item text, column header images, column header text.
    +  
    +<h3>Custom list view item size</h3>
    +
    +You can set custom sizes for item text area and item images. You can also set custom size for column header text area and column header images. (Text area size is different from font size, text area size basically defines the size of the list view item.) This enables you to make tiny/huge column headers or list view items.
    +  
    +<div class="image"><img alt="Custom Item Size in List View" src="http://assets.componentowl.com/images/20/Custom Item Size in List View_original_1298630739.png?1298605539" /></div>
    +  
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +It's an odd thing when you're inspired by a form component, but Component Owl 
    +with their Better ListView has done it. Love its native feel.
    +</em></blockquote><strong>Daniel N, USA</strong></div></div>
    +
    +  <h2>More advantages of our improved list view component:</h2>
    +  <ul class="common">
    +        <li><strong>Developer friendly</strong>: All classes and properties are as similar to the regular list view as possible. Everything is intuitive, very little learning is needed. You can use Better ListView immediately. <strong>Save time and ship sooner</strong>.</li>
    +        <li><strong>Better ListView has improved usability and fixed behavior</strong>. All Windows users are familiar with the list view used in Windows Explorer. Better ListView mimicks behavior and look &amp; feel of the Windows Explorer list view as much as possible to leverage the existing user knowledge. <strong>Using Better ListView is pleasant for users.</strong> Many other list view components implement custom look and behavior and can oftentimes downright frustrate users (many controls don't even support mouse-wheel scrolling!) This doesn't happen with Better ListView.</li>
    +        <li><strong>Guaranteed support and continued development</strong>: Better ListView is developed as a joint-venture of two software companies that use Better ListView in their main products (popular <strong><a href="http://www.dextronet.com/swift-to-do-list-software" target="_blank">Swift To-Do List</a></strong> and <strong><a href="http://www.imagingshop.com" target="_blank">ImagingShop</a></strong>). These applications are used by thousands of users daily. This is your guarantee that Better ListView will be supported and developed in the future.</li>
    +        <li><strong>Tested in real world applications by thousands of users</strong>: Because Better ListView is used in professional consumer desktop software applications - Swift To-Do List and ImagingShop, thousands of users work with Better ListView every day. Although we use unit tests that cover most of code, and do thorough inhouse testing, this is your true guarantee that it is tested thoroughly in the real world. It is <strong>extremely stable</strong>.</li>
    +        <li>Better ListView does <strong>not</strong> inherit from the regular .NET list view. It is written in pure managed C# code and is flexible, light weight, and fast. Extensions of the regular .net list view only go so far. Better ListView goes further. Soure code licenses are also available for ultimate customization.</li>
    +  </ul>
    +
    +<div class="testimonial-intext"><div class="testimonial-wrap"><blockquote><em>
    +In addition to creating a new List View control to incorporate <b>broader flexibility and functionality</b>, Better ListView could also be called <b>Fixed ListView</b>, as it corrects a number of annoying problems with the standard List View that Microsoft delivers to Visual Studio customers.
    +</em></blockquote><strong>DevProConnections.com Review</strong></div></div>
    +
    +</div></div>
    +      
    +        
    +        
    +    
    +    
    +    </div>
    +    
    +    <div class="left">
    +      
    +      <div class="buttons-box">
    +        <a onclick="ga('send', 'event', 'trial', 'click');" data-sumome-listbuilder-id="4016d967-e098-487d-a20e-da328d2345df" class="standard-download image-link">Download Free Trial - With sample projects</a>
    +          <a href="pricing-licensing/better-listview.html" class="standard-buy image-link">See Pricing &amp; Licensing</a>
    +        <p>Version 3.15 / May 27, 2015</p>
    +      </div>
    +      <div class="compatibility">
    +        <p><strong>Seamless integration with .NET 2.0 and higher</strong></p>
    +        <div class="documentation">
    +          <p><a href="better-listview/quick-start-guide.html" onclick="window.open(this.href); return false">See Quick Start Guide</a></p>
    +          <p><a href="better-listview/documentation.html" onclick="window.open(this.href); return false">See Documentation</a></p>
    +        
    +          <p><a href="better-listview/class-reference.html" onclick="window.open(this.href); return false">See Class Reference</a></p>
    +        
    +        </div>
    +      </div>
    +      
    +  
    +    
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/15/blv-overview_original_1326499754.png?1326474554" class="screenshot" title="Better ListView control"><img alt="Better ListView" src="http://assets.componentowl.com/screenshots/15/blv-overview_thumb_1326499754.png?1326474554" /></a></p>
    +      </div>
    +      <div class="newsletter">
    +  <form action="http://www.componentowl.com/subscriptions" class="new_subscription" id="new_subscription_product" method="post" onsubmit="if (!validate_newsletter_form(this)) return false; jQuery.ajax({data:jQuery.param(jQuery(this).serializeArray()) + '&amp;authenticity_token=' + encodeURIComponent('dJeFtbWrARc0arEomU+SG+XtypwJr2F4Kc9v14woStM='), dataType:'script', type:'post', url:'/subscriptions'}); return false;"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="dJeFtbWrARc0arEomU+SG+XtypwJr2F4Kc9v14woStM=" /></div>  <input id="subscription_subscription_location_id" name="subscription[subscription_location_id]" type="hidden" value="512994065" />
    +  <input id="form_id" name="form_id" type="hidden" value="#new_subscription_product" />  
    +  <strong>Receive product updates<br />and news via email:</strong>
    +    <div><input class="email inline-label" id="product-newsletter-email" name="subscription[email]" size="30" type="text" value="Your Email" /></div>
    +    <div id="product-newsleter-lists" class="subscription-lists-ct" style="display: none"><input name="subscription[subscription_list_ids][]" type="hidden" value="970100327" />
    +<input name="subscription[subscription_list_ids][]" type="hidden" value="1009842129" /></div>
    +    <span class="dbtn-c subscribe dbtn-small" id="send"><span class="dbtn-w"><input class="dbtn" name="commit" type="submit" value="Subscribe" /></span></span>
    +  </form></div>
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/16/thumbnails_original_1312133021.png?1312107821" class="screenshot" title="Image thumbnails in groups"><img alt="Thumbnails" src="http://assets.componentowl.com/screenshots/16/thumbnails_thumb_1312133021.png?1312107821" /></a></p>
    +      </div>
    +      
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/21/multi-line-items_original_1312133213.png?1312108013" class="screenshot" title="Items with multi-line text"><img alt="Multi-line Items" src="http://assets.componentowl.com/screenshots/21/multi-line-items_thumb_1312133213.png?1312108013" /></a></p>
    +      </div>
    +      
    +    
    +      <div class="screenshot">
    +        <p><a href="http://assets.componentowl.com/screenshots/18/betterlistview-tree-hierarchy_original_1313676477.png?1313651277" class="screenshot" title="Items organized in a tree-like hierarchy"><img alt="Item Hierarchy" src="http://assets.componentowl.com/screenshots/18/betterlistview-tree-hierarchy_thumb_1313676477.png?1313651277" /></a></p>
    +      </div>
    +      
    +    
    +      
    +    
    +      <div class="small-button-ct">
    +        <a href="better-listview/screenshots.html" class="small-button"><span>More Screenshots</span></a>
    +      </div>
    +    
    +    
    +    
    +    
    +  
    +      
    +    </div>
    +    
    +  </div>
    +  
    +  <div class="buttons-wrap">
    +    <div class="buttons">
    +      <a onclick="ga('send', 'event', 'trial', 'click');" data-sumome-listbuilder-id="4016d967-e098-487d-a20e-da328d2345df" class="standard-download image-link">Download Free Trial - With sample projects</a>
    +      
    +        <a href="pricing-licensing/better-listview.html" class="standard-buy image-link">See Pricing &amp; Licensing</a>
    +      
    +    </div>
    +  </div>
    +  
    +</div>
    +
    +<div id="screenshot-buttons" style="display: none">
    +  <div class="buttons">
    +    <a href="betterlistview.exe" class="small-download image-link" onclick="download_email('better-listview');">Free Download</a>
    +    <a href="pricing-licensing/better-listview.html" class="small-buy image-link">See Pricing &amp; Licensing</a>
    +  </div>
    +</div>
    +          </div>
    +        </div>
    +      
    +      
    +      
    +      <div class="d-footer">
    +  <div class="d-placing">
    +    
    +    <div class="left">
    +      <div class="latest-posts">
    +        <h3 class="latest_from_blog"><a href="blog.html">Latest From Our Blog</a></h3>
    +        
    +          <h4><a href="blog/index.html%3Fp=927.html">Activation issues and how to solve them</a></h4>
    +          <div class="post-info">Wednesday, 01 March 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=921.html">The Three Main Advantages Better ListView has Over the Classic .NET Framework</a></h4>
    +          <div class="post-info">Thursday, 09 February 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=914.html">BLV and Internet Explorer</a></h4>
    +          <div class="post-info">Sunday, 13 November 2016</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=906.html">Centering Images in Better ListView Sub-items</a></h4>
    +          <div class="post-info">Wednesday, 06 August 2014</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=901.html">Sub-item Check Boxes in Better ListView</a></h4>
    +          <div class="post-info">Sunday, 06 July 2014</div>
    +        
    +      </div>
    +      <div class="other-posts"><a href="blog.html">See more posts &raquo;</a></div>
    +    </div>
    +    
    +    <div class="right">
    +      <div class="news">
    +        <ul class="links">
    +          <li><a href="feeds.rss" class="rss">Subscribe to our RSS</a></li>
    +          <li><a href="http://twitter.com/ComponentOwl" class="twitter">Follow us on twitter</a></li>
    +        </ul>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistview.exe" onclick="download_email('better-listview');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better SplitButton 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="bettersplitbutton.exe" onclick="download_email('better-splitbutton');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better Thumbnail Browser 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterthumbnailbrowser.exe" onclick="download_email('better-thumbnail-browser');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item last-item">
    +          <div class="date">08<span>Apr</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.14.0 released!</h4>
    +            <p>
    +              
    +                <a href="better-listview-express/releases%3Fsince=3.14.0.html">See what's new</a>
    +                or
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +      </div>
    +    </div>
    +    
    +  </div>
    +  <div class="d-placing">
    +    <hr />
    +    <div class="copy"><div class="social"><a href="support.html" class="feedback">Contact Us (Feedback)</a> <span>|</span> <a href="feeds.rss" class="rss">RSS</a> <span>|</span> <a href="https://twitter.com/ComponentOwl" class="twitter">Twitter</a> <span>|</span> <a href="sitemap.html" class="sitemap">Sitemap</a> <span>|</span> Our <a href="index.html" class="stdl">task management software</a> that uses Better ListView</div>
    +Copyright &copy; 2021 ComponentOwl.com, All rights reserved. Read our <a href="eula.html">EULA</a>, <a href="disclaimer.html">Disclaimer</a> and <a href="privacy-policy.html">Privacy Policy</a>.<br /></div>
    +  </div>
    +  
    +</div>
    +      
    +    </div>
    +    
    +    <script src="javascripts/app_packaged.js%3F1455269826" type="text/javascript"></script>
    +<script async>(function(s,u,m,o,j,v){j=u.createElement(m);v=u.getElementsByTagName(m)[0];j.async=1;j.src=o;j.dataset.sumoSiteId='854b5e00f297990012cc230023375a00787c0000216621002775a800d79ad500';v.parentNode.insertBefore(j,v)})(window,document,'script','//load.sumo.com/');</script>
    +  </body>
    +</html>
    diff --git a/pricing-licensing/better-listview.html b/pricing-licensing/better-listview.html
    new file mode 100644
    index 0000000..940c6ec
    --- /dev/null
    +++ b/pricing-licensing/better-listview.html
    @@ -0,0 +1,394 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    +<meta name="keywords" content="buy .NET controls, buy list view, purchase list view, Better ListView purchase, buy Better ListView, order Better ListView, Better ListView pricing, Better ListView store, Component Owl store" />
    +<meta name="description" content="Purchase and view pricing for Better ListView and other controls by Component Owl." />
    +<meta name="author" content="Dextronet" />
    +<meta http-equiv="Title" content="Purchase Better ListView, pricing and licensing information" />
    +<meta name="copyright" content="(c) 2010-2018 Dextronet" />
    +<meta name="distribution" content="Global" />
    +<meta name="rating" content="General" />
    +<meta name="robots" content="All" />
    +<meta http-equiv="Content-Language" content="en" />
    +<meta name="verify-v1" content="NK0H1gWia1vxGZ2Yhr59gsS0/P2/USBI1DVA18VkzjM=" />
    +<meta name="google-site-verification" content="O7Dwtzu5x_Mob9u98uxqpZ-_wCLGpEkx2IL0UYVQ4ac" />
    +<title>Purchase Better ListView, pricing and licensing information</title>
    +<link rel="alternate" type="application/rss+xml" title="Component Owl Feed: Latest releases, news and tips &amp; tricks from our blog" href="../feeds.rss" />
    +<link rel="alternate" type="application/rss+xml" title="Component Owl's Comics: Latest comic strips for developers by Libor Tinka" href="../comics.rss" />
    +    <link href="../stylesheets/base_packaged.css%3F1455269822.css" media="screen" rel="stylesheet" type="text/css" />
    +    
    +  </head>
    +  <body>
    +  
    +    <div class="d-page">
    +      
    +      <script type="text/javascript">
    +//<![CDATA[
    +var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_email":"a valid email","thanks_for_why_uninstall":"Thank you very much for your feedback!","thank_you":"Thank you!","current_email":"valid current email","thanks_for_subscription":"<div class=\"sent-saved-notice\">Thank You for your subscription!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","message":"message","required":"required","download_in_progress":"Your download should be in progress...","your_full_name":"your full name","order_thanks_for_message":"<div class=\"sent-saved-notice\">Thank you very much for your message!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","thanks_for_message":"Thank you very much for your message!<br /><a href="http://www.componentowl.com/pricing-licensing/\&quot;#\"" onclick=\"send_another(); return false;\">Send Another Message</a>"}
    +//]]>
    +</script>
    +
    +<div class="d-header d-placing">
    +  
    +  <ul class="d-menu">
    +    <li class=""><a href="../index.html" class="menu-item">Home</a></li>
    +    <li class=" with-dropdown">
    +      <a href="../better-listview.html" class="menu-item">Products</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 370px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          <div class="dropdown-category">WinForms Components</div>
    +          
    +            
    +            <a href="../better-listview.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-32-1355160256.png?1355135056" /> Better ListView<br /><span class="subline">Ultimate ListView control for .NET</span></a>
    +          
    +            
    +            <a href="../better-thumbnail-browser.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-thumbnail-browser-32-1355160281.png?1355135081" /> Better Thumbnail Browser<br /><span class="subline">Thumbnail loading and browsing control for .NET</span></a>
    +          
    +            
    +            <a href="../better-splitbutton.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-splitbutton-32-1355160307.png?1355135107" /> Better SplitButton<br /><span class="subline">Free customizable dropdown button control</span></a>
    +          
    +            
    +            <a href="../better-listview-express.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-express-32-1355160327.png?1355135127" /> Better ListView Express<br /><span class="subline">Free edition with less features</span></a>
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="active">
    +      <a href="better-listview.html" class="menu-item">Purchase</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 330px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          
    +            
    +            <a href="better-listview.html" class="featured-item">Better ListView</a>
    +          
    +        
    +          
    +            
    +            <a href="better-thumbnail-browser.html" class="featured-item">Better Thumbnail Browser</a>
    +          
    +        
    +          
    +            
    +            <a href="better-splitbutton.html">Better SplitButton</a>
    +          
    +        
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class=""><a href="../support.html" class="menu-item">Support</a></li>
    +    <li class=""><a href="../articles.html" class="menu-item">Articles</a></li>
    +    <li class=""><a href="../blog.html" class="menu-item">Blog</a></li>
    +    <li class=""><a href="../comics/43.html" class="menu-item">Comics</a></li>
    +    <li class=""><a href="../about-us.html" class="menu-item">About Us</a></li>
    +  </ul>
    +  <div class="d-logo">
    +    <a href="../index.html" class="logoimg"><img alt="Component Owl" src="../images/componentowl.gif%3F1455269978" /></a>
    +    <g:plusone size="medium" count="false" href="http://www.componentowl.com"></g:plusone>
    +  </div>
    +</div>
    +      
    +      
    +      
    +        <div class="d-placing">
    +          <div class="d-content-wrap">
    +            <div class="order-content">
    +  
    +  <h1>Licensing &amp; pricing for Better ListView</h1>
    +<p class="section-info">Purchase the ideal replacement component for .NET ListView.</p>
    +
    +<ul id="buy-nav" class="nav">
    +  <li><a href="better-listview.html" class="current">Buy new licenses</a></li>
    +  <li><a href="better-listview.html">Renew license</a></li>
    +</ul>
    +
    +<div id="buy-panels">
    +  <div class="panel" style="display: none">
    +    
    +    <form action="https://secure.bmtmicro.com/servlets/Orders.ShoppingCart" method="get">
    +      <input id="CID" name="CID" type="hidden" value="1830/12" />
    +      <input id="CLR" name="CLR" type="hidden" value="0" />
    +      <input class="product-id" id="PRODUCTID" name="PRODUCTID" type="hidden" value="" />
    +    
    +      <table cellspacing="0">
    +        <tr>
    +          <th colspan="3">Single developer licenses</th>
    +        </tr>
    +        <tr>
    +          <td>Single developer license with 1 year subscription</td>
    +          <td class="price">$345</td>
    +          <td class="buy"><input class="buy" data-value="18300042" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <th colspan="3">5 developers licenses</th>
    +        </tr>
    +        <tr>
    +          <td>5 developer license with 1 year subscription</td>
    +          <td class="price">$995</td>
    +          <td class="buy"><input class="buy" data-value="18300044" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <th colspan="3">Site licenses - use at 1 site (office or building)</th>
    +        </tr>
    +        <tr>
    +          <td>Site license with 1 year subscription</td>
    +          <td class="price">$1995</td>
    +          <td class="buy"><input class="buy" data-value="18300046" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <td>Site license with source code and 1 year subscription</td>
    +          <td class="price">$3995</td>
    +          <td class="buy"><input class="buy" data-value="18300047" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <th colspan="3">Enterprise license - use world-wide at unlimited sites</th>
    +        </tr>
    +        <tr>
    +          <td>Enterprise license with source code and 1 year subscription</td>
    +          <td class="price">$8995</td>
    +          <td class="buy"><input class="buy" data-value="18300048" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +      </table>
    +      
    +    </form>
    +  
    +  </div>
    +  
    +  <div class="panel" style="display: none">
    +    
    +    <form action="https://secure.bmtmicro.com/servlets/Orders.ShoppingCart" method="get">
    +      <input id="CID" name="CID" type="hidden" value="1830/12" />
    +      <input id="CLR" name="CLR" type="hidden" value="0" />
    +      <input class="product-id" id="PRODUCTID" name="PRODUCTID" type="hidden" value="" />
    +
    +      <table cellspacing="0">
    +        <tr>
    +          <th colspan="3">Single developer licenses</th>
    +        </tr>
    +        <tr>
    +          <td>Renew single developer 1 year subscription</td>
    +          <td class="price">$138</td>
    +          <td class="buy"><input class="renew" data-value="18300049" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <th colspan="3">5 developers licenses</th>
    +        </tr>
    +        <tr>
    +          <td>Renew 5 developer 1 year subscription</td>
    +          <td class="price">$398</td>
    +          <td class="buy"><input class="renew" data-value="18300051" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <th colspan="3">Site licenses - use at 1 site (office or building)</th>
    +        </tr>
    +        <tr>
    +          <td>Renew site license 1 year subscription</td>
    +          <td class="price">$798</td>
    +          <td class="buy"><input class="renew" data-value="18300053" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <td>Renews site license 1 year subscription with source code</td>
    +          <td class="price">$1598</td>
    +          <td class="buy"><input class="renew" data-value="18300054" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <th colspan="3">Enterprise license - use world-wide at unlimited sites</th>
    +        </tr>
    +        <tr>
    +          <td>Renew enterprise license 1 year subscription with source code</td>
    +          <td class="price">$3598</td>
    +          <td class="buy"><input class="renew" data-value="18300055" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +      </table>
    +      
    +    </form>
    +    
    +  </div>
    +</div>
    +
    +<div class="licenses-info">
    +  
    +  <div class="block">
    +    <p>All licenses are:</p>
    +    <ul class="common">
    +      <li>Life-time (non-expiring)</li>
    +      <li>Royalty free</li>
    +    </ul>
    +  </div>
    +  
    +  <div class="block last">
    +    <p>Subscription gets you:</p>
    +    <ul class="common">
    +      <li>Support</li>
    +      <li>Updates</li>
    +    </ul>
    +  </div>
    + 
    +  
    +</div>
    +
    +<div class="licenses-info">
    +
    +    <p>What license do I need?</p>
    +    <ul class="common">
    +      <li>If only 1 developer works on your current and future projects, then the "Single developer license" is for you.</li>
    +      <li>If 2-5 developers works on your current and future projects, then the "5 developer license" is for you.</li>
    +      <li>If more than 5 developers work on your current and future projects, then the "Site license" is for you.</li>
    +      <li>If you have multiple teams in different locations, then the "Enterprise license" is for you.</li>
    +    </ul> 
    +  
    +</div>
    +
    +  
    +  
    +</div>
    +
    +          </div>
    +        </div>
    +      
    +      
    +      
    +      <div class="d-footer">
    +  <div class="d-placing">
    +    
    +    <div class="left">
    +      <div class="latest-posts">
    +        <h3 class="latest_from_blog"><a href="../blog.html">Latest From Our Blog</a></h3>
    +        
    +          <h4><a href="../blog/index.html%3Fp=927.html">Activation issues and how to solve them</a></h4>
    +          <div class="post-info">Wednesday, 01 March 2017</div>
    +        
    +          <h4><a href="../blog/index.html%3Fp=921.html">The Three Main Advantages Better ListView has Over the Classic .NET Framework</a></h4>
    +          <div class="post-info">Thursday, 09 February 2017</div>
    +        
    +          <h4><a href="../blog/index.html%3Fp=914.html">BLV and Internet Explorer</a></h4>
    +          <div class="post-info">Sunday, 13 November 2016</div>
    +        
    +          <h4><a href="../blog/index.html%3Fp=906.html">Centering Images in Better ListView Sub-items</a></h4>
    +          <div class="post-info">Wednesday, 06 August 2014</div>
    +        
    +          <h4><a href="../blog/index.html%3Fp=901.html">Sub-item Check Boxes in Better ListView</a></h4>
    +          <div class="post-info">Sunday, 06 July 2014</div>
    +        
    +      </div>
    +      <div class="other-posts"><a href="../blog.html">See more posts &raquo;</a></div>
    +    </div>
    +    
    +    <div class="right">
    +      <div class="news">
    +        <ul class="links">
    +          <li><a href="../feeds.rss" class="rss">Subscribe to our RSS</a></li>
    +          <li><a href="http://twitter.com/ComponentOwl" class="twitter">Follow us on twitter</a></li>
    +        </ul>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="../betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="../betterlistview.exe" onclick="download_email('better-listview');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better SplitButton 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="../bettersplitbutton.exe" onclick="download_email('better-splitbutton');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better Thumbnail Browser 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="../betterthumbnailbrowser.exe" onclick="download_email('better-thumbnail-browser');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item last-item">
    +          <div class="date">08<span>Apr</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.14.0 released!</h4>
    +            <p>
    +              
    +                <a href="../better-listview-express/releases%3Fsince=3.14.0.html">See what's new</a>
    +                or
    +              
    +              <a href="../betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +      </div>
    +    </div>
    +    
    +  </div>
    +  <div class="d-placing">
    +    <hr />
    +    <div class="copy"><div class="social"><a href="../support.html" class="feedback">Contact Us (Feedback)</a> <span>|</span> <a href="../feeds.rss" class="rss">RSS</a> <span>|</span> <a href="http://twitter.com/ComponentOwl" class="twitter">Twitter</a> <span>|</span> <a href="../sitemap.html" class="sitemap">Sitemap</a> <span>|</span> Our <a href="../index.html" class="stdl">task management software</a> that uses Better ListView</div>
    +Copyright &copy; 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our <a href="../eula.html">EULA</a>, <a href="../disclaimer.html">Disclaimer</a> and <a href="../privacy-policy.html">Privacy Policy</a>.<br /></div>
    +  </div>
    +  
    +</div>
    +      
    +    </div>
    +    
    +    <script src="../javascripts/app_packaged.js%3F1455269826" type="text/javascript"></script>
    +    <script type="text/javascript">
    +
    +  var _gaq = _gaq || [];
    +  _gaq.push(['_setAccount', 'UA-16362539-4']);
    +  _gaq.push(['_trackPageview']);
    +
    +  (function() {
    +    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    +    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    +    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    +  })();
    +
    +</script>
    +<script src="http://load.sumome.com/" data-sumo-site-id="854b5e00f297990012cc230023375a00787c0000216621002775a800d79ad500" async="async"></script>
    +    
    +    <!-- Place this tag after the last plusone tag -->
    +    <script type="text/javascript">
    +      (function() {
    +        var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    +        po.src = 'https://apis.google.com/js/plusone.js';
    +        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
    +      })();
    +    </script>
    +  
    +  </body>
    +</html>
    diff --git a/pricing-licensing/better-splitbutton.html b/pricing-licensing/better-splitbutton.html
    new file mode 100644
    index 0000000..4de2ef7
    --- /dev/null
    +++ b/pricing-licensing/better-splitbutton.html
    @@ -0,0 +1,2799 @@
    +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    +<html>
    +
    +<head>
    +
    +<!-- 
    +
    +BEGIN Import.CommonHeaders
    +
    +//-->
    +
    +<title>Secure Order through BMT Micro Ecommerce Partner of ComponentOwl (128-bit SSL Encryption)</title>
    +<meta http-equiv="Pragma" content="no-cache">
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    +<link rel="shortcut icon" href="https://secure.bmtmicro.com/ShoppingCart/01830/12/favicon.ico" />
    +<script language="javascript" type="text/javascript" src="https://secure.bmtmicro.com/servlets/System.Util"></script>
    + <style type="text/css">
    +<!--
    +
    +/*  Vendor CSS */
    +
    +html { height: 100%; }
    +body { height: 100%; margin: 0; padding: 0; font-size: 14px; font-family: 'trebuchet ms', sans-serif; background: #fff url(https://secure.bmtmicro.com/ShoppingCart/01830/12/img/bg.gif) top repeat-x; color: #000; text-align: center; }
    +a img { border: none; }
    +a { color: #825900; outline: none; }
    +a:hover, a:focus { color: #000; }
    +a:active { color: #ab7500; }
    +h1 { margin: 0 0 25px; padding: 0; }
    +input, select { font-size: 1.1em; }
    +
    +.steps { margin: 10px 0 20px; padding: 0; list-style-type: none; color: #8f772f; font-size: 11px; overflow: auto; width: 100%; }
    +.steps li { float: left; padding: 5px 20px 4px 25px; background: url(https://secure.bmtmicro.com/ShoppingCart/01830/12/img/steps-arrow.gif) 0 50% no-repeat; }
    +.steps .first { padding-left: 0; background: none; }
    +.steps .active { color: #574308; font-size: 16px; padding-top: 0; }
    +
    +#gb { position: relative; min-height: 100%; }
    +#logo { margin: auto; text-align: left; width: 900px; height: 48px; }
    +#logo .logo { display: block; float: left; margin: 12px 0 0 9px; }
    +#logo .link { float: right; line-height: 48px; font-size: 11px; margin-right: 14px; }
    +#menu { margin: auto; text-align: left; width: 902px; background: url(https://secure.bmtmicro.com/ShoppingCart/01830/12/img/menu-bg.gif); height: 32px; }
    +#menu .eb { float: right; height: 32px; width: 6px; background: url(https://secure.bmtmicro.com/ShoppingCart/01830/12/img/menu-bg.gif) 0 -64px no-repeat; }
    +#menu ul { float: left; margin: 0; padding: 0; list-style-type: none; background: url(https://secure.bmtmicro.com/ShoppingCart/01830/12/img/menu-bg.gif) 0 -32px no-repeat; }
    +#menu li { float: left; line-height: 32px; padding: 0 20px; font-size: 11px; }
    +#menu a { text-decoration: none; }
    +#products { margin: auto; overflow: auto; width: 900px; padding-bottom: 85px; text-align: left; background: url(https://secure.bmtmicro.com/ShoppingCart/01830/12/img/subpage-bg.jpg) 0 0 no-repeat; }
    +#bills { float: right; width: 180px; font-size: .85em; margin-top: 122px; text-align: center; padding: 15px 15px 0 28px; background: url(https://secure.bmtmicro.com/ShoppingCart/01830/12/img/side-bg.jpg) 0 0 no-repeat;  }
    +#contact-form { float: left; width: 630px; margin: 30px 0 0; padding-left: 30px; }
    +
    +#customerLogin { position: absolute; padding: 0px; text-align: center; border: 1px solid #808080; background-color: #fff; margin: 300px 20px 0px 350px;
    +  display: none; width: 400px; }
    +#handle { margin: 0px 0px 0px 0px; padding: 0px; width: 100%; color: #fff; background-color: #808080; font-weight: bold; text-align: left; line-height: 14pt; }
    +
    +.catcher { margin-bottom: 20px; border-bottom: 1px solid #d3eaff; }
    +.catcher p { line-height: 13px; padding-bottom: 15px; margin: 0; }
    +.catcher img { margin-bottom: 10px; }
    +.catcher h4 { padding-bottom: 8px; margin: 0; font-size: 1.1em; line-height: 16px; }
    +.moneyback h4 { padding-bottom: 20px; }
    +.aboutbmt { border-bottom: none; }
    +p.longtext { text-align: left; padding-left: 5px; padding-right: 5px; }
    +p.address { text-align: left; padding-left: 5px; }
    +img.middle { margin-right: 12px; }
    +img.last { margin-bottom: 25px; }
    +
    +
    +input[type=text], input[type=password], textarea, select { padding: 2px; border: 1px solid; -moz-border-radius: 2px; -webkit-border-radius: 2px; border-radius: 2px;
    +	background-color: #fff; border-color: #abadb3 #dbdfe6 #e3e9ef #e2e3ea;}
    +input[type=text]:focus, input[type=password]:hover, input[type=password]:focus, input[type=text]:hover, textarea:focus, textarea:hover, select:focus, select:hover {
    +  border-color: #5794bf #b7d5ea #c7e2f1 #c5daed;
    +}
    +.pad { padding-bottom: 8px; }
    +.pad input { margin-bottom: 3px; vertical-align: middle; }
    +td.address { padding-top: 2px; }
    +
    +h2 { margin: 0; padding: 2em 0 .7em; font-size: 1.5em; color: #000; font-weight: normal; }
    +h2.spad { padding-top: .3em; vertical-align: top; }
    +h2.lpad { padding-top: 1.2em; }
    +h2 img { vertical-align: middle; margin: 0 4px 4px 0; }
    +.product-table { border-collapse: collapse; }
    +.product-table th { text-align: left; padding: 2px 3px; color: #fff; background-color: #c1a045; border: 1px solid #c1a045; border-top: 0; border-bottom: 0; }
    +.product-table td { padding: 5px 5px; border: 1px solid #c1a045; background: #fafcfe url(https://secure.bmtmicro.com/ShoppingCart/01830/12/img/order-table-bg.png) repeat-x; }
    +.product-table .product { font-weight: bold; }
    +.product-table .number { text-align: right; width: 90px; }
    +.product-table .quantity { text-align: center; width: 70px; }
    +.product-table td.quantity { background: #fbebc0; }
    +.product-table .total { color: #4a7400; font-weight: bold; background-position: 100% 0; }
    +
    +.total-table { margin-top: 5px; }
    +.total-table .price { font-size: 1.15em; padding: 3px; }
    +.total-table .price strong { color: #4a7400; }
    +.total-table .recalculate { padding-top: 5px; }
    +
    +.fieldssec { padding: 15px; border: 4px solid #e7d6a3; background: #fbf7eb; }
    +.license-to { padding-bottom: 10px; }
    +.license-to label { padding-right: 20px; vertical-align: middle; }
    +.license-to .last { padding-right: 0; }
    +
    +fieldset { border: none; border-top: 1px solid #ccc; margin: 10px 0 0; padding: 0 0 5px 15px; }
    +legend { padding: 7px; font-weight: bold; color: #000; }
    +.lock { vertical-align: middle; margin-bottom: 5px; }
    +.secureorder { width: 240px; height: 43px; margin: 10px 0 30px; background: url(https://secure.bmtmicro.com/ShoppingCart/01830/12/img/secure_order.gif) 0 0 no-repeat; }
    +.secureorder:hover { background-position: 0 -43px; }
    +.secureorder:active { background-position: 0 -86px; }
    +.nopad { padding-bottom: 0; }
    +.note { font-size: 0.85em; color: #8f772f; }
    +.postrip { padding-bottom: 3px; }
    +
    +.footer { font-size: 11px; line-height: 18px; position: absolute; width: 100%; height: 60px; right: 0; bottom: 0; background: url(https://secure.bmtmicro.com/ShoppingCart/01830/12/img/footer-bg.gif) repeat-x; }
    +.align { margin: auto; width: 840px; padding-top: 13px; text-align: left; }
    +h2 { overflow: hidden; width: 100%; }
    +.heading { float: left; }
    +.currency { float: right; font-size: 12px; margin-top: 5px; }
    +.recalculate { padding-top: 5px; }
    +
    +.keyct { overflow: auto; width: 100%; }
    +.keyct pre { float: left; }
    +//-->
    +</style>
    +<script language="javascript" type="text/javascript">
    +<!--
    +
    +//
    +// util.js
    +function isWhitespace (c) {
    +    var whitespace = " \t\r\n\f";
    +    return (whitespace.indexOf (c) != -1);
    +    }
    +
    +function trim (str) {
    +    if (str != null) {
    +        var front = 0;
    +        var back = str.length;
    +        while ((front != back) && isWhitespace (str.charAt (front))) {
    +            front++;
    +            }
    +        while ((front != back) && isWhitespace (str.charAt (back - 1))) {
    +            back--;
    +            }
    +        str = str.substring (front, back);
    +        }
    +    return (str);
    +    }
    +
    +function isBlank (str) {
    +    if (str == null) {
    +        return (true);
    +        }
    +    for (var i = 0; i < str.length; i++) {        
    +        var c = str.charAt (i);
    +        if (!isWhitespace (c)) {
    +           return (false);
    +           }
    +        }
    +    return (true);
    +    }
    +
    +function isValidEmail (str) {
    +    if (str == null) {
    +        return (false);
    +        }
    +    str = trim (str);                        // Start by trimming off whitespace at both ends
    +    try {
    +        if (window.RegExp) {
    +            var tempStr = "a";  // First check that regular expression support is present
    +            var tempReg = new RegExp (tempStr);
    +            if (tempReg.test (tempStr)) {
    +                var re = new RegExp ("^\\s*[A-Za-z0-9!#$%&'*+\\/=?^_`{|}~]+[A-Za-z0-9!#$%&'*+\\/=?^_`{|}~-]*(?:\\.[A-Za-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*@(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\s*$");
    +                return (re.test (str));
    +                }
    +            }
    +        }
    +    catch (err) {
    +        }
    +    for (var i = 0; i < str.length; i++) {   // Check that the address does not contain whitespace
    +       var c = str.charAt (i);
    +       if (isWhitespace (c)) {
    +           return (false);
    +           }
    +       }
    +    return (str.indexOf (".") > 2) && (str.indexOf ("@") > 0);
    +    }
    +    
    +function isValidEmailList (str) {
    +   var valid = false;
    +   for (var begin = 0, end = 0; end != -1; begin = end + 1) {
    +      end = str.indexOf (' ', begin);
    +      if ((begin != end) && (begin != str.length)) {
    +         if (!(valid = isValidEmail ((end == -1) ? str.substring (begin) : str.substring (begin, end)))) {
    +            break;
    +            }
    +         }
    +      }
    +   return (valid);
    +   }         
    +
    +    
    +// Check for valid URL
    +
    +function startsWith (strA, strB) {
    +   if ((strA != null) && (strB != null) && (strA.length >= strB.length)) {
    +      return (strA.substr (0, strB.length) == strB);
    +      }
    +   return (false);
    +   }
    +
    +function isValidURL (str) {
    +   return (isBlank (str) || startsWith (str, "ftp://") || startsWith (str, "http://") || startsWith (str, "https://"));
    +   }
    +
    +
    +// Check string input
    +
    +function isStringLimtedToCharSet (s, cset) {
    +    for (var i = 0; i < s.length; i++) {
    +        if (cset.indexOf (s.charAt (i)) == -1) {
    +            return (false);
    +            }
    +        }
    +    return (true);
    +    }
    +
    +function isStringLimitedToHex (s) {
    +    return (isStringLimtedToCharSet (s, "0123456789ABCDEFabcdef"));
    +    }
    +
    +// Check against Armadillo Hardware Fingerprint format
    +
    +function isHardwareFP (fp) {
    +    return ((fp.length == 9) &&
    +            (fp != "0000-0000") &&
    +            isStringLimitedToHex (fp.substring (0, 4)) &&
    +            (fp.charAt (4) == "-") &&
    +            isStringLimitedToHex (fp.substring (5, 9)));
    +    }
    +
    +   
    +// checkdaterange.js
    +
    +function isDateInPast (date) {
    +   return (getDate (date) < getDate (makeDate ()));
    +   }
    +
    +function isDateToday (date) {
    +   return (getDate (date).valueOf() == getDate (makeDate ()).valueOf());
    +   }   
    +   
    +function isDigit (c) {
    +    var digits = "0123456789";
    +    return (digits.indexOf (c) != -1);
    +    }
    +function make2digits (num) {
    +   return (num >= 10 ? num : ("0" + num));
    +   }
    +
    +function formatDate (year, month, day) {
    +   return (year + "-" + make2digits (month) + "-" + make2digits (day));
    +   }
    +
    +function getDate (date) {
    +   var part = date.split ("-");
    +   return (new Date (parseInt (part[0], 10), parseInt (part[1], 10) - 1, parseInt (part[2], 10)));
    +   }
    +
    +function firstOfMonthDate () {
    +   var date = new Date ();
    +   return (formatDate (date.getFullYear (), date.getMonth () + 1, 1));
    +   }
    +
    +function fromDate () {
    +   var from = getCookieValue ("BMTMicro.Vendors.FromDate");
    +   var days = (from == null) ? 6 : parseInt(from);
    +   var date = new Date ();
    +   date.setDate(date.getDate()-days);
    +   return (formatDate (date.getFullYear (), date.getMonth () + 1, date.getDate ()));
    +   }
    +
    +function makeDate () {
    +   var date = new Date ();
    +   return (formatDate (date.getFullYear (), date.getMonth () + 1, date.getDate ()));
    +   }
    +
    +function makeFutureDate (days) {
    +   var date = new Date ();
    +   date = new Date (date.getTime() + days * 24 * 60 * 60 * 1000);
    +   return (formatDate (date.getFullYear (), date.getMonth () + 1, date.getDate ()));
    +   }
    +   
    +function checkDate (entryfield) {
    +   var date = entryfield.value;
    +   if (date.search (/^\d+-\d\d-\d\d$/) != 0) {
    +      alert ("Bad date format. Dates must be in ISO8601 (YYYY-MM-DD) format");
    +      }
    +   else {
    +      var part  = date.split ("-");
    +      var year  = parseInt (part[0], 10);
    +      var month = parseInt (part[1], 10);
    +      var day   = parseInt (part[2], 10);
    +      if ((year < 1990) || (year > 2100)) {        
    +         alert ("Year out of range");
    +         }
    +      else if ((month < 1) || (month > 12)) {
    +         alert ("Month out of range");
    +         }
    +      else if ((day < 1) || (day > 31)) {        
    +         alert ("Day out of range");
    +         }
    +      else {
    +         var monthDays = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
    +         if (((year % 4) == 0) == ((year % 100) == 0) == ((year % 400) == 0)) {
    +            monthDays[1]++;
    +            }
    +         if (day <= monthDays[month - 1]) {
    +            return (true);
    +            }
    +         var newDate = formatDate (year, month, monthDays[month - 1]);
    +         if (confirm ("\"" + date + "\" is not a valid date.\n\nWould you like to use \"" + newDate + "\" instead?")) {
    +            entryfield.value = newDate;
    +            return (true);
    +            }
    +         }
    +      }
    +   entryfield.focus ();
    +   return (false);
    +   }
    +
    +function checkDateRange (datefrom,dateto) {
    +   if (checkDate (datefrom) && checkDate (dateto)) {
    +      if (getDate (datefrom.value) <= getDate (dateto.value)) {
    +         return (true);
    +         }
    +      alert ("\"To\" date is before \"From\" date");
    +      (datefrom.type == "hidden" ? dateto : datefrom).focus ();
    +      }
    +   return (false);
    +   }
    +
    + 
    +function CheckDateRange (form) {
    +   return (checkDateRange (form.DATEFROM,form.DATETO));
    +   }
    +   
    +// location.js  
    +  
    +function getLocationValue (name) { 
    +   var loc = location.href; // We must NOT unescape here!
    +   var begin = loc.indexOf ('?'); 
    +   if (begin != -1) {
    +      begin = loc.indexOf (name + "=", begin); 
    +      if (begin != -1) { 
    +         begin += name.length + 1; 
    +         var end = loc.indexOf ('&', begin);
    +         if (end == -1) {
    +            end = loc.length;
    +            }
    +         return (unescape (loc.substring (begin, end)));
    +         } 
    +      }
    +   return (null); 
    +   }
    +
    +function getLocationValuesAsArray (name) {
    +   var valuearray = new Array ();
    +   var loc = location.href; // We must NOT unescape here!
    +   var begin = loc.indexOf ('?');
    +   if (begin != -1) {
    +      while ((begin = loc.indexOf (name + '=', begin)) != -1) {
    +         begin += name.length + 1; 
    +         var end = loc.indexOf ('&', begin);
    +         if (end == -1) {
    +            end = loc.length;
    +            }
    +         var value = unescape (loc.substring (begin, end));
    +         begin = end;
    +         // Resize array and insert new value
    +         var temparray = new Array (valuearray.length + 1);
    +         for (var i = 0; i < valuearray.length; i++) {
    +            temparray[i] = valuearray[i];
    +            }
    +         temparray[valuearray.length] = value;
    +         valuearray = temparray;
    +         }
    +      }
    +   return (valuearray); 
    +   }
    +
    +// cookie.js
    +
    +function encodeUTF8 (s) {
    +   return (unescape (encodeURIComponent (s)));
    +   }
    +           
    +function decodeUTF8 (s) {
    +   return (decodeURIComponent (escape (s)));
    +   }       
    +
    +function javaURLDecode (s) {
    +   // Decode a string encoded with javaURLEncode / java.net.URLEncode
    +   function unescapeChar (match) {
    +      return (String.fromCharCode (parseInt (match.substring (1), 0x10)));
    +      }
    +   return (decodeUTF8 (s.replace (/\+/g, ' ').replace (/%[0-9A-F][0-9A-F]/gi, unescapeChar)));
    +   }
    +   
    +function javaURLEncode (s) {
    +   // Encode a string in the same fashion as done in Java with java.net.URLEncode
    +   function escapeChar (match) {
    +      var charCode = match.charCodeAt (0);
    +      return ('%' + ((charCode >> 4).toString (0x10) + (charCode & 0x0F).toString (0x10)).toLowerCase ());
    +      }
    +   return (encodeUTF8 (s).replace (/[^0-9A-Z\.\-\*_ ]/gi, escapeChar).replace (/ /g, '+'));
    +   }
    +   
    +function getCookieValue (name) {
    +   var c = document.cookie;
    +   if (c.length != 0) { 
    +      var begin = c.indexOf (name + '='); 
    +      if (begin != -1) { 
    +         begin += name.length + 1; 
    +         var end = c.indexOf (';', begin);
    +         if (end == -1) {
    +            end = c.length;
    +            }
    +         return (javaURLDecode (c.substring (begin, end)));
    +         } 
    +      }
    +   return (null); 
    +   }
    +
    +function setCookieValue (name, value, expiredays) { 
    +   var ExpireDate = new Date ();
    +   ExpireDate.setTime (ExpireDate.getTime () + (expiredays * 24 * 3600 * 1000));
    +   document.cookie = name + "=" + javaURLEncode (value) + ((expiredays == null) ? "" : "; expires=" + ExpireDate.toGMTString ()) + "; path=/";
    +   }
    +
    +function deleteCookie (name) { 
    +   if (getCookieValue (name) != null) {
    +      document.cookie = name + "=; expires=Thu, 01-Jan-70 00:00:01 GMT; path=/";
    +      }
    +   } 
    + 
    +// affiliate.js
    +
    +function getAffiliateID (form) {
    +   // Not needed any more
    +   }   
    +  
    +// check that input in Price field does not contain dollar signs
    +  
    +function isValidDollarAmount (str) {
    +   var s = trim (str);
    +   if (s != null) {
    +       var decimalfound = false;
    +       var decimalcount = 0;
    +       for (var i = 0; i < s.length; i++) {        
    +           var c = s.charAt (i);
    +		   if ((c == '-') && (i == 0)) {
    +		       }
    +		   else if ((c == '.') && !decimalfound) {
    +               decimalfound = true;
    +               }
    +           else if (!isDigit (c) || (decimalcount == 2)) {
    +               return (false);
    +               }
    +           else if (decimalfound) {
    +               decimalcount++;
    +               }
    +           }
    +       }
    +   return (true);
    +   }
    +
    +function GetSelectorValue (selector) {
    +   return (selector.options[selector.selectedIndex].value);
    +   }
    +
    +function SetSelectorValue (selector, value) {
    +   for (var i = 0; i < selector.options.length; i++) {
    +       if (selector.options[i].value == value) {
    +           selector.selectedIndex = i;
    +           return (true);
    +           }
    +       }
    +   return (false);
    +   }
    +   
    +  // get referring information
    +  
    +function getReferral (form) {
    +   var referral = getLocationValue("referral");
    +   if (referral != null) {
    +      form.REFERRAL.value = referral; 
    +      }      
    +   }
    +  
    +// numbers or money only (myfield, e, true) accepts decimal false does not
    +
    +function numbersOnly (myfield, e, dec) {
    +   var key = 0;
    +   if (window.event) {
    +      key = window.event.keyCode;
    +      }
    +   else if (e) {
    +      key = e.which;
    +      }
    +   switch (key) {    // control keys
    +      case 0:
    +      case 8:
    +      case 9:
    +      case 13:
    +      case 27:
    +         return (true);  
    +      }
    +   var keychar = String.fromCharCode(key);
    +   if ("0123456789".indexOf(keychar) != -1) {   // numbers
    +      var idx = myfield.value.indexOf('.');
    +      return ((idx == -1) || ((idx + 2) >= myfield.value.length));
    +      }
    +   if (dec && ((keychar == '.') || (keychar == ',')) && (myfield.value.indexOf('.') == -1)) {    // decimal point jump
    +      if (keychar == ',') {
    +         myfield.value = myfield.value + '.';
    +         return (false);
    +         }
    +      return (true);
    +      }
    +   return (false);
    +   }
    +
    +   
    +  // get information from one or more fields
    +     
    +function GetIndexedField (control,index) {
    +   return ((control.type == null) ? control[index] : control);
    +   }
    +
    +function GetFieldCount (control) {
    +   return ((control == null) ? 0 : ((control.type == null) ? control.length : 1));
    +   }
    + 
    + 
    +function GetIndexOfElement (ctrl) {
    +   var elems = document.getElementsByName (ctrl.name)
    +   var idx = 0;        
    +   for (var i = 0; i < elems.length; i++) {
    +      if (elems[i].form == ctrl.form) {
    +         if (elems[i] == ctrl) {
    +            return (idx);
    +            }
    +         idx++;
    +         }
    +      }
    +   return (-1);
    +   }
    +
    + 
    +// get selector values as comma separated list returned as a string
    +
    +function getCommaSeparatedSelectorValues (selector) {
    +   var selectorValues = "";
    +   for (var i = 0; i < selector.options.length; i++) {
    +      if (i != 0) {
    +         selectorValues += ",";
    +         }
    +      selectorValues += selector.options[i].value;
    +      }
    +   return (selectorValues); 
    +   }  
    +   
    +   // change button classes on mouseover
    +   
    +function buttonOn (obj) {
    +   obj.className = "blueover";
    +   }
    +function buttonOff (obj) {
    +   obj.className = "blue";
    +   }
    +
    +
    +// vendor help open function
    +
    +function vHelp(page) {
    +   OpenWin = this.open(page, "CtrlWindow","toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes,width=605,height=450,left = 75,top = 75');");
    +   }
    +   
    +// Checking length in textarea
    +
    +function textLimiterAndCounter (field, countfield, maxlimit) {
    +   if (field.value.length > maxlimit) { 
    +	   field.value = field.value.substring(0, maxlimit);
    +       alert ("The text exceeds the " + maxlimit + " character limit.");
    +       }
    +   else if (countfield != null) {
    +	   countfield.value = maxlimit - field.value.length;
    +       }
    +   }
    +   
    +function textLimiter (field, maxlimit) {
    +   textLimiterAndCounter (field, null, maxlimit);
    +   } 
    +	
    +// find a certain product ID
    +
    +function IsProductIDPresent (entryfd, pid) {
    +   if (entryfd != null) {
    +      if (entryfd.type != null) { // Is this an array?
    +         return (entryfd.value == pid);
    +         }
    +      for (var i = 0; i < entryfd.length; i++) {
    +         if (entryfd[i].value == pid) {
    +            return (true);
    +            }
    +         }
    +      }
    +   return (false);
    +   }     
    +
    +function IsAnyProductIDPresent (entryfd, pidlist) {
    +   for (var i = 0; i < pidlist.length; i++) {
    +      if (IsProductIDPresent (entryfd, pidlist[i])) {
    +         return (true);
    +         }
    +      }
    +   return (false); 
    +   }
    +
    +// Limit Char set in a field
    +   
    +function limitToSet (myfield, e, charset) {
    +   var key = 0;
    +   if (window.event) {
    +      key = window.event.keyCode;
    +      }
    +   else if (e) {
    +      key = e.which;
    +      }
    +   switch (key) {    // control keys
    +      case 0:
    +      case 8:
    +      case 9:
    +      case 13:
    +      case 27:
    +         return (true);  
    +      }
    +   return (charset.indexOf(String.fromCharCode(key)) != -1);
    +   }
    +                           
    +       
    +var winCertDetails = null;
    +
    +function OpenCertDetails() {
    +    if (winCertDetails != null) {
    +       winCertDetails.close ();
    +       }
    +    winCertDetails = window.open('https://sealinfo.thawte.com/thawtesplash?form_file=fdf/thawtesplash.fdf&dn=SECURE.BMTMICRO.COM&lang=en','THAWTE_Splash',config='height=1000,width=516,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=no,directories=no,status=no');
    +    return (winCertDetails);
    +    }      
    +                            
    +var winSecurityMetrics = null;
    +
    +function OpenSecurityMetrics() {
    +    if (winSecurityMetrics != null) {
    +       winSecurityMetrics.close ();
    +       }
    +    winSecurityMetrics = window.open('https://www.securitymetrics.com/site_certificate?id=49099&tk=5bc045b74406d6d381377ad991970641','anew',config='height=465,width=650,toolbar=no,menubar=no,scrollbars=no,resizable=yes,location=no,directories=no,status=no');
    +    return (winSecurityMetrics);
    +    }     
    +
    +var decodeServletHTML_map = {
    +   "&quot;" : "\"",
    +   "&lt;"   : "<",
    +   "&gt;"   : ">",
    +   "&nbsp;" : "\u00A0",
    +   "<br />" : "\n"
    +   };
    +
    +function decodeServletHTML (string) {
    +   return (string.replace(/(&quot;|&lt;|&gt;|&nbsp;|<br \/>)/g, function(str, item) { return (decodeServletHTML_map[item]); }));
    +   }      
    +
    +function initField (form, name, value) {
    +   if ((value != null) && (value != ("\#\#" + name + "\#\#"))) {
    +      value = decodeServletHTML (value);
    +      for (var i = 0; i < form.elements.length; i++) {
    +         var e = form.elements[i];
    +         if ((e != null) && (name == e.name)) {
    +            switch (e.type) {
    +               case "select-one":
    +                  SetSelectorValue (e, value);
    +                  break;
    +               case "checkbox":
    +                  e.checked = ((isNaN (value) == false) && (parseInt (value) != 0));
    +                  break;
    +               case "radio":
    +                  e.checked = (e.value == value);
    +                  break;
    +               default: 
    +                  e.value = value;
    +                  break;
    +               }  
    +            }
    +         }
    +      }
    +   }
    +
    +function queryField (form, name) {
    +   for (var i = 0; i < form.elements.length; i++) {
    +      var e = form.elements[i];
    +      if ((e != null) && (name == e.name)) {
    +         switch (e.type) {
    +            case "select-one":
    +               return (GetSelectorValue (e));
    +            case "checkbox":
    +               return (e.checked ? "-1" : "0");
    +            case "radio":
    +               if (e.checked) {
    +                  return (e.value);
    +                  }
    +               break;
    +            default: 
    +               return (e.value);
    +            }  
    +         }
    +      }
    +   }
    +         
    +function copyField (form, dstname, srcname) {
    +   initField (form, dstname, queryField (form, srcname));                                       
    +   }
    +
    +//   Return focus to active field
    +
    +function saveActiveField (form) {
    +   var ae = document.activeElement;
    +   if ((ae != null) && (ae.name != null) && (ae.name != "")) {
    +      var elems = document.getElementsByName (ae.name);
    +      for (var i = 0; i < elems.length; i++) {
    +         if (ae == elems[i]) {
    +            var value = ae.name + ":" + i;
    +            if (form.ACTIVEFIELD == null) {
    +               var inputElement = document.createElement ("input");          
    +               var attribute = document.createAttribute ("type");
    +               attribute.nodeValue = "hidden";
    +               inputElement.setAttributeNode (attribute);
    +               attribute = document.createAttribute ("name");
    +               attribute.nodeValue = "ACTIVEFIELD";
    +               inputElement.setAttributeNode (attribute);
    +               attribute = document.createAttribute ("value");
    +               attribute.nodeValue = value;
    +               inputElement.setAttributeNode (attribute);
    +               form.appendChild (inputElement);
    +               }
    +            else {
    +               form.ACTIVEFIELD.value = value;
    +               }
    +            return;
    +            }
    +         }
    +      }
    +   }
    +
    +function restoreActiveField (form) { 
    +   if (form.ACTIVEFIELD != null) {
    +      var activeField = form.ACTIVEFIELD.value.split (":");
    +      if (activeField.length == 2) {
    +         var elems = document.getElementsByName (activeField[0]);
    +         var idx = parseInt (activeField[1]);
    +         if ((elems != null) && (elems.length > idx)) {
    +            try {
    +               elems[idx].focus (); // May fail if field is hidden! Must use try-catch!
    +               }
    +            catch (err) {
    +               }
    +            }
    +         }
    +      }
    +   }
    +
    +
    +  // return the value of the radio button that is checked
    +// return an empty string if none are checked, or
    +// there are no radio buttons
    +function getCheckedValue (radioObj) {
    +   if (radioObj != null) {
    +      if (radioObj.type == null) {  // Is this an array?
    +         for (var i = 0; i < radioObj.length; i++) {
    +            if (radioObj[i].checked) {
    +               return (radioObj[i].value);
    +               }
    +            }
    +         }
    +      else if (radioObj.checked) {
    +         return (radioObj.value);
    +         }
    +      }
    +	return ("");
    +   }
    +
    +// set the radio button with the given value as being checked
    +// do nothing if there are no radio buttons
    +// if the given value does not exist, all the radio buttons
    +// are reset to unchecked
    +function setCheckedValue (radioObj, newValue) {
    +	if (radioObj != null) {
    +      if (radioObj.type == null) {  // Is this an array?
    +         for (var i = 0; i < radioObj.length; i++) {
    +            radioObj[i].checked = (radioObj[i].value == newValue);
    +            }
    +         }
    +      else {
    +         radioObj.checked = (radioObj.value == newValue);
    +         }
    +      }
    +   }
    +
    +
    +//  functions for handling currency names in price field values
    +
    +function parsePrice (str) {
    +   var front = 0;
    +   while ((front != str.length) && ("0123456789.".indexOf (str.charAt (front)) == -1)) {
    +      front++;
    +      }
    +   return (str.substring (front, str.length));
    +   }
    +
    +function parseCurrency (str) {
    +   var front = 0;
    +   while ((front != str.length) && ("0123456789.".indexOf (str.charAt (front)) == -1)) {
    +      front++;
    +      }
    +   return (str.substring (0, front));
    +   }
    +
    +function addPaymentOption (selector, mask, id, text) {
    +   if ((mask >> id) & 1) {
    +      selector.options[selector.options.length] = new Option (text, id);
    +      }
    +   }
    +
    +function addPaymentOptions (selector, mask) {
    +   var names  = [ "##$OPT_PAY_SOFORT##",   "##$OPT_PAY_DEBITCARD##",  "##$OPT_PAY_PAYPAL##", "##$OPT_PAY_PAYSAFE##", "##$OPT_PAY_BITPAY##", "##$OPT_PAY_EURWIRE##",   "##$OPT_PAY_MAILFAX##" ];
    +   var dnames = [ "Instant Bank Transfer", "UK Maestro Debit Card", "PayPal",              "paysafecard",          "BitPay (Bitcoins)",   "Wire Transfer in Euros", "Mail/FAX" ];
    +   var ids    = [ 18,                      7,                         8,                     22,                     23,                    5,                        2 ];
    +   for (var i = 0; i < ids.length; i++) {           
    +      var name = (names[i].indexOf ("\#\#$") == 0) ? dnames[i] : names[i];
    +      addPaymentOption (selector, mask, ids[i], name);
    +      }
    +   if (((mask & (1<<1)) == 0) && (selector.options.length > 1) && (selector.options[0].value == 1)) { // Remove Credit Card option if masked out. However, only do this if we have other payment options
    +      selector.options[0] = null;
    +      }
    +   }
    +
    +function createPaymentControl (template, mask, id, text) {
    +   if ((mask >> id) & 1) {
    +      template = template.replace ("[PAYMENTCONTROLID]", id);
    +      template = template.replace ("[PAYMENTCONTROLTEXT]", text);
    +      document.write (template);
    +      }
    +   }
    +                                          
    +// Sample use: createPaymentControls ('<input type="radio" name="PAYMENTMETHOD_SEL" value="[PAYMENTCONTROLID]" onClick="paymentMethodChanged (document.forms[0]);" />&nbsp;[PAYMENTCONTROLTEXT]<br />', -1048577);
    +   
    +function createPaymentControls (template, mask) {
    +   var names  = [ "##$OPT_PAY_SOFORT##",   "##$OPT_PAY_DEBITCARD##",  "##$OPT_PAY_PAYPAL##", "##$OPT_PAY_PAYSAFE##", "##$OPT_PAY_BITPAY##", "##$OPT_PAY_EURWIRE##",   "##$OPT_PAY_MAILFAX##" ];
    +   var dnames = [ "Instant Bank Transfer", "UK Maestro Debit Card", "PayPal",              "paysafecard",          "BitPay (Bitcoins)",   "Wire Transfer in Euros", "Mail/FAX" ];
    +   var ids    = [ 18,                      7,                         8,                     22,                     23,                    5,                        2 ];
    +   for (var i = 0; i < ids.length; i++) {           
    +      var name = (names[i].indexOf ("\#\#$") == 0) ? dnames[i] : names[i];
    +      createPaymentControl (template, mask, ids[i], name);
    +      }
    +   }
    +
    +function addPaymentOptionButtons (name, mask) {
    +   createPaymentControls ('<input type="radio" name="' + name + '" value="[PAYMENTCONTROLID]" onClick="paymentMethodChanged (document.forms[0]);" />&nbsp;[PAYMENTCONTROLTEXT]<br />', mask);
    +   }
    +
    +function addPaymentOptionsAZ (selector, mask, customorder) {
    +   var names  = [ "##$OPT_PAY_SOFORT##",   "##$OPT_PAY_DEBITCARD##",  "##$OPT_PAY_PAYPAL##", "##$OPT_PAY_AMAZON##", "##$OPT_PAY_PAYSAFE##", "##$OPT_PAY_BITPAY##", "##$OPT_PAY_EURWIRE##",   "##$OPT_PAY_MAILFAX##" ];
    +   var dnames = [ "Instant Bank Transfer", "UK Maestro Debit Card", "PayPal",              "Amazon Payments",     "paysafecard",          "BitPay (Bitcoins)",   "Wire Transfer in Euros", "Mail/FAX" ];
    +   var ids    = [ 18,                      7,                         8,                     21,                     22,                     23,                    5,                        2 ];
    +   if (customorder != null) {
    +      for (var j = 0; j < customorder.length; j++) {           
    +         for (var i = 0; i < ids.length; i++) {
    +            if ((ids[i] != 0) && (ids[i] == customorder[i])) {
    +               var name = (names[i].indexOf ("\#\#$") == 0) ? dnames[i] : names[i];
    +               addPaymentOption (selector, mask, ids[i], name);
    +               ids[i] = 0;
    +               }
    +            }
    +         }
    +      }
    +   for (var i = 0; i < ids.length; i++) {
    +      if (ids[i] != 0) {
    +         var name = (names[i].indexOf ("\#\#$") == 0) ? dnames[i] : names[i];
    +         addPaymentOption (selector, mask, ids[i], name);
    +         }
    +      }
    +   if (((mask & (1<<1)) == 0) && (selector.options.length > 1) && (selector.options[0].value == 1)) { // Remove Credit Card option if masked out. However, only do this if we have other payment options
    +      selector.options[0] = null;
    +      }
    +   }
    +
    +function createPaymentControlsAZ (template, mask, customorder) {
    +   var names  = [ "##$OPT_PAY_SOFORT##",   "##$OPT_PAY_DEBITCARD##",  "##$OPT_PAY_PAYPAL##", "##$OPT_PAY_AMAZON##", "##$OPT_PAY_PAYSAFE##", "##$OPT_PAY_BITPAY##", "##$OPT_PAY_EURWIRE##",   "##$OPT_PAY_MAILFAX##" ];
    +   var dnames = [ "Instant Bank Transfer", "UK Maestro Debit Card", "PayPal",              "Amazon Payments",     "paysafecard",          "BitPay (Bitcoins)",   "Wire Transfer in Euros", "Mail/FAX" ];
    +   var ids    = [ 18,                      7,                         8,                     21,                    22,                     23,                    5,                        2 ];
    +   if (customorder != null) {
    +      for (var j = 0; j < customorder.length; j++) {           
    +         for (var i = 0; i < ids.length; i++) {
    +            if ((ids[i] != 0) && (ids[i] == customorder[i])) {
    +               var name = (names[i].indexOf ("\#\#$") == 0) ? dnames[i] : names[i];
    +               createPaymentControl (template, mask, ids[i], name);
    +               ids[i] = 0;
    +               }
    +            }
    +         }
    +      }
    +   for (var i = 0; i < ids.length; i++) {           
    +      var name = (names[i].indexOf ("\#\#$") == 0) ? dnames[i] : names[i];
    +      createPaymentControl (template, mask, ids[i], name);
    +      }
    +   }
    +
    +function addPaymentOptionButtonsAZ (name, mask, customorder) {
    +   createPaymentControlsAZ ('<input type="radio" name="' + name + '" value="[PAYMENTCONTROLID]" onClick="paymentMethodChanged (document.forms[0]);" />&nbsp;[PAYMENTCONTROLTEXT]<br />', mask, customorder);
    +   }
    +
    +
    +//
    +//shoppingcart.js
    +function createCDLink (form, text) {
    +   if ((0 != 0) && !IsProductIDPresent (form.PRODUCTID, 1100)){
    +      document.write('<a href=https://secure.bmtmicro.com/cart?CID=1830/12&PRODUCTID=1100>');
    +      if (text == null) {
    +         document.write('<image src="https://secure.bmtmicro.com/resources/cd30.gif" border="0" alt="Add CD!">');
    +         }
    +      else {
    +         document.write (text);
    +         }
    +      document.write('<\/a>');
    +      return (true);
    +      }
    +   }
    +
    +function updateCart (form) {
    +
    +   form.action = "https://secure.bmtmicro.com/cart";
    +   populateCompanyField(form);
    +   form.submit();
    +   }
    +
    +function quantitySelChanged (rownumber) {
    +   var form = document.forms[0];
    +   GetIndexedField (form.QUANTITY, rownumber).value = GetIndexedField (form.QUANTITY_SEL, rownumber).value;
    +   updateCart (form)
    +   }
    +
    +function removeCartItem (rownumber) {
    +   var form = document.forms[0];
    +   GetIndexedField (form.QUANTITY, rownumber).value = "0";
    +   updateCart (form)
    +   }
    +
    +function stateChanged (form) {
    +   if (("" == "NC") || (GetSelectorValue (form.STATE) == "NC")) {
    +      updateCart (form);
    +      }
    +   }
    +
    +function currencyChanged (form) {
    +    form.CURRENCY.value = GetSelectorValue (form.CURRENCY_SEL);
    +    updateCart (form);
    +    }
    +
    +function paymentMethodChanged (form) {
    +   form.PAYMENTMETHOD.value = GetSelectorValue (form.PAYMENTMETHOD_SEL);
    +   switch (parseInt (form.PAYMENTMETHOD.value)) {
    +      case 5: // Deutsche Bank
    +         form.CURRENCY.value = "EUR";
    +         break;
    +      case 7: // UK Debit Card
    +         form.CURRENCY.value = "GBP";
    +         break;
    +      default:
    +         form.CURRENCY.value = "USD";
    +         break;            
    +      }        
    +   updateCart (form);
    +   }
    +
    +function init (form) {
    +     for (var productCount = Math.min(GetFieldCount (form.QUANTITY),GetFieldCount (form.QUANTITY_SEL)), i = 0; i < productCount; i++) {
    +      var selector = GetIndexedField (form.QUANTITY_SEL, i);
    +      if (selector.type == "select-one"){
    +         SetSelectorValue (selector, GetIndexedField (form.QUANTITY, i).value);
    +         }
    +      }
    +   if (form.PAYMENTMETHOD_SEL != null) {
    +      form.PAYMENTMETHOD_SEL.options[1] = new Option ("Maestro/Solo Debit Card", "7");
    +      if (0 == 0) {
    +         form.PAYMENTMETHOD_SEL.options[2] = new Option ("PayPal ", "8");
    +         form.PAYMENTMETHOD_SEL.options[3] = new Option ("Wire Transfer in Euros", "5");
    +         form.PAYMENTMETHOD_SEL.options[4] = new Option ("Mail/FAX", "2");
    +         }
    +      SetSelectorValue (form.PAYMENTMETHOD_SEL, "1");
    +      switch (1) {
    +         case 2: // Mail/Fax
    +            form.NEXT_PAGE.value = "https://secure.bmtmicro.com/ShoppingCart/thankscheck.html";
    +            break;
    +         case 5: // Deutsche Bank
    +            form.NEXT_PAGE.value = "https://secure.bmtmicro.com/ShoppingCart/thanksdb.html";
    +            break;
    +         case 7: // UK Debit Card
    +         default: // Credit card
    +            break;
    +         }
    +      }
    +   initField (form, "CURRENCY_SEL",  "EUR");
    +   initField (form, "FIRSTNAME",     "");
    +   initField (form, "LASTNAME",      "");
    +   initField (form, "REGISTERNAME",  "##REGISTERNAME##");
    +   initField (form, "COMPANY",       "");
    +   initField (form, "ADDRESS1",      "");
    +   initField (form, "ADDRESS2",      "");
    +   initField (form, "CITY",          "");
    +   initField (form, "STATE",         "");
    +   initField (form, "ZIP",           "");
    +   initField (form, "COUNTRY",       "DE");
    +   initField (form, "EMAIL",         "");
    +   initField (form, "EMAILAGAIN",    "##EMAILAGAIN##");
    +   initField (form, "WORKPHONE",     "");
    +   initField (form, "VATNUMBER",     "");
    +   initField (form, "CCNUMBER",      "##CCNUMBER##");
    +   initField (form, "CCTP",      "##CCTP##");
    +   initField (form, "CCEXPIREMONTH", "##CCEXPIREMONTH##");
    +   initField (form, "CCEXPIREYEAR",  "##CCEXPIREYEAR##");
    +   initField (form, "ISSUEMONTH",    "##ISSUEMONTH##");
    +   initField (form, "ISSUEYEAR",     "##ISSUEYEAR##");
    +   initField (form, "ISSUENUMBER",   "##ISSUENUMBER##");
    +   initField (form, "DISCOUNTCODE",   "");
    +   initField (form, "ORDERPARAMETERS", "");
    +   if (isBlank (form.ORDERPARAMETERS.value)){
    +      form.ORDERPARAMETERS.value = getLocationValue("customer_ref") || encodeURIComponent(document.referrer); 
    +      }
    +   var regInfo = form.REGISTERNAME.value;
    +   var companyInfo = form.COMPANY.value;
    +  if (!isBlank (regInfo) && !isBlank (companyInfo)){
    +     form.LICENSETO[1].checked=true;
    +     companyFieldVisible(true);
    +     form.COMPANY.value = regInfo;
    +     }
    +  if (!isBlank (regInfo) && isBlank (companyInfo)){
    +     form.LICENSETO[2].checked=true;
    +     companyFieldVisible(true,true);
    +     }
    +   getAffiliateID(form);
    +   }
    +
    +
    +/*  Beginning Required for Customer Login */
    +
    +function writeLoginText () {
    +   if (0 == 0) {
    +      document.write (" If you have ordered from us before, please <a href=\"javascript:toggleLayer('customerLogin');\" title=\"Log into Customer Account\">login here</a>.") ;
    +   }
    +}
    +
    +function toggleLayer( whichLayer ){
    +  var elem, vis;
    +  if( document.getElementById ) // this is the way the standards work
    +  elem = document.getElementById( whichLayer );
    +  else if( document.all ) // this is the way old msie versions work
    +  elem = document.all[whichLayer];
    +  else if( document.layers ) // this is the way nn4 works
    +  elem = document.layers[whichLayer];  vis = elem.style;  // if the style.display value is blank we try to figure it out here
    +  if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)
    +  vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none';
    +  vis.display = (vis.display==''||vis.display=='block')?'none':'block';
    +  if (vis.display=='block'){
    +    document.forms[0].LOGINNAME.focus ();
    +    }
    +  }
    +
    +function chkLogin (form) {
    +    if (isBlank (form.LOGINNAME.value)) {
    +        alert ("Please enter your login name or email address!");
    +        form.LOGINNAME.focus ();
    +        return (false);
    +        }
    +
    +    form.ACTION.value = "2";
    +    updateCart (form);
    +    }
    +
    +function isEnter (event) {
    +  return ((window.event ? window.event.keyCode : (event ? event.which : 0)) == 13);
    +  }
    +function processEnter (form,event) {
    +  if (isEnter (event)) {
    +     chkLogin (form);
    +     return (false);
    +     }
    +  return (true);
    +  }
    +
    +
    +/*  End Required for Customer Login */
    +
    +function validateForm (form) {
    +  form.COMPANY.value = "";
    +  var regInfo = form.REGISTERNAME.value;
    +  if (form.LICENSETO[1].checked){
    +      if (isBlank (regInfo)) {
    +      alert ("You must enter your company name!");
    +      form.REGISTERNAME.focus ();
    +      return (false);
    +	  }
    +    form.COMPANY.value = regInfo;
    +    }
    +  if (form.LICENSETO[2].checked){
    +     if (isBlank (regInfo)) {
    +       alert ("Please enter the person name in \"License to this name\" field.");
    +       form.REGISTERNAME.focus ();
    +       return (false);
    +       }
    +    }
    +    return (processOnSubmit (form));
    +    }
    +
    +/**************************************************
    + * dom-drag.js
    + * 09.25.2001
    + * www.youngpup.net
    + * Script featured on Dynamic Drive (http://www.dynamicdrive.com) 12.08.2005
    + **************************************************
    + * 10.28.2001 - fixed minor bug where events
    + * sometimes fired off the handle, not the root.
    + **************************************************/
    +
    +var Drag = {
    +
    +	obj : null,
    +
    +	init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper)
    +	{
    +		o.onmousedown	= Drag.start;
    +
    +		o.hmode			= bSwapHorzRef ? false : true ;
    +		o.vmode			= bSwapVertRef ? false : true ;
    +
    +		o.root = oRoot && oRoot != null ? oRoot : o ;
    +
    +		if (o.hmode  && isNaN(parseInt(o.root.style.left  ))) o.root.style.left   = "0px";
    +		if (o.vmode  && isNaN(parseInt(o.root.style.top   ))) o.root.style.top    = "0px";
    +		if (!o.hmode && isNaN(parseInt(o.root.style.right ))) o.root.style.right  = "0px";
    +		if (!o.vmode && isNaN(parseInt(o.root.style.bottom))) o.root.style.bottom = "0px";
    +
    +		o.minX	= typeof minX != 'undefined' ? minX : null;
    +		o.minY	= typeof minY != 'undefined' ? minY : null;
    +		o.maxX	= typeof maxX != 'undefined' ? maxX : null;
    +		o.maxY	= typeof maxY != 'undefined' ? maxY : null;
    +
    +		o.xMapper = fXMapper ? fXMapper : null;
    +		o.yMapper = fYMapper ? fYMapper : null;
    +
    +		o.root.onDragStart	= new Function();
    +		o.root.onDragEnd	= new Function();
    +		o.root.onDrag		= new Function();
    +	},
    +
    +	start : function(e)
    +	{
    +		var o = Drag.obj = this;
    +		e = Drag.fixE(e);
    +		var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
    +		var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
    +		o.root.onDragStart(x, y);
    +
    +		o.lastMouseX	= e.clientX;
    +		o.lastMouseY	= e.clientY;
    +
    +		if (o.hmode) {
    +			if (o.minX != null)	o.minMouseX	= e.clientX - x + o.minX;
    +			if (o.maxX != null)	o.maxMouseX	= o.minMouseX + o.maxX - o.minX;
    +		} else {
    +			if (o.minX != null) o.maxMouseX = -o.minX + e.clientX + x;
    +			if (o.maxX != null) o.minMouseX = -o.maxX + e.clientX + x;
    +		}
    +
    +		if (o.vmode) {
    +			if (o.minY != null)	o.minMouseY	= e.clientY - y + o.minY;
    +			if (o.maxY != null)	o.maxMouseY	= o.minMouseY + o.maxY - o.minY;
    +		} else {
    +			if (o.minY != null) o.maxMouseY = -o.minY + e.clientY + y;
    +			if (o.maxY != null) o.minMouseY = -o.maxY + e.clientY + y;
    +		}
    +
    +		document.onmousemove	= Drag.drag;
    +		document.onmouseup		= Drag.end;
    +
    +		return false;
    +	},
    +
    +	drag : function(e)
    +	{
    +		e = Drag.fixE(e);
    +		var o = Drag.obj;
    +
    +		var ey	= e.clientY;
    +		var ex	= e.clientX;
    +		var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
    +		var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
    +		var nx, ny;
    +
    +		if (o.minX != null) ex = o.hmode ? Math.max(ex, o.minMouseX) : Math.min(ex, o.maxMouseX);
    +		if (o.maxX != null) ex = o.hmode ? Math.min(ex, o.maxMouseX) : Math.max(ex, o.minMouseX);
    +		if (o.minY != null) ey = o.vmode ? Math.max(ey, o.minMouseY) : Math.min(ey, o.maxMouseY);
    +		if (o.maxY != null) ey = o.vmode ? Math.min(ey, o.maxMouseY) : Math.max(ey, o.minMouseY);
    +
    +		nx = x + ((ex - o.lastMouseX) * (o.hmode ? 1 : -1));
    +		ny = y + ((ey - o.lastMouseY) * (o.vmode ? 1 : -1));
    +
    +		if (o.xMapper)		nx = o.xMapper(y)
    +		else if (o.yMapper)	ny = o.yMapper(x)
    +
    +		Drag.obj.root.style[o.hmode ? "left" : "right"] = nx + "px";
    +		Drag.obj.root.style[o.vmode ? "top" : "bottom"] = ny + "px";
    +		Drag.obj.lastMouseX	= ex;
    +		Drag.obj.lastMouseY	= ey;
    +
    +		Drag.obj.root.onDrag(nx, ny);
    +		return false;
    +	},
    +
    +	end : function()
    +	{
    +		document.onmousemove = null;
    +		document.onmouseup   = null;
    +		Drag.obj.root.onDragEnd(	parseInt(Drag.obj.root.style[Drag.obj.hmode ? "left" : "right"]), 
    +									parseInt(Drag.obj.root.style[Drag.obj.vmode ? "top" : "bottom"]));
    +		Drag.obj = null;
    +	},
    +
    +	fixE : function(e)
    +	{
    +		if (typeof e == 'undefined') e = window.event;
    +		if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
    +		if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
    +		return e;
    +	}
    +};
    +
    +//
    +// orderScript.js
    +//
    +var MSGID_NOFIRSTNAME      = 0;
    +var MSGID_NOLASTNAME       = 1;
    +var MSGID_NOADDRESS        = 2;
    +var MSGID_NOCITY           = 3;
    +var MSGID_NOZIP            = 4;
    +var MSGID_BADUSZIP         = 5;
    +var MSGID_NOSTATE          = 6;
    +var MSGID_USWRONGCOUNTRY   = 7;
    +var MSGID_CAWRONGCOUNTRY   = 8;
    +var MSGID_NOCOUNTRY        = 9;
    +var MSGID_NOPHONE          = 10;
    +var MSGID_BADPHONE         = 11;
    +var MSGID_NOEMAIL          = 12;
    +var MSGID_BADEMAIL         = 13;
    +var MSGID_EMAILMISMATCH    = 14;
    +var MSGID_BADALTEMAIL      = 15;
    +var MSGID_NOSHIPFIRSTNAME  = 16;
    +var MSGID_NOSHIPLASTNAME   = 17;
    +var MSGID_BADQUANTITY      = 18;
    +var MSGID_NOCCNUM          = 19;
    +var MSGID_BADCCNUM         = 20;
    +var MSGID_CCNUMTOOSHORT    = 21;
    +var MSGID_CCNUMTOOLONG     = 22;
    +var MSGID_CCVISA           = 23;
    +var MSGID_CCMC             = 24;
    +var MSGID_CCAMEX           = 25;
    +var MSGID_CCDINERS         = 26;
    +var MSGID_CCDISCOVER       = 27;
    +var MSGID_CCJCB            = 28;
    +var MSGID_CCERROR          = 29;
    +var MSGID_CCPURCHASECARD   = 30;
    +var MSGID_CCSEC            = 31;
    +var MSGID_CCGBPONLY        = 32;
    +var MSGID_CCUSDONLY        = 33;
    +var MSGID_BADCCEXPYEAR     = 34;
    +var MSGID_BADCCEXPMONTH    = 35;
    +var MSGID_CCDATEEXPIRED    = 36;
    +var MSGID_CCYEAREXPIRED    = 37;
    +var MSGID_CCFUTURE         = 38;
    +var MSGID_NOUSERGROUPID    = 39;
    +var MSGID_CONFIRMATION     = 40;
    +var MSGID_NOISSUEINFO      = 41;
    +var MSGID_BADISSUEYEAR     = 42;
    +var MSGID_BADISSUEMONTH    = 43;
    +var MSGID_ONLYCDINORDER    = 44;
    +var MSGID_CARTISEMPTY      = 45;
    +var MSGID_CARDISCREDITCARD = 46;
    +var MSGID_CARDISDEBITCARD  = 47;
    +var MSGID_CARDTYPEMISMATCH = 48;
    +var MSGID_NOREGINFONAME    = 49;
    +var MSGID_NOREGINFOEMAIL   = 50;
    +var MSGID_BADZIP           = 51;
    +var MSGID_AMEXNOTACCEPTED  = 52;
    +
    +var CARDTYPE_VISA       = 'V';  // Visa
    +var CARDTYPE_MASTERCARD = 'M';  // Mastercard
    +var CARDTYPE_AMEX       = 'A';  // American Express
    +var CARDTYPE_DISCOVER   = 'D';  // Discover
    +var CARDTYPE_DINERS     = 'C';  // Diners Club
    +var CARDTYPE_JCB        = 'J';  // JCB
    +var CARDTYPE_SWITCH     = 'S';  // Switch (debit card)
    +var CARDTYPE_SOLO       = 'O';  // Solo (debit card)
    +var CARDTYPE_MAESTRO    = 'E';  // Maestro (debit card)
    +var CARDTYPE_LASER      = 'L';  // Laser (debit card)
    +
    +var PAYMENTMETHOD_CREDITCARD = 1;
    +var PAYMENTMETHOD_DEBITCARD = 7;
    +var PAYMENTMETHOD_PAYPAL = 8;
    +var PAYMENTMETHOD_AMAZON = 21;
    +
    +var orderScriptMsgs = [
    +   "You must provide your first name.",
    +   "You must provide your last name.",
    +   "You must provide your address.",
    +   "You must provide your city.",
    +   "You must provide your postal code.",
    +   "US postal codes must be in the format 00000 or 00000-0000",
    +   "You must provide your state.",
    +   "You have selected a US state but the country is not set to USA. Press Ok to change country to USA or Cancel to correct the error.",
    +   "You have selected a Canadian province but the country is not set to Canada. Press Ok to change country to Canada or Cancel to correct the error.",
    +   "You must provide your country.",
    +   "You must provide your phone number.",
    +   "Please provide a valid phone number. We may need it in case there are problems with your order or payment information.",
    +   "You must provide your email address.",
    +   "You must provide a VALID email address.",
    +   "Email address mismatch. Please enter your address again.",
    +   "The alternate email address, if specified, must be a valid address.",
    +   "You must provide your first name or the name of your company.",
    +   "You must provide your last name or the name of your company.",
    +   "Orders for more than [PARAMETER1] items of the same type must be placed via phone or FAX.\n\nOur phone numbers are 800-414-4268 (USA, toll free) or 910-792-9100 (international).\nOur FAX numbers are 800-346-1672 (USA, toll free) or 910-792-1889 (international).",
    +   "You must provide a card number.",
    +   "The card number does not appear to be valid. Please verify that you typed in the card number correctly.",
    +   "The card number is too short. Please verify that you typed in the card number correctly.",
    +   "The card number is too long. Please verify that you typed in the card number correctly.",
    +   "VISA cards should have 13 or 16+ digits in the card number. Please verify that you typed in the card number correctly.",
    +   "MASTERCARD cards should have at least 16 digits in the card number. Please verify that you typed in the card number correctly.",
    +   "AMERICAN EXPRESS cards should have 15 digits in the card number. Please verify that you typed in the card number correctly.",
    +   "DINERS/CARTE BLANCHE cards should have 14 digits in the card number. Please verify that you typed in the card number correctly.",
    +   "DISCOVER/NOVUS cards should have 16 digits in the card number. Please verify that you typed in the card number correctly.",
    +   "JCB cards should have 16 digits in the card number. Please verify that you typed in the card number correctly.",
    +   "We do not accept credit/debit cards starting with '[PARAMETER1]'. Please verify that you typed in the card number correctly and that the card type is one that we support.",
    +   "You have typed in a 4-digit security code for your Visa card.\n\nIf this is correct, then your card is a PURCHASE CARD.\n\nOrdering with a purchase card requires us to have your purchase order on file.  Please call or FAX us.\nOur phone numbers are 800-414-4268 (US, toll free) or 910-792-9100 (international).\nOur FAX numbers are 800-346-1672 (US, toll free) or 910-350-2937 (international).",
    +   "You must provide a [PARAMETER1]-digit card security code.",
    +   "Your card can only be charged in British Pounds (GBP).\nIf the order form has a currency selector, please change the currency to GBP. Otherwise use a different card.",
    +   "Your card can only be charged in US dollars (USD).\nIf the order form has a currency selector, please change the currency to USD. Otherwise use a different card.",
    +   "You must provide a valid expiration year.",
    +   "You must provide a valid expiration month.",
    +   "The expiration date is not valid or the card has expired.",
    +   "The expiration year is not valid or the card has expired.",
    +   "The expiration date is more than five years in the future.\nPlease press OK to confirm that the expiration date is [PARAMETER1] or press Cancel to correct.",
    +   "This order form is missing the required USERGROUPID field\n\nPlease contact webmaster@bmtmicro.com to inform us about this problem. Thank you.",
    +   "Your Confirmation Email will be sent to [PARAMETER1]. If this information is correct click OK to submit your order",
    +   "You must provide either the issue number or the issue date.",
    +   "The card issue year is not valid",
    +   "The card issue month is not valid",
    +   "Ordering the CD requires the purchase of an accompanying product. Please add a product to the cart.",
    +   "Your shopping cart is empty",
    +   "The card number you provided appears to be a credit card. Please change the payment method to CREDIT CARD.",
    +   "The card number you provided appears to be a debit card. Please change the payment method to DEBIT CARD.",
    +   "The card number does not match the card type selected. Please verify that you have selected the correct card type.",
    +   "Please specify the name of the recipient",
    +   "Please specify a valid e-mail for the recipient",
    +   "Only letters (A-Z), numbers (0-9), dashes (-) and spaces are allowed in the postal code.",
    +   "We are sorry, but American Express cards are not allowed for this order. Please choose a different form of payment."
    +   ];
    +
    +function loadOrderScriptMsgs () {
    +   var language = parseInt ("12");
    +   if (language > 1) {     
    +      document.write("<SCRIPT language=javascript src=\"https://secure.bmtmicro.com/OrderScript/orderScriptMsgs." + language + "\" type=\"text/javascript\"><\/SCRIPT>");
    +      }
    +   }
    +
    +function getOrderScriptMsg (messageid, param1) {
    +   if ((orderScriptMsgs != null) && (messageid < orderScriptMsgs.length)) {
    +      var msg = orderScriptMsgs[messageid];
    +      if (param1 !== undefined) {
    +         msg = msg.replace ("[PARAMETER1]", param1);
    +         }
    +      return (msg);
    +      }
    +   return ("Message not found");
    +   }
    +
    +function isWhitespace (c) {
    +    var whitespace = " \t\r\n\f";
    +    return (whitespace.indexOf (c) != -1);
    +    }
    +
    +function isDigit (c) {
    +    var digits = "0123456789";
    +    return (digits.indexOf (c) != -1);
    +    }
    +
    +function trim (str) {
    +    if (str != null) {
    +        var front = 0;
    +        var back = str.length;
    +        while ((front != back) && isWhitespace (str.charAt (front))) {
    +            front++;
    +            }
    +        while ((front != back) && isWhitespace (str.charAt (back - 1))) {
    +            back--;
    +            }
    +        str = str.substring (front, back);
    +        }
    +    return (str);
    +    }
    +
    +function stripLeadingZeroes (str) {
    +    if (str != null) {
    +        var front = 0;
    +        var back = str.length;
    +        while ((front != back) && (str.charAt (front) == '0')) {
    +            front++;
    +            }
    +        str = str.substring (front, back);
    +        }
    +    return (str);
    +    }
    +
    +function isBlank (str) {
    +    if (str == null) {
    +        return (true);
    +        }
    +    for (var i = 0; i < str.length; i++) {        
    +        var c = str.charAt (i);
    +        if (!isWhitespace (c)) {
    +           return (false);
    +           }
    +        }
    +    return (true);
    +    }
    +
    +function isValidEmail (str) {
    +   if (str == null) {
    +      return (false);
    +      }
    +   str = trim (str);                        // Start by trimming off whitespace at both ends
    +   try {
    +      if (window.RegExp) {
    +         var tempStr = "a";  // First check that regular expression support is present
    +         var tempReg = new RegExp (tempStr);
    +         if (tempReg.test (tempStr)) {
    +            var re = new RegExp ("^\\s*[A-Za-z0-9!#$%&'*+\\/=?^_`{|}~]+[A-Za-z0-9!#$%&'*+\\/=?^_`{|}~-]*(?:\\.[A-Za-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*@(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\s*$");
    +            return (re.test (str));
    +            }
    +         }
    +      }
    +   catch (err) {
    +      }
    +   for (var i = 0; i < str.length; i++) {   // Check that the address does not contain whitespace
    +      var c = str.charAt (i);
    +      if (isWhitespace (c)) {
    +         return (false);
    +         }
    +      }
    +   return (str.indexOf (".") > 2) && (str.indexOf ("@") > 0);
    +   }
    +
    +function isValidUSZIP (str) {
    +    if (str == null) {
    +        return (false);
    +        }
    +    str = trim (str);                        // Start by trimming off whitespace at both ends
    +    if ((str.length != 5) && (str.length != 10)) {
    +       return (false);
    +       }
    +    for (var i = 0; i < str.length; i++) {   // Check that the address does not contain whitespace
    +        var c = str.charAt (i);
    +        if (i == 5) {
    +           if (c != '-') {
    +              return (false);
    +              }
    +           }
    +        else {
    +           if (!isDigit (c)) {
    +              return (false);
    +              }
    +           }
    +        }
    +    return (true);
    +    }
    +           
    +function checkZIP (str) {
    +   if (str != null) {
    +      for (var i = 0; i < str.length; i++) {   // Check that the ZIP only contains allowed characters
    +         if ("abcdefghijklmnopqrstuvwzyxABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789- ".indexOf (str.charAt (i)) == -1) {
    +            return (false);
    +            }
    +         }
    +      }
    +   return (true);
    +   }
    +     
    +function getDigitsInString (str) {
    +    var s = "";
    +    if (str != null) {
    +        for (var i = 0; i < str.length; i++) {
    +            var c = str.charAt (i);
    +            if (isDigit (c)) {
    +                s += c;
    +                }
    +            }
    +        }
    +    return (s);
    +    }
    +
    +function isValidPhoneNumber (str, isUSA) {
    +    var phone = getDigitsInString (str);
    +    return (isUSA ? (phone.length >= 10) : (phone.length >= 5));
    +    }
    +
    +function setFocus (control) {
    +    if (control.type == 'hidden') {
    +       return (false);
    +       }
    +    control.focus ();
    +    return (true);
    +    }
    +
    +function setControlValue (control, value) {
    +    switch (control.type) {
    +        case 'select-one':
    +            for (var i = 0; i < control.options.length; i++) {
    +                if (control.options[i].value.toUpperCase () == value.toUpperCase ()) {
    +                    control.selectedIndex = i;
    +                    break;
    +                    }
    +                }
    +            break;
    +        default:  
    +            control.value = value;
    +            break;
    +        }
    +    }
    +
    +function getControlValue (control) {
    +    switch (control.type) {
    +        case 'select-one':
    +           return (control.options[control.selectedIndex].value);
    +        default:
    +           return (control.value);
    +        }
    +    }
    +
    +function getControlText (control) {
    +    switch (control.type) {
    +        case 'select-one':
    +           return (control.options[control.selectedIndex].text);
    +        default:
    +           return (control.value);
    +        }
    +    }
    +         
    +function verifyCDOrder (form) {
    +   if (form.PRODUCTID != null) {
    +      if (form.PRODUCTID.type == null) {
    +         for (var i = 0; i < form.PRODUCTID.length; i++) {
    +            if (parseInt (form.PRODUCTID[i].value) != 1100) {
    +               return (true);
    +               }
    +            }
    +         }
    +      else if (parseInt (form.PRODUCTID.value) != 1100) {
    +         return (true);
    +         }
    +      alert (getOrderScriptMsg (MSGID_ONLYCDINORDER));
    +      return (false);
    +      }  
    +   return (true);
    +   }
    +
    +function fieldCheck (control) {
    +   return ((control != null) && (control.type != "hidden"));
    +   }
    +
    +function blankCheck (control) {
    +   return (fieldCheck (control) && isBlank (control.value));
    +   }
    +
    +function verifyAddressInfo (form) {  
    +    var country   = (form.COUNTRY == null) ? "" : trim (getControlValue (form.COUNTRY)).toUpperCase ();
    +    var isUSA     = (country == "US") || (country == "USA");
    +    var isCanada  = (country == "CA") || (country == "CANADA");
    +    var firstname = (form.FIRSTNAME != null) ? form.FIRSTNAME : form.FIRST_NAME;
    +    var lastname  = (form.LASTNAME != null)  ? form.LASTNAME  : form.LAST_NAME;
    +    var paymentmethod = (form.PAYMENTMETHOD == null) ? PAYMENTMETHOD_CREDITCARD : parseInt (form.PAYMENTMETHOD.value);
    +    if (blankCheck (firstname)) {
    +        alert (getOrderScriptMsg (MSGID_NOFIRSTNAME));
    +        firstname.focus ();
    +        return (false);
    +        }
    +    if (blankCheck (lastname)) {
    +        alert (getOrderScriptMsg (MSGID_NOLASTNAME));
    +        lastname.focus ();
    +        return (false);
    +        }
    +    if (blankCheck (form.ADDRESS1)) {
    +        alert (getOrderScriptMsg (MSGID_NOADDRESS));
    +        form.ADDRESS1.focus ();
    +        return (false);
    +        }
    +    if (blankCheck (form.CITY)) {
    +        alert (getOrderScriptMsg (MSGID_NOCITY));
    +        form.CITY.focus ();
    +        return (false);
    +        }
    +    if (fieldCheck (form.ZIP)) {
    +       if (isBlank (form.ZIP.value)) {
    +           alert (getOrderScriptMsg (MSGID_NOZIP));
    +           form.ZIP.focus ();
    +           return (false);
    +           }
    +       if (isUSA && !isValidUSZIP (form.ZIP.value)) {
    +           alert (getOrderScriptMsg (MSGID_BADUSZIP));
    +           form.ZIP.focus ();
    +           return (false);
    +           }
    +       if (!checkZIP (form.ZIP.value)) {
    +          alert (getOrderScriptMsg (MSGID_BADZIP));
    +          form.ZIP.focus ();
    +          return (false);
    +          }
    +       }
    +    if (fieldCheck (form.STATE)) {
    +       if ((isUSA || isCanada) && isBlank (getControlValue (form.STATE))) {
    +           alert (getOrderScriptMsg (MSGID_NOSTATE));
    +           form.STATE.focus ();
    +           return (false);
    +           }
    +       if ((form.STATE.type == 'select-one') && !isBlank (getControlValue (form.STATE))) {
    +           var USStateList = "AL,AK,AR,AZ,CA,CO,CT,DE,DC,FL,GA,HI,ID,IL,IN,IA,KS,KY,LA,ME,MD,MA,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,OH,OK,OR,PA,PR,RI,SC,SD,TN,TX,UT,VA,VT,WA,WV,WI,WY,AE,AA,AE,AE,AE,AP";
    +           if (USStateList.indexOf (getControlValue (form.STATE)) != -1) {
    +              if (!isUSA) {
    +                 if (!confirm (getOrderScriptMsg (MSGID_USWRONGCOUNTRY))) {
    +                    form.COUNTRY.focus ();
    +                    return (false);
    +                    }
    +                 setControlValue (form.COUNTRY, "USA");
    +                 setControlValue (form.COUNTRY, "US");
    +                 return (verifyAddressInfo (form));
    +                 }
    +              }
    +           var CanadaProvinceList = "AB,BC,MB,NB,NF,NT,NS,NU,ON,PE,QC,SK,YT";
    +           if (CanadaProvinceList.indexOf (getControlValue (form.STATE)) != -1) {
    +              if (!isCanada) {
    +                 if (!confirm (getOrderScriptMsg (MSGID_CAWRONGCOUNTRY))) {
    +                    form.COUNTRY.focus ();
    +                    return (false);
    +                    }
    +                 setControlValue (form.COUNTRY, "CANADA");
    +                 setControlValue (form.COUNTRY, "CA");
    +                 return (verifyAddressInfo (form));
    +                 }
    +              }
    +           }               
    +        }
    +    if (fieldCheck (form.COUNTRY) && isBlank (getControlValue (form.COUNTRY))) {
    +        alert (getOrderScriptMsg (MSGID_NOCOUNTRY));
    +        form.COUNTRY.focus ();
    +        return (false);
    +        }
    +    if (fieldCheck (form.WORKPHONE)) {
    +        if (isBlank (form.WORKPHONE.value)) {
    +            alert (getOrderScriptMsg (MSGID_NOPHONE));
    +            form.WORKPHONE.focus ();
    +            return (false);
    +            }
    +        if (!isValidPhoneNumber (form.WORKPHONE.value, isUSA)) {
    +            alert (getOrderScriptMsg (MSGID_BADPHONE));
    +            form.WORKPHONE.focus ();
    +            return (false);
    +            }
    +        }
    +    if (fieldCheck (form.EMAIL)) {
    +        if (isBlank (form.EMAIL.value)) {
    +           switch (paymentmethod) {
    +               case PAYMENTMETHOD_PAYPAL:
    +               case PAYMENTMETHOD_AMAZON:
    +                   break;
    +               default:
    +                   alert (getOrderScriptMsg (MSGID_NOEMAIL));
    +                   form.EMAIL.focus ();
    +                   return (false);
    +               }
    +            }
    +        else if (!isValidEmail (form.EMAIL.value)) {
    +            alert (getOrderScriptMsg (MSGID_BADEMAIL));
    +            form.EMAIL.focus ();
    +            return (false);
    +            }
    +        if (form.EMAILAGAIN != null) {
    +            if (form.EMAILAGAIN.value != form.EMAIL.value) {
    +                form.EMAIL.value = "";
    +                form.EMAILAGAIN.value = "";
    +                alert (getOrderScriptMsg (MSGID_EMAILMISMATCH));
    +                form.EMAIL.focus ();
    +                return (false);
    +                }
    +            }
    +        }
    +    if (fieldCheck (form.ALTEMAIL) && !isBlank(form.ALTEMAIL.value) && !isValidEmail(form.ALTEMAIL.value)) {
    +        alert (getOrderScriptMsg (MSGID_BADALTEMAIL));
    +        form.ALTEMAIL.focus ();
    +        return (false);
    +        }
    +    return (true);
    +    }
    +
    +function verifyShippingInfo (form) {
    +    if ((form.SHIP_COUNTRY != null) && ((form.SHIPTOBILLINGADDRESS == null) || !form.SHIPTOBILLINGADDRESS.checked)) {
    +        var country   = trim (getControlValue (form.SHIP_COUNTRY)).toUpperCase ();
    +        var isUSA     = (country == "US") || (country == "USA");
    +        var firstname = (form.SHIP_FIRSTNAME != null) ? form.SHIP_FIRSTNAME : form.SHIP_FIRST_NAME;
    +        var lastname  = (form.SHIP_LASTNAME != null)  ? form.SHIP_LASTNAME  : form.SHIP_LAST_NAME;
    +        if (isBlank (form.SHIP_COMPANY.value) && isBlank (firstname.value)) {
    +            alert (getOrderScriptMsg (MSGID_NOSHIPFIRSTNAME));
    +            firstname.focus ();
    +            return (false);
    +            }
    +        if (isBlank (form.SHIP_COMPANY.value) && isBlank (lastname.value)) {
    +            alert (getOrderScriptMsg (MSGID_NOSHIPLASTNAME));
    +            lastname.focus ();
    +            return (false);
    +            }
    +        if (isBlank (form.SHIP_ADDRESS1.value)) {
    +            alert (getOrderScriptMsg (MSGID_NOADDRESS));
    +            form.SHIP_ADDRESS1.focus ();
    +            return (false);
    +            }
    +        if (isBlank (form.SHIP_CITY.value)) {
    +            alert (getOrderScriptMsg (MSGID_NOCITY));
    +            form.SHIP_CITY.focus ();
    +            return (false);
    +            }
    +        if (isBlank (form.SHIP_ZIP.value)) {
    +            alert (getOrderScriptMsg (MSGID_NOZIP));
    +            form.SHIP_ZIP.focus ();
    +            return (false);
    +            }
    +        if (isUSA && !isValidUSZIP (form.SHIP_ZIP.value)) {
    +            alert (getOrderScriptMsg (MSGID_BADUSZIP));
    +            form.SHIP_ZIP.focus ();
    +            return (false);
    +            }
    +        if (!checkZIP (form.SHIP_ZIP.value)) {
    +           alert (getOrderScriptMsg (MSGID_BADZIP));
    +           form.SHIP_ZIP.focus ();
    +           return (false);
    +           }
    +        if (form.SHIP_STATE != null) {
    +           if (isUSA && isBlank (getControlValue (form.SHIP_STATE))) {
    +               alert (getOrderScriptMsg (MSGID_NOSTATE));
    +               form.SHIP_STATE.focus ();
    +               return (false);
    +               }
    +           if ((form.SHIP_STATE.type == 'select-one') && !isBlank (getControlValue (form.SHIP_STATE))) {
    +               var USStateList = "AL,AK,AR,AZ,CA,CO,CT,DE,DC,FL,GA,HI,ID,IL,IN,IA,KS,KY,LA,ME,MD,MA,MI,MN,MS,MO,MT,NE,NV,NH,NJ,NM,NY,NC,ND,OH,OK,OR,PA,PR,RI,SC,SD,TN,TX,UT,VA,VT,WA,WV,WI,WY,AE,AA,AE,AE,AE,AP";
    +               if (USStateList.indexOf (getControlValue (form.SHIP_STATE)) != -1) {
    +                  if (!isUSA) {
    +                     if (!confirm (getOrderScriptMsg (MSGID_USWRONGCOUNTRY))) {
    +                        form.SHIP_COUNTRY.focus ();
    +                        return (false);
    +                        }
    +                     setControlValue (form.SHIP_COUNTRY, "USA");
    +                     setControlValue (form.SHIP_COUNTRY, "US");
    +                     return (verifyShippingInfo (form));
    +                     }
    +                  }
    +               var CanadaProvinceList = "AB,BC,MB,NB,NF,NT,NS,NU,ON,PE,QU,SK,YT";
    +               if (CanadaProvinceList.indexOf (getControlValue (form.SHIP_STATE)) != -1) {
    +                  var isCanada = (getControlValue (form.SHIP_COUNTRY) == "CA") || (trim (getControlValue (form.SHIP_COUNTRY)).toUpperCase () == "CANADA");
    +                  if (!isCanada) {
    +                     if (!confirm (getOrderScriptMsg (MSGID_CAWRONGCOUNTRY))) {
    +                        form.SHIP_COUNTRY.focus ();
    +                        return (false);
    +                        }
    +                     setControlValue (form.SHIP_COUNTRY, "CANADA");
    +                     setControlValue (form.SHIP_COUNTRY, "CA");
    +                     return (verifyShippingInfo (form));                  
    +                     }
    +                  }
    +               }               
    +            }
    +        if (isBlank (getControlValue (form.SHIP_COUNTRY))) {
    +            alert (getOrderScriptMsg (MSGID_NOCOUNTRY));
    +            form.SHIP_COUNTRY.focus ();
    +            return (false);
    +            }
    +        if ((form.SHIP_PHONE != null) && !isBlank (form.SHIP_PHONE.value)) {
    +            if (!isValidPhoneNumber (form.SHIP_PHONE.value, isUSA)) {
    +                alert (getOrderScriptMsg (MSGID_BADPHONE));
    +                form.SHIP_PHONE.focus ();
    +                return (false);
    +                }
    +            }
    +        }
    +    if (form.SHIP_EMAIL != null) {
    +        if (isBlank (form.SHIP_EMAIL.value)) {
    +            alert (getOrderScriptMsg (MSGID_NOEMAIL));
    +            form.SHIP_EMAIL.focus ();
    +            return (false);
    +            }
    +        if (!isValidEmail (form.SHIP_EMAIL.value)) {
    +            alert (getOrderScriptMsg (MSGID_BADEMAIL));
    +            form.SHIP_EMAIL.focus ();
    +            return (false);
    +            }
    +        }
    +    return (true);
    +    }
    +
    +function verifyQuantityField (form, control) {
    +   var maxQuantity = (form.MAXQUANTITY == null) ? 150 : parseInt (form.MAXQUANTITY.value);
    +   if ((parseInt (control.value) > maxQuantity) && (form.CCNUMBER != null) && (form.CCNUMBER.value.length >= 12)) {
    +       alert (getOrderScriptMsg (MSGID_BADQUANTITY, maxQuantity));
    +       setFocus (control);
    +       return (false);
    +       }
    +    return (true);
    +    }
    +
    +function verifyQuantityInfo (form) {
    +    if (form.QUANTITY == null) { 
    +       alert (getOrderScriptMsg (MSGID_CARTISEMPTY));
    +       return (false);
    +       }
    +    if (form.QUANTITY.type == null) {  // Is this an array?
    +        for (var i = 0; i < form.QUANTITY.length; i++) {
    +            if (!verifyQuantityField (form, form.QUANTITY[i])) {
    +               return (false);
    +               }
    +            }        
    +        return (true);
    +        }
    +    return (verifyQuantityField (form, form.QUANTITY));
    +    }
    +
    +function verifyCreditCardNumberChecksum (cardnum) {
    +    var idx = cardnum.length;
    +    var sum = 0;
    +    for (var sec = false; idx-- != 0; sec = !sec) {
    +        var tmp = cardnum.charAt (idx) - '0';
    +        if (sec) {
    +            tmp *= 2;
    +            if (tmp >= 10) {
    +                tmp -= 10;
    +                sum++;
    +                }
    +            }
    +        sum += tmp;
    +        }
    +    return ((sum % 10) == 0);
    +    }
    +         
    +function checkCardNumLength (form, cardnum, minlength, maxlength) {
    +    if (cardnum.length < minlength) {
    +        alert (getOrderScriptMsg (MSGID_CCNUMTOOSHORT));
    +        return (false);
    +        }
    +    if (cardnum.length > maxlength) {
    +        alert (getOrderScriptMsg (MSGID_CCNUMTOOLONG));
    +        return (false);
    +        }
    +    return (true);
    +    }
    +
    +function isDebitCard (cardtype) {
    +   return ("SOEL".indexOf (cardtype) != -1);
    +   }
    +
    +function getCardType (form, cardnum) {
    +    if ((form.CUSTOMERID != null) && (parseInt (form.CUSTOMERID.value) != 0) && (cardnum.length == 4)) {
    +       return ("*");
    +       }
    +    if (checkCardNumLength (form, cardnum, 12, 19)) {
    +       var d1 = parseInt (cardnum.substring (0, 1));
    +       var d2 = parseInt (cardnum.substring (0, 2));
    +       var d3 = parseInt (cardnum.substring (0, 3));
    +       var d4 = parseInt (cardnum.substring (0, 4));
    +       var d6 = parseInt (cardnum.substring (0, 6));  
    +       if ((d4 == 4903) || (d4 == 4905) || (d4 == 4911) || (d4 == 4936) || (d6 == 564182) || (d6 == 633110) || (d4 == 6333) || (d4 == 6759)) {
    +          return (CARDTYPE_SWITCH); // Switch (debit card)
    +          }
    +       if ((d4 == 6334) || (d4 == 6767)) {
    +          return (CARDTYPE_SOLO); // Solo (debit card)
    +          }
    +       if ((d4 == 6304) || (d4 == 6706) || (d4 == 6771) || (d4 == 6709)) {
    +          return (CARDTYPE_LASER); // Laser (debit card)
    +          }
    +       if (d1 == 4) {
    +          return (CARDTYPE_VISA);
    +          }                                              
    +       if (((d2 >= 51) && (d2 <= 55)) || ((d4 >= 2221) && (d4 <= 2720))) {
    +          return (CARDTYPE_MASTERCARD);
    +          }
    +       if ((d2 == 34) || (d2 == 37)) {
    +          return (CARDTYPE_AMEX);
    +          } 
    +       if (((d3 >= 300) && (d3 <= 305)) || ((d4 >= 3095) && (d4 <= 3099)) || (d2 == 36) || (d2 == 38) || (d2 == 39)) {
    +          return (CARDTYPE_DINERS);
    +          } 
    +       if ((d4 == 6011) ||	((d6 >= 622126) && (d6 <= 622925)) || ((d3 >= 644) && (d3 <= 649)) || (d2 == 65)) { 	
    +          return (CARDTYPE_DISCOVER);
    +          }       
    +       if ((d2 == 50) || ((d2 >= 56) && (d2 <= 69))) {
    +          return (CARDTYPE_MAESTRO); // Maestro (debit card)
    +          }                                      
    +       if (((d4 >= 3112) && (d4 <= 3120)) || ((d4 >= 3158) && (d4 <= 3159)) || ((d4 >= 3337) && (d4 <= 3349)) || ((d4 >= 3528) && (d4 <= 3589))) {
    +          return (CARDTYPE_JCB);
    +          } 
    +       alert (getOrderScriptMsg (MSGID_CCERROR, cardnum.substring (0, 4)));
    +       }
    +    return (null);
    +    }
    +
    +function verifyCreditCardInfo (form) {
    +    var method = (form.PAYMENTMETHOD == null) ? PAYMENTMETHOD_CREDITCARD : parseInt (form.PAYMENTMETHOD.value);
    +    if ((form.CCNUMBER != null) && ((method == PAYMENTMETHOD_CREDITCARD) || (method == PAYMENTMETHOD_DEBITCARD))) {
    +        var date = new Date ();
    +        var str = form.CCNUMBER.value;
    +        if (isBlank (str)) {
    +            alert (getOrderScriptMsg (MSGID_NOCCNUM));
    +            form.CCNUMBER.focus ();
    +            return (false);
    +            }
    +        if ((str.length >= 4) && (str.substring (0, 4).toLowerCase () == "pin=")) {
    +            return (true);
    +            }
    +        var cardtype = null;
    +        if (form.CCTP != null)  {
    +           if (form.CCTP.type == "select-one") {
    +              cardtype = form.CCTP.value;
    +              }
    +           else if (str.substring (0, 1) == "*") {
    +              cardtype = form.CCTP.value;
    +              }
    +           }
    +        var cardnum = getDigitsInString (str);                      
    +        if ((str.length < 12) || (str.indexOf (cardnum) != (str.length - 4))) {
    +           var chksumok = verifyCreditCardNumberChecksum (cardnum);
    +           if ((cardnum.length > 4) && (cardnum.length < 12) && chksumok) {
    +               return (true);
    +               }
    +           var cardnumtype = getCardType (form, cardnum);
    +           if (cardnumtype == null) {
    +              if (cardtype == null) {
    +                 // alert will already have been issued by getCardType
    +                 form.CCNUMBER.focus ();
    +                 return (false);
    +                 }
    +              }
    +           else {
    +              if ((cardtype != null) && (cardtype != cardnumtype) && (form.CCTP.type == "select-one")) {
    +                 alert (getOrderScriptMsg (MSGID_CARDTYPEMISMATCH));
    +                 form.CCTP.focus ();
    +                 return (false);
    +                 }
    +              cardtype = cardnumtype;
    +              } 
    +           if ((cardtype == CARDTYPE_AMEX) && (("0" == "-1") || ("0" == "-1"))) {
    +              alert (getOrderScriptMsg (MSGID_AMEXNOTACCEPTED));
    +              form.CCNUMBER.focus ();
    +              return (false);
    +              }
    +           if (!chksumok) {
    +               alert (getOrderScriptMsg (MSGID_BADCCNUM));
    +               form.CCNUMBER.focus ();
    +               return (false);
    +              }
    +           }
    +        if (method == PAYMENTMETHOD_DEBITCARD) {
    +            if (!isDebitCard (cardtype)) {
    +               alert (getOrderScriptMsg (MSGID_CARDISCREDITCARD));
    +               if (form.PAYMENTMETHOD != null) {
    +                  form.PAYMENTMETHOD.focus ();
    +                  }
    +               return (false);
    +               }
    +            if (getControlValue (form.CURRENCY) != "GBP") {
    +                alert (getOrderScriptMsg (MSGID_CCGBPONLY));
    +                form.CCNUMBER.focus ();
    +                return (false);
    +                }
    +            if ((parseInt (form.ISSUEMONTH.value) != 0) || (parseInt (form.ISSUEYEAR.value) != 0)) {
    +                var issueyear = parseInt (getControlText (form.ISSUEYEAR));
    +                if (isNaN (issueyear) || (issueyear < 1990) || (issueyear > date.getFullYear ())) {
    +                    alert (getOrderScriptMsg (MSGID_BADISSUEYEAR));
    +                    form.ISSUEYEAR.focus ();
    +                    return (false);
    +                    }
    +
    +                var issuemonth = parseInt (stripLeadingZeroes (getControlText (form.ISSUEMONTH)));
    +                if (isNaN (issuemonth) || (issuemonth < 1) || (issuemonth > 12)) {
    +                    alert (getOrderScriptMsg (MSGID_BADISSUEMONTH));
    +                    form.ISSUEMONTH.focus ();
    +                    return (false);
    +                    }
    +                }
    +            else if (isBlank (form.ISSUENUMBER.value)) {
    +                alert (getOrderScriptMsg (MSGID_NOISSUEINFO));
    +                form.ISSUENUMBER.focus ();
    +                return (false);
    +                }
    +            }
    +        else {
    +           if (isDebitCard (cardtype)) {
    +              alert (getOrderScriptMsg (MSGID_CARDISDEBITCARD));
    +              if (form.PAYMENTMETHOD != null) {
    +                 form.PAYMENTMETHOD.focus ();
    +                 }
    +              return (false);
    +              }
    +           if ((form.CVV.value.toUpperCase () != "X") && (form.CVV.value.toUpperCase () != "I")) {
    +               var cvvlen = getDigitsInString (form.CVV.value).length;
    +               var len = 0;
    +               switch (cardtype) {
    +                   case CARDTYPE_VISA:
    +                       if (cvvlen == 4) {
    +                          //alert (getOrderScriptMsg (MSGID_CCPURCHASECARD));
    +                          //form.CVV.focus ();
    +                          //return (false);
    +                          len = 4;
    +                          }       
    +                       else {
    +                          len = 3;
    +                          }
    +                       break;
    +                   case CARDTYPE_MASTERCARD:
    +                       len = 3;
    +                       break;
    +                   case CARDTYPE_AMEX:
    +                       len = 4;
    +                       break;
    +                   case CARDTYPE_DISCOVER:
    +                       len = 3;
    +                       break;
    +                   }                        
    +               if ((len != 0) && (len != cvvlen)) {
    +                   alert (getOrderScriptMsg (MSGID_CCSEC, len));
    +                   form.CVV.focus ();
    +                   return (false);
    +                   }
    +               }
    +
    +           var currency = (form.CURRENCY == null) ? "USD" : getControlValue (form.CURRENCY);
    +           if (!isDebitCard (cardtype)) {
    +              switch (cardtype) {
    +                  case CARDTYPE_VISA:
    +                  case CARDTYPE_MASTERCARD:
    +                      break;
    +                  default:
    +                      if (currency != "USD") {
    +                          alert (getOrderScriptMsg (MSGID_CCUSDONLY));
    +                          form.CCNUMBER.focus ();
    +                          return (false);
    +                          }
    +                      break;
    +                  }
    +               }
    +            }
    +
    +        var expyear = parseInt (getControlText (form.CCEXPIREYEAR));
    +        if (isNaN (expyear) || (expyear < 2002)) {
    +            alert (getOrderScriptMsg (MSGID_BADCCEXPYEAR));
    +            form.CCEXPIREYEAR.focus ();
    +            return (false);
    +            }
    +      
    +        var expmonth = parseInt (stripLeadingZeroes (getControlText (form.CCEXPIREMONTH)));
    +        if (isNaN (expmonth) || (expmonth < 1) || (expmonth > 12)) {
    +            alert (getOrderScriptMsg (MSGID_BADCCEXPMONTH));
    +            form.CCEXPIREMONTH.focus ();
    +            return (false);
    +            }
    +      
    +        if ((expyear == date.getFullYear ()) && (expmonth < (date.getMonth () + 1))) {
    +            alert (getOrderScriptMsg (MSGID_CCDATEEXPIRED));
    +            form.CCEXPIREMONTH.focus ();
    +            return (false);
    +            }
    +        if (expyear < date.getFullYear ()) {
    +            alert (getOrderScriptMsg (MSGID_CCYEAREXPIRED));
    +            form.CCEXPIREYEAR.focus ();
    +            return (false);
    +            }
    +        if (((expyear == (date.getFullYear () + 5)) && (expmonth > (date.getMonth () + 1))) || (expyear > (date.getFullYear () + 5))) {
    +            if (!confirm (getOrderScriptMsg (MSGID_CCFUTURE, expmonth + "/" + expyear))) {
    +                form.CCEXPIREYEAR.focus ();
    +                return (false);
    +                }
    +            }
    +        }
    +    return (true);
    +    }
    +      
    +function getIndexedField (control,index) {
    +   return ((control.type == null) ? control[index] : control);
    +   }
    +
    +function getFieldCount (control) {
    +   return ((control == null) ? 0 : ((control.type == null) ? control.length : 1));
    +   }
    +
    +function verifyRegisterInfo (form) {
    +   for (var fieldCount = getFieldCount (form.ITEMREGNAME), i = 0; i < fieldCount; i++) {
    +      var name = getIndexedField (form.ITEMREGNAME, i);
    +      if ((name.type != "hidden") && (isBlank (name.value) || startsWith (name.value, labelNameOfRecipient))) {
    +         alert (getOrderScriptMsg (MSGID_NOREGINFONAME));
    +         name.focus ();
    +         return (false);
    +         }
    +      }
    +   for (var fieldCount = getFieldCount (form.ITEMEMAIL), i = 0; i < fieldCount; i++) {
    +      var email = getIndexedField (form.ITEMEMAIL, i);
    +      if ((email.type != "hidden") && !isValidEmail (email.value)) {
    +         alert (getOrderScriptMsg (MSGID_NOREGINFOEMAIL));
    +         email.focus ();
    +         return (false);
    +         }
    +      }
    +   return (true);
    +   }
    +
    +function processOnSubmit (form) {
    +    if (form.USERGROUPID == null) {
    +        alert (getOrderScriptMsg (MSGID_NOUSERGROUPID));
    +        return (false);
    +        }
    +    if (isBlank (form.USERGROUPID.value)) {
    +        form.USERGROUPID.value = "@" + location.href;
    +        }
    +    else if (form.USERGROUPID.value.charAt (0) != '@') {
    +        form.USERGROUPID.value = "@" + form.USERGROUPID.value;
    +        }
    +    form.USERGROUPID.value = form.USERGROUPID.value + " Cookies=" + (navigator.cookieEnabled ? "Yes" : "No") + " Agent=" + navigator.userAgent;
    +    if (!isBlank (document.referrer)) {
    +        form.USERGROUPID.value = form.USERGROUPID.value + " Referrer=" + document.referrer;
    +        }
    +    if (!verifyQuantityInfo   (form) ||
    +        !verifyAddressInfo    (form) || 
    +        !verifyShippingInfo   (form) || 
    +        !verifyRegisterInfo   (form) ||
    +        !verifyCreditCardInfo (form) ) {
    +        return (false);
    +        }
    +    if ((form.EMAIL != null) && (form.EMAILCONFIRMATION != null) && !isBlank (form.EMAIL)) {
    +        if (!confirm (isBlank (form.EMAILCONFIRMATION.value) ? getOrderScriptMsg (MSGID_CONFIRMATION, form.EMAIL.value) : form.EMAILCONFIRMATION.value)) {
    +            setFocus (form.EMAIL);
    +            return (false);
    +            }
    +        }
    +    if ((form.SUBMISSIONID != null) && isBlank (form.SUBMISSIONID.value)) {
    +        form.SUBMISSIONID.value = new Date().getTime ();
    +        }
    +    return (true);
    +    }
    +        
    +function processOnClick (form) {
    +   var result = processOnSubmit (form);
    +   if (result == true) {
    +      form.submit ();
    +      }
    +   return (result);
    +   }
    +           
    +function process (form) {
    +   return (processOnClick (form));
    +   }
    +
    +function getRequiredCurrency (paymentmethod, currency){
    +   switch (parseInt (paymentmethod)) {
    +      case 2:
    +         currency = 'USD';
    +         break;
    +      case 5:
    +         currency = 'EUR';
    +         break;
    +      case 7:
    +         currency = 'GBP';
    +         break;
    +      }
    +   return (currency);
    +   }
    +
    +function setPaymentPage (form) {
    +   var page = "https://secure.bmtmicro.com/ShoppingCart/";
    +   if (form.CID != null) {
    +      var cid = form.CID.value;
    +      var sub = "";
    +      var i = cid.indexOf ("/");
    +      if (i != -1) {
    +         sub = cid.substring (i);
    +         cid = cid.substring (0, i);
    +         }
    +      cid = "" + parseInt (cid);
    +      while (cid.length < 5) {
    +         cid = "0" + cid;
    +         }
    +      page += cid + sub + "/";
    +      }
    +   switch (parseInt (form.PAYMENTMETHOD.value)) {
    +      default:
    +         form.PAYMENTMETHOD.value = "1";      
    +      case 1:
    +         page += "CheckOutCreditCard.html";
    +         break;
    +      case 2:
    +         page += "CheckOutCheck.html";
    +         break;
    +      case 5:
    +         page += "CheckOutDB.html";
    +         break;
    +      case 7:
    +         page += "CheckOutSwitchSolo.html";
    +         break;
    +      case 8:
    +         page += "CheckOutPayPal.html";
    +         break;
    +      }
    +   form.CURRENCY.value =  getRequiredCurrency(form.PAYMENTMETHOD.value, form.CURRENCY.value);
    +   form.NEXT_PAGE.value = page;
    +   }
    +
    +function gotoPaymentPage (form) {
    +   if (!verifyQuantityInfo (form) || !verifyAddressInfo (form) || !verifyCDOrder (form)) {
    +      return (false);
    +      }
    +   setPaymentPage (form);
    +   return (true);
    +   }
    +
    +
    +loadOrderScriptMsgs ();
    +//-->
    +</script>
    +
    +
    +
    +
    +</head>
    +
    +<!--
    +
    +END Import.CommonHeaders
    +
    +//-->
    +
    +<body onload="init (document.forms[0]);">
    +
    +<!--
    +
    +BEGIN IMPORT.HEADER
    +
    +//-->
    +
    +<div id="gb">
    +
    +<div id="logo">
    +  <a href="../index.html" class="logo"><img src="https://secure.bmtmicro.com/ShoppingCart/01830/12/img/dextronet-logo.gif" alt="Component Owl" border="0" /></a>
    +  <div class="link"><a href="http://www.componentowl.com/support?subject=Bmt+Order" onclick="window.open(this.href); return false;">Contact Us (Help)</a></div>
    +</div>
    +
    +<div id="menu">
    +  <ul><li><a href="better-splitbutton.html#" onclick="history.go(-1); return false;">&laquo; Go Back</a></li></ul>
    +  <div class="eb"></div>
    +</div>
    +
    +<div id="products">
    +
    +<!-- Begin Side Bar //-->
    +<div id="bills">
    +
    +  <div class="catcher securedorder">
    +    <h4>Secure Order</h4>
    +    <img src="https://secure.bmtmicro.com/ShoppingCart/01830/12/img/locked.gif" alt="Locked" width="48" height="48" />
    +    <p class="longtext">All orders are secured with strong 128-bit SSL encryption. Your information is absolutely safe.</p>
    +    <a href="javascript:OpenSecurityMetrics()"><img src="https://secure.bmtmicro.com/ShoppingCart/identity_theft_protected.gif" width="126" height="72"  alt="SecurityMetrics Identity Theft Protected" /></a>
    +    <a href="javascript:OpenCertDetails()"><img src="https://secure.bmtmicro.com/ShoppingCart/80x80_static.gif" height="73" width="88" alt="Click here for more details" class="middle" /></a>
    +    <a href="javascript:OpenSecurityMetrics()"><img src="https://secure.bmtmicro.com/ShoppingCart/sm_ccsafe_whborder.gif" alt="SecurityMetrics Identity Theft Protected" height="39" width="100" class="last" /></a>
    +  </div>
    +  <div class="catcher aboutbmt">
    +    <h4>About BMT Micro<br />ecommerce</h4>
    +    <p class="longtext">
    +      Orders are processed by BMT Micro Inc., which is a trusted ecommerce provider that Component Owl has contract with.
    +      You can contact BMT at <b>(910)792-9100</b> or via email at <a href="mailto:orders@bmtmicro.com">orders@bmtmicro.com</a>.
    +    </p>
    +    <p class="address">
    +      <strong>Mailing address:</strong><br />
    +      BMT Micro, Inc.<br />
    +      5019 Carolina Beach Rd Ste 202<br />
    +      Wilmington, NC 28412<br />
    +      USA
    +    </p>
    +    <p class="longtext">
    +      You can contact Component Owl at <a href="mailto:support@componentowl.com">support@componentowl.com</a>.<br /><br />
    +      Your information is used only to process your order and is 100% safe.
    +    </p>
    +  </div>
    +</div>
    +<!-- End Side Bar //-->
    +
    +<div id="contact-form">
    +
    +  <h1><img src="https://secure.bmtmicro.com/ShoppingCart/01830/12/img/heading-order.gif" alt="Secure Software Store" /></h1>
    +  <ul class="steps">
    +    <li class="first">Make Your Selection</li>
    +    <li class="active"><strong>Secure Payment</strong></li>
    +    <li>Your License Code</li>
    +  </ul>
    +
    +
    +  <noscript>
    +    <div align="center">
    +      <h2>JavaScript Required</h2>
    +      <hr >
    +      <div align="justify">
    +        Your Web Browser does not support javascript, or does not have javascript enabled.
    +        Please download a current version web browser or <a href="https://info.bmtmicro.com/faq/1045602167.html#1054666049" target="_blank">enable javascript in your browser</a> to order this
    +        product.<br ><br >
    +      </div>
    +      <!--
    +        <div>
    +        <a href="http://www.opera.com/download/" target="_blank"><img src="https://secure.bmtmicro.com/pics/downloadopera.gif" border="0" alt="Opera"></a><br >
    +        <a href="http://www.mozilla.org" target="_blank"><img src="https://secure.bmtmicro.com/pics/firefox.gif" border="0" alt="Firefox" ></a>&nbsp;
    +        <a href="http://channels.netscape.com/ns/browsers/download.jsp" target="_blank"><img src="https://secure.bmtmicro.com/pics/netscapenow.gif" border="0" alt="Netscape" ></a>&nbsp;
    +        <a href="http://www.microsoft.com/windows/ie/" target="_blank"><img src="https://secure.bmtmicro.com/pics/IE_6_v06.gif" border="0" alt="IE" ></a>&nbsp;
    +        </div>
    +      //-->
    +      <div>
    +        <p>If you would prefer to order by telephone, please contact BMT Micro with the product details at:<br >
    +        <br >
    +        US-Canada (Toll Free):&nbsp;<strong>800-414-4268</strong><br >
    +        International:&nbsp;<strong>910-792-9100</strong><br ><br >
    +        You can also visit our <a href="http://www.bmtmicro.com/BMTInfo_OrderingOptions.html">Ordering Options</a> page for other ordering options or contact us directly at <a href="mailto:orders@bmtmicro.com">orders@bmtmicro.com</a>.</p>
    +      </div>
    +    </div>
    +  </noscript>
    +
    +
    +<!--
    +
    +END IMPORT.HEADER
    +
    +//-->
    +
    +<form method="post" action="https://secure.bmtmicro.com/servlets/Orders.OrderProcessor" onsubmit="return validateForm (document.forms[0]);">
    +<input type="hidden" name="CID" value="1830/12" >
    +<input type="hidden" value="https://secure.bmtmicro.com/ShoppingCart/01830/12/thankyou.html" name="NEXT_PAGE" >
    +<input type="hidden" value="https://secure.bmtmicro.com/ShoppingCart/01830/12/thanksdelivery.html" name="DELIVERY_PAGE">
    +<input type="hidden" name="ACTION" value="1">
    +<input type="hidden" name="CLR" value="0">
    +<input type="hidden" name="CURRENCY" value="EUR">
    +<input type="hidden" name="PAYMENTMETHOD" value="1">
    +<input type="hidden" name="ACCOUNTID" value="0">
    +<input type="hidden" name="ORDERPARAMETERS" value="">
    +<h2 class="spad">
    +   <div class="heading"><img
    +src="https://secure.bmtmicro.com/ShoppingCart/01830/12/img/step1.gif"
    +alt="1" /> Review your cart</div>
    +   <div class="currency">
    +     <label for="CURRENCY_SEL"><b>Currency</b></label>&nbsp;&nbsp;
    +     <select name="CURRENCY_SEL" id="CURRENCY_SEL" onmousewheel="return
    +false;" onchange="javascript:currencyChanged(document.forms[0]);"
    +tabindex="1"><option value="AUD">Australian Dollar (AUD)</option><option value="BRL">Brazilian Real (BRL)</option><option value="BGN">Bulgarian Lev (BGN)</option><option value="CAD">Canadian Dollar (CAD)</option><option value="CNY">Chinese Yuan Renminbi (CNY)</option><option value="HRK">Croatian Kuna (HRK)</option><option value="CZK">Czech Koruna (CZK)</option><option value="DKK">Danish Krone (DKK)</option><option value="EUR" selected>Euro (EUR)</option><option value="HKD">Hong Kong Dollar (HKD)</option><option value="HUF">Hungarian Forint (HUF)</option><option value="INR">Indian Rupee (INR)</option><option value="IDR">Indonesian Rupiah (IDR)</option><option value="ILS">Israeli Shekel (ILS)</option><option value="JPY">Japanese Yen (JPY)</option><option value="MYR">Malaysian Ringgit (MYR)</option><option value="MXN">Mexican Peso (MXN)</option><option value="NZD">New Zealand Dollar (NZD)</option><option value="NOK">Norwegian Krone (NOK)</option><option value="PHP">Philippine Peso (PHP)</option><option value="PLN">Polish Zloty (PLN)</option><option value="GBP">Pound Sterling (GBP)</option><option value="RON">Romanian Leu (RON)</option><option value="RUB">Russian Rouble (RUB)</option><option value="SGD">Singapore Dollar (SGD)</option><option value="ZAR">South African Rand (ZAR)</option><option value="KRW">South Korean Won (KRW)</option><option value="SEK">Swedish Krona (SEK)</option><option value="CHF">Swiss Franc (CHF)</option><option value="THB">Thai Baht (THB)</option><option value="TRY">Turkish Lira (TRY)</option><option value="USD">US Dollar (USD)</option></select>
    +   </div>
    +</h2>
    +<!--
    +BEGIN Import.CartProductTable
    +
    +//-->
    +
    +
    +<table border="0" cellspacing="0" cellpadding="0" width="100%" title="Shopping Cart Contents" class="product-table">
    +  <tr>
    +    <!-- <td align="left" width="17%" class="tdhead">ProductId</td> //-->
    +    <th>Product Name</th>
    +    <th class="quantity">Licenses</th>
    +    <th class="number">Price</th>
    +    <th class="number">Total</th>
    +  </tr>
    +<tr class="rows">
    +  	<td class="product">Better SplitButton Commercial License with Source Code</td>
    +  	<td class="quantity">
    +      <input type="hidden" name="QUANTITY" value="1">
    +<select name="QUANTITY_SEL" style="width:48px;text-align:center" tabindex="1" onchange="quantitySelChanged(0);">
    +   <option value="1">1</option>
    +   <option value="2">2</option>
    +   <option value="3">3</option>
    +   <option value="4">4</option>
    +   <option value="5">5</option>
    +   <option value="6">6</option>
    +   <option value="7">7</option>
    +   <option value="8">8</option>
    +   <option value="9">9</option>
    +   <option value="10">10+</option>
    +
    +</select>
    +
    +
    +      <a href="better-splitbutton.html#" onclick="javascript:removeCartItem (0);" title="Remove Better SplitButton Commercial License with Source Code from cart" class="remove"><img src="https://secure.bmtmicro.com/ShoppingCart/01830/12/img/cross.gif" width="16" height="16" alt="Remove Better SplitButton Commercial License with Source Code from cart" border="0"></a>
    +      <input type="hidden" name="PRODUCTID" value="18300075">
    +      <input type="hidden" name="AID" value="">
    +      <input type="hidden" name="ITEMINFO" value="">
    +    </td>
    +    <td class="number price">60.28&nbsp;€</td>
    +    
    +    <td class="number total">60.28&nbsp;€</td>
    +</tr>
    +
    +</table>
    +
    +
    +<!--
    +
    +END Import.CartProductTable
    +
    +//-->
    +
    +<table border="0" cellspacing="0" cellpadding="0" width="100%">
    +<tr>
    +<td width="10%" align="center" valign="middle">
    +<script language="javascript" type="text/javascript">
    +<!--
    +createCDLink (document.forms[0],null);
    +// -->
    +</script>
    +</td>
    +<td valign="middle">
    +<script language="javascript" type="text/javascript">
    +<!--
    +createCDLink (document.forms[0],'<b>Get your full order on a CD for 11.25 € (S&H included)<\/b>');
    +// -->
    +</script>
    +</td>
    +<td width="35%">
    +   <table border="0" cellspacing="0" cellpadding="0" width="100%" class="total-table">
    +         <tr>
    +      <td align="right" class="price">19%&nbsp;VAT <strong>11.45&nbsp;€</strong></td>
    +
    +   </tr>
    +   <tr>
    +      <td align="right" class="price">Total&nbsp;price: <strong>71.73&nbsp;€</strong></td>
    +  </tr>
    +  </table>
    +</td>
    +</tr>
    +
    +
    +
    +<tr>
    +<td colspan="3">
    +    <table border="0" cellspacing="0" cellpadding="0" width="100%" class="recalculate">
    +   <tr>
    +      <td align="left" class="pad" width="40%"></td>
    +      <td align="right" width="1%"><input value="Recalculate" tabindex="2" name="Update Cart" type="button" onClick="updateCart(document.forms[0]);"></td>
    +   </tr>
    +  </table>
    +
    +</td>
    +</tr>
    +
    +</table>
    +<div id="customerLogin" style="left:50px; top:100px;">
    +<div id="handle">&nbsp; Retrieve Customer Information <img src="https://secure.bmtmicro.com/ShoppingCart/close.gif" border="0" alt="Close" align="right" onclick="javascript:toggleLayer('customerLogin');" class="textmiddle" ></div>
    +<table cellspacing="0" cellpadding="0" width="100%" align="center" title="Contact Information">
    +
    + <tr><td colspan="4">&nbsp;</td></tr>
    +<tr>
    +<td width="5%">&nbsp;</td>
    +<td width="60%" >Email address:</td><td><input type="text" size="32" name="LOGINNAME" style="width: 200px" onKeyPress="return processEnter(document.forms[0],event);" ></td>
    +<td width="25%">&nbsp;</td>
    +</tr>
    +<tr>
    +<td width="5%">&nbsp;</td>
    +<td>Password:</td><td><input type="password" autocomplete="off" size="32" name="PASSWORD" style="width: 200px" onKeyPress="return processEnter(document.forms[0],event);" ></td>
    +<td width="25%">&nbsp;</td>
    +</tr>
    +
    +<tr><td colspan="3">&nbsp;</td></tr>
    +<tr><td>&nbsp;</td><td colspan="2" align="center"><input type="button" name="OK" value="&nbsp;&nbsp;OK&nbsp;&nbsp;" onClick="chkLogin(document.forms[0]);"> </td> <td>&nbsp;</td></tr>
    +<tr align="center"><td colspan="4">&nbsp;</td></tr>
    +<tr align="center"><td colspan="4"><span class="note">If you do not have a password or have forgotten your password, fill in your email and leave the password blank.  Your password will then be emailed to you.</span></td></tr>
    +<tr align="center"><td colspan="4">&nbsp;</td></tr>
    +
    +</table>
    +</div>
    +
    +<script type="text/javascript">
    +var theHandle = document.getElementById("handle");
    +var theRoot = document.getElementById("customerLogin");
    +Drag.init(theHandle, theRoot);
    +</script>
    +
    +
    +
    +
    +<!--
    +
    +BEGIN Import.ContactInfoTable
    +
    +//-->
    +
    +<script type="text/javascript">
    +function populateCompanyField(form) {
    +    if (form.LICENSETO[1].checked) {
    +      form.COMPANY.value = form.REGISTERNAME.value;
    +    } else {
    +      form.COMPANY.value = "";
    +    }
    +    if (form.LICENSETO[0].checked) {
    +      form.REGISTERNAME.value = "";
    +    }
    +}
    +function companyFieldVisible(visible, someone_else) {
    +   if (visible === false) {
    +     document.getElementById("company-field").style.display = 'none';
    +   } else {
    +     document.getElementById("company-field").style.display = '';
    +     if (someone_else) {
    +       document.getElementById("company-label").style.display = 'none';
    +       document.getElementById("someoneelse-label").style.display = '';
    +     } else {
    +       document.getElementById("company-label").style.display = '';
    +       document.getElementById("someoneelse-label").style.display = 'none';
    +     }
    +   }
    +}
    +</script>
    +<h2 class="lpad"><img src="https://secure.bmtmicro.com/ShoppingCart/01830/12/img/step2.gif" alt="2" /> Provide us with your contact information</h2>
    +<div class="fieldssec">
    +  <table cellspacing="0" cellpadding="0" width="100%" align="center" title="Contact Information">
    +    <tr>
    +      <td colspan="2" valign="middle">
    +        <table cellspacing="0" cellpadding="0" width="100%" align="center">
    +          <tr>
    +            <td class="pad" width="100%" colspan="2">
    +              Please fill out the information below, as it appears on your credit card.
    +            </td>
    +          </tr>
    +        </table>
    +      </td>
    +    </tr>
    +    <tr><td colspan="2">&nbsp;</td></tr>
    + <tr>
    +      <td class="pad" width="35%"><label for="FIRSTNAME"><b>First&nbsp;name</b></label></td>
    +      <td class="pad" width="65%"><input type="text" tabindex="4" size="30" id="FIRSTNAME" name="FIRSTNAME" maxlength="20"></td>
    +    </tr>
    +    <tr>
    +      <td class="pad"><label for="LASTNAME"><b>Last&nbsp;name</b></label></td>
    +      <td class="pad"><input type="text" tabindex="5" size="30"  id="LASTNAME" name="LASTNAME" maxlength="25"></td>
    +    </tr>
    +    <tr>
    +      <td class="pad"><label for="LICENSETO-ME"><b>License&nbsp;is&nbsp;for</b></label></td>
    +      <td class="pad license-to">
    +        <input type="radio" tabindex="6" id="LICENSETO-ME" name="LICENSETO" value="me" onclick="companyFieldVisible(false);" checked="checked" />
    +          <label for="LICENSETO-ME">Me</label>
    +        <input type="radio" tabindex="6" id="LICENSETO-COMPANY" name="LICENSETO" value="company" onclick="companyFieldVisible(true);" />
    +          <label for="LICENSETO-COMPANY">My Company (...)</label>
    +        <input type="radio" tabindex="6" id="LICENSETO-SOMEONEELSE" name="LICENSETO" value="someoneelse" onclick="companyFieldVisible(true,true);" />
    +        <label for="LICENSETO-SOMEONEELSE" class="last">Someone Else (...)</label>
    +      </td>
    +    </tr>
    +    <tr style="display: none" id="company-field">
    +      <td class="pad"><label id="company-label"
    +for="REGISTERNAME"><b>Company&nbsp;name</b></label><label
    +id="someoneelse-label"
    +for="REGISTERNAME"><b>License&nbsp;to&nbsp;this&nbsp;name</b></label>
    +</td>
    +      <td class="pad"><input type="hidden" id="COMPANY" name="COMPANY" value="" /><input type="text" id="REGISTERNAME" tabindex="7" size="30" value=""  name="REGISTERNAME" maxlength="50"></td>
    +    </tr>
    +
    +<tr valign="top">
    +<td class="pad address"><label for="ADDRESS1"><b>Address</b></label></td>
    +<td class="pad"><input type="text" tabindex="8" size="30"  id="ADDRESS1" name="ADDRESS1" maxlength="50"><br>
    +<input type="text" tabindex="9" size="30"  name="ADDRESS2" maxlength="50"></td>
    +</tr>
    +<tr>
    +<td class="pad"><label for="CITY"><b>City</b></label> </td>
    +<td class="pad"><input type="text" tabindex="10" size="30"  id="CITY" name="CITY" maxlength="50"> </td>
    +</tr>
    +<tr>
    +
    +
    +
    +</tr>
    +<tr>
    +<td class="pad"><label for="ZIP"><b>Postal code</b></label></td>
    +<td class="pad"><input type="text" tabindex="12" size="30"  id="ZIP" name="ZIP" maxlength="20"></td>
    +</tr>
    +<tr>
    +<td class="pad"><label for="COUNTRY"><b>Country</b></label></td>
    +<td class="pad"><select tabindex="13" id="COUNTRY" name="COUNTRY"  onmousewheel="return false;"  onChange="javascript:updateCart(document.forms[0]);" style="width:213px">
    +<option value="">Please Select Country</option>
    +<option value="AF">Afghanistan</option><option value="AX">Åland Islands</option><option value="AL">Albania</option><option value="DZ">Algeria</option><option value="AS">American Samoa</option><option value="AD">Andorra</option><option value="AO">Angola</option><option value="AI">Anguilla</option><option value="AG">Antigua and Barbuda</option><option value="AR">Argentina</option><option value="AM">Armenia</option><option value="AW">Aruba</option><option value="AC">Ascension Island</option><option value="AU">Australia</option><option value="AT">Austria</option><option value="AZ">Azerbaijan</option><option value="BS">Bahamas</option><option value="BH">Bahrain</option><option value="IB">Balearic Islands</option><option value="BD">Bangladesh</option><option value="BB">Barbados</option><option value="BY">Belarus</option><option value="BE">Belgium</option><option value="BZ">Belize</option><option value="BJ">Benin</option><option value="BM">Bermuda</option><option value="BT">Bhutan</option><option value="BO">Bolivia</option><option value="BQ">Bonaire, Saba, and Sint Eustatius</option><option value="BA">Bosnia and Herzegovina</option><option value="BW">Botswana</option><option value="BR">Brazil</option><option value="BN">Brunei Darussalam</option><option value="BG">Bulgaria</option><option value="BF">Burkina Faso</option><option value="BI">Burundi</option><option value="KH">Cambodia</option><option value="CM">Cameroon</option><option value="CA">Canada</option><option value="IC">Canary Islands</option><option value="CV">Cape Verde</option><option value="KY">Cayman Islands</option><option value="CF">Central African Republic</option><option value="XB">Ceuta</option><option value="TD">Chad</option><option value="XE">Channel Islands</option><option value="CL">Chile</option><option value="CN">China</option><option value="CX">Christmas Island</option><option value="CC">Cocos (Keeling) Islands</option><option value="CO">Colombia</option><option value="KM">Comoros</option><option value="CG">Congo</option><option value="CD">Congo, Democratic Republic of the</option><option value="CK">Cook Islands</option><option value="CR">Costa Rica</option><option value="CI">Côte d'Ivoire</option><option value="HR">Croatia</option><option value="CU">Cuba</option><option value="CW">Curaçao</option><option value="CY">Cyprus</option><option value="CZ">Czech Republic</option><option value="DK">Denmark</option><option value="DJ">Djibouti</option><option value="DM">Dominica</option><option value="DO">Dominican Republic</option><option value="EC">Ecuador</option><option value="EG">Egypt</option><option value="SV">El Salvador</option><option value="GQ">Equatorial Guinea</option><option value="ER">Eritrea</option><option value="EE">Estonia</option><option value="ET">Ethiopia</option><option value="FK">Falkland Islands</option><option value="FO">Faroe Islands</option><option value="FJ">Fiji</option><option value="FI">Finland</option><option value="FR">France</option><option value="GF">French Guiana</option><option value="PF">French Polynesia</option><option value="GA">Gabon</option><option value="GM">Gambia</option><option value="GE">Georgia</option><option value="DE" selected>Germany</option><option value="GH">Ghana</option><option value="GI">Gibraltar</option><option value="GR">Greece</option><option value="GL">Greenland</option><option value="GD">Grenada</option><option value="GP">Guadeloupe</option><option value="GU">Guam</option><option value="GT">Guatemala</option><option value="GG">Guernsey</option><option value="GN">Guinea</option><option value="GW">Guinea-Bissau</option><option value="GY">Guyana</option><option value="HT">Haiti</option><option value="HN">Honduras</option><option value="HK">Hong Kong</option><option value="HU">Hungary</option><option value="IS">Iceland</option><option value="IN">India</option><option value="ID">Indonesia</option><option value="IQ">Iraq</option><option value="IE">Ireland</option><option value="IM">Isle of Man</option><option value="IL">Israel</option><option value="IT">Italy</option><option value="JM">Jamaica</option><option value="JP">Japan</option><option value="JE">Jersey</option><option value="JO">Jordan</option><option value="KZ">Kazakhstan</option><option value="KE">Kenya</option><option value="KI">Kiribati</option><option value="KR">Korea, Republic of</option><option value="XK">Kosovo</option><option value="KW">Kuwait</option><option value="KG">Kyrgyzstan</option><option value="LA">Laos</option><option value="LV">Latvia</option><option value="LB">Lebanon</option><option value="LS">Lesotho</option><option value="LR">Liberia</option><option value="LY">Libya</option><option value="LI">Liechtenstein</option><option value="LT">Lithuania</option><option value="LU">Luxembourg</option><option value="MO">Macau</option><option value="MK">Macedonia</option><option value="MG">Madagascar</option><option value="MW">Malawi</option><option value="MY">Malaysia</option><option value="MV">Maldives</option><option value="ML">Mali</option><option value="MT">Malta</option><option value="MH">Marshall Islands</option><option value="MQ">Martinique</option><option value="MR">Mauritania</option><option value="MU">Mauritius</option><option value="YT">Mayotte</option><option value="XC">Melilla</option><option value="MX">Mexico</option><option value="FM">Micronesia</option><option value="MD">Moldova</option><option value="MC">Monaco</option><option value="MN">Mongolia</option><option value="ME">Montenegro</option><option value="MS">Montserrat</option><option value="MA">Morocco</option><option value="MZ">Mozambique</option><option value="NA">Namibia</option><option value="NR">Nauru</option><option value="NP">Nepal</option><option value="NL">Netherlands</option><option value="NC">New Caledonia</option><option value="NZ">New Zealand</option><option value="NI">Nicaragua</option><option value="NE">Niger</option><option value="NG">Nigeria</option><option value="NU">Niue</option><option value="NF">Norfolk Island</option><option value="MP">Northern Mariana Islands</option><option value="NO">Norway</option><option value="OM">Oman</option><option value="PK">Pakistan</option><option value="PW">Palau</option><option value="PS">Palestinian Territory</option><option value="PA">Panama</option><option value="PG">Papua New Guinea</option><option value="PY">Paraguay</option><option value="PE">Peru</option><option value="PH">Philippines</option><option value="PN">Pitcairn Islands</option><option value="PL">Poland</option><option value="PT">Portugal</option><option value="PR">Puerto Rico</option><option value="QA">Qatar</option><option value="RE">Réunion</option><option value="RO">Romania</option><option value="RU">Russian Federation</option><option value="RW">Rwanda</option><option value="BL">Saint Barthélemy</option><option value="SH">Saint Helena</option><option value="KN">Saint Kitts and Nevis</option><option value="LC">Saint Lucia</option><option value="MF">Saint Martin (France)</option><option value="PM">Saint Pierre and Miquelon</option><option value="VC">Saint Vincent and the Grenadines</option><option value="WS">Samoa</option><option value="SM">San Marino</option><option value="ST">São Tomé and Príncipe</option><option value="SA">Saudi Arabia</option><option value="SN">Senegal</option><option value="RS">Serbia</option><option value="SC">Seychelles</option><option value="SL">Sierra Leone</option><option value="SG">Singapore</option><option value="SX">Sint Maarten</option><option value="SK">Slovak Republic</option><option value="SI">Slovenia</option><option value="SB">Solomon Islands</option><option value="SO">Somalia</option><option value="ZA">South Africa</option><option value="GS">South Georgia and the South Sandwich Islands</option><option value="ES">Spain</option><option value="LK">Sri Lanka</option><option value="SR">Suriname</option><option value="SJ">Svalbard and Jan Mayen</option><option value="SZ">Swaziland</option><option value="SE">Sweden</option><option value="CH">Switzerland</option><option value="XA">Tahiti</option><option value="TW">Taiwan</option><option value="TJ">Tajikistan</option><option value="TZ">Tanzania</option><option value="TH">Thailand</option><option value="TG">Togo</option><option value="TK">Tokelau</option><option value="TO">Tonga</option><option value="TT">Trinidad and Tobago</option><option value="TA">Tristan da Cunha</option><option value="TN">Tunisia</option><option value="TR">Turkey</option><option value="TM">Turkmenistan</option><option value="TC">Turks and Caicos Islands</option><option value="TV">Tuvalu</option><option value="UG">Uganda</option><option value="UA">Ukraine</option><option value="AE">United Arab Emirates</option><option value="GB">United Kingdom</option><option value="US">United States</option><option value="UY">Uruguay</option><option value="UZ">Uzbekistan</option><option value="VU">Vanuatu</option><option value="VA">Vatican City</option><option value="VE">Venezuela</option><option value="VN">Viet Nam</option><option value="VG">Virgin Islands (British)</option><option value="VI">Virgin Islands (US)</option><option value="WK">Wake Island</option><option value="WF">Wallis and Futuna Islands</option><option value="YE">Yemen</option><option value="ZM">Zambia</option><option value="ZW">Zimbabwe</option>
    +</select>
    +</td>
    +</tr>
    + <tr>
    + <td class="pad"><label for="EMAIL"><b>Email</b></label></td>
    + <td class="pad"><input type="text" tabindex="14" size="30"  id="EMAIL" name="EMAIL" maxlength="50"></td>
    +</tr>
    +</table>
    +  <fieldset>
    +    <legend><b>Optional Information</b></legend>
    +    <table cellspacing="0" cellpadding="0">
    +      <tr>
    +        <td style="width: 192px"><label for="HOWHEARD">How did you hear about us?</label></td>
    +        <td class="pad"><input type="text" id="HOWHEARD" size="30"  name="HOWHEARD" tabindex="17" maxlength="50"></td>
    +      </tr>
    +      <tr>
    +        <td><label for="DISCOUNTCODE">Discount code <span class="note">(if applicable)</span></label></td>
    +        <td class="pad nopad"><input type="text" id="DISCOUNTCODE" name="DISCOUNTCODE" value="" tabindex="18" size="30" onChange="javascript:updateCart(document.forms[0]);"></td>
    +      </tr>
    +           <tr>
    +<td class="pad" width="35%"><label for="VATNUMBER"><b>VAT&nbsp;exemption&nbsp;number</b></label></td>
    +<td class="pad" width="65%"><input id="VATNUMBER" name="VATNUMBER" value="" tabindex="19" size="30" maxlength="15" onChange="javascript:updateCart(document.forms[0]);">
    +<span class="note"><a target="_blank" href="https://secure.bmtmicro.com/cart/VAT.html">What is VAT?</a></span>
    +</td>
    +</tr>
    +
    +    </table>
    +</fieldset>
    +</div>
    +
    +
    +
    +<!--
    +
    +END Import.ContactInfoTable
    +
    +//-->
    +
    +<h2 class="lpad"><img src="https://secure.bmtmicro.com/ShoppingCart/01830/12/img/step3.gif" alt="3" /> Enter your payment information</h2>
    +
    +
    +<div id="paymentInfo" class="fieldssec">
    +  <table cellspacing="0" cellpadding="0" width="100%" align="center">
    +<tr>
    +<td class="pad" width="35%"><label for="PAYMENTMETHOD_SEL"><b>Payment&nbsp;method</b></label></td>
    +<td class="pad" width="65%"><select name="PAYMENTMETHOD_SEL" id="PAYMENTMETHOD_SEL" tabindex="20" onchange="paymentMethodChanged (document.forms[0]);">
    +<option value="1" selected="selected">Credit Card</option>
    +</select>
    +<noscript><br>Javascript must be enabled in your web browser to select other methods of payment!</noscript>
    +</td>
    +</tr>
    +
    +  <tr>
    +    <td class="pad"><label for="CCNUMBER"><b>Card&nbsp;number</b></label></td>
    +    <td class="pad"><input type="hidden" name="CCTP" value=""><input name="CCNUMBER" type="text" id="CCNUMBER" tabindex="22" size="30"> <img src="https://secure.bmtmicro.com/ShoppingCart/01830/12/img/lock.gif" alt="Secure" class="lock" height="16" width="16" /> <b>Secure</b> </td>
    +  </tr>
    +  <tr>
    +    <td class="pad"><label for="EXPIRATIONDATE"><b>Expiration&nbsp;date</b></label></td>
    +    <td class="pad"><select id="EXPIRATIONDATE" name="CCEXPIREMONTH" tabindex="23"><option value="" selected>Month</option>
    +<option value="01">01</option>
    +<option value="02">02</option>
    +<option value="03">03</option>
    +<option value="04">04</option>
    +<option value="05">05</option>
    +<option value="06">06</option>
    +<option value="07">07</option>
    +<option value="08">08</option>
    +<option value="09">09</option>
    +<option value="10">10</option>
    +<option value="11">11</option>
    +<option value="12">12</option>
    +</select>
    +			/
    +      <select name="CCEXPIREYEAR" tabindex="24"><option selected value="">Year</option>
    +<option value="2018">2018</option>
    +<option value="2019">2019</option>
    +<option value="2020">2020</option>
    +<option value="2021">2021</option>
    +<option value="2022">2022</option>
    +<option value="2023">2023</option>
    +<option value="2024">2024</option>
    +<option value="2025">2025</option>
    +<option value="2026">2026</option>
    +<option value="2027">2027</option>
    +<option value="2028">2028</option>
    +<option value="2029">2029</option>
    +<option value="2030">2030</option>
    +<option value="2031">2031</option>
    +<option value="2032">2032</option>
    +<option value="2033">2033</option>
    +<option value="2034">2034</option>
    +<option value="2035">2035</option>
    +<option value="2036">2036</option>
    +<option value="2037">2037</option>
    +<option value="2038">2038</option>
    +<option value="2039">2039</option>
    +<option value="2040">2040</option>
    +<option value="2041">2041</option>
    +<option value="2042">2042</option>
    +<option value="2043">2043</option>
    +<option value="2044">2044</option>
    +<option value="2045">2045</option>
    +<option value="2046">2046</option></select></td>
    +  </tr>
    +
    +
    +  <tr>
    +    <td class="pad"><label for="CVV"><b>3-digit&nbsp;security&nbsp;code</b></label></td>
    +    <td class="pad"><input type="text" name="CVV" id="CVV" tabindex="25" style="width:35px">
    +      <span class="note"><a target="_blank" href="https://secure.bmtmicro.com/resources/info/CVV.html">Where is the security code?</a></span>
    +    </td>
    +  </tr>
    +  <tr>
    +    <td class="pad nopad"><label for="PONUMBER">Purchase&nbsp;order&nbsp;number</label></td>
    +    <td class="pad nopad"><input id="PONUMBER" type="text" name="PONUMBER" tabindex="26" size="30"></td>
    +  </tr>
    +  <tr>
    +    <td class="ptop"><span class="note">&nbsp;</span></td>
    +    <td class="ptop"><span class="note">Optional - required for commercial credit cards only.</span>
    +    </td>
    +  </tr>
    +
    +
    +
    +
    +
    +</table>
    +</div>
    +
    +
    +<br />
    +<table cellspacing="0" cellpadding="0" width="100%" align="center">
    +<tr>
    +<td colspan="2" align="center">
    +
    +<input name="USERGROUPID" type="hidden" value="shopping_cart1830/12-Cart">
    +<input type="hidden" name="ERROR_PAGE" value="https://secure.bmtmicro.com/ShoppingCart/01830/12/CartError.html">
    + <input name="REFERRAL" type="hidden" value="##REFERRAL##">
    +  <input name="SUBMISSIONID" type="hidden" value="">
    + <input name="Submit" value="Place secure order" alt="Place secure order" class="secureorder" type="image" src="https://secure.bmtmicro.com/ShoppingCart/01830/12/img/blank.gif" tabindex="29" ><br /><div style="display: none"><input type="submit" name="Submit" value="Place secure order"></div> </td>
    +</tr>
    +
    + <tr><td colspan="2">&nbsp;</td></tr>
    +
    + <tr><td colspan="2" align="center"><img alt="We accept Visa, MasterCard/Maestro, American Expess, Discover, Diners, JCB, Switch/Solo, and Paypal" src="https://secure.bmtmicro.com/ShoppingCart/cardsbar.gif" border="0" ></td></tr>
    +
    +<tr>
    +<td align="center" colspan="2"><span class="note">Orders processed by: BMT Micro, Inc. 5019 Carolina Beach Rd Ste 202 Wilmington, NC 28412&nbsp;&nbsp;<a href="http://www.bmtmicro.com/developer-privacy-policy.html" target="_blank">Privacy Policy</a></span></td>
    +</tr>
    +
    +</table>
    +
    +
    +
    +</form>
    +<!--
    +
    +BEGIN Import.Footer
    +
    +//-->
    +
    +</div>
    +</div>
    +
    +<div class="footer">
    +  <div class="align">
    +    Orders are processed by BMT Micro Inc. Copyright &copy; BMT Micro Inc. All Rights Reserved. Contact: (910)792-9100<br />
    +    Copyright &copy; Component Owl. All rights reserved.
    +  </div>
    +</div>
    +
    +</div>
    +<script type="text/javascript">
    +var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
    +document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
    +</script>
    +<script type="text/javascript">
    +try {
    +var pageTracker = _gat._getTracker("UA-16362539-2");
    +pageTracker._trackPageview();
    +} catch(err) {}</script>
    +
    +<!--
    +
    +END Import.Footer
    +
    +//-->
    +
    +</body>
    +</html>
    \ No newline at end of file
    diff --git a/pricing-licensing/better-thumbnail-browser.html b/pricing-licensing/better-thumbnail-browser.html
    new file mode 100644
    index 0000000..d4c57ae
    --- /dev/null
    +++ b/pricing-licensing/better-thumbnail-browser.html
    @@ -0,0 +1,392 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    +<meta name="keywords" content="buy .NET controls, buy thumbnail browser, purchase thumbnail browser, Better Thumbnail Browser purchase, buy Better Thumbnail Browser, order Better Thumbnail Browser, Better Thumbnail Browser pricing, Better Thumbnail Browser store, Component Owl store" />
    +<meta name="description" content="Purchase and view pricing for Better Thumbnail Browser and other controls by Component Owl." />
    +<meta name="author" content="Dextronet" />
    +<meta http-equiv="Title" content="Purchase Better Thumbnail Browser, pricing and licensing information" />
    +<meta name="copyright" content="(c) 2010-2018 Dextronet" />
    +<meta name="distribution" content="Global" />
    +<meta name="rating" content="General" />
    +<meta name="robots" content="All" />
    +<meta http-equiv="Content-Language" content="en" />
    +<meta name="verify-v1" content="NK0H1gWia1vxGZ2Yhr59gsS0/P2/USBI1DVA18VkzjM=" />
    +<meta name="google-site-verification" content="O7Dwtzu5x_Mob9u98uxqpZ-_wCLGpEkx2IL0UYVQ4ac" />
    +<title>Purchase Better Thumbnail Browser, pricing and licensing information</title>
    +<link rel="alternate" type="application/rss+xml" title="Component Owl Feed: Latest releases, news and tips &amp; tricks from our blog" href="../feeds.rss" />
    +<link rel="alternate" type="application/rss+xml" title="Component Owl's Comics: Latest comic strips for developers by Libor Tinka" href="../comics.rss" />
    +    <link href="../stylesheets/base_packaged.css%3F1455269822.css" media="screen" rel="stylesheet" type="text/css" />
    +    
    +  </head>
    +  <body>
    +  
    +    <div class="d-page">
    +      
    +      <script type="text/javascript">
    +//<![CDATA[
    +var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_email":"a valid email","thanks_for_why_uninstall":"Thank you very much for your feedback!","thank_you":"Thank you!","current_email":"valid current email","thanks_for_subscription":"<div class=\"sent-saved-notice\">Thank You for your subscription!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","message":"message","required":"required","download_in_progress":"Your download should be in progress...","your_full_name":"your full name","order_thanks_for_message":"<div class=\"sent-saved-notice\">Thank you very much for your message!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","thanks_for_message":"Thank you very much for your message!<br /><a href="http://www.componentowl.com/pricing-licensing/\&quot;#\"" onclick=\"send_another(); return false;\">Send Another Message</a>"}
    +//]]>
    +</script>
    +
    +<div class="d-header d-placing">
    +  
    +  <ul class="d-menu">
    +    <li class=""><a href="../index.html" class="menu-item">Home</a></li>
    +    <li class=" with-dropdown">
    +      <a href="../better-listview.html" class="menu-item">Products</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 370px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          <div class="dropdown-category">WinForms Components</div>
    +          
    +            
    +            <a href="../better-listview.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-32-1355160256.png?1355135056" /> Better ListView<br /><span class="subline">Ultimate ListView control for .NET</span></a>
    +          
    +            
    +            <a href="../better-thumbnail-browser.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-thumbnail-browser-32-1355160281.png?1355135081" /> Better Thumbnail Browser<br /><span class="subline">Thumbnail loading and browsing control for .NET</span></a>
    +          
    +            
    +            <a href="../better-splitbutton.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-splitbutton-32-1355160307.png?1355135107" /> Better SplitButton<br /><span class="subline">Free customizable dropdown button control</span></a>
    +          
    +            
    +            <a href="../better-listview-express.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-express-32-1355160327.png?1355135127" /> Better ListView Express<br /><span class="subline">Free edition with less features</span></a>
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="active">
    +      <a href="better-listview.html" class="menu-item">Purchase</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 330px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          
    +            
    +            <a href="better-listview.html" class="featured-item">Better ListView</a>
    +          
    +        
    +          
    +            
    +            <a href="better-thumbnail-browser.html" class="featured-item">Better Thumbnail Browser</a>
    +          
    +        
    +          
    +            
    +            <a href="better-splitbutton.html">Better SplitButton</a>
    +          
    +        
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class=""><a href="../support.html" class="menu-item">Support</a></li>
    +    <li class=""><a href="../articles.html" class="menu-item">Articles</a></li>
    +    <li class=""><a href="../blog.html" class="menu-item">Blog</a></li>
    +    <li class=""><a href="../comics/43.html" class="menu-item">Comics</a></li>
    +    <li class=""><a href="../about-us.html" class="menu-item">About Us</a></li>
    +  </ul>
    +  <div class="d-logo">
    +    <a href="../index.html" class="logoimg"><img alt="Component Owl" src="../images/componentowl.gif%3F1455269978" /></a>
    +    <g:plusone size="medium" count="false" href="http://www.componentowl.com"></g:plusone>
    +  </div>
    +</div>
    +      
    +      
    +      
    +        <div class="d-placing">
    +          <div class="d-content-wrap">
    +            <div class="order-content">
    +  
    +  <h1>Licensing &amp; pricing for Better Thumbnail Browser</h1>
    +<p class="section-info">Purchase thumbnail image viewing and browsing component for .NET.</p>
    +
    +<ul id="buy-nav" class="nav">
    +  <li><a href="better-thumbnail-browser.html" class="current">Buy new licenses</a></li>
    +  <li><a href="better-thumbnail-browser.html">Renew license</a></li>
    +</ul>
    +
    +<div id="buy-panels">
    +  <div class="panel" style="display: none">
    +    
    +    <form action="https://secure.bmtmicro.com/servlets/Orders.ShoppingCart" method="get">
    +      <input id="CID" name="CID" type="hidden" value="1830/12" />
    +      <input id="CLR" name="CLR" type="hidden" value="0" />
    +      <input class="product-id" id="PRODUCTID" name="PRODUCTID" type="hidden" value="" />
    +    
    +      <table cellspacing="0">
    +        <tr>
    +          <th colspan="3">Single developer licenses</th>
    +        </tr>
    +        <tr>
    +          <td>Single developer license with 1 year subscription</td>
    +          <td class="price">$295</td>
    +          <td class="buy"><input class="buy" data-value="18300112" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <th colspan="3">5 developers licenses</th>
    +        </tr>
    +        <tr>
    +          <td>5 developer license with 1 year subscription</td>
    +          <td class="price">$845</td>
    +          <td class="buy"><input class="buy" data-value="18300113" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <th colspan="3">Site licenses - use at 1 site (office or building)</th>
    +        </tr>
    +        <tr>
    +          <td>Site license with 1 year subscription</td>
    +          <td class="price">$1895</td>
    +          <td class="buy"><input class="buy" data-value="18300114" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <td>Site license with source code and 1 year subscription</td>
    +          <td class="price">$3995</td>
    +          <td class="buy"><input class="buy" data-value="18300115" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <th colspan="3">Enterprise license - use world-wide at unlimited sites</th>
    +        </tr>
    +        <tr>
    +          <td>Enterprise license with source code and 1 year subscription</td>
    +          <td class="price">$8995</td>
    +          <td class="buy"><input class="buy" data-value="18300116" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +      </table>
    +      
    +    </form>
    +  
    +  </div>
    +  
    +  <div class="panel" style="display: none">
    +    
    +    <form action="https://secure.bmtmicro.com/servlets/Orders.ShoppingCart" method="get">
    +      <input id="CID" name="CID" type="hidden" value="1830/12" />
    +      <input id="CLR" name="CLR" type="hidden" value="0" />
    +      <input class="product-id" id="PRODUCTID" name="PRODUCTID" type="hidden" value="" />
    +
    +      <table cellspacing="0">
    +        <tr>
    +          <th colspan="3">Single developer licenses</th>
    +        </tr>
    +        <tr>
    +          <td>Renew single developer 1 year subscription</td>
    +          <td class="price">$118</td>
    +          <td class="buy"><input class="renew" data-value="18300117" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <th colspan="3">5 developers licenses</th>
    +        </tr>
    +        <tr>
    +          <td>Renew 5 developer 1 year subscription</td>
    +          <td class="price">$338</td>
    +          <td class="buy"><input class="renew" data-value="18300118" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <th colspan="3">Site licenses - use at 1 site (office or building)</th>
    +        </tr>
    +        <tr>
    +          <td>Renew site license 1 year subscription</td>
    +          <td class="price">$758</td>
    +          <td class="buy"><input class="renew" data-value="18300119" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <td>Renews site license 1 year subscription with source code</td>
    +          <td class="price">$1598</td>
    +          <td class="buy"><input class="renew" data-value="18300120" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +        <tr>
    +          <th colspan="3">Enterprise license - use world-wide at unlimited sites</th>
    +        </tr>
    +        <tr>
    +          <td>Renew enterprise license 1 year subscription with source code</td>
    +          <td class="price">$3598</td>
    +          <td class="buy"><input class="renew" data-value="18300121" name="PRODUCTID" onclick="bmtForm(this)" type="submit" value="" /></td>
    +        </tr>
    +      </table>
    +      
    +    </form>
    +    
    +  </div>
    +</div>
    +
    +<div class="licenses-info">
    +  
    +  <div class="block">
    +    <p>All licenses are:</p>
    +    <ul class="common">
    +      <li>Life-time (non-expiring)</li>
    +      <li>Royalty free</li>
    +    </ul>
    +  </div>
    +  
    +  <div class="block last">
    +    <p>Subscription gets you:</p>
    +    <ul class="common">
    +      <li>Support</li>
    +      <li>Updates</li>
    +    </ul>
    +  </div>
    +  
    +</div>
    +
    +<div class="licenses-info">
    +
    +    <p>What license do I need?</p>
    +    <ul class="common">
    +      <li>If only 1 developer works on your current and future projects, then the "Single developer license" is for you.</li>
    +      <li>If 2-5 developers works on your current and future projects, then the "5 developer license" is for you.</li>
    +      <li>If more than 5 developers work on your current and future projects, then the "Site license" is for you.</li>
    +      <li>If you have multiple teams in different locations, then the "Enterprise license" is for you.</li>
    +    </ul> 
    +  
    +</div>
    +
    +  
    +</div>
    +
    +          </div>
    +        </div>
    +      
    +      
    +      
    +      <div class="d-footer">
    +  <div class="d-placing">
    +    
    +    <div class="left">
    +      <div class="latest-posts">
    +        <h3 class="latest_from_blog"><a href="../blog.html">Latest From Our Blog</a></h3>
    +        
    +          <h4><a href="../blog/index.html%3Fp=927.html">Activation issues and how to solve them</a></h4>
    +          <div class="post-info">Wednesday, 01 March 2017</div>
    +        
    +          <h4><a href="../blog/index.html%3Fp=921.html">The Three Main Advantages Better ListView has Over the Classic .NET Framework</a></h4>
    +          <div class="post-info">Thursday, 09 February 2017</div>
    +        
    +          <h4><a href="../blog/index.html%3Fp=914.html">BLV and Internet Explorer</a></h4>
    +          <div class="post-info">Sunday, 13 November 2016</div>
    +        
    +          <h4><a href="../blog/index.html%3Fp=906.html">Centering Images in Better ListView Sub-items</a></h4>
    +          <div class="post-info">Wednesday, 06 August 2014</div>
    +        
    +          <h4><a href="../blog/index.html%3Fp=901.html">Sub-item Check Boxes in Better ListView</a></h4>
    +          <div class="post-info">Sunday, 06 July 2014</div>
    +        
    +      </div>
    +      <div class="other-posts"><a href="../blog.html">See more posts &raquo;</a></div>
    +    </div>
    +    
    +    <div class="right">
    +      <div class="news">
    +        <ul class="links">
    +          <li><a href="../feeds.rss" class="rss">Subscribe to our RSS</a></li>
    +          <li><a href="http://twitter.com/ComponentOwl" class="twitter">Follow us on twitter</a></li>
    +        </ul>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="../betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="../betterlistview.exe" onclick="download_email('better-listview');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better SplitButton 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="../bettersplitbutton.exe" onclick="download_email('better-splitbutton');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better Thumbnail Browser 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="../betterthumbnailbrowser.exe" onclick="download_email('better-thumbnail-browser');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item last-item">
    +          <div class="date">08<span>Apr</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.14.0 released!</h4>
    +            <p>
    +              
    +                <a href="../better-listview-express/releases%3Fsince=3.14.0.html">See what's new</a>
    +                or
    +              
    +              <a href="../betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +      </div>
    +    </div>
    +    
    +  </div>
    +  <div class="d-placing">
    +    <hr />
    +    <div class="copy"><div class="social"><a href="../support.html" class="feedback">Contact Us (Feedback)</a> <span>|</span> <a href="../feeds.rss" class="rss">RSS</a> <span>|</span> <a href="http://twitter.com/ComponentOwl" class="twitter">Twitter</a> <span>|</span> <a href="../sitemap.html" class="sitemap">Sitemap</a> <span>|</span> Our <a href="../index.html" class="stdl">task management software</a> that uses Better ListView</div>
    +Copyright &copy; 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our <a href="../eula.html">EULA</a>, <a href="../disclaimer.html">Disclaimer</a> and <a href="../privacy-policy.html">Privacy Policy</a>.<br /></div>
    +  </div>
    +  
    +</div>
    +      
    +    </div>
    +    
    +    <script src="../javascripts/app_packaged.js%3F1455269826" type="text/javascript"></script>
    +    <script type="text/javascript">
    +
    +  var _gaq = _gaq || [];
    +  _gaq.push(['_setAccount', 'UA-16362539-4']);
    +  _gaq.push(['_trackPageview']);
    +
    +  (function() {
    +    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    +    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    +    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    +  })();
    +
    +</script>
    +<script src="http://load.sumome.com/" data-sumo-site-id="854b5e00f297990012cc230023375a00787c0000216621002775a800d79ad500" async="async"></script>
    +    
    +    <!-- Place this tag after the last plusone tag -->
    +    <script type="text/javascript">
    +      (function() {
    +        var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    +        po.src = 'https://apis.google.com/js/plusone.js';
    +        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
    +      })();
    +    </script>
    +  
    +  </body>
    +</html>
    diff --git a/privacy-policy.html b/privacy-policy.html
    new file mode 100644
    index 0000000..cbbc4f0
    --- /dev/null
    +++ b/privacy-policy.html
    @@ -0,0 +1,293 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    +<meta name="keywords" content="Component Owl privacy policy, privacy policy" />
    +<meta name="description" content="Read the ComponentOwl.com website privacy policy" />
    +<meta name="author" content="Dextronet" />
    +<meta http-equiv="Title" content="Component Owl privacy policy" />
    +<meta name="copyright" content="(c) 2010-2018 Dextronet" />
    +<meta name="distribution" content="Global" />
    +<meta name="rating" content="General" />
    +<meta name="robots" content="All" />
    +<meta http-equiv="Content-Language" content="en" />
    +<meta name="verify-v1" content="NK0H1gWia1vxGZ2Yhr59gsS0/P2/USBI1DVA18VkzjM=" />
    +<meta name="google-site-verification" content="O7Dwtzu5x_Mob9u98uxqpZ-_wCLGpEkx2IL0UYVQ4ac" />
    +<title>Component Owl privacy policy</title>
    +<link rel="alternate" type="application/rss+xml" title="Component Owl Feed: Latest releases, news and tips &amp; tricks from our blog" href="feeds.rss" />
    +<link rel="alternate" type="application/rss+xml" title="Component Owl's Comics: Latest comic strips for developers by Libor Tinka" href="comics.rss" />
    +    <link href="stylesheets/base_packaged.css%3F1455269822.css" media="screen" rel="stylesheet" type="text/css" />
    +    
    +  </head>
    +  <body>
    +  
    +    <div class="d-page">
    +      
    +      <script type="text/javascript">
    +//<![CDATA[
    +var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_email":"a valid email","thanks_for_why_uninstall":"Thank you very much for your feedback!","thank_you":"Thank you!","current_email":"valid current email","thanks_for_subscription":"<div class=\"sent-saved-notice\">Thank You for your subscription!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","message":"message","required":"required","download_in_progress":"Your download should be in progress...","your_full_name":"your full name","order_thanks_for_message":"<div class=\"sent-saved-notice\">Thank you very much for your message!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","thanks_for_message":"Thank you very much for your message!<br /><a href="http://www.componentowl.com/\&quot;#\"" onclick=\"send_another(); return false;\">Send Another Message</a>"}
    +//]]>
    +</script>
    +
    +<div class="d-header d-placing">
    +  
    +  <ul class="d-menu">
    +    <li class=""><a href="index.html" class="menu-item">Home</a></li>
    +    <li class=" with-dropdown">
    +      <a href="better-listview.html" class="menu-item">Products</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 370px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          <div class="dropdown-category">WinForms Components</div>
    +          
    +            
    +            <a href="better-listview.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-32-1355160256.png?1355135056" /> Better ListView<br /><span class="subline">Ultimate ListView control for .NET</span></a>
    +          
    +            
    +            <a href="better-thumbnail-browser.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-thumbnail-browser-32-1355160281.png?1355135081" /> Better Thumbnail Browser<br /><span class="subline">Thumbnail loading and browsing control for .NET</span></a>
    +          
    +            
    +            <a href="better-splitbutton.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-splitbutton-32-1355160307.png?1355135107" /> Better SplitButton<br /><span class="subline">Free customizable dropdown button control</span></a>
    +          
    +            
    +            <a href="better-listview-express.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-express-32-1355160327.png?1355135127" /> Better ListView Express<br /><span class="subline">Free edition with less features</span></a>
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="">
    +      <a href="pricing-licensing/better-listview.html" class="menu-item">Purchase</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 330px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-listview.html" class="featured-item">Better ListView</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-thumbnail-browser.html" class="featured-item">Better Thumbnail Browser</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-splitbutton.html">Better SplitButton</a>
    +          
    +        
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="active"><a href="support.html" class="menu-item">Support</a></li>
    +    <li class=""><a href="articles.html" class="menu-item">Articles</a></li>
    +    <li class=""><a href="blog.html" class="menu-item">Blog</a></li>
    +    <li class=""><a href="comics/43.html" class="menu-item">Comics</a></li>
    +    <li class=""><a href="about-us.html" class="menu-item">About Us</a></li>
    +  </ul>
    +  <div class="d-logo">
    +    <a href="index.html" class="logoimg"><img alt="Component Owl" src="images/componentowl.gif%3F1455269978" /></a>
    +    <g:plusone size="medium" count="false" href="http://www.componentowl.com"></g:plusone>
    +  </div>
    +</div>
    +      
    +      
    +      
    +        <div class="d-placing">
    +          <div class="d-content-wrap">
    +            <div class="legal-content">
    +  
    +  <h1>Our Commitment To Privacy</h1>
    +
    +<p>Your privacy is important to us. To better protect your privacy we provide this notice explaining our online information practices and the choices you can make 
    +  about the way your information is collected and used. You retain rights to all your information and data.</p>
    +
    +<p>Your credit card information is used by our BMT Micro ecommerce partner only to process your order and it is not stored in any way and never viewed by us 
    +  or available to us.</p>
    +
    +<h2>The Information We Collect</h2>
    +
    +<p>We collect only the necessary contact information when you contact us and personal information provided by you when you purchase a product from us.</p>
    +
    +
    +<h2>The Way We Use Information</h2>
    +
    +<p>We do not share your personal information with outside parties except to the extent necessary to complete your order.</p>
    +
    +<p>The information provided by you is used only to process your order and/or to inform you about new products and product updates. 
    +  You can opt-out from these email updates.</p>
    +
    +<p>We use non-identifying and aggregate information to better design our website and products.</p>
    +
    +<p>When you contact us, we might use a part of the email message in our promotion materials as a testimonial, without publishing your full name. 
    +  You have to right to decline any such use and we will promptly remove any such materials in 24 hours after your written request.</p>
    +
    +<p>We reserve the right to publish the name and logo of your company in the list of our customers. We will promptly remove the name of your company 
    +  in 24 hours after your written request.</p>
    +
    +<p>Finally, we never use or share the personally identifiable information provided to us online in ways unrelated to the ones described above without 
    +  also providing you an opportunity to opt-out or otherwise prohibit such unrelated uses.</p>
    +
    +
    +<h2>Our Commitment To Data Security</h2>
    +
    +<p>To prevent unauthorized access, maintain data accuracy, and ensure the correct use of information, we have put in place appropriate physical, 
    +  electronic, and managerial procedures to safeguard and secure the information we collect online.</p>
    +
    +
    +<h2>How You Can Access Or Correct Your Information</h2>
    +
    +<p>You can access or correct all your personally identifiable information that we collect online and maintain by contacting us.</p>
    +
    +
    +<h2>How To Contact Us</h2>
    +
    +<p>Should you have other questions or concerns about these privacy policies, please contact us via our <a href="support.html">support form</a>.</p>
    +  
    +</div>
    +          </div>
    +        </div>
    +      
    +      
    +      
    +      <div class="d-footer">
    +  <div class="d-placing">
    +    
    +    <div class="left">
    +      <div class="latest-posts">
    +        <h3 class="latest_from_blog"><a href="blog.html">Latest From Our Blog</a></h3>
    +        
    +          <h4><a href="blog/index.html%3Fp=927.html">Activation issues and how to solve them</a></h4>
    +          <div class="post-info">Wednesday, 01 March 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=921.html">The Three Main Advantages Better ListView has Over the Classic .NET Framework</a></h4>
    +          <div class="post-info">Thursday, 09 February 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=914.html">BLV and Internet Explorer</a></h4>
    +          <div class="post-info">Sunday, 13 November 2016</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=906.html">Centering Images in Better ListView Sub-items</a></h4>
    +          <div class="post-info">Wednesday, 06 August 2014</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=901.html">Sub-item Check Boxes in Better ListView</a></h4>
    +          <div class="post-info">Sunday, 06 July 2014</div>
    +        
    +      </div>
    +      <div class="other-posts"><a href="blog.html">See more posts &raquo;</a></div>
    +    </div>
    +    
    +    <div class="right">
    +      <div class="news">
    +        <ul class="links">
    +          <li><a href="feeds.rss" class="rss">Subscribe to our RSS</a></li>
    +          <li><a href="http://twitter.com/ComponentOwl" class="twitter">Follow us on twitter</a></li>
    +        </ul>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistview.exe" onclick="download_email('better-listview');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better SplitButton 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="bettersplitbutton.exe" onclick="download_email('better-splitbutton');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better Thumbnail Browser 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterthumbnailbrowser.exe" onclick="download_email('better-thumbnail-browser');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item last-item">
    +          <div class="date">08<span>Apr</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.14.0 released!</h4>
    +            <p>
    +              
    +                <a href="better-listview-express/releases%3Fsince=3.14.0.html">See what's new</a>
    +                or
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +      </div>
    +    </div>
    +    
    +  </div>
    +  <div class="d-placing">
    +    <hr />
    +    <div class="copy"><div class="social"><a href="support.html" class="feedback">Contact Us (Feedback)</a> <span>|</span> <a href="feeds.rss" class="rss">RSS</a> <span>|</span> <a href="http://twitter.com/ComponentOwl" class="twitter">Twitter</a> <span>|</span> <a href="sitemap.html" class="sitemap">Sitemap</a> <span>|</span> Our <a href="index.html" class="stdl">task management software</a> that uses Better ListView</div>
    +Copyright &copy; 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our <a href="eula.html">EULA</a>, <a href="disclaimer.html">Disclaimer</a> and <a href="privacy-policy.html">Privacy Policy</a>.<br /></div>
    +  </div>
    +  
    +</div>
    +      
    +    </div>
    +    
    +    <script src="javascripts/app_packaged.js%3F1455269826" type="text/javascript"></script>
    +    <script type="text/javascript">
    +
    +  var _gaq = _gaq || [];
    +  _gaq.push(['_setAccount', 'UA-16362539-4']);
    +  _gaq.push(['_trackPageview']);
    +
    +  (function() {
    +    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    +    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    +    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    +  })();
    +
    +</script>
    +<script src="http://load.sumome.com/" data-sumo-site-id="854b5e00f297990012cc230023375a00787c0000216621002775a800d79ad500" async="async"></script>
    +    
    +    <!-- Place this tag after the last plusone tag -->
    +    <script type="text/javascript">
    +      (function() {
    +        var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    +        po.src = 'https://apis.google.com/js/plusone.js';
    +        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
    +      })();
    +    </script>
    +  
    +  </body>
    +</html>
    \ No newline at end of file
    diff --git a/quick-start-guide/better-listview/index.html b/quick-start-guide/better-listview/index.html
    new file mode 100644
    index 0000000..19d7315
    --- /dev/null
    +++ b/quick-start-guide/better-listview/index.html
    @@ -0,0 +1,227 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml">
    +<head>
    +<meta content="cs" http-equiv="Content-Language">
    +<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    +<title>Better ListView Documentation</title>
    +<link href="../../documentation/better-listview/data/style.css" rel="stylesheet" type="text/css">
    +<link href="../../documentation/better-listview/resources/main.css" media="screen" rel="stylesheet" type="text/css">
    +</head>
    +<body class="index"><div class="placing">
    +    <h1>
    +      <strong>Better ListView Documentation
    +              </strong>
    +    </h1>
    +<div class="banner">
    +  <a href="../../better-listview.html"><img src="../../documentation/better-listview/resources/overview.gif" alt="Better ListView" class="ss"></a>
    +  <div class="inside">
    +    <div class="text">Better ListView: Ultimate .NET ListView replacement control for WinForms (C#, VB.NET)</div>
    +    <span class="dbtn-c dbtn-hilight"><span class="dbtn-w"><a href="../../betterlistview.exe" class="dbtn">Download</a></span></span>
    +    <span class="dbtn-c"><span class="dbtn-w"><a href="../../better-listview.html" class="dbtn">More Info</a></span></span>
    +  </div>
    +</div>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-introduction.html">
    +        <strong>Introduction, Comparison</strong>
    +      </a>
    +      <br><span class="toc-description">What this documentation covers; brief comparison to regular .NET
    +  ListView</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../better-listview/quick-start-guide.html">
    +        <strong>Quick Start</strong>
    +      </a>
    +      <br><span class="toc-description">Step-by-step tutorial for using Better ListView in your
    +  application</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-background-image.html">
    +        <strong>Background Image</strong>
    +      </a>
    +      <br><span class="toc-description">Image on the control background, setting its layout and
    +  opacity</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-checkboxes.html">
    +        <strong>Check Boxes</strong>
    +      </a>
    +      <br><span class="toc-description">Enabling two and three state check boxes on items</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-collections.html">
    +        <strong>Collections</strong>
    +      </a>
    +      <br><span class="toc-description">Working with collections of columns, items, sub-items,
    +  groups</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-columns.html">
    +        <strong>Columns</strong>
    +      </a>
    +      <br><span class="toc-description">Hiding, resizing and reordering column headers</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-context-menus.html">
    +        <strong>Context Menus</strong>
    +      </a>
    +      <br><span class="toc-description">Displaying context menus on the control, column headers, groups
    +  and items</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-data.html">
    +        <strong>Data Binding</strong>
    +      </a>
    +      <br><span class="toc-description">Complex binding of custom list-based data to the
    +  control</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-drag-drop.html">
    +        <strong>Drag and Drop</strong>
    +      </a>
    +      <br><span class="toc-description">Setting-up Drag and Drop functionality and effects</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-embedded-controls.html">
    +        <strong>Embedded Controls</strong>
    +      </a>
    +      <br><span class="toc-description">Custom item and sub-item editing controls</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-empty-text.html">
    +        <strong>Empty Text</strong>
    +      </a>
    +      <br><span class="toc-description">Displaying customized text on empty list</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-focus.html">
    +        <strong>Focusing Elements</strong>
    +      </a>
    +      <br><span class="toc-description">How items, sub-items and groups can be focused and how to detect
    +  focus changes</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-groups.html">
    +        <strong>Groups</strong>
    +      </a>
    +      <br><span class="toc-description">Working with item groups</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-hit-test.html">
    +        <strong>Hit Test</strong>
    +      </a>
    +      <br><span class="toc-description">Getting info for cursor position in the control</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-insertion-mark.html">
    +        <strong>Insertion Mark</strong>
    +      </a>
    +      <br><span class="toc-description">Specifying insertion mark location and apperance</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-item-hierarchy.html">
    +        <strong>Item Hierarchy</strong>
    +      </a>
    +      <br><span class="toc-description">Setting-up tree-like item hierarchy (parent and child items), item
    +  indentation</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-item-reorder.html">
    +        <strong>Item Reordering</strong>
    +      </a>
    +      <br><span class="toc-description">Changing item order automatically with Drag and Drop</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-items.html">
    +        <strong>Items</strong>
    +      </a>
    +      <br><span class="toc-description">Working with ListView items</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-label-edit.html">
    +        <strong>Label Editing</strong>
    +      </a>
    +      <br><span class="toc-description">Inline editing of items and sub-items</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-layout.html">
    +        <strong>Layout Properties</strong>
    +      </a>
    +      <br><span class="toc-description">Element and element part sizes and padding, multi-line text, image
    +  border</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-multi-line.html">
    +        <strong>Multi-line Items</strong>
    +      </a>
    +      <br><span class="toc-description">Setting up items with multiple lines of text</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-owner-draw.html">
    +        <strong>Owner Drawing</strong>
    +      </a>
    +      <br><span class="toc-description">Custom drawing over the control and its parts</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-performance.html">
    +        <strong>Performance</strong>
    +      </a>
    +      <br><span class="toc-description">Understanding Better ListView performance settings</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-save-load.html">
    +        <strong>Saving and Loading ListView Content</strong>
    +      </a>
    +      <br><span class="toc-description">Storing and retrieving items and groups in binary or XML
    +  format</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-search.html">
    +        <strong>Searching Items</strong>
    +      </a>
    +      <br><span class="toc-description">Item searching by typing or programmatically</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-serialization.html">
    +        <strong>Serialization</strong>
    +      </a>
    +      <br><span class="toc-description">Overview of Better ListView serialization capabilities</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-sort.html">
    +        <strong>Sorting Items</strong>
    +      </a>
    +      <br><span class="toc-description">Ordering items with multiple columns and custom
    +  comparers</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-sub-items.html">
    +        <strong>Sub-items</strong>
    +      </a>
    +      <br><span class="toc-description">Working with sub-items which are attached under items</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-text-formatting.html">
    +        <strong>Text Formatting</strong>
    +      </a>
    +      <br><span class="toc-description">Text alignment and trimming</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-tooltips.html">
    +        <strong>Tooltips</strong>
    +      </a>
    +      <br><span class="toc-description">Displaying customized tooltips on control and its parts</span>
    +    </p>
    +    <p class="toc-entry">
    +      <a href="../../documentation/better-listview/data/chapter-views.html">
    +        <strong>Views</strong>
    +      </a>
    +      <br><span class="toc-description">Ways of displaying items, detecting view change</span>
    +    </p>
    +    <table cellpadding="0" class="footer"><tr>
    +<td style="width: 50%">Better ListView Documentation</td>
    +        <td style="width: 50%; text-align: right;">
    +              Copyright © 2010-2012  <a href="../../index.html" target="_blank">ComponentOwl.com</a>
    +</td>
    +      </tr></table>
    +</div></body>
    +</html>
    diff --git a/sitemap.html b/sitemap.html
    new file mode 100644
    index 0000000..bbb21ca
    --- /dev/null
    +++ b/sitemap.html
    @@ -0,0 +1,398 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    +<meta name="keywords" content="list view, listview, list view control, list view component, .net list view, list view replacement, list view alternative, improved list view, enhanced list view" />
    +<meta name="description" content="Better ListView by Component Owl is a .NET WinForms control designed to replace the standard list view control included with C#/VB.net." />
    +<meta name="author" content="Dextronet" />
    +<meta http-equiv="Title" content="Better ListView .NET control: Improved List View control for C# and VB.NET (Windows Forms)" />
    +<meta name="copyright" content="(c) 2010-2018 Dextronet" />
    +<meta name="distribution" content="Global" />
    +<meta name="rating" content="General" />
    +<meta name="robots" content="All" />
    +<meta http-equiv="Content-Language" content="en" />
    +<meta name="verify-v1" content="NK0H1gWia1vxGZ2Yhr59gsS0/P2/USBI1DVA18VkzjM=" />
    +<meta name="google-site-verification" content="O7Dwtzu5x_Mob9u98uxqpZ-_wCLGpEkx2IL0UYVQ4ac" />
    +<title>Better ListView .NET control: Improved List View control for C# and VB.NET (Windows Forms)</title>
    +<link rel="alternate" type="application/rss+xml" title="Component Owl Feed: Latest releases, news and tips &amp; tricks from our blog" href="feeds.rss" />
    +<link rel="alternate" type="application/rss+xml" title="Component Owl's Comics: Latest comic strips for developers by Libor Tinka" href="comics.rss" />
    +    <link href="stylesheets/base_packaged.css%3F1455269822.css" media="screen" rel="stylesheet" type="text/css" />
    +    
    +  </head>
    +  <body>
    +  
    +    <div class="d-page">
    +      
    +      <script type="text/javascript">
    +//<![CDATA[
    +var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_email":"a valid email","thanks_for_why_uninstall":"Thank you very much for your feedback!","thank_you":"Thank you!","current_email":"valid current email","thanks_for_subscription":"<div class=\"sent-saved-notice\">Thank You for your subscription!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","message":"message","required":"required","download_in_progress":"Your download should be in progress...","your_full_name":"your full name","order_thanks_for_message":"<div class=\"sent-saved-notice\">Thank you very much for your message!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","thanks_for_message":"Thank you very much for your message!<br /><a href="http://www.componentowl.com/\&quot;#\"" onclick=\"send_another(); return false;\">Send Another Message</a>"}
    +//]]>
    +</script>
    +
    +<div class="d-header d-placing">
    +  
    +  <ul class="d-menu">
    +    <li class=""><a href="index.html" class="menu-item">Home</a></li>
    +    <li class=" with-dropdown">
    +      <a href="better-listview.html" class="menu-item">Products</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 370px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          <div class="dropdown-category">WinForms Components</div>
    +          
    +            
    +            <a href="better-listview.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-32-1355160256.png?1355135056" /> Better ListView<br /><span class="subline">Ultimate ListView control for .NET</span></a>
    +          
    +            
    +            <a href="better-thumbnail-browser.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-thumbnail-browser-32-1355160281.png?1355135081" /> Better Thumbnail Browser<br /><span class="subline">Thumbnail loading and browsing control for .NET</span></a>
    +          
    +            
    +            <a href="better-splitbutton.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-splitbutton-32-1355160307.png?1355135107" /> Better SplitButton<br /><span class="subline">Free customizable dropdown button control</span></a>
    +          
    +            
    +            <a href="better-listview-express.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-express-32-1355160327.png?1355135127" /> Better ListView Express<br /><span class="subline">Free edition with less features</span></a>
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="">
    +      <a href="pricing-licensing/better-listview.html" class="menu-item">Purchase</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 330px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-listview.html" class="featured-item">Better ListView</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-thumbnail-browser.html" class="featured-item">Better Thumbnail Browser</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-splitbutton.html">Better SplitButton</a>
    +          
    +        
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class=""><a href="support.html" class="menu-item">Support</a></li>
    +    <li class=""><a href="articles.html" class="menu-item">Articles</a></li>
    +    <li class=""><a href="blog.html" class="menu-item">Blog</a></li>
    +    <li class=""><a href="comics/43.html" class="menu-item">Comics</a></li>
    +    <li class=""><a href="about-us.html" class="menu-item">About Us</a></li>
    +  </ul>
    +  <div class="d-logo">
    +    <a href="index.html" class="logoimg"><img alt="Component Owl" src="images/componentowl.gif%3F1455269978" /></a>
    +    <g:plusone size="medium" count="false" href="http://www.componentowl.com"></g:plusone>
    +  </div>
    +</div>
    +      
    +      
    +      
    +        <div class="d-placing">
    +          <div class="d-content-wrap">
    +            <div class="subpage sitemap-content">
    +  
    +  <h1>ComponentOwl.com Sitemap</h1>
    +  
    +  <h2>Component Owl - .NET controls for WinForms&nbsp;/&nbsp;</h2>
    +  
    +  <ul class="common top">
    +    <li><strong><a href="index.html">Home</a></strong></li>
    +    
    +    <li>
    +      <strong><a href="better-listview.html">Better ListView</a></strong>
    +      
    +        <ul class="common">
    +        
    +          
    +        
    +          
    +            <li>
    +              <a href="better-listview.html">Overview</a>
    +              
    +            </li>
    +          
    +        
    +          
    +            <li>
    +              <a href="better-listview/screenshots.html">Screenshots</a>
    +              
    +            </li>
    +          
    +        
    +          
    +            <li>
    +              <a href="better-listview/comparison-table.html">Comparison</a>
    +              
    +            </li>
    +          
    +        
    +          
    +            <li>
    +              <a href="better-listview/resources.html">Resources</a>
    +              
    +            </li>
    +          
    +        
    +          
    +            <li>
    +              <a href="better-listview/story.html">Story</a>
    +              
    +            </li>
    +          
    +        
    +        </ul>
    +      
    +    
    +    <li>
    +      <strong><a href="better-thumbnail-browser.html">Better Thumbnail Browser</a></strong>
    +      
    +        <ul class="common">
    +        
    +          
    +        
    +          
    +            <li>
    +              <a href="better-thumbnail-browser.html">Overview</a>
    +              
    +            </li>
    +          
    +        
    +          
    +            <li>
    +              <a href="better-thumbnail-browser/screenshots.html">Screenshots</a>
    +              
    +            </li>
    +          
    +        
    +        </ul>
    +      
    +    
    +    <li>
    +      <strong><a href="better-splitbutton.html">Better SplitButton</a></strong>
    +      
    +        <ul class="common">
    +        
    +          
    +            <li>
    +              <a href="better-splitbutton.html">Overview</a>
    +              
    +            </li>
    +          
    +        
    +          
    +            <li>
    +              <a href="better-splitbutton/screenshots.html">Screenshots</a>
    +              
    +            </li>
    +          
    +        
    +        </ul>
    +      
    +    
    +    <li>
    +      <strong><a href="better-listview-express.html">Better ListView Express</a></strong>
    +      
    +        <ul class="common">
    +        
    +          
    +            <li>
    +              <a href="better-listview-express.html">Overview</a>
    +              
    +            </li>
    +          
    +        
    +          
    +            <li>
    +              <a href="better-listview-express/comparison-with-full-version.html">Comparison With Regular ListView and Full Version</a>
    +              
    +            </li>
    +          
    +        
    +        </ul>
    +      
    +    
    +    </li>
    +    
    +    <li>
    +      <strong><a href="pricing-licensing/better-listview.html">Pricing &amp; Licensing for Better ListView</a></strong>
    +    </li>
    +    
    +    <li>
    +      <strong><a href="pricing-licensing/better-thumbnail-browser.html">Pricing &amp; Licensing for Better Thumbnail Browser</a></strong>
    +    </li>
    +    
    +    <li>
    +      <strong><a href="pricing-licensing/better-splitbutton.html">Pricing &amp; Licensing for Better SplitButton</a></strong>
    +    </li>
    +    
    +    <li>
    +      <strong><a href="support.html">Support</a></strong>
    +    </li>
    +    <li><strong><a href="comics/43.html">Comics</a></strong></li>
    +    <li><strong><a href="blog.html">Blog</a></strong></li>
    +    <li><strong><a href="about-us.html">About Us</a></strong></li>
    +  </ul>
    +  
    +  <ul class="common top">
    +    <li><strong><a href="quick-start-guide/better-listview/index.html">Quick Start Guide for Better ListView</a></strong></li>
    +  </ul>
    +  
    +  <ul class="common top">
    +    <li><a href="download/better-listview.html">Thank you for downloading</a></li>
    +    <li><a href="disclaimer.html">Disclaimer</a></li>
    +    <li><a href="privacy-policy.html">Privacy Policy</a></li>
    +  </ul>
    +    
    +</div>
    +          </div>
    +        </div>
    +      
    +      
    +      
    +      <div class="d-footer">
    +  <div class="d-placing">
    +    
    +    <div class="left">
    +      <div class="latest-posts">
    +        <h3 class="latest_from_blog"><a href="blog.html">Latest From Our Blog</a></h3>
    +        
    +          <h4><a href="blog/index.html%3Fp=927.html">Activation issues and how to solve them</a></h4>
    +          <div class="post-info">Wednesday, 01 March 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=921.html">The Three Main Advantages Better ListView has Over the Classic .NET Framework</a></h4>
    +          <div class="post-info">Thursday, 09 February 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=914.html">BLV and Internet Explorer</a></h4>
    +          <div class="post-info">Sunday, 13 November 2016</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=906.html">Centering Images in Better ListView Sub-items</a></h4>
    +          <div class="post-info">Wednesday, 06 August 2014</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=901.html">Sub-item Check Boxes in Better ListView</a></h4>
    +          <div class="post-info">Sunday, 06 July 2014</div>
    +        
    +      </div>
    +      <div class="other-posts"><a href="blog.html">See more posts &raquo;</a></div>
    +    </div>
    +    
    +    <div class="right">
    +      <div class="news">
    +        <ul class="links">
    +          <li><a href="feeds.rss" class="rss">Subscribe to our RSS</a></li>
    +          <li><a href="http://twitter.com/ComponentOwl" class="twitter">Follow us on twitter</a></li>
    +        </ul>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistview.exe" onclick="download_email('better-listview');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better SplitButton 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="bettersplitbutton.exe" onclick="download_email('better-splitbutton');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better Thumbnail Browser 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterthumbnailbrowser.exe" onclick="download_email('better-thumbnail-browser');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item last-item">
    +          <div class="date">08<span>Apr</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.14.0 released!</h4>
    +            <p>
    +              
    +                <a href="better-listview-express/releases%3Fsince=3.14.0.html">See what's new</a>
    +                or
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +      </div>
    +    </div>
    +    
    +  </div>
    +  <div class="d-placing">
    +    <hr />
    +    <div class="copy"><div class="social"><a href="support.html" class="feedback">Contact Us (Feedback)</a> <span>|</span> <a href="feeds.rss" class="rss">RSS</a> <span>|</span> <a href="http://twitter.com/ComponentOwl" class="twitter">Twitter</a> <span>|</span> <a href="sitemap.html" class="sitemap">Sitemap</a> <span>|</span> Our <a href="index.html" class="stdl">task management software</a> that uses Better ListView</div>
    +Copyright &copy; 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our <a href="eula.html">EULA</a>, <a href="disclaimer.html">Disclaimer</a> and <a href="privacy-policy.html">Privacy Policy</a>.<br /></div>
    +  </div>
    +  
    +</div>
    +      
    +    </div>
    +    
    +    <script src="javascripts/app_packaged.js%3F1455269826" type="text/javascript"></script>
    +    <script type="text/javascript">
    +
    +  var _gaq = _gaq || [];
    +  _gaq.push(['_setAccount', 'UA-16362539-4']);
    +  _gaq.push(['_trackPageview']);
    +
    +  (function() {
    +    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    +    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    +    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    +  })();
    +
    +</script>
    +<script src="http://load.sumome.com/" data-sumo-site-id="854b5e00f297990012cc230023375a00787c0000216621002775a800d79ad500" async="async"></script>
    +    
    +    <!-- Place this tag after the last plusone tag -->
    +    <script type="text/javascript">
    +      (function() {
    +        var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    +        po.src = 'https://apis.google.com/js/plusone.js';
    +        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
    +      })();
    +    </script>
    +  
    +  </body>
    +</html>
    \ No newline at end of file
    diff --git a/stylesheets/base_packaged.css?1455269822.css b/stylesheets/base_packaged.css?1455269822.css
    new file mode 100644
    index 0000000..8902add
    --- /dev/null
    +++ b/stylesheets/base_packaged.css?1455269822.css
    @@ -0,0 +1 @@
    +#fancybox-loading{position:fixed;top:50%;left:50%;height:40px;width:40px;margin-top:-20px;margin-left:-20px;cursor:pointer;overflow:hidden;background:transparent;z-index:1104;display:none;}* html #fancybox-loading{position:absolute;margin-top:0;}#fancybox-loading div{position:absolute;top:0;left:0;width:40px;height:480px;background:transparent url('../images/fancybox/fancy_loading.png') no-repeat;}#fancybox-overlay{position:fixed;top:0;left:0;bottom:0;right:0;background:#000;z-index:1100;display:none;}* html #fancybox-overlay{position:absolute;width:100%;}#fancybox-tmp{padding:0;margin:0;border:0;overflow:auto;display:none;}#fancybox-wrap{position:absolute;top:0;left:0;margin:0;padding:20px;z-index:1101;display:none;}#fancybox-outer{position:relative;width:100%;height:100%;background:#FFF;}#fancybox-inner{position:absolute;top:0;left:0;width:1px;height:1px;padding:0;margin:0;outline:none;overflow:hidden;}#fancybox-hide-sel-frame{position:absolute;top:0;left:0;width:100%;height:100%;background:transparent;}#fancybox-close{position:absolute;top:-15px;right:-15px;width:32px;height:32px;background:url('../images/fancybox/fancy_close.png') top left no-repeat;cursor:pointer;z-index:1103;display:none;}#fancybox_error{color:#444;font:normal 12px/20px Arial;}#fancybox-content{height:auto;width:auto;padding:0;margin:0;}#fancybox-img{width:100%;height:100%;padding:0;margin:0;border:none;outline:none;line-height:0;vertical-align:top;-ms-interpolation-mode:bicubic;}#fancybox-frame{position:relative;width:100%;height:100%;border:none;display:block;}#fancybox-title{position:absolute;bottom:0;left:0;font-family:Arial;font-size:12px;z-index:1102;}.fancybox-title-inside{padding:10px 0;text-align:center;color:#333;}.fancybox-title-outside{padding-top:5px;color:#FFF;text-align:center;font-weight:bold;}.fancybox-title-over{color:#FFF;text-align:left;}#fancybox-title-over{padding:10px;background:url('../images/fancybox/fancy_title_over.png');display:block;}#fancybox-title-wrap{display:inline-block;}#fancybox-title-wrap span{height:32px;float:left;}#fancybox-title-left{padding-left:15px;background:transparent url('../images/fancybox/fancy_title_left.png') repeat-x;}#fancybox-title-main{font-weight:bold;line-height:29px;background:transparent url('../images/fancybox/fancy_title_main.png') repeat-x;color:#FFF;}#fancybox-title-right{padding-left:15px;background:transparent url('../images/fancybox/fancy_title_right.png') repeat-x;}#fancybox-left,#fancybox-right{position:absolute;bottom:0;height:100%;width:35%;cursor:pointer;outline:none;background-image:url('../images/fancybox/blank.gif');z-index:1102;display:none;}#fancybox-left{left:0;}#fancybox-right{right:0;}#fancybox-left-ico,#fancybox-right-ico{position:absolute;top:50%;left:-9999px;width:30px;height:30px;margin-top:-15px;cursor:pointer;z-index:1102;display:block;}#fancybox-left-ico{background:transparent url('../images/fancybox/fancy_nav_left.png') no-repeat;}#fancybox-right-ico{background:transparent url('../images/fancybox/fancy_nav_right.png') no-repeat;}#fancybox-left:hover,#fancybox-right:hover{visibility:visible;}#fancybox-left:hover span{left:20px;}#fancybox-right:hover span{left:auto;right:20px;}div.fancy-bg{position:absolute;padding:0;margin:0;border:0;z-index:1001;}div#fancy-bg-n{top:-20px;left:0;width:100%;height:20px;background:transparent url('../images/fancybox/fancy_shadow_n.png') repeat-x;}div#fancy-bg-ne{top:-20px;right:-20px;width:20px;height:20px;background:transparent url('../images/fancybox/fancy_shadow_ne.png') no-repeat;}div#fancy-bg-e{top:0;right:-20px;height:100%;width:20px;background:transparent url('../images/fancybox/fancy_shadow_e.png') repeat-y;}div#fancy-bg-se{bottom:-20px;right:-20px;width:20px;height:20px;background:transparent url('../images/fancybox/fancy_shadow_se.png') no-repeat;}div#fancy-bg-s{bottom:-20px;left:0;width:100%;height:20px;background:transparent url('../images/fancybox/fancy_shadow_s.png') repeat-x;}div#fancy-bg-sw{bottom:-20px;left:-20px;width:20px;height:20px;background:transparent url('../images/fancybox/fancy_shadow_sw.png') no-repeat;}div#fancy-bg-w{top:0;left:-20px;height:100%;width:20px;background:transparent url('../images/fancybox/fancy_shadow_w.png') repeat-y;}div#fancy-bg-nw{top:-20px;left:-20px;width:20px;height:20px;background:transparent url('../images/fancybox/fancy_shadow_nw.png') no-repeat;}*{margin:0;padding:0;}html{height:100%;}body{height:100%;font-size:14px;color:#000;text-align:center;}a img{border:none;}a{color:#825900;outline:none;}a:hover{color:#000;}a:active{color:#ab7500;}ul,li{list-style:none;}.left,.subleft{float:left;}.right,.subright{float:right;}.clear{clear:both;}.nowrap{white-space:nowrap;}.underline{text-decoration:underline;}input[type=text],input[type=password],textarea,select{padding:2px;border:1px solid;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;background-color:#fff;border-color:#abadb3 #dbdfe6 #e3e9ef #e2e3ea;}input[type=text]:focus{border-color:#d6a140 #efd9b2 #f3e3c6 #f2e1c1;}input[type=password]:hover{border-color:#d6a140 #efd9b2 #f3e3c6 #f2e1c1;}input[type=password]:focus{border-color:#d6a140 #efd9b2 #f3e3c6 #f2e1c1;}input[type=text]:hover{border-color:#d6a140 #efd9b2 #f3e3c6 #f2e1c1;}textarea:focus{border-color:#d6a140 #efd9b2 #f3e3c6 #f2e1c1;}textarea:hover{border-color:#d6a140 #efd9b2 #f3e3c6 #f2e1c1;}select:focus{border-color:#d6a140 #efd9b2 #f3e3c6 #f2e1c1;}select:hover{border-color:#d6a140 #efd9b2 #f3e3c6 #f2e1c1;}input{border-width:1px;}input{font-size:13px;}input.stressed{border-color:#e0ad50;}input.stressed:focus{border-color:#cd8d19;}input.stressed:hover{border-color:#cd8d19;}.latest_from_blog,.image-link{text-indent:-9999em;}.image-link{display:block;}.inline-label-focus{color:#000!important;}.inline-label{color:#85878d;}ul.common li{padding:2px 0 3px 23px;background:url(../images/arrow-bullet.gif) 4px 5px no-repeat;}ul.common ul li{background-image:url(../images/arrow2.gif);}.answer ul li{padding:2px 0 3px 23px;background:url(../images/arrow-bullet.gif) 4px 5px no-repeat;}.answer ul ul li{background-image:url(../images/arrow2.gif);}ul.checklist li{background:url(../images/icons/tick.gif) 0 0 no-repeat!important;padding:0 0 10px 23px;}ol.common{margin-left:22px;}ol.common li{list-style-type:decimal;padding-bottom:6px;}.testimonial{margin:20px 15px 0;padding:10px 0 0;background:url(../images/testimonial.gif) no-repeat;font-size:12px;}.testimonial blockquote{margin:0;padding:0 12px 2px;text-align:justify;font-style:italic;background:#f9f0da;}.testimonial em{display:block;padding:15px 20px 0 100px;font-size:.9em;color:#825900;font-weight:bold;font-style:normal;background:url(../images/testimonial.gif) 100% 0 no-repeat;}input.name,input.email{background-position:4px 50%;background-repeat:no-repeat;padding-left:24px;}input.name{width:150px;background-image:url(../images/icons/user.gif);}input.email{width:150px;background-image:url(../images/icons/mail.gif);}textarea.message{width:330px;height:72px;padding-left:24px;background-image:url(../images/icons/pencil.gif);background-position:4px 2px;background-repeat:no-repeat;}input.required,textarea.required{border-color:#dea110 #f1c354 #f2d58f #f2d58f!important;background-color:#fff8e9;}input{font-size:13px;}textarea{font-family:'trebuchet ms',sans-serif;font-size:12px;}.popup-link{padding-right:13px;background:url(../images/icons/arrow-popup.gif) 100% 50% no-repeat;}.sharethis a{color:#1c6e35;}.sharethis a:hover{color:#000;}hr{border:0;height:1px;color:#a8906b;background-color:#a8906b;}.contact-form{text-align:left;}.contact-form fieldset{padding:0;border-width:0;}.contact-form legend{padding:0 5px;text-align:center;}.contact-form label{display:block;}.contact-form input{margin-bottom:15px;}.contact-form textarea{margin-bottom:15px;}.contact-form select{width:172px;}.contact-form .ufd{margin-bottom:15px!important;}.contact-form .message{width:360px;height:140px;}.contact-form .submit{text-align:center;margin-top:5px;}.contact-form .sent-notice{padding:5px;background:#fdf8a3;font-weight:bold;font-size:12px;}.dbtn-c{border-bottom:1px solid #ecdfb9;border-right:1px solid #ecdfb9;display:inline-block;}.dbtn-w{background:#efe5c6;border-color:#ac995e #9f8d55 #9f8d55 #ac995e;border-style:solid;border-width:1px;display:block;height:30px;}.dbtn{background:url(../images/dbtn.png) repeat-x;border:none;color:#000;cursor:pointer;font:15px arial,sans-serif;height:30px;margin:0;outline:none;vertical-align:top;padding-left:5px;padding-right:5px;}.dbtn:active{background:#decd9b;}.dbtn-hilight{border-color:#cfe3a6;}.dbtn-hilight .dbtn-w{background:#e8f2d3;border-color:#9bc842 #84b12a #84b12a #9bc842;}.dbtn-hilight .dbtn{background-image:url(../images/dbtn-hilight.png);}.dbtn-hilight .dbtn:active{background:#bad782;}.dbtn-small .dbtn-w{height:23px;}.dbtn-small .dbtn{font-size:12px;height:23px;}a.dbtn{display:block;height:30px;line-height:30px;text-decoration:none;padding-left:15px;padding-right:15px;}.small-button{padding:4px 7px;background:#efe5c6;}body{font-family:'arial',sans-serif;background:#fefefe url(../images/bg.png) 0 0 repeat-x;}.standard-buy{float:left;width:193px;height:44px;margin-top:9px;background:url(../images/button-pricing.gif) no-repeat;}.standard-buy:hover{background-position:0 -44px;}.commercial-buy{float:left;width:214px;height:62px;background:url(../images/button-buy-commercial-license.gif) no-repeat;}.commercial-buy:hover{background-position:0 -62px;}.standard-more{float:left;width:195px;height:62px;margin-right:12px;background:url(../images/button-more.gif) no-repeat;}.standard-more:hover{background-position:0 -62px;}.standard-download{float:left;width:214px;height:62px;margin-right:12px;background:url(../images/button-download.gif) no-repeat;}.standard-download:hover{background-position:0 -62px;}.standard-free-download{float:left;width:214px;height:62px;margin-right:12px;background:url(../images/button-free-download.gif) no-repeat;}.standard-free-download:hover{background-position:0 -62px;}input.buy,input.renew{width:65px;height:31px;margin:5px 1px 5px 5px;border:0;background:url(../images/button-buy-small.gif) 0 0 no-repeat;}input.renew{margin-right:5px;background-image:url(../images/button-renew.gif);}.home-static h3{font-family:georgia,serif;margin:35px 0 15px;font-size:26px;font-weight:normal;}.home-static h3 strong{padding:0 5px 0 3px;font-weight:normal;background-image:url(../images/subhd-lb.gif),url(../images/subhd-rb.gif),url(../images/subhd-bg.gif);background-position:0 6px,100% 6px,0 6px;background-repeat:no-repeat,no-repeat,repeat-x;}.home-static p{margin:15px 0;}.home-static .sharethis{margin-top:40px;}.home-static .lists{overflow:hidden;width:100%;}.home-static .list-l{float:left;width:440px;}.home-static .list-r{float:right;width:450px;}.home-static .buttons-hp{margin-top:0!important;}.compatiblehd{font-size:20px!important;}.compatiblelists{overflow:hidden;width:100%;}.compatiblelist li{padding-bottom:8px;}.compatiblelist .logo{float:left;padding-right:15px;height:65px;}.compatiblelist .dotnet{padding-top:11px;}.compatiblelist .vs{padding-top:2px;}.tellinghd{font-style:italic;margin-top:0!important;}.tellingct{width:100%;overflow:hidden;}.tellingcnt{width:635px;float:left;}.tellingct .testimonial{float:right;width:240px;}.testimonial-wide{padding:8px 0 8px 15px;border:1px solid #a8906b;border-left:none;border-right:none;font-family:georgia,serif;font-size:16px;margin:30px 0 35px;background:#fffbf4;}.buttons-hp{overflow:hidden;width:100%;border:1px solid #b4e9fd;border-left:none;border-right:none;padding:12px;background:#f6fcff;position:relative;margin-top:15px;}.logos{margin-top:5px;}.logos img{margin-left:30px;vertical-align:middle;}.buttons-hp .logos{float:left;padding-left:5px;margin-top:14px;}.hp-wrap{width:100%;overflow:hidden;margin-top:15px;}.hp-wrap iframe{float:right;margin-right:25px;}.buttons-hp-vertical{float:left;text-align:center;width:250px;margin-left:25px;margin-top:20px;padding:15px;}.buttons-hp-vertical a{float:none;margin:0 auto 15px;}.buttons-hp-vertical .logos{float:none;padding:0;margin:0 auto;}.buttons-hp-vertical img{margin:0 10px;}.hpline{padding:0;border:none;height:1px;margin:35px 0 0;background-color:#b4e9fd;}.sshd{font-size:20px!important;padding-left:8px;margin:0;}.ending{margin-bottom:7px!important;}.darrows{position:relative;width:175px;height:54px;z-index:2;background:url(../images/arrows.png) no-repeat;margin:0 0 -7px 30px;}.homehd{font-family:georgia,serif;font-size:34px;text-align:center;font-weight:normal;margin:14px 0 10px;line-height:39px;}.homehd span{padding:0 29px 0 23px;background-image:url(../images/homehd-lb.gif),url(../images/homehd-rb.gif),url(../images/homehd-bg.gif);background-position:0 0,100% 0,0 0;background-repeat:no-repeat,no-repeat,repeat-x;}.homeph{text-align:center;font-size:16px;}.ss-overview{margin:0 0 10px;}.nav{height:30px;width:100%;border-bottom:1px solid #a8906b;margin-bottom:20px;}.nav a{color:#825900;text-decoration:none;padding:6px 20px 7px;}.nav a:hover{color:#000;}.nav a.current{color:#000;}.nav li{float:left;text-transform:uppercase;line-height:31px;font-size:12px;font-weight:bold;}.nav .current{border:1px solid #a8906b;border-bottom:none;background:#fbf1e0;}.product-content{overflow:hidden;height:100%;}.product-content h1{font-size:36px;font-weight:normal;letter-spacing:-1px;margin:15px 0 0;}.product-content h1 .subheading{font-size:28px;margin-bottom:7px;}.product-content .section-info{margin:0 0 30px;font-size:14px;}.product-content .sides{overflow:hidden;width:100%;margin-bottom:30px;}.product-content .right{width:686px;}.product-content .left{width:214px;font-size:12px;}.product-content .compatibility{margin-top:12px;padding-top:12px;border-top:1px dotted #a8906b;}.product-content .compatibility img{margin:5px;}.product-content .newsletter{margin-top:12px;padding-top:12px;border-top:1px dotted #a8906b;}.product-content .newsletter img{margin:5px;}.product-content .sharethis-ct{margin-top:12px;padding-top:12px;border-top:1px dotted #a8906b;}.product-content .sharethis-ct img{margin:5px;}.product-content div.screenshot{margin-top:12px;padding-top:12px;border-top:1px dotted #a8906b;}.product-content div.screenshot img{margin:5px;}.product-content .documentation p{font-weight:bold;padding-top:6px;}.product-content .screenshot{text-align:center;}.product-content .fb-like{position:relative;margin-top:10px;height:75px;overflow:hidden;background-color:#eceff6;border:1px solid #9da1c4;}.product-content .fb-like iframe{border:none!important;margin:-1px 0 0 -1px!important;}.product-content .newsletter form div{padding:3px 0;}.product-content .newsletter form .email{width:135px;margin:5px 0;}.product-content .sharethis{padding-top:5px;}.product-content .buttons-box{text-align:center;}.product-content .buttons-box .standard-download{margin-bottom:10px;}.product-content .buttons-box .standard-free-download{margin-bottom:10px;}.product-content .buttons-box .standard-buy{margin:0 0 10px 10px;display:inline;}.product-content .buttons-box .commercial-buy{margin:0 0 10px;}.product-content .small-button-ct{margin:15px;text-align:center;}.product-content .screenshots{overflow:hidden;padding-top:23px;width:100%;}.product-content .screenshots .odd{float:left;margin-left:23px;}.product-content .screenshots .even{float:right;margin-right:23px;}.product-content .screenshots strong{display:block;padding:5px 0 30px 5px;}.product-content .screenshots img{border:3px solid #efe5c6;border-radius:6px;-moz-border-radius:6px;-webkit-border-radius:6px;}.product-content .screenshot-row{overflow:hidden;}.product-content .buttons-wrap{margin-top:40px;margin-bottom:0;}.product-detail .bigtext{font-size:16px;line-height:25px;margin-bottom:30px;}.product-detail h2{margin:20px 0 15px;font-size:22px;}.product-detail h2.first{margin-top:0;}.product-detail p{margin:15px 0;}.product-detail h3{margin:15px 0;}.product-detail .box{float:right;margin:5px 30px 20px 40px;}.product-detail .bigbig{font-size:16px;}.product-detail .hilight{background-color:#ff9;}.product-detail h3{font-size:15px;font-family:'arial',sans-serif;color:#000!important;}.product-detail .big{font-size:15px;font-family:'arial',sans-serif;color:#000!important;}.product-detail .tick{padding-left:40px;background:url(http://www.componentowl.com/images/tick.gif) 0 50% no-repeat;}.product-detail .buttons-wrap{text-align:center;}.product-detail .buttons{overflow:hidden;padding-top:5px;margin:auto;width:280px;}.product-detail .edition-buttons{overflow:hidden;padding-top:5px;margin:auto;width:280px;}.product-detail .edition-buttons{width:350px;}.product-detail .big-download{margin:0 auto 15px auto;}.product-detail .stdl7-download{margin:0 auto 15px auto;}.product-detail .long blockquote{font-size:12px;}.product-detail .comparison-pair{border-spacing:0;border:1px solid #000;border-collapse:collapse;}.product-detail .comparison-pair td{border:1px solid #000;padding:4px 6px;width:50%;}.product-detail .comparison-pair th{border:1px solid #000;padding:4px 6px;width:50%;}.product-detail .comparison-pair th{background:#332618;color:#fff;}.releases h3{margin-top:25px;}.releases hr{margin:15px 0;}.changes-since{font-style:italic;}.features-page h3{font-size:16px;color:#456b12!important;padding-top:10px;margin-top:35px;border-top:1px solid #d0efa6;}.features-page img{margin:12px auto 0;}.features-page .image{text-align:center;}.order-content h1{font-size:36px;font-weight:normal;letter-spacing:-1px;margin:15px 0 0;}.order-content .section-info{margin:0 0 30px;font-size:14px;}.order-content .licenses-info{width:100%;overflow:hidden;padding:20px 0 0;margin:25px 0;border-top:1px dotted #a8906b;}.order-content .licenses-info .block{float:left;width:290px;margin-right:30px;}.order-content .licenses-info .last{margin-right:0;}.order-content .licenses-info h3{margin-bottom:5px;font-size:14px;}.order-content .panel{background:#fff;border:2px solid #ecf7fe;}.order-content table{width:100%;border-spacing:0;border:1px solid #9bc8e8;border-collapse:collapse;margin:0;}.order-content table td{border:1px solid #9bc8e8;}.order-content table th{border:1px solid #9bc8e8;}.order-content table th{background:#ecf7fe;padding:4px 6px;}.order-content table td{padding:12px 8px;}.order-content table .price{width:80px;text-align:right;font-weight:bold;}.order-content table .addon{width:240px;}.order-content table .buy{width:70px;padding:0;}.order-content .componentsource .block{margin-top:5px;}.support-content{overflow:hidden;width:100%;}.support-content h1{margin:15px 0;font-size:36px;}.support-content .contact-form-ct{position:relative;width:452px;left:50%;margin-top:30px;margin-left:-230px;background:#fff;border:2px solid #ecdfb9;}.support-content .contact-form-wrap{padding:20px 30px;border:1px solid #ac995e;}.support-content p{margin:20px 0;}.support-content hr{margin:30px 0;}.support-content .note{font-size:12px;}.support-content .left{width:596px;}.support-content .right{width:274px;padding-top:10px;}.support-content .reference a{padding-left:30px;margin:0;padding:6px 0 6px 30px;background:0 50% no-repeat;}.support-content .guide a{padding-left:30px;margin:0;padding:6px 0 6px 30px;background:0 50% no-repeat;}.support-content .documentation a{padding-left:30px;margin:0;padding:6px 0 6px 30px;background:0 50% no-repeat;}.support-content .stackoverflow a{padding-left:30px;margin:0;padding:6px 0 6px 30px;background:0 50% no-repeat;}.support-content .reference a{background-image:url(../images/icons/book.gif);}.support-content .guide a{background-image:url(../images/icons/info.gif);}.support-content .documentation a{background-image:url(../images/icons/documentation.gif);}.support-content .stackoverflow a{background-image:url(../images/icons/stackoverflow.gif);}.uninstall-content .contact-form-ct{width:460px!important;}.uninstall-content .emailsafe{margin-top:12px;}.download-content{padding-bottom:60px;}.download-content h2{margin:15px 0;font-size:36px;font-weight:normal;}.download-content .section-info{font-size:16px;margin:30px 0;}.download-content p{margin:15px 0;}.download-content hr{margin:60px 0;}.download-content .newsletter-ct{background:#fff;border:2px solid #ecdfb9;}.download-content .newsletter{padding:15px 0 20px 35px;border:1px solid #ac995e;height:80px;overflow:hidden;}.download-content .newsletter h3{margin-bottom:15px;font-size:20px;}.download-content .newsletter .field{float:left;margin-right:30px;}.download-content .newsletter label{display:block;}.download-content .newsletter .email{font-size:13px;padding:4px 5px;}.download-content .newsletter .name{font-size:13px;padding:4px 5px;}.download-content .newsletter .email{padding-left:24px;width:166px;}.download-content .newsletter .name{background-image:none;width:186px;}.download-content .newsletter .subscribe{margin-top:10px;}.download-content .newsletter .subscribing{margin-top:10px;}.download-content .newsletter .subscribing{float:left;}.about-content h1{font-size:40px;font-weight:normal;letter-spacing:-1px;margin:15px 0 10px;}.about-content h2{font-size:34px;font-weight:normal;letter-spacing:-1px;margin:40px 0 15px;}.about-content h3{font-size:28px;font-weight:normal;letter-spacing:-1px;margin:60px 0 15px;}.about-content .team{margin-top:40px;}.about-content .customers{margin-top:40px;}.about-content .csauthor{margin-top:40px;}.about-content .placing{padding-left:58px;}.about-content .about-ct{background:url(../images/blv-users.gif) no-repeat 98% 50%;}.about-content .dextronet{background:url(../images/icons/dextronet-bird-gray.jpg) no-repeat 0 0;}.about-content .dextronet h2{padding-top:5px;}.about-content .cowl{background:url(../images/icons/component-owl-gray.jpg) no-repeat 0 0;}.about-content .cowl h2{padding-top:10px;margin-top:45px;}.about-content .quote{font-family:georgia,serif;font-size:21px;margin:22px 0 28px;}.about-content .quote b{font-weight:normal;font-size:120px;display:block;float:left;line-height:95px;color:#d3cccc;margin:0 7px 0 0;}.about-content p{margin:15px 0 15px 0;width:630px;text-align:justify;}.about-content .with-image{overflow:auto;}.about-content .with-image img{float:left;display:block;margin:0 10px 0 0;}.about-content .libor{overflow:hidden;}.about-content .cs{overflow:hidden;}.about-content .hq{overflow:hidden;}.about-content .libor img{float:left;margin:0 15px 5px 0;}.about-content .cs img{float:left;margin:0 15px 5px 0;}.about-content .hq img{float:left;margin:0 15px 5px 0;}.about-content .libor{margin:30px 0 30px 60px;width:500px;}.about-content .libor em{display:block;padding-top:14px;}.about-content .libor img{margin-right:10px;}.about-content .hq{margin:60px 0 0 -7px;padding:7px 0 7px 7px;width:410px;text-align:left;}.about-content .hq img{-moz-box-shadow:0 0 7px #aaa;-webkit-box-shadow:0 0 7px #aaa;box-shadow:0 0 7px #aaa;border:2px solid #fff;}.about-content .logo-inset{vertical-align:middle;margin:0 3px;margin-top:-3px;}.about-content .testimonial-wide-ct{width:630px;margin:50px 0;border:2px solid #ffeecf;border-left:none;border-right:none;}.about-content .testimonial-wide{margin:0;}.about-content .contact-info-ct{background:url(../images/europe.jpg) right 150px no-repeat;width:650px;padding-bottom:20px;}.about-content .contact{border-left:2px solid #a8906b;padding:5px 0 5px 10px;line-height:20px;background:#fff3de;}#cscontact-ct{width:630px;margin:30px 0 0;}#cscontact{border:1px solid #c1c1c1;background:#fafafa;padding:10px;font-size:12px;border-top:none;clear:both;}#cscontact table{width:100%;}#cscontact tr{vertical-align:top;}#cscontact .address{width:33%;}#cscontact .hours{width:33%;}#cscontact-nav{border-bottom:1px solid #c1c1c1;padding-bottom:30px;}#cscontact-nav li{display:inline;}#cscontact-nav a{float:left;padding:8px 10px 6px;text-transform:uppercase;text-decoration:none;font-weight:bold;font-size:12px;color:#545454;line-height:15px;}#cscontact-nav .current{border:1px solid #c1c1c1;border-bottom:1px solid #fafafa;background:#fafafa;color:#000;}.subscribe-content{padding:0 5px;overflow:hidden;}.subscribe-content p{font-size:13px;}.subscribe-content h2{margin-bottom:0!important;}.subscribe-content fieldset{padding:5px 10px 10px;margin-top:5px;}.subscribe-content legend{font-weight:bold;text-transform:uppercase;padding:0 5px;}.subscribe-content .newsletter-box{padding:10px 0 15px 15px;margin-top:10px;background:#fff;border:1px solid #e7c483;}.subscribe-content .newsletter-box .field{float:left;margin-right:20px;}.subscribe-content .newsletter-box label{display:block;}.subscribe-content .newsletter-box .email{font-size:13px;padding:4px 5px;}.subscribe-content .newsletter-box .name{font-size:13px;padding:4px 5px;}.subscribe-content .newsletter-box .email{padding-left:24px;width:136px;}.subscribe-content .newsletter-box .name{background-image:none;width:156px;}.subscribe-content .newsletter-box .subscribe{margin-top:10px;}.subscribe-content .newsletter-box .subscribing{float:left;margin-top:15px;}.subscribe-content .trouble{margin-top:10px;}.sitemap-content h1{margin:15px 0;}.sitemap-content h2{margin:25px 0 5px;}.sitemap-content .top{margin:0 0 30px 15px;}.sitemap-content ul ul{margin-top:3px;}.legal-content{font-size:14px;}.legal-content h1{margin:15px 0;}.legal-content h2{margin:15px 0 10px;}.legal-content p{padding:0 0 20px;}.legal-content ul.common{padding-bottom:20px;}.service-content h1{margin:15px 0;}.service-content h2{margin:15px 0 10px;}.service-content h3{margin:0 0 5px;}.service-content p{padding:0 0 20px;}.service-content table{border-spacing:0;border:none;margin-top:20px;}.service-content table th{text-align:left;}.service-content table th{padding:5px 50px 5px 0;border-bottom:1px solid #eadbc4;}.service-content table td{padding:5px 50px 5px 0;border-bottom:1px solid #eadbc4;}.service-content table .country{font-weight:bold;}.service-content table .flag{padding-right:5px;}.service-content .blocks{overflow:hidden;width:100%;margin:40px 0 0;}.service-content .block{width:250px;margin-right:40px;float:left;}.comics-wrap{text-align:center;}.comics{display:inline-block;position:relative;margin:0 auto;}.comicshd{text-indent:-9999em;background:url(../images/web-comics.gif) 50% 0 no-repeat;margin:28px 0 10px;height:27px;}.comics-bubble-ct{height:66px;background:url(../images/owl-small.gif) 0 0 no-repeat;padding:24px 0 0 52px;margin:10px 0 0 30px;}.comics-bubble{line-height:32px;height:32px;font-size:16px;padding-left:30px;background:url(../images/bubble-small.gif) 0 0 no-repeat;width:745px;white-space:nowrap;}.comics-bubble p{background:#e0f6ff url(../images/bubble-small.gif) 100% -32px no-repeat;padding-right:10px;}.comics-navigation{margin:0 auto;border:2px solid #1a1a1a;border-radius:14px;width:400px;overflow:hidden;padding:5px;margin-bottom:28px;}.comics-day{float:left;width:324px;text-align:center;font-size:20px;}.comics-np{padding-left:38px;}.comics-nn{padding-right:38px;}.comics-next,.comics-prev{display:block;width:38px;height:25px;text-indent:-9999em;}.comics-next{background:url(../images/comics-next.gif) 0 0 no-repeat;float:right;}.comics-prev{background:url(../images/comics-prev.gif) 0 0 no-repeat;float:left;}.comics-next:hover{background-position:0 -25px;}.comics-prev:hover{background-position:0 -25px;}.comics-social-ct{text-align:center;margin:28px 0;}.comics-social{border:2px solid #1a1a1a;border-radius:14px;padding:8px;overflow:hidden;display:inline-block;text-align:left;}.comics-rss{margin:28px 0;text-align:center;}.comics-rss a{padding:6px 0 10px 40px;background:url(../images/RSS_32.png) 0 50% no-repeat;font-weight:bold;}.comics-info{margin:28px auto 20px;width:700px;font-style:italic;font-size:16px;text-align:center;}.owl-flag{position:absolute;top:0;left:50%;margin-left:485px;_display:none;}.d-iframe{background:none;text-align:left;}.d-page{position:relative;min-height:100%;}.d-placing{margin:0 auto;text-align:left;width:930px;}.d-header{height:47px;}.d-logo{float:right;margin-top:10px;}.logoimg{margin-right:5px;display:inline-block;}.d-menu{float:left;}.d-menu li{float:left;position:relative;padding-right:35px;}.d-menu .menu-item{display:block;position:relative;z-index:99;padding:12px 0 1px;color:#fff;text-decoration:none;}.d-menu .active .menu-item{border-bottom:1px solid #bb983b;padding-bottom:2px;}.d-menu .menu-item:hover{border-bottom:2px solid #bb983b;padding-bottom:1px;color:#fff;}.d-menu .featured{color:#fecb33!important;}.d-menu .dropdown{position:absolute;top:30px;left:-20px;width:250px;}.d-menu .dropdown .outer{position:relative;z-index:97;padding-left:6px;background:url(../images/dropdown-o.png) 0 100% no-repeat;}.d-menu .dropdown .shadowbox{position:relative;z-index:98;padding:0 8px 8px 0;background:url(../images/dropdown-s.png) 100% 100% no-repeat;}.d-menu .dropdown .inner{position:relative;overflow:auto;height:100%;z-index:99;padding:12px 14px;background:#362919;border:1px solid #1c1410;border-top:none;}.d-menu .dropdown a{color:#fff;}.d-menu .dropdown a:hover{color:#fff;}.dropdown-submenu .inner{padding:10px 0 0!important;}.dropdown-submenu a{padding:10px 14px;display:block;text-decoration:none;}.dropdown-submenu a:hover{background-color:#bb983b;}.dropdown-submenu li{padding:0;margin:0;}.dropdown-submenu img{display:block;float:left;margin:4px 10px 0 0;}.dropdown .featured-item{font-size:16px;font-weight:bold;}.dropdown .subline{display:block;font-size:12px;color:#fff;padding-top:3px;}.dropdown .dropdown-category{background-color:#876234;color:#fff;font-weight:bold;padding:5px 8px;}.d-content-wrap{padding-bottom:400px;}.d-footer{position:absolute;bottom:0;right:0;width:100%;padding-top:25px;color:#fff;background:#3a2c18 url(../images/footer-bg.png) repeat-x;font-size:12px;}.d-footer a{color:#fff;}.d-footer a:hover{color:#f5b458;}.d-footer .d-placing{overflow:hidden;}.d-footer .left{width:540px;}.d-footer .right{width:325px;}.d-footer hr{background-color:#fff;margin-top:10px;}.d-footer .copy{font-size:11px;padding:0 0 13px 140px;background:url(../images/dextronet.gif) 0 12px no-repeat;}.d-footer .social{padding:10px 0 4px;}.d-footer .social span{padding:0 3px;}div.testimonial-intext{text-align:center;}div.testimonial-intext .testimonial-wrap{width:500px;margin:30px auto 0;padding-top:10px;background:url(../images/testimonial-intext.gif) 0 0 no-repeat;}div.testimonial-intext blockquote{width:475px;margin:0 auto;padding:0 10px 4px 15px;text-align:left;text-indent:-5px;font-size:13px;font-family:georgia,serif;background:#f7eee8;}div.testimonial-intext strong{width:150px;display:block;font-weight:normal;margin:0 auto;text-align:left;padding:20px 0 0 350px;color:#825900;font-size:11px;background:url(../images/testimonial-intext.gif) -500px 0 no-repeat;}div.testimonial-intext .featured blockquote{font-size:16px;}div.testimonial-intext .featured strong{font-size:12px;}div.testimonial-intext{margin:20px 0 0;}div.testimonial-intext .testimonial-wrap{margin-top:0;}div.testimonial-intext strong{margin-bottom:6px;}.latest-posts{height:255px;overflow:hidden;}.latest-posts .latest_from_blog a{display:block;width:279px;height:18px;background:url(../images/heading-latest_from_blog.gif) no-repeat;}.latest-posts h4{margin:13px 0 0;padding:0 0 3px;font-size:13px;color:#ffd191;}.latest-posts h4 a{color:#ffd191;}.latest-posts h4 a:hover{color:#fcead0;}.latest-posts .post-info{font-size:11px;color:#a38952;text-transform:uppercase;font-weight:bold;}.other-posts{text-align:right;}.other-posts a{color:#fcead0;}.other-posts a:hover{color:#f5b458;}.section-heading{margin:15px 0;font-size:36px;}.resources-content{padding-bottom:30px;}.resources-content h1{margin-top:30px;}.resources-content h2{margin:10px 0 0!important;font-weight:normal;}.resources-content h1{font-size:23px;}.resources-content h2{font-size:17px;}.resources-content .post-info{margin-bottom:0;color:#a38952;font-size:11px;}.resources-content .small-button-ct{overflow:hidden;width:100%;margin:13px 0 0;}.resources-content .small-button{display:block;float:left;}.resources-content .featured-articles h2{font-weight:bold;}.article-content{overflow:hidden;height:100%;padding-bottom:30px;}.article-content .left{width:650px;}.article-content .right{width:228px;margin-top:15px;}.article-content .title{margin-top:25px;font-size:23px;}.article-content .sidebar{padding:15px 0 0;background:url(http://www.componentowl.com/images/lower-side-bg.jpg) 0 0 no-repeat;}.article-content .sidebar h4{font-size:18px;color:#4783bf;margin:0 0 10px;}.article-content .sidebar .text{margin:10px 0;}.article-content .sidebar .text p{margin:0 0 8px;}.article-content .sidebar .text h1{margin:8px 0 3px;font-size:12px;font-family:'trebuchet ms',sans-serif;}.article-content .sidebar .text h2{margin:8px 0 3px;font-size:12px;font-family:'trebuchet ms',sans-serif;}.article-content .sidebar .text h3{margin:8px 0 3px;font-size:12px;font-family:'trebuchet ms',sans-serif;}.article-content .sidebar .text h4{margin:8px 0 3px;font-size:12px;font-family:'trebuchet ms',sans-serif;}.article-content .sidebar .buttonz{text-align:center;margin-top:10px;}.article-content .sidebar .buttonz a{margin:0 auto 10px;float:none;}.article-content .sidebar .download{text-align:center;font-size:14px;font-weight:bold;margin-top:10px;}.article-content .sidebar .download a{background:url(http://www.componentowl.com/images/icons/arrow-270-medium.gif) 0 2px no-repeat;padding-left:16px;}.article-content .content{margin-top:20px;font-size:14px;color:#222;}.article-content .content p{margin:0 0 20px;}.article-content .content h1{color:#000;font-family:'trebuchet ms',sans-serif;padding:0 0 5px;margin-top:30px;}.article-content .content h2{color:#000;font-family:'trebuchet ms',sans-serif;padding:0 0 5px;margin-top:30px;}.article-content .content h3{color:#000;font-family:'trebuchet ms',sans-serif;padding:0 0 5px;margin-top:30px;}.article-content .content h1{font-size:18px;}.article-content .content h2{font-size:16px;margin-top:20px;}.article-content .content h3{font-size:14px;margin-top:20px;}.dextronet-feeds{margin:15px 0 0;padding-bottom:12px;border-bottom:1px dotted #a8906b;}.dextronet-feeds .links{margin:0!important;list-style:none;padding:0!important;}.dextronet-feeds .links li{margin:0!important;}.dextronet-feeds .links a{padding:7px 0 10px 37px;display:block;}.dextronet-feeds .links .rss{background:url(../images/icons/rss-32.png) 0 50% no-repeat;}.dextronet-feeds .links .twitter{background:url(../images/icons/twitter-32.png) 0 50% no-repeat;}.dextronet-feeds .links .facebook{background:url(../images/icons/facebook-32.png) 0 50% no-repeat;}.news .links{width:100%;overflow:hidden;margin-bottom:10px;}.news .links li{float:left;margin-right:10px;}.news .links a{display:block;padding:6px 8px 6px 26px;text-decoration:none;background:#49371e 7px 50% no-repeat;}.news .links .rss{background-image:url(../images/rss.gif);}.news .links .twitter{background-image:url(../images/twitter.gif);}.news h4{color:#e4b16a;font-size:13px;}.news h4 a{color:#e4b16a;font-size:13px;}.news h4 a:hover{color:#fcead0;}.news .news-item{width:100%;overflow:hidden;margin-bottom:3px;padding-bottom:3px;border-bottom:1px dotted #644c2a;}.news .last-item{border-bottom:none;}.news .date{float:left;width:20px;text-align:right;padding:3px 6px;color:#a38952;}.news .date span{display:block;}.news .message{padding:3px 0;color:#fcead0;}.comics-blv-wrap{text-align:center;}.comics-blv{margin:60px auto 30px;padding:7px 0;border:1px solid #ecdfb9;border-left:none;border-right:none;width:100%;overflow:hidden;font-size:20px;background:#fffcf3;font-family:"trebuchet ms",arial,sans-serif;width:800px;text-align:left;}.comics-blv .ss{float:left;margin:0 8px 0 8px;border:none;}.comics-blv .inside{padding-top:8px;}.comics-blv .text{padding-bottom:8px;}.comparison{border-collapse:collapse;border-spacing:0;font-size:small;text-align:center;width:100%;margin-bottom:50px;}.comparison td{padding:4px 6px;border:1px solid #000;}.comparison th{padding:4px 6px;border:1px solid #000;}.comparison-blank{border-top:none!important;border-left:none!important;text-align:left;padding-left:0!important;}.comparison-blank h2{margin:0;padding:0;}.comparison-line-even{background-color:#f0f0f0;text-align:left;}.comparison-line-odd{text-align:left;}.comparison-yes{background-color:#cfc;color:#008000;text-align:center;}.comparison-no{background-color:#fcc;color:#800000;text-align:center;}.comparison-other{width:90px;background:#332618;color:#fff;}h1,h2,h3,.heading{font-family:'arial',sans-serif;font-weight:bold;}.section-info{font-weight:bold;font-family:'arial',sans-serif;}.sitemap-content h2{font-size:20px;}.pr-content h2{font-size:22px;}.static-content h2{font-size:23px;}.static-content h3{font-size:18px;}.subscribe-content h2{font-size:34px;}
    \ No newline at end of file
    diff --git a/support.html b/support.html
    new file mode 100644
    index 0000000..ae7a98f
    --- /dev/null
    +++ b/support.html
    @@ -0,0 +1,310 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    +<meta name="keywords" content="Better ListView support, list view support, list view contact, better list view contact, Better Thumbnail Browser support, better thumbnail browser contact, component owl support, component owl contact, support, contact" />
    +<meta name="description" content=".NET components support, and also general Component Owl contact form and information." />
    +<meta name="author" content="Dextronet" />
    +<meta http-equiv="Title" content="Component Owl Support & Contact" />
    +<meta name="copyright" content="(c) 2010-2018 Dextronet" />
    +<meta name="distribution" content="Global" />
    +<meta name="rating" content="General" />
    +<meta name="robots" content="All" />
    +<meta http-equiv="Content-Language" content="en" />
    +<meta name="verify-v1" content="NK0H1gWia1vxGZ2Yhr59gsS0/P2/USBI1DVA18VkzjM=" />
    +<meta name="google-site-verification" content="O7Dwtzu5x_Mob9u98uxqpZ-_wCLGpEkx2IL0UYVQ4ac" />
    +<title>Component Owl Support & Contact</title>
    +<link rel="alternate" type="application/rss+xml" title="Component Owl Feed: Latest releases, news and tips &amp; tricks from our blog" href="feeds.rss" />
    +<link rel="alternate" type="application/rss+xml" title="Component Owl's Comics: Latest comic strips for developers by Libor Tinka" href="comics.rss" />
    +    <link href="stylesheets/base_packaged.css%3F1455269822.css" media="screen" rel="stylesheet" type="text/css" />
    +    
    +  </head>
    +  <body>
    +  
    +    <div class="d-page">
    +      
    +      <script type="text/javascript">
    +//<![CDATA[
    +var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_email":"a valid email","thanks_for_why_uninstall":"Thank you very much for your feedback!","thank_you":"Thank you!","current_email":"valid current email","thanks_for_subscription":"<div class=\"sent-saved-notice\">Thank You for your subscription!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","message":"message","required":"required","download_in_progress":"Your download should be in progress...","your_full_name":"your full name","order_thanks_for_message":"<div class=\"sent-saved-notice\">Thank you very much for your message!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","thanks_for_message":"Thank you very much for your message!<br /><a href="http://www.componentowl.com/\&quot;#\"" onclick=\"send_another(); return false;\">Send Another Message</a>"}
    +//]]>
    +</script>
    +
    +<div class="d-header d-placing">
    +  
    +  <ul class="d-menu">
    +    <li class=""><a href="index.html" class="menu-item">Home</a></li>
    +    <li class=" with-dropdown">
    +      <a href="better-listview.html" class="menu-item">Products</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 370px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          <div class="dropdown-category">WinForms Components</div>
    +          
    +            
    +            <a href="better-listview.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-32-1355160256.png?1355135056" /> Better ListView<br /><span class="subline">Ultimate ListView control for .NET</span></a>
    +          
    +            
    +            <a href="better-thumbnail-browser.html" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-thumbnail-browser-32-1355160281.png?1355135081" /> Better Thumbnail Browser<br /><span class="subline">Thumbnail loading and browsing control for .NET</span></a>
    +          
    +            
    +            <a href="better-splitbutton.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-splitbutton-32-1355160307.png?1355135107" /> Better SplitButton<br /><span class="subline">Free customizable dropdown button control</span></a>
    +          
    +            
    +            <a href="better-listview-express.html"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-express-32-1355160327.png?1355135127" /> Better ListView Express<br /><span class="subline">Free edition with less features</span></a>
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="">
    +      <a href="pricing-licensing/better-listview.html" class="menu-item">Purchase</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 330px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-listview.html" class="featured-item">Better ListView</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-thumbnail-browser.html" class="featured-item">Better Thumbnail Browser</a>
    +          
    +        
    +          
    +            
    +            <a href="pricing-licensing/better-splitbutton.html">Better SplitButton</a>
    +          
    +        
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="active"><a href="support.html" class="menu-item">Support</a></li>
    +    <li class=""><a href="articles.html" class="menu-item">Articles</a></li>
    +    <li class=""><a href="blog.html" class="menu-item">Blog</a></li>
    +    <li class=""><a href="comics/43.html" class="menu-item">Comics</a></li>
    +    <li class=""><a href="about-us.html" class="menu-item">About Us</a></li>
    +  </ul>
    +  <div class="d-logo">
    +    <a href="index.html" class="logoimg"><img alt="Component Owl" src="images/componentowl.gif%3F1455269978" /></a>
    +    <g:plusone size="medium" count="false" href="http://www.componentowl.com"></g:plusone>
    +  </div>
    +</div>
    +      
    +      
    +      
    +        <div class="d-placing">
    +          <div class="d-content-wrap">
    +            <div class="support-content">
    +  
    +  <h1>Help &amp; Support</h1>
    +  
    +  <div class="left">
    +    <p>You can contact us at <span class="emil">support (at) componentowl (dot) com</span> or use the form below.</p>
    +    <p>We will answer you as soon as possible, usually in 24 hours.</p>
    +    
    +    <div class="contact-form-ct">
    +      <div class="contact-form-wrap">
    +        <div class="contact-form " id="contact-form">
    +  <form action="http://www.componentowl.com/support_requests" class="new_support_request" id="new_support_request" method="post" onsubmit="if (!validate_contact_from(this)) return false; jQuery.ajax({data:jQuery.param(jQuery(this).serializeArray()) + '&amp;authenticity_token=' + encodeURIComponent('dJeFtbWrARc0arEomU+SG+XtypwJr2F4Kc9v14woStM='), dataType:'script', type:'post', url:'/support_requests'}); return false;"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="dJeFtbWrARc0arEomU+SG+XtypwJr2F4Kc9v14woStM=" /></div>    <input id="support_request_support_request_origin_id" name="support_request[support_request_origin_id]" type="hidden" value="541448280" />
    +    <input id="support_request_subject" name="support_request[subject]" type="hidden" />
    +    <input id="support_request_product_id" name="support_request[product_id]" type="hidden" />
    +    <input id="callback" name="callback" type="hidden" value="feedback_sent" />
    +    <input name="magicwand" type="hidden" value="you-shall-not-pass" />
    +    <fieldset>
    +      <ul>
    +        <li><label for="support_request_name">Your Name</label><input class="name" id="support_request_name" name="support_request[name]" size="30" type="text" /></li>
    +        <li><label for="support_request_email">Your Email (Required)</label><input class="email" id="support_request_email" name="support_request[email]" size="30" type="text" /></li>
    +        
    +      
    +        <li><label for="support_request_message">Message (Required)</label><textarea class="message" cols="40" id="support_request_message" name="support_request[message]" rows="20"></textarea></li>
    +      </ul>
    +    </fieldset>
    +    <div class="submit">
    +    <span class="dbtn-c" id="send"><span class="dbtn-w"><input class="dbtn" name="commit" type="submit" value="&nbsp;&nbsp;&nbsp;Send&nbsp;&nbsp;&nbsp;" /></span></span>
    +    </div>
    +  </form></div>
    +      </div>
    +    </div>
    +    
    +    <hr />
    +    <p class="note">Please make sure that our reply will not be marked as spam by your filter (eg. add <span class="emil">support (at) componentowl (dot) com</span> to your white list) and that you typed your email address correctly, otherwise we will not be able to reply.</p>
    +  </div>
    +    
    +  <div class="right">
    +    
    +      <h2>Better ListView</h2>
    +      <p class="guide"><strong><a href="better-listview/quick-start-guide.html" onclick="window.open(this.href); return false">See Quick Start Guide</a></strong></p>
    +      <p class="documentation"><strong><a href="better-listview/documentation.html" onclick="window.open(this.href); return false">See Documentation</a></strong></p>
    +      <p class="reference"><strong><a href="better-listview/class-reference.html" onclick="window.open(this.href); return false">See Class Reference</a></strong></p>
    +      <p class="stackoverflow"><strong><a href="
    +http://stackoverflow.com/questions/tagged/better-listview" onclick="window.open(this.href); return false">Better ListView on StackOverflow</a></strong></p>
    +    
    +      <h2>Better Thumbnail Browser</h2>
    +      <p class="guide"><strong><a href="better-thumbnail-browser/quick-start-guide.html" onclick="window.open(this.href); return false">See Quick Start Guide</a></strong></p>
    +      <p class="documentation"><strong><a href="better-thumbnail-browser/documentation.html" onclick="window.open(this.href); return false">See Documentation</a></strong></p>
    +      <p class="reference"><strong><a href="better-thumbnail-browser/class-reference.html" onclick="window.open(this.href); return false">See Class Reference</a></strong></p>
    +      
    +    
    +      <h2>Better SplitButton</h2>
    +      <p class="guide"><strong><a href="better-splitbutton/quick-start-guide.html" onclick="window.open(this.href); return false">See Quick Start Guide</a></strong></p>
    +      <p class="documentation"><strong><a href="better-splitbutton/documentation.html" onclick="window.open(this.href); return false">See Documentation</a></strong></p>
    +      <p class="reference"><strong><a href="better-splitbutton/class-reference.html" onclick="window.open(this.href); return false">See Class Reference</a></strong></p>
    +      
    +    
    +  </div>
    +  
    +</div>
    +
    +<script type="text/javascript">
    +//<![CDATA[
    +  document.getElementById("support_request_name").focus();
    +
    +//]]>
    +</script>
    +          </div>
    +        </div>
    +      
    +      
    +      
    +      <div class="d-footer">
    +  <div class="d-placing">
    +    
    +    <div class="left">
    +      <div class="latest-posts">
    +        <h3 class="latest_from_blog"><a href="blog.html">Latest From Our Blog</a></h3>
    +        
    +          <h4><a href="blog/index.html%3Fp=927.html">Activation issues and how to solve them</a></h4>
    +          <div class="post-info">Wednesday, 01 March 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=921.html">The Three Main Advantages Better ListView has Over the Classic .NET Framework</a></h4>
    +          <div class="post-info">Thursday, 09 February 2017</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=914.html">BLV and Internet Explorer</a></h4>
    +          <div class="post-info">Sunday, 13 November 2016</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=906.html">Centering Images in Better ListView Sub-items</a></h4>
    +          <div class="post-info">Wednesday, 06 August 2014</div>
    +        
    +          <h4><a href="blog/index.html%3Fp=901.html">Sub-item Check Boxes in Better ListView</a></h4>
    +          <div class="post-info">Sunday, 06 July 2014</div>
    +        
    +      </div>
    +      <div class="other-posts"><a href="blog.html">See more posts &raquo;</a></div>
    +    </div>
    +    
    +    <div class="right">
    +      <div class="news">
    +        <ul class="links">
    +          <li><a href="feeds.rss" class="rss">Subscribe to our RSS</a></li>
    +          <li><a href="http://twitter.com/ComponentOwl" class="twitter">Follow us on twitter</a></li>
    +        </ul>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterlistview.exe" onclick="download_email('better-listview');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better SplitButton 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="bettersplitbutton.exe" onclick="download_email('better-splitbutton');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better Thumbnail Browser 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="betterthumbnailbrowser.exe" onclick="download_email('better-thumbnail-browser');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item last-item">
    +          <div class="date">08<span>Apr</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.14.0 released!</h4>
    +            <p>
    +              
    +                <a href="better-listview-express/releases%3Fsince=3.14.0.html">See what's new</a>
    +                or
    +              
    +              <a href="betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +      </div>
    +    </div>
    +    
    +  </div>
    +  <div class="d-placing">
    +    <hr />
    +    <div class="copy"><div class="social"><a href="support.html" class="feedback">Contact Us (Feedback)</a> <span>|</span> <a href="feeds.rss" class="rss">RSS</a> <span>|</span> <a href="http://twitter.com/ComponentOwl" class="twitter">Twitter</a> <span>|</span> <a href="sitemap.html" class="sitemap">Sitemap</a> <span>|</span> Our <a href="index.html" class="stdl">task management software</a> that uses Better ListView</div>
    +Copyright &copy; 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our <a href="eula.html">EULA</a>, <a href="disclaimer.html">Disclaimer</a> and <a href="privacy-policy.html">Privacy Policy</a>.<br /></div>
    +  </div>
    +  
    +</div>
    +      
    +    </div>
    +    
    +    <script src="javascripts/app_packaged.js%3F1455269826" type="text/javascript"></script>
    +    <script type="text/javascript">
    +
    +  var _gaq = _gaq || [];
    +  _gaq.push(['_setAccount', 'UA-16362539-4']);
    +  _gaq.push(['_trackPageview']);
    +
    +  (function() {
    +    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    +    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    +    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    +  })();
    +
    +</script>
    +<script src="http://load.sumome.com/" data-sumo-site-id="854b5e00f297990012cc230023375a00787c0000216621002775a800d79ad500" async="async"></script>
    +    
    +    <!-- Place this tag after the last plusone tag -->
    +    <script type="text/javascript">
    +      (function() {
    +        var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    +        po.src = 'https://apis.google.com/js/plusone.js';
    +        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
    +      })();
    +    </script>
    +  
    +  </body>
    +</html>
    \ No newline at end of file
    diff --git a/support?subject=Bmt+Order b/support?subject=Bmt+Order
    new file mode 100644
    index 0000000..58f99cb
    --- /dev/null
    +++ b/support?subject=Bmt+Order
    @@ -0,0 +1,310 @@
    +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">
    +  <head>
    +    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    +<meta name="keywords" content="Better ListView support, list view support, list view contact, better list view contact, Better Thumbnail Browser support, better thumbnail browser contact, component owl support, component owl contact, support, contact" />
    +<meta name="description" content=".NET components support, and also general Component Owl contact form and information." />
    +<meta name="author" content="Dextronet" />
    +<meta http-equiv="Title" content="Component Owl Support & Contact" />
    +<meta name="copyright" content="(c) 2010-2018 Dextronet" />
    +<meta name="distribution" content="Global" />
    +<meta name="rating" content="General" />
    +<meta name="robots" content="All" />
    +<meta http-equiv="Content-Language" content="en" />
    +<meta name="verify-v1" content="NK0H1gWia1vxGZ2Yhr59gsS0/P2/USBI1DVA18VkzjM=" />
    +<meta name="google-site-verification" content="O7Dwtzu5x_Mob9u98uxqpZ-_wCLGpEkx2IL0UYVQ4ac" />
    +<title>Component Owl Support & Contact</title>
    +<link rel="alternate" type="application/rss+xml" title="Component Owl Feed: Latest releases, news and tips &amp; tricks from our blog" href="http://www.componentowl.com/feeds.rss" />
    +<link rel="alternate" type="application/rss+xml" title="Component Owl's Comics: Latest comic strips for developers by Libor Tinka" href="http://www.componentowl.com/comics.rss" />
    +    <link href="/stylesheets/base_packaged.css?1455269822" media="screen" rel="stylesheet" type="text/css" />
    +    
    +  </head>
    +  <body>
    +  
    +    <div class="d-page">
    +      
    +      <script type="text/javascript">
    +//<![CDATA[
    +var t = {"antispam":"capek-rulz","thanks_for_why_uninstall":"Thank you very much for your feedback!","valid_email":"a valid email","download_in_progress":"Your download should be in progress...","current_email":"valid current email","purchase_email":"valid purchase email","message":"message","thanks_for_message":"Thank you very much for your message!<br /><a href=\"#\" onclick=\"send_another(); return false;\">Send Another Message</a>","thank_you":"Thank you!","required":"required","thanks_for_subscription":"<div class=\"sent-saved-notice\">Thank You for your subscription!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","order_thanks_for_message":"<div class=\"sent-saved-notice\">Thank you very much for your message!<br /><button type=\"button\" onclick=\"close_fancybox();\">Close</button>","your_full_name":"your full name"}
    +//]]>
    +</script>
    +
    +<div class="d-header d-placing">
    +  
    +  <ul class="d-menu">
    +    <li class=""><a href="/" class="menu-item">Home</a></li>
    +    <li class=" with-dropdown">
    +      <a href="/better-listview" class="menu-item">Products</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 370px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          <div class="dropdown-category">WinForms Components</div>
    +          
    +            
    +            <a href="/better-listview" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-32-1355160256.png?1355135056" /> Better ListView<br /><span class="subline">Ultimate ListView control for .NET</span></a>
    +          
    +            
    +            <a href="/better-thumbnail-browser" class="featured-item"><img alt="icon" src="http://assets.componentowl.com/icons/better-thumbnail-browser-32-1355160281.png?1355135081" /> Better Thumbnail Browser<br /><span class="subline">Thumbnail loading and browsing control for .NET</span></a>
    +          
    +            
    +            <a href="/better-splitbutton"><img alt="icon" src="http://assets.componentowl.com/icons/better-splitbutton-32-1355160307.png?1355135107" /> Better SplitButton<br /><span class="subline">Free customizable dropdown button control</span></a>
    +          
    +            
    +            <a href="/better-listview-express"><img alt="icon" src="http://assets.componentowl.com/icons/better-listview-express-32-1355160327.png?1355135127" /> Better ListView Express<br /><span class="subline">Free edition with less features</span></a>
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="">
    +      <a href="/pricing-licensing/better-listview" class="menu-item">Purchase</a>
    +      <div class="dropdown dropdown-submenu" style="display: none; width: 330px"><div class="outer"><div class="shadowbox"><div class="border"><div class="inner">
    +        
    +          
    +            
    +            <a href="/pricing-licensing/better-listview" class="featured-item">Better ListView</a>
    +          
    +        
    +          
    +            
    +            <a href="/pricing-licensing/better-thumbnail-browser" class="featured-item">Better Thumbnail Browser</a>
    +          
    +        
    +          
    +            
    +            <a href="/pricing-licensing/better-splitbutton">Better SplitButton</a>
    +          
    +        
    +          
    +        
    +      </div></div></div></div></div>
    +    </li>
    +    <li class="active"><a href="/support" class="menu-item">Support</a></li>
    +    <li class=""><a href="/articles" class="menu-item">Articles</a></li>
    +    <li class=""><a href="http://www.componentowl.com/blog" class="menu-item">Blog</a></li>
    +    <li class=""><a href="/comics/43" class="menu-item">Comics</a></li>
    +    <li class=""><a href="/about-us" class="menu-item">About Us</a></li>
    +  </ul>
    +  <div class="d-logo">
    +    <a href="/" class="logoimg"><img alt="Component Owl" src="/images/componentowl.gif?1455269978" /></a>
    +    <g:plusone size="medium" count="false" href="http://www.componentowl.com"></g:plusone>
    +  </div>
    +</div>
    +      
    +      
    +      
    +        <div class="d-placing">
    +          <div class="d-content-wrap">
    +            <div class="support-content">
    +  
    +  <h1>Help &amp; Support</h1>
    +  
    +  <div class="left">
    +    <p>You can contact us at <span class="emil">support (at) componentowl (dot) com</span> or use the form below.</p>
    +    <p>We will answer you as soon as possible, usually in 24 hours.</p>
    +    
    +    <div class="contact-form-ct">
    +      <div class="contact-form-wrap">
    +        <div class="contact-form " id="contact-form">
    +  <form action="/support_requests" class="new_support_request" id="new_support_request" method="post" onsubmit="if (!validate_contact_from(this)) return false; jQuery.ajax({data:jQuery.param(jQuery(this).serializeArray()) + '&amp;authenticity_token=' + encodeURIComponent('Ow4RbUti01Vanc1NG9N2QF0VjhaRhlx96PNemsei8Jk='), dataType:'script', type:'post', url:'/support_requests'}); return false;"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="Ow4RbUti01Vanc1NG9N2QF0VjhaRhlx96PNemsei8Jk=" /></div>    <input id="support_request_support_request_origin_id" name="support_request[support_request_origin_id]" type="hidden" value="541448280" />
    +    <input id="support_request_subject" name="support_request[subject]" type="hidden" />
    +    <input id="support_request_product_id" name="support_request[product_id]" type="hidden" />
    +    <input id="callback" name="callback" type="hidden" value="feedback_sent" />
    +    <input name="magicwand" type="hidden" value="you-shall-not-pass" />
    +    <fieldset>
    +      <ul>
    +        <li><label for="support_request_name">Your Name</label><input class="name" id="support_request_name" name="support_request[name]" size="30" type="text" /></li>
    +        <li><label for="support_request_email">Your Email (Required)</label><input class="email" id="support_request_email" name="support_request[email]" size="30" type="text" /></li>
    +        
    +      
    +        <li><label for="support_request_message">Message (Required)</label><textarea class="message" cols="40" id="support_request_message" name="support_request[message]" rows="20"></textarea></li>
    +      </ul>
    +    </fieldset>
    +    <div class="submit">
    +    <span class="dbtn-c" id="send"><span class="dbtn-w"><input class="dbtn" name="commit" type="submit" value="&nbsp;&nbsp;&nbsp;Send&nbsp;&nbsp;&nbsp;" /></span></span>
    +    </div>
    +  </form></div>
    +      </div>
    +    </div>
    +    
    +    <hr />
    +    <p class="note">Please make sure that our reply will not be marked as spam by your filter (eg. add <span class="emil">support (at) componentowl (dot) com</span> to your white list) and that you typed your email address correctly, otherwise we will not be able to reply.</p>
    +  </div>
    +    
    +  <div class="right">
    +    
    +      <h2>Better ListView</h2>
    +      <p class="guide"><strong><a href="/better-listview/quick-start-guide" onclick="window.open(this.href); return false">See Quick Start Guide</a></strong></p>
    +      <p class="documentation"><strong><a href="/better-listview/documentation" onclick="window.open(this.href); return false">See Documentation</a></strong></p>
    +      <p class="reference"><strong><a href="/better-listview/class-reference" onclick="window.open(this.href); return false">See Class Reference</a></strong></p>
    +      <p class="stackoverflow"><strong><a href="
    +http://stackoverflow.com/questions/tagged/better-listview" onclick="window.open(this.href); return false">Better ListView on StackOverflow</a></strong></p>
    +    
    +      <h2>Better Thumbnail Browser</h2>
    +      <p class="guide"><strong><a href="/better-thumbnail-browser/quick-start-guide" onclick="window.open(this.href); return false">See Quick Start Guide</a></strong></p>
    +      <p class="documentation"><strong><a href="/better-thumbnail-browser/documentation" onclick="window.open(this.href); return false">See Documentation</a></strong></p>
    +      <p class="reference"><strong><a href="/better-thumbnail-browser/class-reference" onclick="window.open(this.href); return false">See Class Reference</a></strong></p>
    +      
    +    
    +      <h2>Better SplitButton</h2>
    +      <p class="guide"><strong><a href="/better-splitbutton/quick-start-guide" onclick="window.open(this.href); return false">See Quick Start Guide</a></strong></p>
    +      <p class="documentation"><strong><a href="/better-splitbutton/documentation" onclick="window.open(this.href); return false">See Documentation</a></strong></p>
    +      <p class="reference"><strong><a href="/better-splitbutton/class-reference" onclick="window.open(this.href); return false">See Class Reference</a></strong></p>
    +      
    +    
    +  </div>
    +  
    +</div>
    +
    +<script type="text/javascript">
    +//<![CDATA[
    +  document.getElementById("support_request_name").focus();
    +
    +//]]>
    +</script>
    +          </div>
    +        </div>
    +      
    +      
    +      
    +      <div class="d-footer">
    +  <div class="d-placing">
    +    
    +    <div class="left">
    +      <div class="latest-posts">
    +        <h3 class="latest_from_blog"><a href="http://www.componentowl.com/blog">Latest From Our Blog</a></h3>
    +        
    +          <h4><a href="http://www.componentowl.com/blog/activation-issues-and-how-to-solve-them/">Activation issues and how to solve them</a></h4>
    +          <div class="post-info">Wednesday, 01 March 2017</div>
    +        
    +          <h4><a href="http://www.componentowl.com/blog/the-three-main-advantages-componentowl-has-over-the-classic-net-framework/">The Three Main Advantages Better ListView has Over the Classic .NET Framework</a></h4>
    +          <div class="post-info">Thursday, 09 February 2017</div>
    +        
    +          <h4><a href="http://www.componentowl.com/blog/blv-and-internet-explorer/">BLV and Internet Explorer</a></h4>
    +          <div class="post-info">Sunday, 13 November 2016</div>
    +        
    +          <h4><a href="http://www.componentowl.com/blog/centering-images-in-better-listview-sub-items/">Centering Images in Better ListView Sub-items</a></h4>
    +          <div class="post-info">Wednesday, 06 August 2014</div>
    +        
    +          <h4><a href="http://www.componentowl.com/blog/sub-item-check-boxes-in-better-listview/">Sub-item Check Boxes in Better ListView</a></h4>
    +          <div class="post-info">Sunday, 06 July 2014</div>
    +        
    +      </div>
    +      <div class="other-posts"><a href="http://www.componentowl.com/blog">See more posts &raquo;</a></div>
    +    </div>
    +    
    +    <div class="right">
    +      <div class="news">
    +        <ul class="links">
    +          <li><a href="http://www.componentowl.com/feeds.rss" class="rss">Subscribe to our RSS</a></li>
    +          <li><a href="http://twitter.com/ComponentOwl" class="twitter">Follow us on twitter</a></li>
    +        </ul>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="/betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="/betterlistview.exe" onclick="download_email('better-listview');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better SplitButton 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="/bettersplitbutton.exe" onclick="download_email('better-splitbutton');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item ">
    +          <div class="date">27<span>May</span></div>
    +          <div class="message">
    +          
    +            <h4>Better Thumbnail Browser 3.15 released!</h4>
    +            <p>
    +              
    +              <a href="/betterthumbnailbrowser.exe" onclick="download_email('better-thumbnail-browser');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +        <div class="news-item last-item">
    +          <div class="date">08<span>Apr</span></div>
    +          <div class="message">
    +          
    +            <h4>Better ListView Express 3.14.0 released!</h4>
    +            <p>
    +              
    +                <a href="/better-listview-express/releases?since=3.14.0">See what's new</a>
    +                or
    +              
    +              <a href="/betterlistviewexpress.exe" onclick="download_email('better-listview-express');">Download latest release</a>
    +            </p>
    +          
    +          </div>
    +        </div>
    +        
    +      </div>
    +    </div>
    +    
    +  </div>
    +  <div class="d-placing">
    +    <hr />
    +    <div class="copy"><div class="social"><a href="/support" class="feedback">Contact Us (Feedback)</a> <span>|</span> <a href="http://www.componentowl.com/feeds.rss" class="rss">RSS</a> <span>|</span> <a href="http://twitter.com/ComponentOwl" class="twitter">Twitter</a> <span>|</span> <a href="/sitemap" class="sitemap">Sitemap</a> <span>|</span> Our <a href="http://www.componentowl.com" class="stdl">task management software</a> that uses Better ListView</div>
    +Copyright &copy; 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our <a href="/eula">EULA</a>, <a href="/disclaimer">Disclaimer</a> and <a href="/privacy-policy">Privacy Policy</a>.<br /></div>
    +  </div>
    +  
    +</div>
    +      
    +    </div>
    +    
    +    <script src="/javascripts/app_packaged.js?1455269826" type="text/javascript"></script>
    +    <script type="text/javascript">
    +
    +  var _gaq = _gaq || [];
    +  _gaq.push(['_setAccount', 'UA-16362539-4']);
    +  _gaq.push(['_trackPageview']);
    +
    +  (function() {
    +    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    +    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    +    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    +  })();
    +
    +</script>
    +<script src="//load.sumome.com/" data-sumo-site-id="854b5e00f297990012cc230023375a00787c0000216621002775a800d79ad500" async="async"></script>
    +    
    +    <!-- Place this tag after the last plusone tag -->
    +    <script type="text/javascript">
    +      (function() {
    +        var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    +        po.src = 'https://apis.google.com/js/plusone.js';
    +        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
    +      })();
    +    </script>
    +  
    +  </body>
    +</html>
    \ No newline at end of file