move release tag to proper location


git-svn-id: https://svn.apache.org/repos/asf/incubator/npanday/npanday-its/tags/npanday-its-1.2@995305 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index 0475f95..81f48a2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,177 +1,178 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

-  <modelVersion>4.0.0</modelVersion>

-

-  <groupId>npanday.its</groupId>

-  <artifactId>npanday-its</artifactId>

-  <version>1.2</version>

-

-  <name>NPanday Integration Tests Parent</name>

-

-  <!--

-  By default, the project just packages the tests in an artifact. To actually run them, activate the profile "run-its":

-    mvn clean test -Prun-its

-  

-  This will subject the NPanday version that matches the current ITs to the integration tests.

-  If you would like to test a different NPanday distribution, you can use the system property "npanday.version" to specify

-  the version to test:

-    mvn clean test -Prun-its -Dnpanday.version=1.1

-  -->

-

-  <build>

-    <plugins>

-      <plugin>

-        <groupId>org.apache.maven.plugins</groupId>

-        <artifactId>maven-surefire-plugin</artifactId>

-        <configuration>

-          <skip>true</skip>

-          <systemProperties>

-            <property>

-              <name>npanday.version</name>

-              <value>${npanday.version}</value>

-            </property>

-            <property>

-              <name>npanday.version.force</name>

-              <value>${npanday.version.force}</value>

-            </property>

-            <property>

-              <name>debug.maven</name>

-              <value>${debug.maven}</value>

-            </property>

-          </systemProperties>

-        </configuration>

-      </plugin>

-      <plugin>

-        <groupId>org.apache.maven.plugins</groupId>

-        <artifactId>maven-jar-plugin</artifactId>

-        <executions>

-          <execution>

-            <goals>

-              <goal>test-jar</goal>

-            </goals>

-          </execution>

-        </executions>

-      </plugin>

-      <plugin>

-        <groupId>org.apache.maven.plugins</groupId>

-        <artifactId>maven-release-plugin</artifactId>

-        <configuration>

-          <systemProperties>

-            <property>

-              <name>npanday.version</name>

-              <value>${npanday.version}</value>

-            </property>

-          </systemProperties>

-        </configuration>

-      </plugin>

-      <plugin>

-        <groupId>org.apache.maven.plugins</groupId>

-        <artifactId>maven-compiler-plugin</artifactId>

-        <configuration>

-          <source>1.5</source>

-          <target>1.5</target>

-        </configuration>

-      </plugin>

-    </plugins>

-  </build>

-  <dependencies>

-    <dependency>

-      <groupId>org.apache.maven.shared</groupId>

-      <artifactId>maven-verifier</artifactId>

-      <version>1.2</version>

-    </dependency>

-    <dependency>

-      <groupId>org.apache.maven</groupId>

-      <artifactId>maven-artifact</artifactId>

-      <version>2.0</version>

-    </dependency>

-  </dependencies>

-  <properties>

-    <npanday.version>${project.version}</npanday.version>

-    <npanday.snapshots.url>http://repo.npanday.org/archiva/repository/npanday-snapshots</npanday.snapshots.url>

-    <npanday.releases.url>http://repo.npanday.org/archiva/repository/npanday-releases</npanday.releases.url>

-  </properties>

-

-  <scm>

-    <url>https://npanday.svn.codeplex.com/svn/npanday-its/tags/npanday-its-1.2</url>

-    <connection>scm:svn:https://npanday.svn.codeplex.com/svn/npanday-its/tags/npanday-its-1.2</connection>

-    <developerConnection>scm:svn:https://npanday.svn.codeplex.com/svn/npanday-its/tags/npanday-its-1.2</developerConnection>

-  </scm>

-

-  <profiles>

-    <profile>

-      <id>run-its</id>

-      <build>

-        <plugins>

-          <plugin>

-            <groupId>org.apache.maven.plugins</groupId>

-            <artifactId>maven-surefire-plugin</artifactId>

-            <configuration>

-              <skip>false</skip>

-              <includes>

-                <include>**/IntegrationTestSuite.java</include>

-              </includes>

-            </configuration>

-          </plugin>

-        </plugins>

-      </build>

-    </profile>

-	<profile>

-      <id>npanday-release</id>

-      <build>

-        <plugins>

-          <plugin>

-            <groupId>org.apache.maven.plugins</groupId>

-            <artifactId>maven-gpg-plugin</artifactId>

-            <configuration>

-              <passphrase>${gpg.passphrase}</passphrase>

-            </configuration>

-            <executions>

-              <execution>

-                <goals>

-                  <goal>sign</goal>

-                </goals>

-              </execution>

-            </executions>

-          </plugin>

-        </plugins> 

-      </build>

-    </profile>	

-  </profiles>

-   

-  <distributionManagement>

-    <snapshotRepository>

-      <id>npanday.snapshots</id>

-      <name>NPanday Snapshots Repository</name>

-      <url>${npanday.snapshots.url}</url>

-    </snapshotRepository>

-    <repository>

-      <id>npanday.releases</id>

-      <name>NPanday Releases Repository</name>

-      <url>${npanday.releases.url}</url>

-    </repository>

-  </distributionManagement>

-  

-  <!-- TODO: need to get these into central after 1.1 -->

-  <pluginRepositories>

-    <pluginRepository>

-      <id>npanday.releases</id>

-      <name>NPanday Releases Repository</name>

-      <url>${npanday.releases.url}</url>

-      <snapshots>

-        <enabled>false</enabled>

-      </snapshots>

-    </pluginRepository>

-  </pluginRepositories>

-  

-  <repositories>

-    <repository>

-      <id>npanday.releases</id>

-      <name>NPanday Releases Repository</name>

-      <url>${npanday.releases.url}</url>

-      <snapshots>

-        <enabled>false</enabled>

-      </snapshots>

-    </repository>

-  </repositories>  

-  

-</project>

+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>npanday.its</groupId>
+  <artifactId>npanday-its</artifactId>
+  <version>1.2</version>
+
+  <name>NPanday Integration Tests Parent</name>
+
+  <!--
+  By default, the project just packages the tests in an artifact. To actually run them, activate the profile "run-its":
+    mvn clean test -Prun-its
+  
+  This will subject the NPanday version that matches the current ITs to the integration tests.
+  If you would like to test a different NPanday distribution, you can use the system property "npanday.version" to specify
+  the version to test:
+    mvn clean test -Prun-its -Dnpanday.version=1.1
+  -->
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+          <systemProperties>
+            <property>
+              <name>npanday.version</name>
+              <value>${npanday.version}</value>
+            </property>
+            <property>
+              <name>npanday.version.force</name>
+              <value>${npanday.version.force}</value>
+            </property>
+            <property>
+              <name>debug.maven</name>
+              <value>${debug.maven}</value>
+            </property>
+          </systemProperties>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>test-jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-release-plugin</artifactId>
+        <configuration>
+          <tagBase>https://npanday.svn.codeplex.com/svn/npanday-its/releases/</tagBase>		
+          <systemProperties>
+            <property>
+              <name>npanday.version</name>
+              <value>${npanday.version}</value>
+            </property>
+          </systemProperties>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.5</source>
+          <target>1.5</target>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven.shared</groupId>
+      <artifactId>maven-verifier</artifactId>
+      <version>1.2</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-artifact</artifactId>
+      <version>2.0</version>
+    </dependency>
+  </dependencies>
+  <properties>
+    <npanday.version>${project.version}</npanday.version>
+    <npanday.snapshots.url>http://repo.npanday.org/archiva/repository/npanday-snapshots</npanday.snapshots.url>
+    <npanday.releases.url>http://repo.npanday.org/archiva/repository/npanday-releases</npanday.releases.url>
+  </properties>
+
+  <scm>
+    <url>https://npanday.svn.codeplex.com/svn/npanday-its/releases/npanday-its-1.2</url>
+    <connection>scm:svn:https://npanday.svn.codeplex.com/svn/npanday-its/releases/npanday-its-1.2</connection>
+    <developerConnection>scm:svn:https://npanday.svn.codeplex.com/svn/npanday-its/releases/npanday-its-1.2</developerConnection>
+  </scm>
+
+  <profiles>
+    <profile>
+      <id>run-its</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <configuration>
+              <skip>false</skip>
+              <includes>
+                <include>**/IntegrationTestSuite.java</include>
+              </includes>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+	<profile>
+      <id>npanday-release</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-gpg-plugin</artifactId>
+            <configuration>
+              <passphrase>${gpg.passphrase}</passphrase>
+            </configuration>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>sign</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins> 
+      </build>
+    </profile>	
+  </profiles>
+   
+  <distributionManagement>
+    <snapshotRepository>
+      <id>npanday.snapshots</id>
+      <name>NPanday Snapshots Repository</name>
+      <url>${npanday.snapshots.url}</url>
+    </snapshotRepository>
+    <repository>
+      <id>npanday.releases</id>
+      <name>NPanday Releases Repository</name>
+      <url>${npanday.releases.url}</url>
+    </repository>
+  </distributionManagement>
+  
+  <!-- TODO: need to get these into central after 1.1 -->
+  <pluginRepositories>
+    <pluginRepository>
+      <id>npanday.releases</id>
+      <name>NPanday Releases Repository</name>
+      <url>${npanday.releases.url}</url>
+      <snapshots>
+        <enabled>false</enabled>
+      </snapshots>
+    </pluginRepository>
+  </pluginRepositories>
+  
+  <repositories>
+    <repository>
+      <id>npanday.releases</id>
+      <name>NPanday Releases Repository</name>
+      <url>${npanday.releases.url}</url>
+      <snapshots>
+        <enabled>false</enabled>
+      </snapshots>
+    </repository>
+  </repositories>  
+  
+</project>
diff --git a/src/test/java/npanday/its/AbstractNPandayIntegrationTestCase.java b/src/test/java/npanday/its/AbstractNPandayIntegrationTestCase.java
new file mode 100644
index 0000000..306ae07
--- /dev/null
+++ b/src/test/java/npanday/its/AbstractNPandayIntegrationTestCase.java
@@ -0,0 +1,590 @@
+package npanday.its;
+
+/*
+ * Copyright 2009
+ *
+ * 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.
+ */
+
+import junit.framework.TestCase;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.it.VerificationException;
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.FileUtils;
+import org.apache.maven.it.util.IOUtil;
+import org.apache.maven.it.util.ResourceExtractor;
+import org.apache.maven.it.util.cli.CommandLineException;
+import org.apache.maven.it.util.cli.CommandLineUtils;
+import org.apache.maven.it.util.cli.Commandline;
+import org.apache.maven.it.util.cli.StreamConsumer;
+import org.apache.maven.it.util.cli.WriterStreamConsumer;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+public abstract class AbstractNPandayIntegrationTestCase
+    extends TestCase
+{
+    protected boolean skip;
+
+    protected String skipReason;
+
+    private static final String NPANDAY_MAX_FRAMEWORK_VERSION_PROPERTY = "npanday.framework.version";
+
+    private static final String NPANDAY_VERSION_SYSTEM_PROPERTY = "npanday.version";
+
+    private static DefaultArtifactVersion version = checkVersion();
+
+    private static DefaultArtifactVersion frameworkVersion = checkFrameworkVersion();
+
+    private static boolean debugMaven = Boolean.valueOf( System.getProperty( "debug.maven", "false" ) );
+
+    private static boolean forceVersion = Boolean.valueOf( System.getProperty( "npanday.version.force", "false" ) );
+
+    private static final Pattern PATTERN = Pattern.compile( "(.*?)-(RC[0-9]+|SNAPSHOT)" );
+
+    private static String disasmArg;
+
+    private static String disasmExec;
+
+    protected AbstractNPandayIntegrationTestCase()
+    {
+        this( "(0,)" );
+    }
+
+    protected AbstractNPandayIntegrationTestCase( String versionRangeStr )
+    {
+        VersionRange versionRange = createVersionRange( versionRangeStr );
+
+        if ( !checkNPandayVersion( versionRange, version ) && !forceVersion )
+        {
+            skip = true;
+            skipReason = "NPanday version " + version + " not in range " + versionRange;
+        }
+    }
+
+    protected static boolean checkNPandayVersion( VersionRange versionRange, DefaultArtifactVersion version )
+    {
+        String v = version.toString();
+
+        Matcher m = PATTERN.matcher( v );
+        if ( m.matches() )
+        {
+            return versionRange.containsVersion( new DefaultArtifactVersion( m.group( 1 ) ) );
+        }
+        else
+        {
+            return versionRange.containsVersion( version );
+        }
+    }
+
+    protected AbstractNPandayIntegrationTestCase( String versionRangeStr, String frameworkVersionStr )
+    {
+        this( versionRangeStr );
+
+        VersionRange versionRange = createVersionRange( frameworkVersionStr );
+
+        if ( frameworkVersion != null && !versionRange.containsVersion( frameworkVersion ) && !forceVersion )
+        {
+            skip = true;
+            skipReason = "Framework version " + frameworkVersion + " not in range " + versionRange;
+        }
+    }
+
+    private static DefaultArtifactVersion checkVersion()
+    {
+        DefaultArtifactVersion version = null;
+        String v = System.getProperty( NPANDAY_VERSION_SYSTEM_PROPERTY );
+        if ( v != null )
+        {
+            version = new DefaultArtifactVersion( v );
+            System.out.println( "Using NPanday version " + version );
+        }
+        else
+        {
+            System.out.println( "No NPanday version given" );
+        }
+        return version;
+    }
+
+    private static DefaultArtifactVersion checkFrameworkVersion()
+    {
+        DefaultArtifactVersion version = null;
+        String v = System.getProperty( NPANDAY_MAX_FRAMEWORK_VERSION_PROPERTY );
+        if ( v != null )
+        {
+            version = new DefaultArtifactVersion( v );
+            System.out.println( "Using Framework versions <= " + version );
+        }
+        else
+        {
+            // TODO: this is not necessarily accurate. While it gets all those available, the max should actually be
+            //       the one in the path (which can be obtained from the output for csc, but there may be other better
+            //       ways such as a small C# app to interrogate it.
+            //       It may be best to have an NPanday plugin that can reveal it then call that first to set it,
+            //       reusing the vendor info
+
+            File versions = new File( System.getenv( "systemroot" ) + "\\Microsoft.NET\\Framework" );
+            if ( versions.exists() )
+            {
+                List<DefaultArtifactVersion> frameworkVersions = new ArrayList<DefaultArtifactVersion>();
+                String[] list = versions.list( new java.io.FilenameFilter()
+                {
+                    public boolean accept( File parent, String name )
+                    {
+                        File f = new File( parent, name );
+                        // Mscorlib.dll can be used to detect 2.0 SDK, Microsoft.CompactFramework.Build.Tasks.dll for 3.5 SDK
+                        // Having just the runtime (without these files) is not sufficient
+                        return f.isDirectory() && ( new File( f, "Mscorlib.dll" ).exists() || new File( f,
+                                                                                                        "Microsoft.CompactFramework.Build.Tasks.dll" ).exists() );
+                    }
+                } );
+                if ( list != null && list.length > 0 )
+                {
+                    for ( String frameworkVersion : list )
+                    {
+                        frameworkVersions.add( new DefaultArtifactVersion( frameworkVersion ) );
+                    }
+                    Collections.sort( frameworkVersions );
+                    System.out.println( "Available framework versions: " + frameworkVersions );
+                    version = frameworkVersions.get( frameworkVersions.size() - 1 );
+                    System.out.println( "Selected framework version: " + version );
+                }
+            }
+            if ( version == null )
+            {
+                System.out.println( "No Framework version given - attempting to use all" );
+            }
+        }
+        return version;
+    }
+
+    protected static VersionRange createVersionRange( String versionRangeStr )
+    {
+        VersionRange versionRange;
+        try
+        {
+            versionRange = VersionRange.createFromVersionSpec( versionRangeStr );
+        }
+        catch ( InvalidVersionSpecificationException e )
+        {
+            throw new RuntimeException( "Invalid version range: " + versionRangeStr + " - " + e.getMessage(), e );
+        }
+        return versionRange;
+    }
+
+    protected void runTest()
+        throws Throwable
+    {
+        System.out.print( getITName() + "(" + getName() + ").." );
+
+        if ( skip )
+        {
+            System.out.println( " Skipping (" + skipReason + ")" );
+            return;
+        }
+
+        try
+        {
+            super.runTest();
+            System.out.println( " Ok" );
+        }
+        catch ( Throwable t )
+        {
+            System.out.println( " Failure" );
+            throw t;
+        }
+    }
+
+    private String getITName()
+    {
+        String simpleName = getClass().getName();
+        int idx = simpleName.lastIndexOf( '.' );
+        simpleName = idx >= 0 ? simpleName.substring( idx + 1 ) : simpleName;
+        simpleName = simpleName.startsWith( "NPandayIT" ) ? simpleName.substring( "NPandayIT".length() ) : simpleName;
+        simpleName = simpleName.endsWith( "Test" ) ? simpleName.substring( 0, simpleName.length() - 4 ) : simpleName;
+        return simpleName;
+    }
+
+    protected Verifier getVerifier( File testDirectory )
+        throws VerificationException
+    {
+        Verifier verifier;
+        if ( debugMaven )
+        {
+            verifier = new Verifier( testDirectory.getAbsolutePath() ) {
+                public String getExecutable() { return super.getExecutable() + "Debug"; }
+            };
+        }
+        else
+        {
+            verifier = new Verifier( testDirectory.getAbsolutePath() );
+        }
+        List<String> cliOptions = new ArrayList<String>( 2 );
+        cliOptions.add( "-Dnpanday.version=" + version );
+        verifier.setCliOptions( cliOptions );
+        return verifier;
+    }
+
+    protected String getCommentsFile()
+    {
+        return "target/comments.xml";
+    }
+
+    protected String getBuildSourcesMain( String fileName )
+    {
+        return getBuildFile( "build-sources", fileName );
+    }
+
+    protected String getBuildSourcesGenerated( String fileName )
+    {
+        return getBuildSourcesMain( fileName );
+    }
+
+    protected String getTestSourcesMain( String fileName )
+    {
+        return getBuildFile( "build-test-sources", fileName );
+    }
+
+    protected String getTestSourcesGenerated( String fileName )
+    {
+        return getTestSourcesMain( fileName );
+    }
+
+    protected String getBuildFile( String buildDirectory, String fileName )
+    {
+        return "target/" + buildDirectory + "/" + fileName;
+    }
+
+    protected String getAssemblyFile( String assemblyName, String type )
+    {
+        return getAssemblyFile( assemblyName, null, type, null );
+    }
+
+    protected String getAssemblyFile( String assemblyName, String version, String type )
+    {
+        return getAssemblyFile( assemblyName, version, type, null );
+    }
+
+    protected String getAssemblyFile( String assemblyName, String version, String type, String classifier )
+    {
+        return getAssemblyFilePath( "target", assemblyName, type );
+    }
+
+    protected void clearRdfCache()
+        throws IOException
+    {
+        FileUtils.deleteDirectory( new File( System.getProperty( "user.home" ), ".m2/uac/rdfRepository" ) );
+    }
+
+    protected void deleteArtifact( Verifier verifier, String groupId, String artifactId, String version, String type )
+        throws IOException
+    {
+        FileUtils.deleteDirectory( new File( System.getProperty( "user.home" ), ".m2/uac/gac_msil/" + artifactId + "/" + version + "__" + groupId ) );
+        verifier.deleteArtifact( groupId, artifactId, version, type );
+    }
+
+    protected void assertClassPresent( String assembly, String className )
+        throws VerificationException
+    {
+        if ( !isClassPresent( assembly, className ) )
+        {
+            fail( "Unable to find class " + className + " in assembly " + assembly );
+        }
+    }
+
+    protected void assertClassNotPresent( String assembly, String className )
+        throws VerificationException
+    {
+        if ( isClassPresent( assembly, className ) )
+        {
+            fail( "Found unexpected class " + className + " in assembly " + assembly );
+        }
+    }
+
+    private boolean isClassPresent( String assembly, String className )
+        throws VerificationException
+    {
+        String output = runILDisasm( assembly );
+
+        String currentClassName = className;
+
+        int index = className.indexOf( '.' );
+        String namespace = index > 0 ? className.substring( 0, index ) : "";
+        for ( String line : output.split( "\n" ) )
+        {
+            line = line.trim();
+            // mono disassembles like this instead
+            if ( line.startsWith( ".namespace " + namespace ) )
+            {
+                currentClassName = className.substring( namespace.length() + 1 );
+            }
+
+            if ( line.startsWith( ".class " ) && line.endsWith( currentClassName ) )
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private String runILDisasm( String assembly )
+        throws VerificationException
+    {
+        if ( disasmExec != null )
+        {
+            if ( disasmArg != null )
+            {
+                return execute( disasmExec, new String[]{disasmArg, assembly} );
+            }
+            else
+            {
+                return execute( disasmExec, new String[]{assembly} );
+            }
+        }
+
+        String value = null;
+        try
+        {
+            value = execute( "ildasm", new String[]{"/text", assembly} );
+            disasmExec = "ildasm";
+            disasmArg = "/text";
+        }
+        catch ( VerificationException e )
+        {
+            value = execute( "monodis", new String[]{assembly} );
+            disasmExec = "monodis";
+            disasmArg = null;
+        }
+        return value;
+    }
+
+    private String execute( String executable, String[] args )
+        throws VerificationException
+    {
+        try
+        {
+            Commandline cli = new Commandline();
+            cli.setExecutable( executable );
+            for ( String arg : args )
+            {
+                cli.createArgument().setValue( arg );
+            }
+
+            Writer logWriter = new StringWriter();
+
+            StreamConsumer out = new WriterStreamConsumer( logWriter );
+
+            StreamConsumer err = new WriterStreamConsumer( logWriter );
+
+            System.err.println( "Command: " + Commandline.toString( cli.getCommandline() ) );
+
+            int ret = CommandLineUtils.executeCommandLine( cli, out, err );
+
+            logWriter.close();
+
+            String output = logWriter.toString();
+            if ( ret > 0 )
+            {
+                System.err.println( output );
+                throw new VerificationException( "Exit code: " + ret );
+            }
+
+            return output;
+        }
+        catch ( CommandLineException e )
+        {
+            throw new VerificationException( e );
+        }
+        catch ( IOException e )
+        {
+            throw new VerificationException( e );
+        }
+    }
+
+    protected String getTestAssemblyFile( String artifactId, String version, String type )
+    {
+        String basedir = "target/test-assemblies";
+        return getAssemblyFilePath( basedir, artifactId, type );
+    }
+
+    private String getAssemblyFilePath( String basedir, String artifactId, String type )
+    {
+        StringBuilder sb = new StringBuilder();
+        sb.append( basedir );
+        sb.append( "/" );
+        sb.append( artifactId );
+        sb.append( "." );
+        sb.append( type );
+        return sb.toString();
+    }
+
+    protected String getAssemblyResourceFile( String fileName )
+    {
+        return getBuildFile( "assembly-resources", fileName );
+    }
+
+    protected void assertResourcePresent( String assembly, String resource )
+        throws VerificationException
+    {
+        if ( !isResourcePresent( assembly, resource ) )
+        {
+            fail( "Unable to find resource " + resource + " in assembly " + assembly );
+        }
+    }
+
+    protected void assertResourcePresent( String assembly, String assemblyName, String resource )
+        throws VerificationException
+    {
+        if ( !isResourcePresent( assembly, assemblyName, resource ) )
+        {
+            fail( "Unable to find resource " + resource + " in assembly " + assembly );
+        }
+    }
+
+    private boolean isResourcePresent( String assembly, String resource )
+        throws VerificationException
+    {
+        return isResourcePresent( assembly, getAssemblyName( assembly ), resource );
+    }
+
+    private boolean isResourcePresent( String assembly, String assemblyName, String resource )
+        throws VerificationException
+    {
+        String output = runILDisasm( assembly );
+
+        String prefix = ".mresource public ";
+        String value = assemblyName + "." + resource.replace( '/', '.' );
+        for ( String line : output.split( "\n" ) )
+        {
+            line = line.trim();
+            if ( line.startsWith( prefix ) )
+            {
+                line = line.substring( prefix.length() );
+                if ( line.equals( value ) || line.equals( "'" + value + "'" ) )
+                {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private String getAssemblyName( String assembly )
+    {
+        return assembly.substring( assembly.lastIndexOf( File.separatorChar ) + 1, assembly.lastIndexOf( '.' ) );
+    }
+
+    protected void assertPublicKey( String assembly )
+        throws VerificationException
+    {
+        if ( !hasPublicKey( assembly ) )
+        {
+            fail( "Couldn't find public key in assembly " + assembly );
+        }
+    }
+
+    private boolean hasPublicKey( String assembly )
+        throws VerificationException
+    {
+        String output = runILDisasm( assembly );
+
+        boolean insideCorrectAssembly = false;
+        for ( String line : output.split( "\n" ) )
+        {
+            if ( line.startsWith( ".assembly " + getAssemblyName( assembly ) ) )
+            {
+                insideCorrectAssembly = true;
+            }
+            else if ( line.startsWith( "}" ) )
+            {
+                insideCorrectAssembly = false;
+            }
+            else if ( insideCorrectAssembly && line.trim().startsWith( ".publickey" ) )
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    protected static boolean checkNPandayVersion( String versionRangeStr )
+    {
+        return checkNPandayVersion( createVersionRange( versionRangeStr ), version ) || forceVersion;
+    }
+
+    protected File unzipResources( String resourcePath )
+        throws IOException
+    {
+        String tempDirPath = System.getProperty( "maven.test.tmpdir", System.getProperty( "java.io.tmpdir" ) );
+        File tempDir = new File( tempDirPath );
+
+        File testDir = new File( tempDir, resourcePath.substring( 0, resourcePath.length() - 4 ) );
+
+        FileUtils.deleteDirectory( testDir );
+
+        File f = ResourceExtractor.extractResourcePath( getClass(), resourcePath, tempDir, true );
+
+        ZipFile zipFile = new ZipFile( f );
+        try
+        {
+            for ( Enumeration entries = zipFile.entries(); entries.hasMoreElements(); )
+            {
+                ZipEntry entry = (ZipEntry) entries.nextElement();
+
+                File file = new File( testDir.getParentFile(), entry.getName() );
+                file.getParentFile().mkdirs();
+                if ( entry.isDirectory() )
+                {
+                    file.mkdir();
+                    continue;
+                }
+
+                InputStream inputStream = null;
+                FileOutputStream outputStream = null;
+                try
+                {
+                    inputStream = zipFile.getInputStream( entry );
+                    outputStream = new FileOutputStream( file );
+                    IOUtil.copy( inputStream, outputStream );
+                }
+                finally
+                {
+                    IOUtil.close( inputStream );
+                    IOUtil.close( outputStream );
+                }
+            }
+        }
+        finally
+        {
+            zipFile.close();
+        }
+
+        return testDir;
+    }
+}
diff --git a/src/test/java/npanday/its/BootstrapTest.java b/src/test/java/npanday/its/BootstrapTest.java
new file mode 100644
index 0000000..5a8e0af
--- /dev/null
+++ b/src/test/java/npanday/its/BootstrapTest.java
@@ -0,0 +1,41 @@
+package npanday.its;

+

+/*

+ * Copyright 2010

+ *

+ * 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.

+ */

+

+import org.apache.maven.it.Verifier;

+import org.apache.maven.it.util.ResourceExtractor;

+

+import java.io.File;

+

+public class BootstrapTest

+    extends AbstractNPandayIntegrationTestCase

+{

+    public BootstrapTest()

+    {

+        super( "[1.0.2,)" );

+    }

+

+    public void testBootstrap()

+        throws Exception

+    {

+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/bootstrap" );

+        Verifier verifier = getVerifier( testDir );

+        verifier.executeGoal( "install" );

+        verifier.verifyErrorFreeLog();

+        verifier.resetStreams();

+    }

+}

diff --git a/src/test/java/npanday/its/IntegrationTestSuite.java b/src/test/java/npanday/its/IntegrationTestSuite.java
new file mode 100644
index 0000000..0818c34
--- /dev/null
+++ b/src/test/java/npanday/its/IntegrationTestSuite.java
@@ -0,0 +1,85 @@
+package npanday.its;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+public class IntegrationTestSuite
+    extends TestCase
+{
+    public static Test suite()
+    {
+        TestSuite suite = new TestSuite();
+
+        /*
+         * This must be the first one to ensure the local repository is properly setup.
+         */
+        suite.addTestSuite( BootstrapTest.class );
+
+        /*
+         * Add tests in order of newest first.
+         * Newer tests are also more likely to fail, so this is
+         * a fail fast technique as well.
+         */
+
+        // Tests that currently don't pass for any Maven version, i.e. the corresponding issue hasn't been resolved yet
+        // suite.addTestSuite( NPandayIT0033VBSourceWithCSharpSourceTest.class ); // issue #11732
+        // suite.addTestSuite( NPandayIT0002NetModuleDependencyTest.class ); // issue #11729
+        // suite.addTestSuite( NPandayIT0003NetModuleTransitiveDependencyTest.class ); // issue #11729
+
+        suite.addTestSuite( NPandayIT13635SnapshotUpdatesTest.class );
+        suite.addTestSuite( NPandayIT13542OptionInferTest.class );
+        suite.addTestSuite( NPandayIT10276ConflictingExtensionsTest.class );
+        suite.addTestSuite( NPandayIT13018TransitiveDependenciesTest.class );
+        suite.addTestSuite( NPandayIT12940MixedVersionsTest.class );
+        suite.addTestSuite( NPandayIT11480MVCProjectTest.class );
+        suite.addTestSuite( NPandayIT12549WpfProjectTest.class );
+        suite.addTestSuite( NPandayIT11579MissingGroupOrVersionTest.class );
+        suite.addTestSuite( NPandayIT11695MsBuildCopyReferencesTest.class );
+        suite.addTestSuite( NPandayIT11637MsBuildErrorHandlingTest.class );
+        suite.addTestSuite( NPandayIT9903ResGenWithErrorInFileNameTest.class );
+
+        suite.addTestSuite( NPandayITWithResourceFileTest.class );
+        suite.addTestSuite( NPandayITWebAppInstallTest.class );
+        suite.addTestSuite( NPandayITVBWebAppTest.class );
+        suite.addTestSuite( NPandayITSnapshotResolutionTest.class );
+        suite.addTestSuite( NPandayITNet35Test.class );
+        suite.addTestSuite( NPandayITIntraProjectDependencyTest.class );
+        suite.addTestSuite( NPandayITConsoleApplicationTest.class );
+        suite.addTestSuite( NPandayITCompilerWithArgsTest.class );
+        suite.addTestSuite( NPandayITClassLibWithWebRefInstallTest.class );
+        suite.addTestSuite( NPandayIT0036InstalledArtifactsVerificationTest.class );
+        suite.addTestSuite( NPandayIT0035VBRootNamespaceTest.class );
+        suite.addTestSuite( NPandayIT0032CompileExclusionsTest.class );
+        suite.addTestSuite( NPandayIT0029RemoteRepoTest.class );
+        suite.addTestSuite( NPandayIT0028RemoteSnapshotRepoTest.class );
+        suite.addTestSuite( NPandayIT0022StrongNameKeyAddedToAssemblyTest.class );
+        suite.addTestSuite( NPandayIT0020EmbeddedResourcesTest.class );
+        suite.addTestSuite( NPandayIT0010VBCompilationTest.class );
+        suite.addTestSuite( NPandayIT0007XSDVerificationTest.class );
+        suite.addTestSuite( NPandayIT0006StockingHandlersTest.class );
+        suite.addTestSuite( NPandayIT0004NUnitTestVerificationTest.class );
+        suite.addTestSuite( NPandayIT0001CompilerVerificationTest.class );
+
+        return suite;
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT0001CompilerVerificationTest.java b/src/test/java/npanday/its/NPandayIT0001CompilerVerificationTest.java
new file mode 100644
index 0000000..507bbb0
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT0001CompilerVerificationTest.java
@@ -0,0 +1,44 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT0001CompilerVerificationTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT0001CompilerVerificationTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testCompiler()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT0001" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        String assembly = new File( testDir, getAssemblyFile( "NPandayIT0001", "1.0.0.0", "dll" ) ).getAbsolutePath();
+        verifier.assertFilePresent( assembly );
+        assertClassPresent( assembly, "It0001" );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT0002NetModuleDependencyTest.java b/src/test/java/npanday/its/NPandayIT0002NetModuleDependencyTest.java
new file mode 100644
index 0000000..513e1a4
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT0002NetModuleDependencyTest.java
@@ -0,0 +1,54 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT0002NetModuleDependencyTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT0002NetModuleDependencyTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testNetModuleDependency()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayITNetModuleDependency" );
+        File testModuleDir = new File( testDir, "dependency" );
+        Verifier verifier = getVerifier( testModuleDir );
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent(
+            new File( testModuleDir, getAssemblyFile( "dependency", "1.0.0.0", "netmodule" ) ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+
+        testModuleDir = new File( testDir, "library" );
+        verifier = getVerifier( testModuleDir );
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent(
+            new File( testModuleDir, getAssemblyFile( "dependency", "1.0.0.0", "netmodule" ) ).getAbsolutePath() );
+        verifier.assertFilePresent(
+            new File( testModuleDir, getAssemblyFile( "library", "1.0.0.0", "dll" ) ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT0003NetModuleTransitiveDependencyTest.java b/src/test/java/npanday/its/NPandayIT0003NetModuleTransitiveDependencyTest.java
new file mode 100644
index 0000000..eee45bd
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT0003NetModuleTransitiveDependencyTest.java
@@ -0,0 +1,79 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.VerificationException;
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT0003NetModuleTransitiveDependencyTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT0003NetModuleTransitiveDependencyTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testNetModuleDependencyTransitivity()
+        throws Exception
+    {
+        File testDir =
+            ResourceExtractor.simpleExtractResources( getClass(), "/NPandayITNetModuleTransitiveDependency" );
+        File testModuleDir = new File( testDir, "dependency" );
+        Verifier verifier = getVerifier( testModuleDir );
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent(
+            new File( testModuleDir, getAssemblyFile( "dependency", "1.0.0.0", "netmodule" ) ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+
+        testModuleDir = new File( testDir, "library" );
+        verifier = getVerifier( testModuleDir );
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent(
+            new File( testModuleDir, getAssemblyFile( "library", "1.0.0.0", "dll" ) ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+
+        testModuleDir = new File( testDir, "cli" );
+        verifier = getVerifier( testModuleDir );
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent(
+            new File( testModuleDir, getAssemblyFile( "dependency", "1.0.0.0", "netmodule" ) ).getAbsolutePath() );
+        verifier.assertFilePresent(
+            new File( testModuleDir, getAssemblyFile( "library", "1.0.0.0", "dll" ) ).getAbsolutePath() );
+        verifier.assertFilePresent(
+            new File( testModuleDir, getAssemblyFile( "cli", "1.0.0.0", "exe" ) ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+
+        testModuleDir = new File( testDir, "cli-fail-transitive" );
+        verifier = getVerifier( testModuleDir );
+        try
+        {
+            verifier.executeGoal( "install" );
+            fail( "Should have failed to execute goal" );
+        }
+        catch ( VerificationException e )
+        {
+            verifier.verifyTextInLog( "The type or namespace name 'It0002' could not be found" );
+            verifier.resetStreams();
+        }
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT0004NUnitTestVerificationTest.java b/src/test/java/npanday/its/NPandayIT0004NUnitTestVerificationTest.java
new file mode 100644
index 0000000..148c120
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT0004NUnitTestVerificationTest.java
@@ -0,0 +1,51 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT0004NUnitTestVerificationTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT0004NUnitTestVerificationTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testNUnitTestsRun()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT0004" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+
+        verifier.assertFilePresent(
+            new File( testDir, getAssemblyFile( "NPandayIT0004-test", "1.0.0.0", "dll" ) ).getAbsolutePath() );
+
+        verifier.assertFilePresent(
+            new File( testDir, "target/nunit-reports/TEST-NPandayIT0004-1.0-SNAPSHOT.xml" ).getAbsolutePath() );
+
+        verifier.assertFilePresent(
+            new File( testDir, getTestAssemblyFile( "NUnit.Framework", "2.2.8.0", "dll" ) ).getAbsolutePath() );
+
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT0006StockingHandlersTest.java b/src/test/java/npanday/its/NPandayIT0006StockingHandlersTest.java
new file mode 100644
index 0000000..89c27e6
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT0006StockingHandlersTest.java
@@ -0,0 +1,47 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT0006StockingHandlersTest
+
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT0006StockingHandlersTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testXsdPlugin()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT0006" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent(
+            new File( testDir, getBuildSourcesGenerated( "StockingHandlers_1_0.cs" ) ).getAbsolutePath() );
+        String assembly = new File( testDir, getAssemblyFile( "NPandayIT0006", "1.0.0.0", "dll" ) ).getAbsolutePath();
+        verifier.assertFilePresent( assembly );
+        assertClassPresent( assembly, "stockingHandlersType" );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT0007XSDVerificationTest.java b/src/test/java/npanday/its/NPandayIT0007XSDVerificationTest.java
new file mode 100644
index 0000000..ab8d7ae
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT0007XSDVerificationTest.java
@@ -0,0 +1,49 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT0007XSDVerificationTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT0007XSDVerificationTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testGenerateXsdFromXml()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT0007" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+
+        verifier.assertFilePresent(
+            new File( testDir, "target/generated-resources/registry-config.xsd" ).getAbsolutePath() );
+
+        String assembly = new File( testDir, getAssemblyFile( "NPandayIT0007", "1.0.0.0", "dll" ) ).getAbsolutePath();
+        verifier.assertFilePresent( assembly );
+        assertClassPresent( assembly, "registryconfig" );
+
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT0010VBCompilationTest.java b/src/test/java/npanday/its/NPandayIT0010VBCompilationTest.java
new file mode 100644
index 0000000..1dcf6b0
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT0010VBCompilationTest.java
@@ -0,0 +1,44 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT0010VBCompilationTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT0010VBCompilationTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testVBCompilation()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT0010" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        String assembly = new File( testDir, getAssemblyFile( "NPandayIT0010", "1.0.0.0", "dll" ) ).getAbsolutePath();
+        verifier.assertFilePresent( assembly );
+        assertClassPresent( assembly, "HelloWorld" );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT0020EmbeddedResourcesTest.java b/src/test/java/npanday/its/NPandayIT0020EmbeddedResourcesTest.java
new file mode 100644
index 0000000..c233466
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT0020EmbeddedResourcesTest.java
@@ -0,0 +1,51 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT0020EmbeddedResourcesTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT0020EmbeddedResourcesTest()
+    {
+        super( "[1.2,)" );
+    }
+
+    public void testEmbeddedResources()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT0020" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent(
+            new File( testDir, "target/assembly-resources/resource/resgen/fix.gif" ).getAbsolutePath());
+        verifier.assertFilePresent(
+            new File( testDir, "target/assembly-resources/resource/resgen/my-prop.x-properties").getAbsolutePath());
+        String assembly = new File( testDir, getAssemblyFile( "NPandayIT0020", "1.0.0.0", "dll" ) ).getAbsolutePath();
+        verifier.assertFilePresent( assembly );  
+        assertResourcePresent( assembly, "resgen/fix.gif" );
+        assertResourcePresent( assembly, "resgen/my-prop.x-properties" );
+        assertClassNotPresent( assembly, "NPandayIT0020.resgen.fix.gif" );
+        assertClassNotPresent( assembly, "NPandayIT0020.fix.gif" );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT0022StrongNameKeyAddedToAssemblyTest.java b/src/test/java/npanday/its/NPandayIT0022StrongNameKeyAddedToAssemblyTest.java
new file mode 100644
index 0000000..2c5cfb9
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT0022StrongNameKeyAddedToAssemblyTest.java
@@ -0,0 +1,44 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT0022StrongNameKeyAddedToAssemblyTest  
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT0022StrongNameKeyAddedToAssemblyTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testStrongNameKeyAddedToAssembly()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT0022" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        String assembly = new File( testDir, getAssemblyFile( "NPandayIT0022", "1.0.0.0", "dll" ) ).getAbsolutePath();
+        verifier.assertFilePresent( assembly );
+        assertPublicKey( assembly );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT0028RemoteSnapshotRepoTest.java b/src/test/java/npanday/its/NPandayIT0028RemoteSnapshotRepoTest.java
new file mode 100644
index 0000000..82f78d6
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT0028RemoteSnapshotRepoTest.java
@@ -0,0 +1,47 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT0028RemoteSnapshotRepoTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT0028RemoteSnapshotRepoTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testSnapDeploymentRemoteRepoNotUnique()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT0028" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "deploy" );
+        verifier.assertFilePresent(
+            new File( testDir, getAssemblyFile( "NPandayIT0028", "1.0.0.0", "dll" ) ).getAbsolutePath() );
+        String path =
+            "target/remoteSnapshotRepo/snapshots/NPandayIT0028/NPandayIT0028/1.0-SNAPSHOT/NPandayIT0028-1.0-SNAPSHOT";
+        verifier.assertFilePresent( new File( testDir, path + ".dll" ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir, path + ".pom" ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT0029RemoteRepoTest.java b/src/test/java/npanday/its/NPandayIT0029RemoteRepoTest.java
new file mode 100644
index 0000000..aed8fbc
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT0029RemoteRepoTest.java
@@ -0,0 +1,46 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT0029RemoteRepoTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT0029RemoteRepoTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testDeployNonSnapshotRemoteRepo()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT0029" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "deploy" );
+        verifier.assertFilePresent(
+            new File( testDir, getAssemblyFile( "NPandayIT0029", "1.0.0.0", "dll" ) ).getAbsolutePath() );
+        String path = "target/remoteRepo/NPandayIT0029/NPandayIT0029/1.0/NPandayIT0029-1.0";
+        verifier.assertFilePresent( new File( testDir, path + ".dll" ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir, path + ".pom" ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT0032CompileExclusionsTest.java b/src/test/java/npanday/its/NPandayIT0032CompileExclusionsTest.java
new file mode 100644
index 0000000..b768add
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT0032CompileExclusionsTest.java
@@ -0,0 +1,48 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT0032CompileExclusionsTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT0032CompileExclusionsTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testCompileExclusions()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT0032" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        String assembly = new File( testDir, getAssemblyFile( "NPandayIT0032", "1.0.0.0", "dll" ) ).getAbsolutePath();
+        verifier.assertFilePresent( assembly );
+        assertClassPresent( assembly, "It0032" );
+        String testAssembly =
+            new File( testDir, getTestAssemblyFile( "NPandayIT0032-test", "1.0.0.0", "dll" ) ).getAbsolutePath();
+        verifier.assertFilePresent( testAssembly );
+        assertClassPresent( testAssembly, "It0032Test1" );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT0033VBSourceWithCSharpSourceTest.java b/src/test/java/npanday/its/NPandayIT0033VBSourceWithCSharpSourceTest.java
new file mode 100644
index 0000000..7200e81
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT0033VBSourceWithCSharpSourceTest.java
@@ -0,0 +1,48 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT0033VBSourceWithCSharpSourceTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT0033VBSourceWithCSharpSourceTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testVBSourceWithCsharpTestSource()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT0033" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        String assembly = new File( testDir, getAssemblyFile( "NPandayIT0033", "1.0.0.0", "dll" ) ).getAbsolutePath();
+        verifier.assertFilePresent( assembly );
+        assertClassPresent( assembly, "VBClass" );
+        String testAssembly =
+            new File( testDir, getTestAssemblyFile( "NPandayIT0033-test", "1.0.0.0", "dll" ) ).getAbsolutePath();
+        verifier.assertFilePresent( testAssembly );
+        assertClassPresent( testAssembly, "Class1" );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT0035VBRootNamespaceTest.java b/src/test/java/npanday/its/NPandayIT0035VBRootNamespaceTest.java
new file mode 100644
index 0000000..0b869e2
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT0035VBRootNamespaceTest.java
@@ -0,0 +1,44 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT0035VBRootNamespaceTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT0035VBRootNamespaceTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testVBRootNamespace()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT0035" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        String assembly = new File( testDir, getAssemblyFile( "NPandayIT0035", "1.0.0.0", "exe" ) ).getAbsolutePath();
+        verifier.assertFilePresent( assembly );
+        assertClassPresent( assembly, "it0035.Module1" );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT0036InstalledArtifactsVerificationTest.java b/src/test/java/npanday/its/NPandayIT0036InstalledArtifactsVerificationTest.java
new file mode 100644
index 0000000..728a829
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT0036InstalledArtifactsVerificationTest.java
@@ -0,0 +1,74 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT0036InstalledArtifactsVerificationTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT0036InstalledArtifactsVerificationTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testIT0036InstalledArtifacts()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT0036" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent(
+            new File( testDir, getAssemblyFile( "NPandayIT0036", "1.0.0.0", "exe" ) ).getAbsolutePath() );
+        verifier.assertFilePresent(
+            new File( testDir, getAssemblyFile( "NPandayIT0036-test", "1.0.0.0", "dll" ) ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir, getAssemblyFile( "test-assemblies/NPandayIT0036", "1.0.0.0",
+                                                                        "exe" ) ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir, getAssemblyFile( "test-assemblies/NPandayIT0036-test", "1.0.0.0",
+                                                                        "dll" ) ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir, getAssemblyFile( "test-assemblies/NUnit.Framework", "1.0.0.0",
+                                                                        "dll" ) ).getAbsolutePath() );
+
+        verifier.assertFilePresent( new File( testDir, getBuildSourcesMain( "Module1.vb" ) ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir, getBuildSourcesMain( "folder/Module2.vb" ) ).getAbsolutePath() );
+        verifier.assertFileNotPresent(
+            new File( testDir, getBuildSourcesMain( "should-not-be-copied.txt" ) ).getAbsolutePath() );
+        verifier.assertFileNotPresent(
+            new File( testDir, getBuildSourcesMain( "should-not-be-copied.xml" ) ).getAbsolutePath() );
+        verifier.assertFileNotPresent(
+            new File( testDir, getBuildSourcesMain( "folder/should-not-be-copied-2.txt" ) ).getAbsolutePath() );
+        verifier.assertFileNotPresent(
+            new File( testDir, getBuildSourcesMain( "folder/should-not-be-copied-2.xml" ) ).getAbsolutePath() );
+
+        verifier.assertFilePresent( new File( testDir, getTestSourcesMain( "Module1.vb" ) ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir, getTestSourcesMain( "folder/Module2.vb" ) ).getAbsolutePath() );
+        verifier.assertFileNotPresent(
+            new File( testDir, getTestSourcesMain( "should-not-be-copied-test.txt" ) ).getAbsolutePath() );
+        verifier.assertFileNotPresent(
+            new File( testDir, getTestSourcesMain( "should-not-be-copied-test.xml" ) ).getAbsolutePath() );
+        verifier.assertFileNotPresent(
+            new File( testDir, getTestSourcesMain( "folder/should-not-be-copied-test-2.txt" ) ).getAbsolutePath() );
+        verifier.assertFileNotPresent(
+            new File( testDir, getTestSourcesMain( "folder/should-not-be-copied--test-2.xml" ) ).getAbsolutePath() );
+
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT10276ConflictingExtensionsTest.java b/src/test/java/npanday/its/NPandayIT10276ConflictingExtensionsTest.java
new file mode 100644
index 0000000..c4db792
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT10276ConflictingExtensionsTest.java
@@ -0,0 +1,43 @@
+package npanday.its;

+

+/*

+ * Copyright 2010

+ *

+ * 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.

+ */

+

+import org.apache.maven.it.VerificationException;

+import org.apache.maven.it.Verifier;

+import org.apache.maven.it.util.ResourceExtractor;

+

+import java.io.File;

+

+public class NPandayIT10276ConflictingExtensionsTest

+    extends AbstractNPandayIntegrationTestCase

+{

+    public NPandayIT10276ConflictingExtensionsTest()

+    {

+        super( "[1.2,)" );

+    }

+

+    public void testConflictingExtensions()

+        throws Exception

+    {

+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT10276" );

+        Verifier verifier = getVerifier( testDir );

+

+        verifier.executeGoal( "install" );

+        verifier.verifyErrorFreeLog();

+        verifier.resetStreams();

+    }

+}

diff --git a/src/test/java/npanday/its/NPandayIT11480MVCProjectTest.java b/src/test/java/npanday/its/NPandayIT11480MVCProjectTest.java
new file mode 100644
index 0000000..fd53ca1
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT11480MVCProjectTest.java
@@ -0,0 +1,56 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT11480MVCProjectTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT11480MVCProjectTest()
+    {
+        super( "[1.2,)", "[v3.5,)" ); 
+
+        File f = new File( System.getenv( "SYSTEMROOT" ), "assembly/GAC_MSIL/System.Web.MVC" );
+        if ( !f.exists() || !f.isDirectory() )
+        {
+            skipReason = "MVC.NET is not installed";
+            skip = true;
+        }
+    }
+
+    public void testMVCProject()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPanday11480" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        		
+		String assembly = new File( testDir + "/NPanday11480",
+            getAssemblyFile( "NPanday11480", "1.0.0.0", "dll" ) ).getAbsolutePath();
+        verifier.assertFilePresent( assembly );
+		
+		assertClassPresent( assembly, "NPanday11480.Controllers.AccountController" );
+        assertClassPresent( assembly, "NPanday11480.Controllers.HomeController" );
+        assertClassPresent( assembly, "NPanday11480.MvcApplication" );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT11579MissingGroupOrVersionTest.java b/src/test/java/npanday/its/NPandayIT11579MissingGroupOrVersionTest.java
new file mode 100644
index 0000000..55154c2
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT11579MissingGroupOrVersionTest.java
@@ -0,0 +1,54 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import java.io.File;
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+public class NPandayIT11579MissingGroupOrVersionTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT11579MissingGroupOrVersionTest()
+    {
+        super( "[1.1,)" );
+    }
+
+    public void testMissingGroupIdAndVersionShouldBeInherited()
+        throws Exception
+    {
+        clearRdfCache();
+
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPanday.IT11579" );
+        Verifier verifier = getVerifier( testDir );
+
+        verifier.executeGoal( "package" );
+        verifier.assertFilePresent(
+            new File( testDir, getAssemblyFile( "NPanday.ITs11579", "1.0-SNAPSHOT", "dll" ) ).getAbsolutePath() );
+        verifier.assertFilePresent(
+            new File( testDir, getAssemblyFile( "NPanday.ITs11579-test", "1.0-SNAPSHOT", "dll" ) ).getAbsolutePath() );
+        verifier.assertFilePresent(
+            new File( testDir, "target/test-assemblies/NPanday.ITs11579.dll" ).getAbsolutePath() );
+        verifier.assertFilePresent(
+            new File( testDir, "target/test-assemblies/NPanday.ITs11579-test.dll" ).getAbsolutePath() );
+        verifier.assertFilePresent(
+            new File( testDir, "target/test-assemblies/NPanday11579Dependency.dll" ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT11637MsBuildErrorHandlingTest.java b/src/test/java/npanday/its/NPandayIT11637MsBuildErrorHandlingTest.java
new file mode 100644
index 0000000..7b71e4a
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT11637MsBuildErrorHandlingTest.java
@@ -0,0 +1,50 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.VerificationException;
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT11637MsBuildErrorHandlingTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT11637MsBuildErrorHandlingTest()
+    {
+        super( "[1.2,)" );
+    }
+
+    public void testMsBuildErrorsHandled()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT11637" );
+        Verifier verifier = getVerifier( testDir );
+
+        try
+        {
+            verifier.executeGoal( "compile" );
+            fail( "Expected build to fail" );
+        }
+        catch ( VerificationException e )
+        {
+            verifier.verifyTextInLog( "Class1.cs(9,28): error CS1002: ; expected" );
+        }
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT11695MsBuildCopyReferencesTest.java b/src/test/java/npanday/its/NPandayIT11695MsBuildCopyReferencesTest.java
new file mode 100644
index 0000000..ac914ce
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT11695MsBuildCopyReferencesTest.java
@@ -0,0 +1,48 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT11695MsBuildCopyReferencesTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT11695MsBuildCopyReferencesTest()
+    {
+        super( "[1.2,)" );
+    }
+
+    public void testMsBuildCopyReferences()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT11695" );
+        Verifier verifier = getVerifier( testDir );
+        // TODO: would be better to ensure each IT has unique IDs for required test artifacts in a better namespace for deleting
+        verifier.deleteArtifacts( "test" );
+
+        verifier.executeGoal( "compile" );
+        verifier.assertFilePresent(
+            new File( testDir + "/.references/test/test-snapshot-1.0-SNAPSHOT/test-snapshot.dll" ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir + "/bin/Debug/NPandayIT11695.dll" ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir + "/bin/Debug/test-snapshot.dll" ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT12549WpfProjectTest.java b/src/test/java/npanday/its/NPandayIT12549WpfProjectTest.java
new file mode 100644
index 0000000..44ea5fe
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT12549WpfProjectTest.java
@@ -0,0 +1,54 @@
+package npanday.its;
+
+/*
+ * Copyright 2009
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT12549WpfProjectTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT12549WpfProjectTest()
+    {
+        super( "[1.2,)", "[v3.5,)" ); // 1.2+
+    }
+
+    public void testWpfProject()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT12549" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "test" );
+        String assembly = new File( testDir,
+            getAssemblyFile( "NPandayIT12549", "1.0.0", "exe" ) ).getAbsolutePath();
+        verifier.assertFilePresent( assembly );
+        String path = "target/assembly-resources/resource/NPandayIT12549.Properties.Resources.resources";
+        verifier.assertFilePresent( new File( testDir, path ).getAbsolutePath() );
+        path = "target/assembly-resources/resource/NPandayIT12549.g.resources";
+        verifier.assertFilePresent( new File( testDir, path ).getAbsolutePath() );
+        assertResourcePresent( assembly, "Properties.Resources.resources" );
+        assertResourcePresent( assembly, "g.resources" );
+        assertClassPresent( assembly, "NPandayIT12549.Properties.Resources" );
+        assertClassPresent( assembly, "NPandayIT12549.Properties.Settings" );
+        assertClassPresent( assembly, "NPandayIT12549.App" );
+        assertClassPresent( assembly, "NPandayIT12549.Window1" );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/npanday/its/NPandayIT12940MixedVersionsTest.java b/src/test/java/npanday/its/NPandayIT12940MixedVersionsTest.java
new file mode 100644
index 0000000..ed58909
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT12940MixedVersionsTest.java
@@ -0,0 +1,53 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT12940MixedVersionsTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT12940MixedVersionsTest()
+    {
+        super( "[1.2,)" );
+    }
+
+    public void testMixedVersionResolution()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT12940" );
+        Verifier verifier = getVerifier( testDir );
+
+        verifier.deleteArtifact( "test", "test-snapshot", "1.0-SNAPSHOT", "dll" );
+
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent(
+            new File( testDir, getAssemblyFile( "test-mixed-versions", "1.0-SNAPSHOT", "dll" ) ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir, getAssemblyFile( "test-mixed-versions-test", "1.0-SNAPSHOT",
+                                                                        "dll" ) ).getAbsolutePath() );
+        verifier.assertFilePresent(
+            new File( testDir, "target/test-assemblies/test-mixed-versions.dll" ).getAbsolutePath() );
+        verifier.assertFilePresent(
+            new File( testDir, "target/test-assemblies/test-mixed-versions-test.dll" ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir, "target/test-assemblies/test-snapshot.dll" ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT13018TransitiveDependenciesTest.java b/src/test/java/npanday/its/NPandayIT13018TransitiveDependenciesTest.java
new file mode 100644
index 0000000..97c0ccd
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT13018TransitiveDependenciesTest.java
@@ -0,0 +1,72 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.FileUtils;
+import org.apache.maven.it.util.IOUtil;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+public class NPandayIT13018TransitiveDependenciesTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT13018TransitiveDependenciesTest()
+    {
+        super( "[1.2,)" );
+    }
+
+    public void testLadderBuild()
+        throws Exception
+    {
+        File testDir = unzipResources( "/NPandayIT13018/LadderBuild.zip" );
+        Verifier verifier = getVerifier( testDir );
+
+        verifier.deleteArtifact( "test", "ladder1", "2.0.0.0", "dll" );
+
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent( new File( testDir, getAssemblyFile( "ladder1", "2.0.0.0",
+                                                                        "dll" ) ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+
+    public void testTransitiveDependenciesNotOnCompile()
+        throws Exception
+    {
+        File testDir = unzipResources( "/NPandayIT13018/TransDependency.zip" );
+        Verifier verifier = getVerifier( testDir );
+
+        verifier.deleteArtifact( "test", "NPandayIT13018", "1.0.0.0", "dll" );
+
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent( new File( testDir, getAssemblyFile( "NPandayIT13018", "1.0.0.0",
+                                                                        "dll" ) ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir, getAssemblyFile( "NPandayIT13018", "1.0.0.0",
+                                                                        "dll" ) ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT13542OptionInferTest.java b/src/test/java/npanday/its/NPandayIT13542OptionInferTest.java
new file mode 100644
index 0000000..916b627
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT13542OptionInferTest.java
@@ -0,0 +1,42 @@
+package npanday.its;
+
+/*
+ * Copyright 2009
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT13542OptionInferTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT13542OptionInferTest()
+    {
+        super( "[1.2,)" );
+    }
+
+    public void testWithOptionInfer()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT13542" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent( new File( testDir, getAssemblyFile( "OptionInfer", "1.0.0.0", "dll" ) ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayIT13635SnapshotUpdatesTest.java b/src/test/java/npanday/its/NPandayIT13635SnapshotUpdatesTest.java
new file mode 100644
index 0000000..66d2ef9
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT13635SnapshotUpdatesTest.java
@@ -0,0 +1,52 @@
+package npanday.its;

+

+/*

+ * Copyright 2010

+ *

+ * 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.

+ */

+

+import org.apache.maven.it.Verifier;

+import org.apache.maven.it.util.ResourceExtractor;

+

+import java.io.File;

+

+public class NPandayIT13635SnapshotUpdatesTest

+    extends AbstractNPandayIntegrationTestCase

+{

+    public NPandayIT13635SnapshotUpdatesTest()

+    {

+        super( "[1.2.1,)" );

+    }

+

+    public void testUniqueSnapshotUpdates()

+        throws Exception

+    {

+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT13635/example1" );

+        Verifier verifier = getVerifier( testDir );

+

+        clearRdfCache();

+        deleteArtifact( verifier, "NPanday.ITs", "NPanday.IT13635.Dependency", "1.0-SNAPSHOT", "dll" );

+

+        verifier.executeGoal( "compile" );

+        verifier.verifyErrorFreeLog();

+        verifier.resetStreams();

+

+        testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayIT13635/example2" );

+        verifier = getVerifier( testDir );

+

+        verifier.executeGoal( "compile" );

+        verifier.verifyErrorFreeLog();

+        verifier.resetStreams();

+    }

+}

diff --git a/src/test/java/npanday/its/NPandayIT9903ResGenWithErrorInFileNameTest.java b/src/test/java/npanday/its/NPandayIT9903ResGenWithErrorInFileNameTest.java
new file mode 100644
index 0000000..643260d
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayIT9903ResGenWithErrorInFileNameTest.java
@@ -0,0 +1,43 @@
+package npanday.its;
+
+/*
+ * Copyright 2009
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayIT9903ResGenWithErrorInFileNameTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayIT9903ResGenWithErrorInFileNameTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testResGenWithErrorInFileName()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/npanday-9903" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent( new File( testDir, "npanday-9903/" +
+            getAssemblyFile( "npanday-9903", "1.0.0", "zip" ) ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayITClassLibWithWebRefInstallTest.java b/src/test/java/npanday/its/NPandayITClassLibWithWebRefInstallTest.java
new file mode 100644
index 0000000..e8b3ab2
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayITClassLibWithWebRefInstallTest.java
@@ -0,0 +1,45 @@
+package npanday.its;
+
+/*
+ * Copyright 2009
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayITClassLibWithWebRefInstallTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayITClassLibWithWebRefInstallTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testClassLibWithWebRefInstall()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/ClassLibraryWithWebReference" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        String generatedClass = "ClassLibraryWithWebReference/Web References/com.amazon.soap/AmazonSearch.cs";
+        verifier.assertFilePresent( new File( testDir, generatedClass ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir, "ClassLibraryWithWebReference/" +
+            getAssemblyFile( "ClassLibraryWithWebReference", "1.0.0", "dll" ) ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayITCompilerWithArgsTest.java b/src/test/java/npanday/its/NPandayITCompilerWithArgsTest.java
new file mode 100644
index 0000000..0d7dfc1
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayITCompilerWithArgsTest.java
@@ -0,0 +1,46 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayITCompilerWithArgsTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayITCompilerWithArgsTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testCompilerWithArgs()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayITCompilerWithArgs" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        String assembly = new File( testDir, getAssemblyFile( "NPandayITCompilerWithArgs", "1.0.0.0", "dll",
+                                                              null ) ).getAbsolutePath();
+        verifier.assertFilePresent( assembly );
+        assertClassPresent( assembly, "It0001" );
+        assertClassNotPresent( assembly, "It0002" );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayITConsoleApplicationTest.java b/src/test/java/npanday/its/NPandayITConsoleApplicationTest.java
new file mode 100644
index 0000000..69b9bb4
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayITConsoleApplicationTest.java
@@ -0,0 +1,43 @@
+package npanday.its;
+
+/*
+ * Copyright 2009
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayITConsoleApplicationTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayITConsoleApplicationTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testConsoleApplication()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/ConsoleApplicationEx" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent( new File( testDir, "ConsoleApplicationEx/" +
+            getAssemblyFile( "ConsoleApplicationEx", "1.0.0", "exe" ) ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayITIntraProjectDependencyTest.java b/src/test/java/npanday/its/NPandayITIntraProjectDependencyTest.java
new file mode 100644
index 0000000..8152e4f
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayITIntraProjectDependencyTest.java
@@ -0,0 +1,49 @@
+package npanday.its;
+
+/*
+ * Copyright 2009
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayITIntraProjectDependencyTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayITIntraProjectDependencyTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testIntraProjectDependency()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/IntraProjectDependency" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        File libDir = new File( testDir, "ClassLibrary3" );
+        verifier.assertFilePresent(
+            new File( libDir, getAssemblyFile( "ClassLibrary3", "1.0-SNAPSHOT", "dll" ) ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( libDir, "target/test-assemblies/ClassLibrary1.dll" ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( libDir, "target/test-assemblies/ClassLibrary2.dll" ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( libDir, "target/test-assemblies/ClassLibrary3.dll" ).getAbsolutePath() );
+        verifier.assertFilePresent(
+            new File( libDir, "target/test-assemblies/NUnit.Framework.dll" ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayITNet35Test.java b/src/test/java/npanday/its/NPandayITNet35Test.java
new file mode 100644
index 0000000..1cdfebf
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayITNet35Test.java
@@ -0,0 +1,43 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayITNet35Test
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayITNet35Test()
+    {
+        super( "[1.0.2,)", "[v3.5,)" );
+    }
+
+    public void testNet35Project()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/Net35Project" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent( new File( testDir, "ClassLibrary1/" +
+            getAssemblyFile( "ClassLibrary1", "1.0.0", "dll" ) ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/npanday/its/NPandayITSnapshotResolutionTest.java b/src/test/java/npanday/its/NPandayITSnapshotResolutionTest.java
new file mode 100644
index 0000000..e09a237
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayITSnapshotResolutionTest.java
@@ -0,0 +1,75 @@
+package npanday.its;
+
+/*
+ * Copyright 2010
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayITSnapshotResolutionTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayITSnapshotResolutionTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testUniqueSnapshotResolution()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/test-unique-snapshot" );
+        Verifier verifier = getVerifier( testDir );
+
+        verifier.deleteArtifact( "test", "test-snapshot", "1.0-SNAPSHOT", "dll" );
+
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent(
+            new File( testDir, getAssemblyFile( "test-unique-snapshot", "1.0-SNAPSHOT", "dll" ) ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir, getAssemblyFile( "test-unique-snapshot-test", "1.0-SNAPSHOT",
+                                                                        "dll" ) ).getAbsolutePath() );
+        verifier.assertFilePresent(
+            new File( testDir, "target/test-assemblies/test-unique-snapshot.dll" ).getAbsolutePath() );
+        verifier.assertFilePresent(
+            new File( testDir, "target/test-assemblies/test-unique-snapshot-test.dll" ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir, "target/test-assemblies/test-snapshot.dll" ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+
+    public void testNonUniqueSnapshotResolution()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/test-non-unique-snapshot" );
+        Verifier verifier = getVerifier( testDir );
+
+        verifier.deleteArtifact( "test", "test-snapshot", "1.0-SNAPSHOT", "dll" );
+
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent( new File( testDir, getAssemblyFile( "test-non-unique-snapshot", "1.0-SNAPSHOT",
+                                                                        "dll" ) ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir, getAssemblyFile( "test-non-unique-snapshot-test", "1.0-SNAPSHOT",
+                                                                        "dll" ) ).getAbsolutePath() );
+        verifier.assertFilePresent(
+            new File( testDir, "target/test-assemblies/test-non-unique-snapshot.dll" ).getAbsolutePath() );
+        verifier.assertFilePresent(
+            new File( testDir, "target/test-assemblies/test-non-unique-snapshot-test.dll" ).getAbsolutePath() );
+        verifier.assertFilePresent( new File( testDir, "target/test-assemblies/test-snapshot.dll" ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayITVBWebAppTest.java b/src/test/java/npanday/its/NPandayITVBWebAppTest.java
new file mode 100644
index 0000000..c67ad63
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayITVBWebAppTest.java
@@ -0,0 +1,42 @@
+package npanday.its;
+
+/*
+ * Copyright 2009
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayITVBWebAppTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayITVBWebAppTest()
+    {
+        super( "[1.2,)" );
+    }
+
+    public void testWebAppInstall()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/NPandayITVBWebAppTest" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent( new File( testDir, getAssemblyFile( "VBWebAppTest", "1.0.0", "zip" ) ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayITWebAppInstallTest.java b/src/test/java/npanday/its/NPandayITWebAppInstallTest.java
new file mode 100644
index 0000000..6fdd22d
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayITWebAppInstallTest.java
@@ -0,0 +1,42 @@
+package npanday.its;
+
+/*
+ * Copyright 2009
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayITWebAppInstallTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayITWebAppInstallTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testWebAppInstall()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/WebAppExample" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "install" );
+        verifier.assertFilePresent( new File( testDir, getAssemblyFile( "WebAppExample", "1.0.0", "zip" ) ).getAbsolutePath() );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/java/npanday/its/NPandayITWithResourceFileTest.java b/src/test/java/npanday/its/NPandayITWithResourceFileTest.java
new file mode 100644
index 0000000..101c3fa
--- /dev/null
+++ b/src/test/java/npanday/its/NPandayITWithResourceFileTest.java
@@ -0,0 +1,48 @@
+package npanday.its;
+
+/*
+ * Copyright 2009
+ *
+ * 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.
+ */
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+
+import java.io.File;
+
+public class NPandayITWithResourceFileTest
+    extends AbstractNPandayIntegrationTestCase
+{
+    public NPandayITWithResourceFileTest()
+    {
+        super( "[1.0.2,)" );
+    }
+
+    public void testWithResourceFile()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/WithResourceFile" );
+        Verifier verifier = getVerifier( testDir );
+        verifier.executeGoal( "test" );
+        String assembly = new File( testDir, "ClassLibrary1/" +
+            getAssemblyFile( "ClassLibrary1", "1.0.0", "dll" ) ).getAbsolutePath();
+        verifier.assertFilePresent( assembly );
+        String path = "ClassLibrary1/target/assembly-resources/resource/ClassLibrary1.Resource1.resources";
+        verifier.assertFilePresent( new File( testDir, path ).getAbsolutePath() );
+        assertResourcePresent( assembly, "Resource1.resources" );
+        assertClassPresent( assembly, "ClassLibrary1.Resource1" );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+    }
+}
diff --git a/src/test/resources/ClassLibraryWithWebReference/ClassLibraryWithWebReference/Class1.cs b/src/test/resources/ClassLibraryWithWebReference/ClassLibraryWithWebReference/Class1.cs
new file mode 100755
index 0000000..5047362
--- /dev/null
+++ b/src/test/resources/ClassLibraryWithWebReference/ClassLibraryWithWebReference/Class1.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace ClassLibraryWithWebReference
+{
+    public class Class1
+    {
+    }
+}
diff --git a/src/test/resources/ClassLibraryWithWebReference/ClassLibraryWithWebReference/Properties/AssemblyInfo.cs b/src/test/resources/ClassLibraryWithWebReference/ClassLibraryWithWebReference/Properties/AssemblyInfo.cs
new file mode 100755
index 0000000..1108db8
--- /dev/null
+++ b/src/test/resources/ClassLibraryWithWebReference/ClassLibraryWithWebReference/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ClassLibraryWithWebReference")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ClassLibraryWithWebReference")]
+[assembly: AssemblyCopyright("Copyright ©  2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("14258230-c381-4f85-9d5b-d9ea6cf882b8")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/test/resources/ClassLibraryWithWebReference/ClassLibraryWithWebReference/Web References/com.amazon.soap/AmazonSearch.wsdl b/src/test/resources/ClassLibraryWithWebReference/ClassLibraryWithWebReference/Web References/com.amazon.soap/AmazonSearch.wsdl
new file mode 100644
index 0000000..28a377f
--- /dev/null
+++ b/src/test/resources/ClassLibraryWithWebReference/ClassLibraryWithWebReference/Web References/com.amazon.soap/AmazonSearch.wsdl
@@ -0,0 +1,1126 @@
+<?xml version="1.0" encoding="utf-8"?>

+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:typens="http://soap.amazon.com" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" name="AmazonSearch" targetNamespace="http://soap.amazon.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

+  <wsdl:types>

+    <xsd:schema xmlns="" targetNamespace="http://soap.amazon.com">

+      <xsd:complexType name="ProductLineArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="typens:ProductLine[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="ProductLine">

+        <xsd:all>

+          <xsd:element minOccurs="0" name="Mode" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ProductInfo" type="typens:ProductInfo" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="ProductInfo">

+        <xsd:all>

+          <xsd:element minOccurs="0" name="TotalResults" type="xsd:string" />

+          <xsd:element minOccurs="0" name="TotalPages" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ListName" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Details" type="typens:DetailsArray" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="DetailsArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="typens:Details[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="Details">

+        <xsd:all>

+          <xsd:element minOccurs="0" name="Url" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Asin" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ProductName" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Catalog" type="xsd:string" />

+          <xsd:element minOccurs="0" name="KeyPhrases" type="typens:KeyPhraseArray" />

+          <xsd:element minOccurs="0" name="Artists" type="typens:ArtistArray" />

+          <xsd:element minOccurs="0" name="Authors" type="typens:AuthorArray" />

+          <xsd:element minOccurs="0" name="Mpn" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Starring" type="typens:StarringArray" />

+          <xsd:element minOccurs="0" name="Directors" type="typens:DirectorArray" />

+          <xsd:element minOccurs="0" name="TheatricalReleaseDate" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ReleaseDate" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Manufacturer" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Distributor" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ImageUrlSmall" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ImageUrlMedium" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ImageUrlLarge" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ListPrice" type="xsd:string" />

+          <xsd:element minOccurs="0" name="OurPrice" type="xsd:string" />

+          <xsd:element minOccurs="0" name="UsedPrice" type="xsd:string" />

+          <xsd:element minOccurs="0" name="RefurbishedPrice" type="xsd:string" />

+          <xsd:element minOccurs="0" name="CollectiblePrice" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ThirdPartyNewPrice" type="xsd:string" />

+          <xsd:element minOccurs="0" name="NumberOfOfferings" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ThirdPartyNewCount" type="xsd:string" />

+          <xsd:element minOccurs="0" name="UsedCount" type="xsd:string" />

+          <xsd:element minOccurs="0" name="CollectibleCount" type="xsd:string" />

+          <xsd:element minOccurs="0" name="RefurbishedCount" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ThirdPartyProductInfo" type="typens:ThirdPartyProductInfo" />

+          <xsd:element minOccurs="0" name="SalesRank" type="xsd:string" />

+          <xsd:element minOccurs="0" name="BrowseList" type="typens:BrowseNodeArray" />

+          <xsd:element minOccurs="0" name="Media" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ReadingLevel" type="xsd:string" />

+          <xsd:element minOccurs="0" name="NumberOfPages" type="xsd:string" />

+          <xsd:element minOccurs="0" name="NumberOfIssues" type="xsd:string" />

+          <xsd:element minOccurs="0" name="IssuesPerYear" type="xsd:string" />

+          <xsd:element minOccurs="0" name="SubscriptionLength" type="xsd:string" />

+          <xsd:element minOccurs="0" name="DeweyNumber" type="xsd:string" />

+          <xsd:element minOccurs="0" name="RunningTime" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Publisher" type="xsd:string" />

+          <xsd:element minOccurs="0" name="NumMedia" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Isbn" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Features" type="typens:FeaturesArray" />

+          <xsd:element minOccurs="0" name="MpaaRating" type="xsd:string" />

+          <xsd:element minOccurs="0" name="EsrbRating" type="xsd:string" />

+          <xsd:element minOccurs="0" name="AgeGroup" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Availability" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Upc" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Tracks" type="typens:TrackArray" />

+          <xsd:element minOccurs="0" name="Accessories" type="typens:AccessoryArray" />

+          <xsd:element minOccurs="0" name="Platforms" type="typens:PlatformArray" />

+          <xsd:element minOccurs="0" name="Encoding" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Reviews" type="typens:Reviews" />

+          <xsd:element minOccurs="0" name="SimilarProducts" type="typens:SimilarProductsArray" />

+          <xsd:element minOccurs="0" name="Lists" type="typens:ListArray" />

+          <xsd:element minOccurs="0" name="Status" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="KeyPhraseArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="typens:KeyPhrase[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="KeyPhrase">

+        <xsd:all>

+          <xsd:element minOccurs="0" name="KeyPhrase" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Type" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="ArtistArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="xsd:string[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="AuthorArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="xsd:string[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="StarringArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="xsd:string[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="DirectorArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="xsd:string[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="BrowseNodeArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="typens:BrowseNode[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="BrowseNode">

+        <xsd:all>

+          <xsd:element minOccurs="0" name="BrowseId" type="xsd:string" />

+          <xsd:element minOccurs="0" name="BrowseName" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="FeaturesArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="xsd:string[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="TrackArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="typens:Track[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="Track">

+        <xsd:all>

+          <xsd:element minOccurs="0" name="TrackName" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ByArtist" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="AccessoryArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="xsd:string[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="PlatformArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="xsd:string[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="Reviews">

+        <xsd:all>

+          <xsd:element minOccurs="0" name="AvgCustomerRating" type="xsd:string" />

+          <xsd:element minOccurs="0" name="TotalCustomerReviews" type="xsd:string" />

+          <xsd:element minOccurs="0" name="CustomerReviews" type="typens:CustomerReviewArray" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="CustomerReviewArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="typens:CustomerReview[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="CustomerReview">

+        <xsd:all>

+          <xsd:element minOccurs="0" name="Rating" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Summary" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Comment" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="SimilarProductsArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="xsd:string[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="ListArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="xsd:string[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="MarketplaceSearch">

+        <xsd:all>

+          <xsd:element name="MarketplaceSearchDetails" type="typens:MarketplaceSearchDetailsArray" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="SellerProfile">

+        <xsd:all>

+          <xsd:element name="SellerProfileDetails" type="typens:SellerProfileDetailsArray" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="SellerSearch">

+        <xsd:all>

+          <xsd:element name="SellerSearchDetails" type="typens:SellerSearchDetailsArray" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="MarketplaceSearchDetails">

+        <xsd:all>

+          <xsd:element minOccurs="0" name="NumberOfOpenListings" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ListingProductInfo" type="typens:ListingProductInfo" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="MarketplaceSearchDetailsArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="typens:MarketplaceSearchDetails[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="SellerProfileDetails">

+        <xsd:all>

+          <xsd:element minOccurs="0" name="SellerNickname" type="xsd:string" />

+          <xsd:element minOccurs="0" name="OverallFeedbackRating" type="xsd:string" />

+          <xsd:element minOccurs="0" name="NumberOfFeedback" type="xsd:string" />

+          <xsd:element minOccurs="0" name="NumberOfCanceledBids" type="xsd:string" />

+          <xsd:element minOccurs="0" name="NumberOfCanceledAuctions" type="xsd:string" />

+          <xsd:element minOccurs="0" name="StoreId" type="xsd:string" />

+          <xsd:element minOccurs="0" name="StoreName" type="xsd:string" />

+          <xsd:element minOccurs="0" name="SellerFeedback" type="typens:SellerFeedback" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="SellerProfileDetailsArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="typens:SellerProfileDetails[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="SellerSearchDetails">

+        <xsd:all>

+          <xsd:element minOccurs="0" name="SellerNickname" type="xsd:string" />

+          <xsd:element minOccurs="0" name="StoreId" type="xsd:string" />

+          <xsd:element minOccurs="0" name="StoreName" type="xsd:string" />

+          <xsd:element minOccurs="0" name="NumberOfOpenListings" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ListingProductInfo" type="typens:ListingProductInfo" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="SellerSearchDetailsArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="typens:SellerSearchDetails[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="ListingProductInfo">

+        <xsd:all>

+          <xsd:element name="ListingProductDetails" type="typens:ListingProductDetailsArray" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="ListingProductDetailsArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="typens:ListingProductDetails[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="ListingProductDetails">

+        <xsd:all>

+          <xsd:element minOccurs="0" name="ExchangeId" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ListingId" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeTitle" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangePrice" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeAsin" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeEndDate" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeTinyImage" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeSellerId" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeSellerNickname" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeStartDate" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeStatus" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeQuantity" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeQuantityAllocated" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeFeaturedCategory" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeCondition" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeConditionType" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeAvailability" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeOfferingType" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeSellerState" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeSellerCountry" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeSellerRating" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="SellerFeedback">

+        <xsd:all>

+          <xsd:element name="Feedback" type="typens:FeedbackArray" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="FeedbackArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="typens:Feedback[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="Feedback">

+        <xsd:all>

+          <xsd:element minOccurs="0" name="FeedbackRating" type="xsd:string" />

+          <xsd:element minOccurs="0" name="FeedbackComments" type="xsd:string" />

+          <xsd:element minOccurs="0" name="FeedbackDate" type="xsd:string" />

+          <xsd:element minOccurs="0" name="FeedbackRater" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="ThirdPartyProductInfo">

+        <xsd:all>

+          <xsd:element name="ThirdPartyProductDetails" type="typens:ThirdPartyProductDetailsArray" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="ThirdPartyProductDetailsArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="typens:ThirdPartyProductDetails[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="ThirdPartyProductDetails">

+        <xsd:all>

+          <xsd:element minOccurs="0" name="OfferingType" type="xsd:string" />

+          <xsd:element minOccurs="0" name="SellerId" type="xsd:string" />

+          <xsd:element minOccurs="0" name="SellerNickname" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeId" type="xsd:string" />

+          <xsd:element minOccurs="0" name="OfferingPrice" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Condition" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ConditionType" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeAvailability" type="xsd:string" />

+          <xsd:element minOccurs="0" name="SellerCountry" type="xsd:string" />

+          <xsd:element minOccurs="0" name="SellerState" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ShipComments" type="xsd:string" />

+          <xsd:element minOccurs="0" name="SellerRating" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="KeywordRequest">

+        <xsd:all>

+          <xsd:element name="keyword" type="xsd:string" />

+          <xsd:element name="page" type="xsd:string" />

+          <xsd:element name="mode" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="sort" type="xsd:string" />

+          <xsd:element minOccurs="0" name="variations" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="PowerRequest">

+        <xsd:all>

+          <xsd:element name="power" type="xsd:string" />

+          <xsd:element name="page" type="xsd:string" />

+          <xsd:element name="mode" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="sort" type="xsd:string" />

+          <xsd:element minOccurs="0" name="variations" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="BrowseNodeRequest">

+        <xsd:all>

+          <xsd:element name="browse_node" type="xsd:string" />

+          <xsd:element name="page" type="xsd:string" />

+          <xsd:element name="mode" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="sort" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="AsinRequest">

+        <xsd:all>

+          <xsd:element name="asin" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="offer" type="xsd:string" />

+          <xsd:element minOccurs="0" name="offerpage" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="BlendedRequest">

+        <xsd:all>

+          <xsd:element name="blended" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="UpcRequest">

+        <xsd:all>

+          <xsd:element name="upc" type="xsd:string" />

+          <xsd:element name="mode" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="sort" type="xsd:string" />

+          <xsd:element minOccurs="0" name="variations" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="ArtistRequest">

+        <xsd:all>

+          <xsd:element name="artist" type="xsd:string" />

+          <xsd:element name="page" type="xsd:string" />

+          <xsd:element name="mode" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="sort" type="xsd:string" />

+          <xsd:element minOccurs="0" name="variations" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="AuthorRequest">

+        <xsd:all>

+          <xsd:element name="author" type="xsd:string" />

+          <xsd:element name="page" type="xsd:string" />

+          <xsd:element name="mode" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="sort" type="xsd:string" />

+          <xsd:element minOccurs="0" name="variations" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="ActorRequest">

+        <xsd:all>

+          <xsd:element name="actor" type="xsd:string" />

+          <xsd:element name="page" type="xsd:string" />

+          <xsd:element name="mode" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="sort" type="xsd:string" />

+          <xsd:element minOccurs="0" name="variations" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="DirectorRequest">

+        <xsd:all>

+          <xsd:element name="director" type="xsd:string" />

+          <xsd:element name="page" type="xsd:string" />

+          <xsd:element name="mode" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="sort" type="xsd:string" />

+          <xsd:element minOccurs="0" name="variations" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="ExchangeRequest">

+        <xsd:all>

+          <xsd:element name="exchange_id" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="ManufacturerRequest">

+        <xsd:all>

+          <xsd:element name="manufacturer" type="xsd:string" />

+          <xsd:element name="page" type="xsd:string" />

+          <xsd:element name="mode" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="sort" type="xsd:string" />

+          <xsd:element minOccurs="0" name="variations" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="ListManiaRequest">

+        <xsd:all>

+          <xsd:element name="lm_id" type="xsd:string" />

+          <xsd:element name="page" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="WishlistRequest">

+        <xsd:all>

+          <xsd:element name="wishlist_id" type="xsd:string" />

+          <xsd:element name="page" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="MarketplaceRequest">

+        <xsd:all>

+          <xsd:element name="marketplace_search" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element name="page" type="xsd:string" />

+          <xsd:element minOccurs="0" name="keyword" type="xsd:string" />

+          <xsd:element minOccurs="0" name="keyword_search" type="xsd:string" />

+          <xsd:element minOccurs="0" name="browse_id" type="xsd:string" />

+          <xsd:element minOccurs="0" name="zipcode" type="xsd:string" />

+          <xsd:element minOccurs="0" name="area_id" type="xsd:string" />

+          <xsd:element minOccurs="0" name="geo" type="xsd:string" />

+          <xsd:element minOccurs="0" name="sort" type="xsd:string" />

+          <xsd:element minOccurs="0" name="listing_id" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+          <xsd:element minOccurs="0" name="index" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="SellerProfileRequest">

+        <xsd:all>

+          <xsd:element name="seller_id" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element name="page" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="SellerRequest">

+        <xsd:all>

+          <xsd:element name="seller_id" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element name="offerstatus" type="xsd:string" />

+          <xsd:element name="page" type="xsd:string" />

+          <xsd:element minOccurs="0" name="seller_browse_id" type="xsd:string" />

+          <xsd:element minOccurs="0" name="keyword" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+          <xsd:element minOccurs="0" name="index" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="SimilarityRequest">

+        <xsd:all>

+          <xsd:element name="asin" type="xsd:string" />

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="type" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="ItemIdArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="xsd:string[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="ItemArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="typens:Item[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="Item">

+        <xsd:all>

+          <xsd:element name="ItemId" type="xsd:string" />

+          <xsd:element name="ProductName" type="xsd:string" />

+          <xsd:element name="Catalog" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Asin" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeId" type="xsd:string" />

+          <xsd:element name="Quantity" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ListPrice" type="xsd:string" />

+          <xsd:element name="OurPrice" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="ItemQuantityArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="typens:ItemQuantity[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="ItemQuantity">

+        <xsd:all>

+          <xsd:element name="ItemId" type="xsd:string" />

+          <xsd:element name="Quantity" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="AddItemArray">

+        <xsd:complexContent mixed="false">

+          <xsd:restriction base="soapenc:Array">

+            <xsd:attribute wsdl:arrayType="typens:AddItem[]" ref="soapenc:arrayType" />

+          </xsd:restriction>

+        </xsd:complexContent>

+      </xsd:complexType>

+      <xsd:complexType name="AddItem">

+        <xsd:all>

+          <xsd:element minOccurs="0" name="Asin" type="xsd:string" />

+          <xsd:element minOccurs="0" name="ExchangeId" type="xsd:string" />

+          <xsd:element name="Quantity" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="ShoppingCart">

+        <xsd:all>

+          <xsd:element name="CartId" type="xsd:string" />

+          <xsd:element name="HMAC" type="xsd:string" />

+          <xsd:element name="PurchaseUrl" type="xsd:string" />

+          <xsd:element minOccurs="0" name="Items" type="typens:ItemArray" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="GetShoppingCartRequest">

+        <xsd:all>

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element name="CartId" type="xsd:string" />

+          <xsd:element name="HMAC" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="ClearShoppingCartRequest">

+        <xsd:all>

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element name="CartId" type="xsd:string" />

+          <xsd:element name="HMAC" type="xsd:string" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="AddShoppingCartItemsRequest">

+        <xsd:all>

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element minOccurs="0" name="CartId" type="xsd:string" />

+          <xsd:element minOccurs="0" name="HMAC" type="xsd:string" />

+          <xsd:element name="Items" type="typens:AddItemArray" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="RemoveShoppingCartItemsRequest">

+        <xsd:all>

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element name="CartId" type="xsd:string" />

+          <xsd:element name="HMAC" type="xsd:string" />

+          <xsd:element name="Items" type="typens:ItemIdArray" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+      <xsd:complexType name="ModifyShoppingCartItemsRequest">

+        <xsd:all>

+          <xsd:element name="tag" type="xsd:string" />

+          <xsd:element name="devtag" type="xsd:string" />

+          <xsd:element name="CartId" type="xsd:string" />

+          <xsd:element name="HMAC" type="xsd:string" />

+          <xsd:element name="Items" type="typens:ItemQuantityArray" />

+          <xsd:element minOccurs="0" name="locale" type="xsd:string" />

+        </xsd:all>

+      </xsd:complexType>

+    </xsd:schema>

+  </wsdl:types>

+  <wsdl:message name="KeywordSearchRequest">

+    <wsdl:part name="KeywordSearchRequest" type="typens:KeywordRequest" />

+  </wsdl:message>

+  <wsdl:message name="KeywordSearchResponse">

+    <wsdl:part name="return" type="typens:ProductInfo" />

+  </wsdl:message>

+  <wsdl:message name="PowerSearchRequest">

+    <wsdl:part name="PowerSearchRequest" type="typens:PowerRequest" />

+  </wsdl:message>

+  <wsdl:message name="PowerSearchResponse">

+    <wsdl:part name="return" type="typens:ProductInfo" />

+  </wsdl:message>

+  <wsdl:message name="BrowseNodeSearchRequest">

+    <wsdl:part name="BrowseNodeSearchRequest" type="typens:BrowseNodeRequest" />

+  </wsdl:message>

+  <wsdl:message name="BrowseNodeSearchResponse">

+    <wsdl:part name="return" type="typens:ProductInfo" />

+  </wsdl:message>

+  <wsdl:message name="AsinSearchRequest">

+    <wsdl:part name="AsinSearchRequest" type="typens:AsinRequest" />

+  </wsdl:message>

+  <wsdl:message name="AsinSearchResponse">

+    <wsdl:part name="return" type="typens:ProductInfo" />

+  </wsdl:message>

+  <wsdl:message name="BlendedSearchRequest">

+    <wsdl:part name="BlendedSearchRequest" type="typens:BlendedRequest" />

+  </wsdl:message>

+  <wsdl:message name="BlendedSearchResponse">

+    <wsdl:part name="return" type="typens:ProductLineArray" />

+  </wsdl:message>

+  <wsdl:message name="UpcSearchRequest">

+    <wsdl:part name="UpcSearchRequest" type="typens:UpcRequest" />

+  </wsdl:message>

+  <wsdl:message name="UpcSearchResponse">

+    <wsdl:part name="return" type="typens:ProductInfo" />

+  </wsdl:message>

+  <wsdl:message name="AuthorSearchRequest">

+    <wsdl:part name="AuthorSearchRequest" type="typens:AuthorRequest" />

+  </wsdl:message>

+  <wsdl:message name="AuthorSearchResponse">

+    <wsdl:part name="return" type="typens:ProductInfo" />

+  </wsdl:message>

+  <wsdl:message name="ArtistSearchRequest">

+    <wsdl:part name="ArtistSearchRequest" type="typens:ArtistRequest" />

+  </wsdl:message>

+  <wsdl:message name="ArtistSearchResponse">

+    <wsdl:part name="return" type="typens:ProductInfo" />

+  </wsdl:message>

+  <wsdl:message name="ActorSearchRequest">

+    <wsdl:part name="ActorSearchRequest" type="typens:ActorRequest" />

+  </wsdl:message>

+  <wsdl:message name="ActorSearchResponse">

+    <wsdl:part name="return" type="typens:ProductInfo" />

+  </wsdl:message>

+  <wsdl:message name="DirectorSearchRequest">

+    <wsdl:part name="DirectorSearchRequest" type="typens:DirectorRequest" />

+  </wsdl:message>

+  <wsdl:message name="DirectorSearchResponse">

+    <wsdl:part name="return" type="typens:ProductInfo" />

+  </wsdl:message>

+  <wsdl:message name="ExchangeSearchRequest">

+    <wsdl:part name="ExchangeSearchRequest" type="typens:ExchangeRequest" />

+  </wsdl:message>

+  <wsdl:message name="ExchangeSearchResponse">

+    <wsdl:part name="return" type="typens:ListingProductDetails" />

+  </wsdl:message>

+  <wsdl:message name="ManufacturerSearchRequest">

+    <wsdl:part name="ManufacturerSearchRequest" type="typens:ManufacturerRequest" />

+  </wsdl:message>

+  <wsdl:message name="ManufacturerSearchResponse">

+    <wsdl:part name="return" type="typens:ProductInfo" />

+  </wsdl:message>

+  <wsdl:message name="MarketplaceSearchRequest">

+    <wsdl:part name="MarketplaceSearchRequest" type="typens:MarketplaceRequest" />

+  </wsdl:message>

+  <wsdl:message name="MarketplaceSearchResponse">

+    <wsdl:part name="return" type="typens:MarketplaceSearch" />

+  </wsdl:message>

+  <wsdl:message name="ListManiaSearchRequest">

+    <wsdl:part name="ListManiaSearchRequest" type="typens:ListManiaRequest" />

+  </wsdl:message>

+  <wsdl:message name="ListManiaSearchResponse">

+    <wsdl:part name="return" type="typens:ProductInfo" />

+  </wsdl:message>

+  <wsdl:message name="WishlistSearchRequest">

+    <wsdl:part name="WishlistSearchRequest" type="typens:WishlistRequest" />

+  </wsdl:message>

+  <wsdl:message name="WishlistSearchResponse">

+    <wsdl:part name="return" type="typens:ProductInfo" />

+  </wsdl:message>

+  <wsdl:message name="SellerProfileSearchRequest">

+    <wsdl:part name="SellerProfileSearchRequest" type="typens:SellerProfileRequest" />

+  </wsdl:message>

+  <wsdl:message name="SellerProfileSearchResponse">

+    <wsdl:part name="return" type="typens:SellerProfile" />

+  </wsdl:message>

+  <wsdl:message name="SellerSearchRequest">

+    <wsdl:part name="SellerSearchRequest" type="typens:SellerRequest" />

+  </wsdl:message>

+  <wsdl:message name="SellerSearchResponse">

+    <wsdl:part name="return" type="typens:SellerSearch" />

+  </wsdl:message>

+  <wsdl:message name="SimilaritySearchRequest">

+    <wsdl:part name="SimilaritySearchRequest" type="typens:SimilarityRequest" />

+  </wsdl:message>

+  <wsdl:message name="SimilaritySearchResponse">

+    <wsdl:part name="return" type="typens:ProductInfo" />

+  </wsdl:message>

+  <wsdl:message name="GetShoppingCartRequest">

+    <wsdl:part name="GetShoppingCartRequest" type="typens:GetShoppingCartRequest" />

+  </wsdl:message>

+  <wsdl:message name="ClearShoppingCartRequest">

+    <wsdl:part name="ClearShoppingCartRequest" type="typens:ClearShoppingCartRequest" />

+  </wsdl:message>

+  <wsdl:message name="AddShoppingCartItemsRequest">

+    <wsdl:part name="AddShoppingCartItemsRequest" type="typens:AddShoppingCartItemsRequest" />

+  </wsdl:message>

+  <wsdl:message name="RemoveShoppingCartItemsRequest">

+    <wsdl:part name="RemoveShoppingCartItemsRequest" type="typens:RemoveShoppingCartItemsRequest" />

+  </wsdl:message>

+  <wsdl:message name="ModifyShoppingCartItemsRequest">

+    <wsdl:part name="ModifyShoppingCartItemsRequest" type="typens:ModifyShoppingCartItemsRequest" />

+  </wsdl:message>

+  <wsdl:message name="ShoppingCartResponse">

+    <wsdl:part name="ShoppingCart" type="typens:ShoppingCart" />

+  </wsdl:message>

+  <wsdl:portType name="AmazonSearchPort">

+    <wsdl:operation name="KeywordSearchRequest">

+      <wsdl:input message="typens:KeywordSearchRequest" />

+      <wsdl:output message="typens:KeywordSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="PowerSearchRequest">

+      <wsdl:input message="typens:PowerSearchRequest" />

+      <wsdl:output message="typens:PowerSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="BrowseNodeSearchRequest">

+      <wsdl:input message="typens:BrowseNodeSearchRequest" />

+      <wsdl:output message="typens:BrowseNodeSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="AsinSearchRequest">

+      <wsdl:input message="typens:AsinSearchRequest" />

+      <wsdl:output message="typens:AsinSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="BlendedSearchRequest">

+      <wsdl:input message="typens:BlendedSearchRequest" />

+      <wsdl:output message="typens:BlendedSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="UpcSearchRequest">

+      <wsdl:input message="typens:UpcSearchRequest" />

+      <wsdl:output message="typens:UpcSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="AuthorSearchRequest">

+      <wsdl:input message="typens:AuthorSearchRequest" />

+      <wsdl:output message="typens:AuthorSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="ArtistSearchRequest">

+      <wsdl:input message="typens:ArtistSearchRequest" />

+      <wsdl:output message="typens:ArtistSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="ActorSearchRequest">

+      <wsdl:input message="typens:ActorSearchRequest" />

+      <wsdl:output message="typens:ActorSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="ManufacturerSearchRequest">

+      <wsdl:input message="typens:ManufacturerSearchRequest" />

+      <wsdl:output message="typens:ManufacturerSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="DirectorSearchRequest">

+      <wsdl:input message="typens:DirectorSearchRequest" />

+      <wsdl:output message="typens:DirectorSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="ListManiaSearchRequest">

+      <wsdl:input message="typens:ListManiaSearchRequest" />

+      <wsdl:output message="typens:ListManiaSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="WishlistSearchRequest">

+      <wsdl:input message="typens:WishlistSearchRequest" />

+      <wsdl:output message="typens:WishlistSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="ExchangeSearchRequest">

+      <wsdl:input message="typens:ExchangeSearchRequest" />

+      <wsdl:output message="typens:ExchangeSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="MarketplaceSearchRequest">

+      <wsdl:input message="typens:MarketplaceSearchRequest" />

+      <wsdl:output message="typens:MarketplaceSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="SellerProfileSearchRequest">

+      <wsdl:input message="typens:SellerProfileSearchRequest" />

+      <wsdl:output message="typens:SellerProfileSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="SellerSearchRequest">

+      <wsdl:input message="typens:SellerSearchRequest" />

+      <wsdl:output message="typens:SellerSearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="SimilaritySearchRequest">

+      <wsdl:input message="typens:SimilaritySearchRequest" />

+      <wsdl:output message="typens:SimilaritySearchResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="GetShoppingCartRequest">

+      <wsdl:input message="typens:GetShoppingCartRequest" />

+      <wsdl:output message="typens:ShoppingCartResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="ClearShoppingCartRequest">

+      <wsdl:input message="typens:ClearShoppingCartRequest" />

+      <wsdl:output message="typens:ShoppingCartResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="AddShoppingCartItemsRequest">

+      <wsdl:input message="typens:AddShoppingCartItemsRequest" />

+      <wsdl:output message="typens:ShoppingCartResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="RemoveShoppingCartItemsRequest">

+      <wsdl:input message="typens:RemoveShoppingCartItemsRequest" />

+      <wsdl:output message="typens:ShoppingCartResponse" />

+    </wsdl:operation>

+    <wsdl:operation name="ModifyShoppingCartItemsRequest">

+      <wsdl:input message="typens:ModifyShoppingCartItemsRequest" />

+      <wsdl:output message="typens:ShoppingCartResponse" />

+    </wsdl:operation>

+  </wsdl:portType>

+  <wsdl:binding name="AmazonSearchBinding" type="typens:AmazonSearchPort">

+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc" />

+    <wsdl:operation name="KeywordSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="PowerSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="BrowseNodeSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="AsinSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="BlendedSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="UpcSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="AuthorSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="ArtistSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="ActorSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="ManufacturerSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="DirectorSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="ExchangeSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="ListManiaSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="WishlistSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="SellerProfileSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="SellerSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="MarketplaceSearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="SimilaritySearchRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="GetShoppingCartRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="ClearShoppingCartRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="AddShoppingCartItemsRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="RemoveShoppingCartItemsRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+    <wsdl:operation name="ModifyShoppingCartItemsRequest">

+      <soap:operation soapAction="http://soap.amazon.com" />

+      <wsdl:input>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:input>

+      <wsdl:output>

+        <soap:body use="encoded" namespace="http://soap.amazon.com" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

+      </wsdl:output>

+    </wsdl:operation>

+  </wsdl:binding>

+  <wsdl:service name="AmazonSearchService">

+    <wsdl:port name="AmazonSearchPort" binding="typens:AmazonSearchBinding">

+      <soap:address location="http://soap.amazon.com/onca/soap2" />

+    </wsdl:port>

+  </wsdl:service>

+</wsdl:definitions>
\ No newline at end of file
diff --git a/src/test/resources/ClassLibraryWithWebReference/ClassLibraryWithWebReference/pom.xml b/src/test/resources/ClassLibraryWithWebReference/ClassLibraryWithWebReference/pom.xml
new file mode 100644
index 0000000..d96163e
--- /dev/null
+++ b/src/test/resources/ClassLibraryWithWebReference/ClassLibraryWithWebReference/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

+         xmlns="http://maven.apache.org/POM/4.0.0">

+  <parent>

+    <artifactId>ClassLibraryWithWebReference-parent</artifactId>

+    <groupId>NPanday.ITs.ClassLibraryWithWebReference</groupId>

+    <version>1.0-SNAPSHOT</version>

+    <relativePath>..\pom.xml</relativePath>

+  </parent>

+  <modelVersion>4.0.0</modelVersion>

+  <artifactId>ClassLibraryWithWebReference</artifactId>

+  <packaging>library</packaging>

+  <name>NPanday.ITs.ClassLibraryWithWebReference : ClassLibraryWithWebReference</name>

+  <build>

+    <sourceDirectory>./</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <version>${npanday.version}</version>

+        <extensions>true</extensions>

+        <configuration>

+          <frameworkVersion>2.0.50727</frameworkVersion>

+          <includeSources>

+            <includeSource>Class1.cs</includeSource>

+            <includeSource>Properties\AssemblyInfo.cs</includeSource>

+          </includeSources>

+        </configuration>

+      </plugin>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-wsdl-plugin</artifactId>

+        <version>${npanday.version}</version>

+        <executions>

+          <execution>

+            <goals>

+              <goal>wsdl</goal>

+            </goals>

+          </execution>

+        </executions>

+        <configuration>

+          <webreferences>

+            <webreference>

+              <namespace>com.amazon.soap</namespace>

+              <path>Web References/com.amazon.soap/AmazonSearch.wsdl</path>

+              <output>Web References/com.amazon.soap</output>

+            </webreference>

+          </webreferences>

+        </configuration>

+      </plugin>

+    </plugins>

+  </build>

+</project>
\ No newline at end of file
diff --git a/src/test/resources/ClassLibraryWithWebReference/pom.xml b/src/test/resources/ClassLibraryWithWebReference/pom.xml
new file mode 100644
index 0000000..c1838b0
--- /dev/null
+++ b/src/test/resources/ClassLibraryWithWebReference/pom.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

+         xmlns="http://maven.apache.org/POM/4.0.0">

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <groupId>NPanday.ITs.ClassLibraryWithWebReference</groupId>

+  <artifactId>ClassLibraryWithWebReference-parent</artifactId>

+  <packaging>pom</packaging>

+  <name>NPanday.ITs.ClassLibraryWithWebReference : ClassLibraryWithWebReference-parent</name>

+  <version>1.0-SNAPSHOT</version>

+  <modules>

+    <module>ClassLibraryWithWebReference</module>

+  </modules>

+</project>
\ No newline at end of file
diff --git a/src/test/resources/ConsoleApplicationEx/ConsoleApplicationEx/Program.cs b/src/test/resources/ConsoleApplicationEx/ConsoleApplicationEx/Program.cs
new file mode 100644
index 0000000..8834d79
--- /dev/null
+++ b/src/test/resources/ConsoleApplicationEx/ConsoleApplicationEx/Program.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using NUnit.Framework;
+
+namespace ConsoleApplicationEx
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            Console.Write("Enter your name, please: ");
+
+            string name = Console.ReadLine();
+
+            Console.WriteLine();
+
+            Console.WriteLine("Hello, !" + name);
+
+            Console.WriteLine();
+
+            Console.WriteLine("Press enter to end..");
+
+            Console.Read();
+
+        }
+    }
+}
diff --git a/src/test/resources/ConsoleApplicationEx/ConsoleApplicationEx/Properties/AssemblyInfo.cs b/src/test/resources/ConsoleApplicationEx/ConsoleApplicationEx/Properties/AssemblyInfo.cs
new file mode 100755
index 0000000..869ab69
--- /dev/null
+++ b/src/test/resources/ConsoleApplicationEx/ConsoleApplicationEx/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ConsoleApplicationEx")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("g2ix")]
+[assembly: AssemblyProduct("ConsoleApplicationEx")]
+[assembly: AssemblyCopyright("Copyright © g2ix 2009")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("a873b4aa-0a88-4912-8254-66710a6da8f2")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/test/resources/ConsoleApplicationEx/ConsoleApplicationEx/pom.xml b/src/test/resources/ConsoleApplicationEx/ConsoleApplicationEx/pom.xml
new file mode 100644
index 0000000..f0941f7
--- /dev/null
+++ b/src/test/resources/ConsoleApplicationEx/ConsoleApplicationEx/pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

+         xmlns="http://maven.apache.org/POM/4.0.0">

+  <parent>

+    <artifactId>ConsoleApplicationEx-parent</artifactId>

+    <groupId>NPanday.IT</groupId>

+    <version>1.0-SNAPSHOT</version>

+    <relativePath>..\pom.xml</relativePath>

+  </parent>

+  <modelVersion>4.0.0</modelVersion>

+  <artifactId>ConsoleApplicationEx</artifactId>

+  <packaging>exe</packaging>

+  <name>NPanday.IT : ConsoleApplicationEx</name>

+  <build>

+    <sourceDirectory>./</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <version>${npanday.version}</version>

+        <extensions>true</extensions>

+        <configuration>

+          <frameworkVersion>2.0.50727</frameworkVersion>

+          <includeSources>

+            <includeSource>Program.cs</includeSource>

+            <includeSource>Properties\AssemblyInfo.cs</includeSource>

+          </includeSources>

+        </configuration>

+      </plugin>

+    </plugins>

+  </build>

+  <dependencies>

+    <dependency>

+      <groupId>NUnit</groupId>

+      <artifactId>NUnit.Framework</artifactId>

+      <version>2.2.8.0</version>

+      <type>library</type>

+    </dependency>

+  </dependencies>

+</project>

diff --git a/src/test/resources/ConsoleApplicationEx/pom.xml b/src/test/resources/ConsoleApplicationEx/pom.xml
new file mode 100644
index 0000000..303a6bc
--- /dev/null
+++ b/src/test/resources/ConsoleApplicationEx/pom.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

+         xmlns="http://maven.apache.org/POM/4.0.0">

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <groupId>NPanday.IT</groupId>

+  <artifactId>ConsoleApplicationEx-parent</artifactId>

+  <packaging>pom</packaging>

+  <name>NPanday.IT : ConsoleApplicationEx-parent</name>

+  <version>1.0-SNAPSHOT</version>

+  <modules>

+    <module>ConsoleApplicationEx</module>

+  </modules>

+</project>
\ No newline at end of file
diff --git a/src/test/resources/IntraProjectDependency/ClassLibrary1/Class1.cs b/src/test/resources/IntraProjectDependency/ClassLibrary1/Class1.cs
new file mode 100755
index 0000000..e6d464b
--- /dev/null
+++ b/src/test/resources/IntraProjectDependency/ClassLibrary1/Class1.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace ClassLibrary1
+{
+    public class Class1
+    {
+        public Class1()
+        {
+            
+        }
+
+        public void Display()
+        {
+            // do nothing
+        }
+    }
+}
diff --git a/src/test/resources/IntraProjectDependency/ClassLibrary1/Properties/AssemblyInfo.cs b/src/test/resources/IntraProjectDependency/ClassLibrary1/Properties/AssemblyInfo.cs
new file mode 100755
index 0000000..31f506e
--- /dev/null
+++ b/src/test/resources/IntraProjectDependency/ClassLibrary1/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ClassLibrary1")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Exist Global")]
+[assembly: AssemblyProduct("ClassLibrary1")]
+[assembly: AssemblyCopyright("Copyright © Exist Global 2009")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("09d9647e-6a8f-4dcc-ac03-60c4c044dc62")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/test/resources/IntraProjectDependency/ClassLibrary1/Properties/Settings.Designer.cs b/src/test/resources/IntraProjectDependency/ClassLibrary1/Properties/Settings.Designer.cs
new file mode 100755
index 0000000..4032549
--- /dev/null
+++ b/src/test/resources/IntraProjectDependency/ClassLibrary1/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3603
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ClassLibrary1.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/src/test/resources/IntraProjectDependency/ClassLibrary1/Properties/Settings.settings b/src/test/resources/IntraProjectDependency/ClassLibrary1/Properties/Settings.settings
new file mode 100644
index 0000000..2bd17f0
--- /dev/null
+++ b/src/test/resources/IntraProjectDependency/ClassLibrary1/Properties/Settings.settings
@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding='utf-8'?>

+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">

+  <Profiles />

+  <Settings />

+</SettingsFile>
\ No newline at end of file
diff --git a/src/test/resources/IntraProjectDependency/ClassLibrary1/pom.xml b/src/test/resources/IntraProjectDependency/ClassLibrary1/pom.xml
new file mode 100644
index 0000000..7b2935d
--- /dev/null
+++ b/src/test/resources/IntraProjectDependency/ClassLibrary1/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://maven.apache.org/POM/4.0.0">

+  <parent>

+    <artifactId>IntraProjectDependency-parent</artifactId>

+    <groupId>NPanday.IT</groupId>

+    <version>1.0-SNAPSHOT</version>

+    <relativePath>..\pom.xml</relativePath>

+  </parent>

+  <modelVersion>4.0.0</modelVersion>

+  <artifactId>ClassLibrary1</artifactId>

+  <packaging>library</packaging>

+  <name>NPanday.IT : ClassLibrary1</name>

+  <build>

+    <sourceDirectory>./</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <version>${npanday.version}</version>

+        <extensions>true</extensions>

+        <configuration>

+          <includeSources>

+            <includeSource>Class1.cs</includeSource>

+            <includeSource>Properties\AssemblyInfo.cs</includeSource>

+            <includeSource>Properties\Settings.Designer.cs</includeSource>

+          </includeSources>

+        </configuration>

+      </plugin>

+    </plugins>

+  </build>

+</project>

diff --git a/src/test/resources/IntraProjectDependency/ClassLibrary2/Class1.cs b/src/test/resources/IntraProjectDependency/ClassLibrary2/Class1.cs
new file mode 100755
index 0000000..94f6508
--- /dev/null
+++ b/src/test/resources/IntraProjectDependency/ClassLibrary2/Class1.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace ClassLibrary2
+{
+    public class Class1
+    {
+        public Class1()
+        {
+            ClassLibrary1.Class1 cls = new ClassLibrary1.Class1();
+            cls.Display();
+        }
+
+        public void Display()
+        {
+            // do nothing
+        }
+    }
+}
diff --git a/src/test/resources/IntraProjectDependency/ClassLibrary2/Properties/AssemblyInfo.cs b/src/test/resources/IntraProjectDependency/ClassLibrary2/Properties/AssemblyInfo.cs
new file mode 100755
index 0000000..b897bb8
--- /dev/null
+++ b/src/test/resources/IntraProjectDependency/ClassLibrary2/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ClassLibrary2")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Exist Global")]
+[assembly: AssemblyProduct("ClassLibrary2")]
+[assembly: AssemblyCopyright("Copyright © Exist Global 2009")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("6f9e2563-3754-4758-b484-4723019cccea")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/test/resources/IntraProjectDependency/ClassLibrary2/pom.xml b/src/test/resources/IntraProjectDependency/ClassLibrary2/pom.xml
new file mode 100644
index 0000000..3af487b
--- /dev/null
+++ b/src/test/resources/IntraProjectDependency/ClassLibrary2/pom.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://maven.apache.org/POM/4.0.0">

+  <parent>

+    <artifactId>IntraProjectDependency-parent</artifactId>

+    <groupId>NPanday.IT</groupId>

+    <version>1.0-SNAPSHOT</version>

+    <relativePath>..\pom.xml</relativePath>

+  </parent>

+  <modelVersion>4.0.0</modelVersion>

+  <artifactId>ClassLibrary2</artifactId>

+  <packaging>library</packaging>

+  <name>NPanday.IT : ClassLibrary2</name>

+  <build>

+    <sourceDirectory>./</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <version>${npanday.version}</version>

+        <extensions>true</extensions>

+        <configuration>

+          <includeSources>

+            <includeSource>Class1.cs</includeSource>

+            <includeSource>Properties\AssemblyInfo.cs</includeSource>

+          </includeSources>

+        </configuration>

+      </plugin>

+    </plugins>

+  </build>

+  <dependencies>

+    <dependency>

+      <groupId>NPanday.IT</groupId>

+      <artifactId>ClassLibrary1</artifactId>

+      <version>1.0-SNAPSHOT</version>

+      <type>library</type>

+    </dependency>

+  </dependencies>

+</project>

diff --git a/src/test/resources/IntraProjectDependency/ClassLibrary3/Class1.cs b/src/test/resources/IntraProjectDependency/ClassLibrary3/Class1.cs
new file mode 100755
index 0000000..5abf539
--- /dev/null
+++ b/src/test/resources/IntraProjectDependency/ClassLibrary3/Class1.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using NUnit.Framework;
+
+namespace ClassLibrary3
+{
+    [TestFixture]
+    public class Class1
+    {
+        [Test]
+        public void test()
+        {
+            ClassLibrary1.Class1 cls1 = new ClassLibrary1.Class1();
+            ClassLibrary2.Class1 cls2 = new ClassLibrary2.Class1();
+
+            cls1.Display();
+            cls2.Display();
+        }
+    }
+}
diff --git a/src/test/resources/IntraProjectDependency/ClassLibrary3/Properties/AssemblyInfo.cs b/src/test/resources/IntraProjectDependency/ClassLibrary3/Properties/AssemblyInfo.cs
new file mode 100755
index 0000000..d9b662a
--- /dev/null
+++ b/src/test/resources/IntraProjectDependency/ClassLibrary3/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ClassLibrary3")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Exist Global")]
+[assembly: AssemblyProduct("ClassLibrary3")]
+[assembly: AssemblyCopyright("Copyright © Exist Global 2009")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7caa75be-6bef-4544-96ae-ccb045006f19")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/test/resources/IntraProjectDependency/ClassLibrary3/Properties/Settings.Designer.cs b/src/test/resources/IntraProjectDependency/ClassLibrary3/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..216211e
--- /dev/null
+++ b/src/test/resources/IntraProjectDependency/ClassLibrary3/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3603
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ClassLibrary3.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/src/test/resources/IntraProjectDependency/ClassLibrary3/Properties/Settings.settings b/src/test/resources/IntraProjectDependency/ClassLibrary3/Properties/Settings.settings
new file mode 100644
index 0000000..2bd17f0
--- /dev/null
+++ b/src/test/resources/IntraProjectDependency/ClassLibrary3/Properties/Settings.settings
@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding='utf-8'?>

+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">

+  <Profiles />

+  <Settings />

+</SettingsFile>
\ No newline at end of file
diff --git a/src/test/resources/IntraProjectDependency/ClassLibrary3/pom.xml b/src/test/resources/IntraProjectDependency/ClassLibrary3/pom.xml
new file mode 100644
index 0000000..a9605c5
--- /dev/null
+++ b/src/test/resources/IntraProjectDependency/ClassLibrary3/pom.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://maven.apache.org/POM/4.0.0">

+  <parent>

+    <artifactId>IntraProjectDependency-parent</artifactId>

+    <groupId>NPanday.IT</groupId>

+    <version>1.0-SNAPSHOT</version>

+    <relativePath>..\pom.xml</relativePath>

+  </parent>

+  <modelVersion>4.0.0</modelVersion>

+  <artifactId>ClassLibrary3</artifactId>

+  <packaging>library</packaging>

+  <name>NPanday.IT : ClassLibrary3</name>

+  <build>

+    <sourceDirectory>./</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <version>${npanday.version}</version>

+        <extensions>true</extensions>

+        <configuration>

+          <includeSources>

+            <includeSource>Class1.cs</includeSource>

+            <includeSource>Properties\AssemblyInfo.cs</includeSource>

+            <includeSource>Properties\Settings.Designer.cs</includeSource>

+          </includeSources>

+        </configuration>

+      </plugin>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-test-plugin</artifactId>

+        <version>${npanday.version}</version>

+        <extensions>true</extensions>

+        <configuration>

+          <integrationTest>true</integrationTest>

+        </configuration>

+      </plugin>

+    </plugins>

+  </build>

+  <dependencies>

+    <dependency>

+      <groupId>NPanday.IT</groupId>

+      <artifactId>ClassLibrary2</artifactId>

+      <version>1.0-SNAPSHOT</version>

+      <type>library</type>

+    </dependency>

+    <dependency>

+      <groupId>NPanday.IT</groupId>

+      <artifactId>ClassLibrary1</artifactId>

+      <version>1.0-SNAPSHOT</version>

+      <type>library</type>

+    </dependency>

+    <dependency>

+      <groupId>NUnit</groupId>

+      <artifactId>NUnit.Framework</artifactId>

+      <version>2.2.8.0</version>

+      <type>library</type>

+    </dependency>

+  </dependencies>

+</project>

diff --git a/src/test/resources/IntraProjectDependency/pom.xml b/src/test/resources/IntraProjectDependency/pom.xml
new file mode 100644
index 0000000..f9495e2
--- /dev/null
+++ b/src/test/resources/IntraProjectDependency/pom.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

+         xmlns="http://maven.apache.org/POM/4.0.0">

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <groupId>NPanday.IT</groupId>

+  <artifactId>IntraProjectDependency-parent</artifactId>

+  <packaging>pom</packaging>

+  <name>NPanday.IT : IntraProjectDependency-parent</name>

+  <version>1.0-SNAPSHOT</version>

+  <modules>

+    <module>ClassLibrary1</module>

+    <module>ClassLibrary2</module>

+    <module>ClassLibrary3</module>

+  </modules>

+</project>
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/pom.xml b/src/test/resources/NPanday.IT11579/pom.xml
new file mode 100644
index 0000000..1a513df
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <groupId>NPanday.ITs</groupId>
+    <version>1-SNAPSHOT</version>
+  </parent>
+  <groupId>NPanday.ITs11579</groupId>
+  <artifactId>NPanday.ITs11579</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>library</packaging>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <testSourceDirectory>src/test/csharp</testSourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <extensions>true</extensions>
+      </plugin>
+    </plugins>
+  </build>
+  <dependencies>
+    <dependency>
+      <groupId>NUnit</groupId>
+      <artifactId>NUnit.Framework</artifactId>
+      <version>2.2.8.0</version>
+      <type>library</type>
+    </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>NPanday11579Dependency</artifactId>
+      <version>1.0-SNAPSHOT</version>
+      <type>library</type>
+    </dependency>
+  </dependencies>
+  <repositories>
+    <repository>
+      <id>test</id>
+      <url>file:${basedir}/test-repo</url>
+    </repository>
+  </repositories>
+</project>
diff --git a/src/test/resources/NPanday.IT11579/src/main/csharp/Sample/MyApp.cs b/src/test/resources/NPanday.IT11579/src/main/csharp/Sample/MyApp.cs
new file mode 100644
index 0000000..57aca13
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/src/main/csharp/Sample/MyApp.cs
@@ -0,0 +1,13 @@
+using System;
+using System.IO;
+
+namespace Sample
+{
+    public class MyApp
+    {
+        public MyApp()
+        {
+            Console.WriteLine("Hello");
+        }
+    }
+}
diff --git a/src/test/resources/NPanday.IT11579/src/test/csharp/Sample/MyAppTest.cs b/src/test/resources/NPanday.IT11579/src/test/csharp/Sample/MyAppTest.cs
new file mode 100755
index 0000000..919990d
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/src/test/csharp/Sample/MyAppTest.cs
@@ -0,0 +1,23 @@
+using System;
+using NUnit.Framework;
+
+namespace Sample
+{
+
+	[TestFixture]
+	public class MyAppTest
+	{
+
+		[SetUp]
+		protected void SetUp()
+		{
+		}
+
+		[Test]
+		public void TestSample()
+		{
+
+		}
+	}
+}
+
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.154849-1.pom b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.154849-1.pom
new file mode 100644
index 0000000..649c481
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.154849-1.pom
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://maven.apache.org/POM/4.0.0">

+  <modelVersion>4.0.0</modelVersion>

+  <groupId>NPanday.ITs11579</groupId>

+  <artifactId>NPanday11579Dependency-parent</artifactId>

+  <packaging>pom</packaging>

+  <name>NPanday.ITs11579 : NPanday11579Dependency-parent</name>

+  <version>1.0-SNAPSHOT</version>

+  <modules>

+    <module>NPanday11579Dependency</module>

+  </modules>

+  <distributionManagement>

+    <repository>

+      <id>local</id>

+      <url>file:${basedir}/test-repo</url>

+    </repository>

+  </distributionManagement>

+</project>

diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.154849-1.pom.md5 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.154849-1.pom.md5
new file mode 100644
index 0000000..7762c35
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.154849-1.pom.md5
@@ -0,0 +1 @@
+95be1c6c3123dc848c525ac0f47436f2
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.154849-1.pom.sha1 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.154849-1.pom.sha1
new file mode 100644
index 0000000..ce4c1be
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.154849-1.pom.sha1
@@ -0,0 +1 @@
+4ce4f0c4260b2d976f140e407c4a8f6d486f7cd2
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.155020-2.pom b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.155020-2.pom
new file mode 100644
index 0000000..649c481
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.155020-2.pom
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://maven.apache.org/POM/4.0.0">

+  <modelVersion>4.0.0</modelVersion>

+  <groupId>NPanday.ITs11579</groupId>

+  <artifactId>NPanday11579Dependency-parent</artifactId>

+  <packaging>pom</packaging>

+  <name>NPanday.ITs11579 : NPanday11579Dependency-parent</name>

+  <version>1.0-SNAPSHOT</version>

+  <modules>

+    <module>NPanday11579Dependency</module>

+  </modules>

+  <distributionManagement>

+    <repository>

+      <id>local</id>

+      <url>file:${basedir}/test-repo</url>

+    </repository>

+  </distributionManagement>

+</project>

diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.155020-2.pom.md5 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.155020-2.pom.md5
new file mode 100644
index 0000000..7762c35
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.155020-2.pom.md5
@@ -0,0 +1 @@
+95be1c6c3123dc848c525ac0f47436f2
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.155020-2.pom.sha1 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.155020-2.pom.sha1
new file mode 100644
index 0000000..ce4c1be
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/NPanday11579Dependency-parent-1.0-20100122.155020-2.pom.sha1
@@ -0,0 +1 @@
+4ce4f0c4260b2d976f140e407c4a8f6d486f7cd2
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/maven-metadata.xml b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 0000000..c048a0a
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>NPanday.ITs11579</groupId>
+  <artifactId>NPanday11579Dependency-parent</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <snapshot>
+      <timestamp>20100122.155020</timestamp>
+      <buildNumber>2</buildNumber>
+    </snapshot>
+    <lastUpdated>20100122155020</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/maven-metadata.xml.md5 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/maven-metadata.xml.md5
new file mode 100644
index 0000000..e60efbc
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/maven-metadata.xml.md5
@@ -0,0 +1 @@
+ad7400359c2ab8b09afe3af973810a06
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/maven-metadata.xml.sha1 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/maven-metadata.xml.sha1
new file mode 100644
index 0000000..c3491a5
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/1.0-SNAPSHOT/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+d5c914cc230585fe0032f8b67c0c3600abbdb48f
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/maven-metadata.xml b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/maven-metadata.xml
new file mode 100644
index 0000000..6bd696b
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>NPanday.ITs11579</groupId>
+  <artifactId>NPanday11579Dependency-parent</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <versions>
+      <version>1.0-SNAPSHOT</version>
+    </versions>
+    <lastUpdated>20100122155020</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/maven-metadata.xml.md5 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/maven-metadata.xml.md5
new file mode 100644
index 0000000..a521be3
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/maven-metadata.xml.md5
@@ -0,0 +1 @@
+4d881c1922124d5ce0d78ef7c807b1e4
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/maven-metadata.xml.sha1 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/maven-metadata.xml.sha1
new file mode 100644
index 0000000..224e023
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency-parent/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+6e3b39a7da9b62e8a8c6b87d856b46a363c8afac
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.dll b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.dll
new file mode 100644
index 0000000..3167f43
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.dll
Binary files differ
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.dll.md5 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.dll.md5
new file mode 100644
index 0000000..2624016
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.dll.md5
@@ -0,0 +1 @@
+eb92e850ab07eef79b47cee6b2c2efb0
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.dll.sha1 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.dll.sha1
new file mode 100644
index 0000000..c62d401
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.dll.sha1
@@ -0,0 +1 @@
+0586dd7f14f6a1c0b4eab52523c357f2244c8648
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.pom b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.pom
new file mode 100644
index 0000000..28c682f
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.pom
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://maven.apache.org/POM/4.0.0">

+  <parent>

+    <artifactId>NPanday11579Dependency-parent</artifactId>

+    <groupId>NPanday.ITs11579</groupId>

+    <version>1.0-SNAPSHOT</version>

+    <relativePath>..\pom.xml</relativePath>

+  </parent>

+  <modelVersion>4.0.0</modelVersion>

+  <artifactId>NPanday11579Dependency</artifactId>

+  <packaging>library</packaging>

+  <name>NPanday.ITs11579 : NPanday11579Dependency</name>

+  <build>

+    <sourceDirectory>./</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <extensions>true</extensions>

+        <configuration>

+          <frameworkVersion>2.0.50727</frameworkVersion>

+          <includeSources>

+            <includeSource>Class1.cs</includeSource>

+            <includeSource>Properties\AssemblyInfo.cs</includeSource>

+          </includeSources>

+        </configuration>

+      </plugin>

+    </plugins>

+  </build>

+</project>
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.pom.md5 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.pom.md5
new file mode 100644
index 0000000..01ad8d0
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.pom.md5
@@ -0,0 +1 @@
+57ecc40348c36229fab2431f941d5f88
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.pom.sha1 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.pom.sha1
new file mode 100644
index 0000000..feafce0
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/NPanday11579Dependency-1.0-20100122.155020-1.pom.sha1
@@ -0,0 +1 @@
+e9486f2e0056ee123a1c30f2f4abd95f623a2cd3
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/maven-metadata.xml b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 0000000..3b47dcc
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>NPanday.ITs11579</groupId>
+  <artifactId>NPanday11579Dependency</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <snapshot>
+      <timestamp>20100122.155020</timestamp>
+      <buildNumber>1</buildNumber>
+    </snapshot>
+    <lastUpdated>20100122155042</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/maven-metadata.xml.md5 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/maven-metadata.xml.md5
new file mode 100644
index 0000000..1a95321
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/maven-metadata.xml.md5
@@ -0,0 +1 @@
+4c397c80711f1977250ef9afdf7e7421
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/maven-metadata.xml.sha1 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/maven-metadata.xml.sha1
new file mode 100644
index 0000000..d333120
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/1.0-SNAPSHOT/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+d2999587564a45c98c1fdb1229ef063c80e62deb
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/maven-metadata.xml b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/maven-metadata.xml
new file mode 100644
index 0000000..ff1aaf1
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>NPanday.ITs11579</groupId>
+  <artifactId>NPanday11579Dependency</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <versions>
+      <version>1.0-SNAPSHOT</version>
+    </versions>
+    <lastUpdated>20100122155042</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/maven-metadata.xml.md5 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/maven-metadata.xml.md5
new file mode 100644
index 0000000..3e26be3
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/maven-metadata.xml.md5
@@ -0,0 +1 @@
+7b85b958269254e255ccb31aee4acad5
\ No newline at end of file
diff --git a/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/maven-metadata.xml.sha1 b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/maven-metadata.xml.sha1
new file mode 100644
index 0000000..eae8355
--- /dev/null
+++ b/src/test/resources/NPanday.IT11579/test-repo/NPanday/ITs11579/NPanday11579Dependency/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+0c15124f65f9349279eb19e6065024afc402a7f4
\ No newline at end of file
diff --git a/src/test/resources/NPanday11480/NPanday11480/Content/Site.css b/src/test/resources/NPanday11480/NPanday11480/Content/Site.css
new file mode 100644
index 0000000..6f3f7ee
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Content/Site.css
@@ -0,0 +1,344 @@
+/*----------------------------------------------------------

+The base color for this template is #5c87b2. If you'd like

+to use a different color start by replacing all instances of

+#5c87b2 with your new color.

+----------------------------------------------------------*/

+body

+{

+    background-color: #5c87b2;

+    font-size: .75em;

+    font-family: Verdana, Helvetica, Sans-Serif;

+    margin: 0;

+    padding: 0;

+    color: #696969;

+}

+

+a:link

+{

+    color: #034af3;

+    text-decoration: underline;

+}

+a:visited

+{

+    color: #505abc;

+}

+a:hover

+{

+    color: #1d60ff;

+    text-decoration: none;

+}

+a:active

+{

+    color: #12eb87;

+}

+

+p, ul

+{

+    margin-bottom: 20px;

+    line-height: 1.6em;

+}

+

+/* HEADINGS   

+----------------------------------------------------------*/

+h1, h2, h3, h4, h5, h6

+{

+    font-size: 1.5em;

+    color: #000;

+    font-family: Arial, Helvetica, sans-serif;

+}

+

+h1

+{

+    font-size: 2em;

+    padding-bottom: 0;

+    margin-bottom: 0;

+}

+h2

+{

+    padding: 0 0 10px 0;

+}

+h3

+{

+    font-size: 1.2em;

+}

+h4

+{

+    font-size: 1.1em;

+}

+h5, h6

+{

+    font-size: 1em;

+}

+

+/* this rule styles <h2> tags that are the 

+first child of the left and right table columns */

+.rightColumn > h1, .rightColumn > h2, .leftColumn > h1, .leftColumn > h2

+{

+    margin-top: 0;

+}

+

+/* PRIMARY LAYOUT ELEMENTS   

+----------------------------------------------------------*/

+

+/* you can specify a greater or lesser percentage for the 

+page width. Or, you can specify an exact pixel width. */

+.page

+{

+    width: 90%;

+    margin-left: auto;

+    margin-right: auto;

+}

+

+#header

+{

+    position: relative;

+    margin-bottom: 0px;

+    color: #000;

+    padding: 0;

+}

+

+#header h1

+{

+    font-weight: bold;

+    padding: 5px 0;

+    margin: 0;

+    color: #fff;

+    border: none;

+    line-height: 2em;

+    font-family: Arial, Helvetica, sans-serif;

+    font-size: 32px !important;

+}

+

+#main

+{

+    padding: 30px 30px 15px 30px;

+    background-color: #fff;

+    margin-bottom: 30px;

+    _height: 1px; /* only IE6 applies CSS properties starting with an underscore */

+}

+

+#footer

+{

+    color: #999;

+    padding: 10px 0;

+    text-align: center;

+    line-height: normal;

+    margin: 0;

+    font-size: .9em;

+}

+

+/* TAB MENU   

+----------------------------------------------------------*/

+ul#menu

+{

+    border-bottom: 1px #5C87B2 solid;

+    padding: 0 0 2px;

+    position: relative;

+    margin: 0;

+    text-align: right;

+}

+

+ul#menu li

+{

+    display: inline;

+    list-style: none;

+}

+

+ul#menu li#greeting

+{

+    padding: 10px 20px;

+    font-weight: bold;

+    text-decoration: none;

+    line-height: 2.8em;

+    color: #fff;

+}

+

+ul#menu li a

+{

+    padding: 10px 20px;

+    font-weight: bold;

+    text-decoration: none;

+    line-height: 2.8em;

+    background-color: #e8eef4;

+    color: #034af3;

+}

+

+ul#menu li a:hover

+{

+    background-color: #fff;

+    text-decoration: none;

+}

+

+ul#menu li a:active

+{

+    background-color: #a6e2a6;

+    text-decoration: none;

+}

+

+ul#menu li.selected a

+{

+    background-color: #fff;

+    color: #000;

+}

+

+/* FORM LAYOUT ELEMENTS   

+----------------------------------------------------------*/

+

+fieldset 

+{

+    margin: 1em 0;

+    padding: 1em;

+    border: 1px solid #CCC;

+}

+

+fieldset p 

+{

+    margin: 2px 12px 10px 10px;

+}

+

+legend 

+{

+    font-size: 1.1em;

+    font-weight: 600;

+    padding: 2px 4px 8px 4px;

+}

+

+input[type="text"] 

+{

+    width: 200px;

+    border: 1px solid #CCC;

+}

+

+input[type="password"] 

+{

+    width: 200px;

+    border: 1px solid #CCC;

+}

+

+/* TABLE

+----------------------------------------------------------*/

+

+table 

+{

+  border: solid 1px #e8eef4;

+  border-collapse: collapse;

+}

+

+table td 

+{

+  padding: 5px;   

+  border: solid 1px #e8eef4;

+}

+

+table th

+{

+  padding: 6px 5px;

+  text-align: left;

+  background-color: #e8eef4; 

+  border: solid 1px #e8eef4;   

+}

+

+/* MISC  

+----------------------------------------------------------*/

+.clear

+{

+    clear: both;

+}

+

+.error

+{

+    color:Red;

+}

+

+#menucontainer

+{

+    margin-top:40px;

+}

+

+div#title

+{

+    display:block;

+    float:left;

+    text-align:left;

+}

+

+#logindisplay

+{

+    font-size:1.1em;

+    display:block;

+    text-align:right;

+    margin:10px;

+    color:White;

+}

+

+#logindisplay a:link

+{

+    color: white;

+    text-decoration: underline;

+}

+

+#logindisplay a:visited

+{

+    color: white;

+    text-decoration: underline;

+}

+

+#logindisplay a:hover

+{

+    color: white;

+    text-decoration: none;

+}

+

+/* Styles for validation helpers

+-----------------------------------------------------------*/

+.field-validation-error

+{

+    color: #ff0000;

+}

+

+.field-validation-valid

+{

+    display: none;

+}

+

+.input-validation-error

+{

+    border: 1px solid #ff0000;

+    background-color: #ffeeee;

+}

+

+.validation-summary-errors

+{

+    font-weight: bold;

+    color: #ff0000;

+}

+

+.validation-summary-valid

+{

+    display: none;

+}

+

+/* Styles for editor and display helpers

+----------------------------------------------------------*/

+.display-label,

+.editor-label,

+.display-field,

+.editor-field

+{

+    margin: 0.5em 0;

+}

+

+.text-box

+{

+    width: 30em;

+}

+

+.text-box.multi-line

+{

+    height: 6.5em;

+}

+

+.tri-state

+{

+    width: 6em;

+}

diff --git a/src/test/resources/NPanday11480/NPanday11480/Controllers/AccountController.cs b/src/test/resources/NPanday11480/NPanday11480/Controllers/AccountController.cs
new file mode 100644
index 0000000..794a819
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Controllers/AccountController.cs
@@ -0,0 +1,153 @@
+using System;

+using System.Collections.Generic;

+using System.Diagnostics.CodeAnalysis;

+using System.Linq;

+using System.Security.Principal;

+using System.Web;

+using System.Web.Mvc;

+using System.Web.Routing;

+using System.Web.Security;

+using NPanday11480.Models;

+

+namespace NPanday11480.Controllers

+{

+

+    [HandleError]

+    public class AccountController : Controller

+    {

+

+        public IFormsAuthenticationService FormsService { get; set; }

+        public IMembershipService MembershipService { get; set; }

+

+        protected override void Initialize(RequestContext requestContext)

+        {

+            if (FormsService == null) { FormsService = new FormsAuthenticationService(); }

+            if (MembershipService == null) { MembershipService = new AccountMembershipService(); }

+

+            base.Initialize(requestContext);

+        }

+

+        // **************************************

+        // URL: /Account/LogOn

+        // **************************************

+

+        public ActionResult LogOn()

+        {

+            return View();

+        }

+

+        [HttpPost]

+        public ActionResult LogOn(LogOnModel model, string returnUrl)

+        {

+            if (ModelState.IsValid)

+            {

+                if (MembershipService.ValidateUser(model.UserName, model.Password))

+                {

+                    FormsService.SignIn(model.UserName, model.RememberMe);

+                    if (!String.IsNullOrEmpty(returnUrl))

+                    {

+                        return Redirect(returnUrl);

+                    }

+                    else

+                    {

+                        return RedirectToAction("Index", "Home");

+                    }

+                }

+                else

+                {

+                    ModelState.AddModelError("", "The user name or password provided is incorrect.");

+                }

+            }

+

+            // If we got this far, something failed, redisplay form

+            return View(model);

+        }

+

+        // **************************************

+        // URL: /Account/LogOff

+        // **************************************

+

+        public ActionResult LogOff()

+        {

+            FormsService.SignOut();

+

+            return RedirectToAction("Index", "Home");

+        }

+

+        // **************************************

+        // URL: /Account/Register

+        // **************************************

+

+        public ActionResult Register()

+        {

+            ViewData["PasswordLength"] = MembershipService.MinPasswordLength;

+            return View();

+        }

+

+        [HttpPost]

+        public ActionResult Register(RegisterModel model)

+        {

+            if (ModelState.IsValid)

+            {

+                // Attempt to register the user

+                MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email);

+

+                if (createStatus == MembershipCreateStatus.Success)

+                {

+                    FormsService.SignIn(model.UserName, false /* createPersistentCookie */);

+                    return RedirectToAction("Index", "Home");

+                }

+                else

+                {

+                    ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus));

+                }

+            }

+

+            // If we got this far, something failed, redisplay form

+            ViewData["PasswordLength"] = MembershipService.MinPasswordLength;

+            return View(model);

+        }

+

+        // **************************************

+        // URL: /Account/ChangePassword

+        // **************************************

+

+        [Authorize]

+        public ActionResult ChangePassword()

+        {

+            ViewData["PasswordLength"] = MembershipService.MinPasswordLength;

+            return View();

+        }

+

+        [Authorize]

+        [HttpPost]

+        public ActionResult ChangePassword(ChangePasswordModel model)

+        {

+            if (ModelState.IsValid)

+            {

+                if (MembershipService.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword))

+                {

+                    return RedirectToAction("ChangePasswordSuccess");

+                }

+                else

+                {

+                    ModelState.AddModelError("", "The current password is incorrect or the new password is invalid.");

+                }

+            }

+

+            // If we got this far, something failed, redisplay form

+            ViewData["PasswordLength"] = MembershipService.MinPasswordLength;

+            return View(model);

+        }

+

+        // **************************************

+        // URL: /Account/ChangePasswordSuccess

+        // **************************************

+

+        public ActionResult ChangePasswordSuccess()

+        {

+            return View();

+        }

+

+    }

+}

diff --git a/src/test/resources/NPanday11480/NPanday11480/Controllers/HomeController.cs b/src/test/resources/NPanday11480/NPanday11480/Controllers/HomeController.cs
new file mode 100644
index 0000000..bfd2a65
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Controllers/HomeController.cs
@@ -0,0 +1,24 @@
+using System;

+using System.Collections.Generic;

+using System.Linq;

+using System.Web;

+using System.Web.Mvc;

+

+namespace NPanday11480.Controllers

+{

+    [HandleError]

+    public class HomeController : Controller

+    {

+        public ActionResult Index()

+        {

+            ViewData["Message"] = "Welcome to ASP.NET MVC!";

+

+            return View();

+        }

+

+        public ActionResult About()

+        {

+            return View();

+        }

+    }

+}

diff --git a/src/test/resources/NPanday11480/NPanday11480/Global.asax b/src/test/resources/NPanday11480/NPanday11480/Global.asax
new file mode 100644
index 0000000..e557302
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Global.asax
@@ -0,0 +1 @@
+<%@ Application Codebehind="Global.asax.cs" Inherits="NPanday11480.MvcApplication" Language="C#" %>

diff --git a/src/test/resources/NPanday11480/NPanday11480/Global.asax.cs b/src/test/resources/NPanday11480/NPanday11480/Global.asax.cs
new file mode 100644
index 0000000..0b5a246
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Global.asax.cs
@@ -0,0 +1,34 @@
+using System;

+using System.Collections.Generic;

+using System.Linq;

+using System.Web;

+using System.Web.Mvc;

+using System.Web.Routing;

+

+namespace NPanday11480

+{

+    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 

+    // visit http://go.microsoft.com/?LinkId=9394801

+

+    public class MvcApplication : System.Web.HttpApplication

+    {

+        public static void RegisterRoutes(RouteCollection routes)

+        {

+            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

+

+            routes.MapRoute(

+                "Default", // Route name

+                "{controller}/{action}/{id}", // URL with parameters

+                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults

+            );

+

+        }

+

+        protected void Application_Start()

+        {

+            AreaRegistration.RegisterAllAreas();

+

+            RegisterRoutes(RouteTable.Routes);

+        }

+    }

+}
\ No newline at end of file
diff --git a/src/test/resources/NPanday11480/NPanday11480/Models/AccountModels.cs b/src/test/resources/NPanday11480/NPanday11480/Models/AccountModels.cs
new file mode 100644
index 0000000..96dd2ba
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Models/AccountModels.cs
@@ -0,0 +1,283 @@
+using System;

+using System.Collections.Generic;

+using System.ComponentModel;

+using System.ComponentModel.DataAnnotations;

+using System.Globalization;

+using System.Linq;

+using System.Web;

+using System.Web.Mvc;

+using System.Web.Security;

+

+namespace NPanday11480.Models

+{

+

+    #region Models

+    [PropertiesMustMatch("NewPassword", "ConfirmPassword", ErrorMessage = "The new password and confirmation password do not match.")]

+    public class ChangePasswordModel

+    {

+        [Required]

+        [DataType(DataType.Password)]

+        [DisplayName("Current password")]

+        public string OldPassword { get; set; }

+

+        [Required]

+        [ValidatePasswordLength]

+        [DataType(DataType.Password)]

+        [DisplayName("New password")]

+        public string NewPassword { get; set; }

+

+        [Required]

+        [DataType(DataType.Password)]

+        [DisplayName("Confirm new password")]

+        public string ConfirmPassword { get; set; }

+    }

+

+    public class LogOnModel

+    {

+        [Required]

+        [DisplayName("User name")]

+        public string UserName { get; set; }

+

+        [Required]

+        [DataType(DataType.Password)]

+        [DisplayName("Password")]

+        public string Password { get; set; }

+

+        [DisplayName("Remember me?")]

+        public bool RememberMe { get; set; }

+    }

+

+    [PropertiesMustMatch("Password", "ConfirmPassword", ErrorMessage = "The password and confirmation password do not match.")]

+    public class RegisterModel

+    {

+        [Required]

+        [DisplayName("User name")]

+        public string UserName { get; set; }

+

+        [Required]

+        [DataType(DataType.EmailAddress)]

+        [DisplayName("Email address")]

+        public string Email { get; set; }

+

+        [Required]

+        [ValidatePasswordLength]

+        [DataType(DataType.Password)]

+        [DisplayName("Password")]

+        public string Password { get; set; }

+

+        [Required]

+        [DataType(DataType.Password)]

+        [DisplayName("Confirm password")]

+        public string ConfirmPassword { get; set; }

+    }

+    #endregion

+

+    #region Services

+    // The FormsAuthentication type is sealed and contains static members, so it is difficult to

+    // unit test code that calls its members. The interface and helper class below demonstrate

+    // how to create an abstract wrapper around such a type in order to make the AccountController

+    // code unit testable.

+

+    public interface IMembershipService

+    {

+        int MinPasswordLength { get; }

+

+        bool ValidateUser(string userName, string password);

+        MembershipCreateStatus CreateUser(string userName, string password, string email);

+        bool ChangePassword(string userName, string oldPassword, string newPassword);

+    }

+

+    public class AccountMembershipService : IMembershipService

+    {

+        private readonly MembershipProvider _provider;

+

+        public AccountMembershipService()

+            : this(null)

+        {

+        }

+

+        public AccountMembershipService(MembershipProvider provider)

+        {

+            _provider = provider ?? Membership.Provider;

+        }

+

+        public int MinPasswordLength

+        {

+            get

+            {

+                return _provider.MinRequiredPasswordLength;

+            }

+        }

+

+        public bool ValidateUser(string userName, string password)

+        {

+            if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName");

+            if (String.IsNullOrEmpty(password)) throw new ArgumentException("Value cannot be null or empty.", "password");

+

+            return _provider.ValidateUser(userName, password);

+        }

+

+        public MembershipCreateStatus CreateUser(string userName, string password, string email)

+        {

+            if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName");

+            if (String.IsNullOrEmpty(password)) throw new ArgumentException("Value cannot be null or empty.", "password");

+            if (String.IsNullOrEmpty(email)) throw new ArgumentException("Value cannot be null or empty.", "email");

+

+            MembershipCreateStatus status;

+            _provider.CreateUser(userName, password, email, null, null, true, null, out status);

+            return status;

+        }

+

+        public bool ChangePassword(string userName, string oldPassword, string newPassword)

+        {

+            if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName");

+            if (String.IsNullOrEmpty(oldPassword)) throw new ArgumentException("Value cannot be null or empty.", "oldPassword");

+            if (String.IsNullOrEmpty(newPassword)) throw new ArgumentException("Value cannot be null or empty.", "newPassword");

+

+            // The underlying ChangePassword() will throw an exception rather

+            // than return false in certain failure scenarios.

+            try

+            {

+                MembershipUser currentUser = _provider.GetUser(userName, true /* userIsOnline */);

+                return currentUser.ChangePassword(oldPassword, newPassword);

+            }

+            catch (ArgumentException)

+            {

+                return false;

+            }

+            catch (MembershipPasswordException)

+            {

+                return false;

+            }

+        }

+    }

+

+    public interface IFormsAuthenticationService

+    {

+        void SignIn(string userName, bool createPersistentCookie);

+        void SignOut();

+    }

+

+    public class FormsAuthenticationService : IFormsAuthenticationService

+    {

+        public void SignIn(string userName, bool createPersistentCookie)

+        {

+            if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName");

+

+            FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);

+        }

+

+        public void SignOut()

+        {

+            FormsAuthentication.SignOut();

+        }

+    }

+    #endregion

+

+    #region Validation

+    public static class AccountValidation

+    {

+        public static string ErrorCodeToString(MembershipCreateStatus createStatus)

+        {

+            // See http://go.microsoft.com/fwlink/?LinkID=177550 for

+            // a full list of status codes.

+            switch (createStatus)

+            {

+                case MembershipCreateStatus.DuplicateUserName:

+                    return "Username already exists. Please enter a different user name.";

+

+                case MembershipCreateStatus.DuplicateEmail:

+                    return "A username for that e-mail address already exists. Please enter a different e-mail address.";

+

+                case MembershipCreateStatus.InvalidPassword:

+                    return "The password provided is invalid. Please enter a valid password value.";

+

+                case MembershipCreateStatus.InvalidEmail:

+                    return "The e-mail address provided is invalid. Please check the value and try again.";

+

+                case MembershipCreateStatus.InvalidAnswer:

+                    return "The password retrieval answer provided is invalid. Please check the value and try again.";

+

+                case MembershipCreateStatus.InvalidQuestion:

+                    return "The password retrieval question provided is invalid. Please check the value and try again.";

+

+                case MembershipCreateStatus.InvalidUserName:

+                    return "The user name provided is invalid. Please check the value and try again.";

+

+                case MembershipCreateStatus.ProviderError:

+                    return "The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator.";

+

+                case MembershipCreateStatus.UserRejected:

+                    return "The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator.";

+

+                default:

+                    return "An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator.";

+            }

+        }

+    }

+

+    [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]

+    public sealed class PropertiesMustMatchAttribute : ValidationAttribute

+    {

+        private const string _defaultErrorMessage = "'{0}' and '{1}' do not match.";

+        private readonly object _typeId = new object();

+

+        public PropertiesMustMatchAttribute(string originalProperty, string confirmProperty)

+            : base(_defaultErrorMessage)

+        {

+            OriginalProperty = originalProperty;

+            ConfirmProperty = confirmProperty;

+        }

+

+        public string ConfirmProperty { get; private set; }

+        public string OriginalProperty { get; private set; }

+

+        public override object TypeId

+        {

+            get

+            {

+                return _typeId;

+            }

+        }

+

+        public override string FormatErrorMessage(string name)

+        {

+            return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString,

+                OriginalProperty, ConfirmProperty);

+        }

+

+        public override bool IsValid(object value)

+        {

+            PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value);

+            object originalValue = properties.Find(OriginalProperty, true /* ignoreCase */).GetValue(value);

+            object confirmValue = properties.Find(ConfirmProperty, true /* ignoreCase */).GetValue(value);

+            return Object.Equals(originalValue, confirmValue);

+        }

+    }

+

+    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]

+    public sealed class ValidatePasswordLengthAttribute : ValidationAttribute

+    {

+        private const string _defaultErrorMessage = "'{0}' must be at least {1} characters long.";

+        private readonly int _minCharacters = Membership.Provider.MinRequiredPasswordLength;

+

+        public ValidatePasswordLengthAttribute()

+            : base(_defaultErrorMessage)

+        {

+        }

+

+        public override string FormatErrorMessage(string name)

+        {

+            return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString,

+                name, _minCharacters);

+        }

+

+        public override bool IsValid(object value)

+        {

+            string valueAsString = value as string;

+            return (valueAsString != null && valueAsString.Length >= _minCharacters);

+        }

+    }

+    #endregion

+

+}

diff --git a/src/test/resources/NPanday11480/NPanday11480/NPanday11480.csproj b/src/test/resources/NPanday11480/NPanday11480/NPanday11480.csproj
new file mode 100644
index 0000000..0fb4071
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/NPanday11480.csproj
@@ -0,0 +1,135 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{529FAC42-13B6-492F-92A6-E7F66B951700}</ProjectGuid>

+    <ProjectTypeGuids>{F85E285D-A4E0-4152-9332-AB1D724D3325};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>NPanday11480</RootNamespace>

+    <AssemblyName>NPanday11480</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <MvcBuildViews>false</MvcBuildViews>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\</OutputPath>

+    <DefineConstants>DEBUG;TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\</OutputPath>

+    <DefineConstants>TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="System" />

+    <Reference Include="System.Data" />

+    <Reference Include="System.ComponentModel.DataAnnotations">

+      <RequiredTargetFramework>3.5</RequiredTargetFramework>

+    </Reference>

+    <Reference Include="System.Core">

+      <RequiredTargetFramework>3.5</RequiredTargetFramework>

+    </Reference>

+    <Reference Include="System.Data.DataSetExtensions">

+      <RequiredTargetFramework>3.5</RequiredTargetFramework>

+    </Reference>

+    <Reference Include="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\..\..\..\..\..\Program Files\Microsoft ASP.NET\ASP.NET MVC 2\\Assemblies\System.Web.Mvc.dll</HintPath>

+    </Reference>

+    <Reference Include="System.Xml.Linq">

+      <RequiredTargetFramework>3.5</RequiredTargetFramework>

+    </Reference>

+    <Reference Include="System.Drawing" />

+    <Reference Include="System.Web" />

+    <Reference Include="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

+    <Reference Include="System.Web.Abstractions" />

+    <Reference Include="System.Web.Routing" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Configuration" />

+    <Reference Include="System.Web.Services" />

+    <Reference Include="System.EnterpriseServices" />

+    <Reference Include="System.Web.Mobile" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="Controllers\AccountController.cs" />

+    <Compile Include="Controllers\HomeController.cs" />

+    <Compile Include="Global.asax.cs">

+      <DependentUpon>Global.asax</DependentUpon>

+    </Compile>

+    <Compile Include="Models\AccountModels.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <Content Include="Global.asax" />

+    <Content Include="Web.config" />

+    <Content Include="Content\Site.css" />

+    <Content Include="Scripts\jquery-1.4.1.js" />

+    <Content Include="Scripts\jquery-1.4.1.min.js" />

+    <Content Include="Scripts\jquery-1.4.1-vsdoc.js" />

+    <Content Include="Scripts\jquery-1.4.1.min-vsdoc.js" />

+    <Content Include="Scripts\jquery.validate.js" />

+    <Content Include="Scripts\jquery.validate.min.js" />

+    <Content Include="Scripts\jquery.validate-vsdoc.js" />

+    <Content Include="Scripts\jquery.validate.min-vsdoc.js" />

+    <Content Include="Scripts\MicrosoftAjax.js" />

+    <Content Include="Scripts\MicrosoftAjax.debug.js" />

+    <Content Include="Scripts\MicrosoftMvcAjax.js" />

+    <Content Include="Scripts\MicrosoftMvcAjax.debug.js" />

+    <Content Include="Scripts\MicrosoftMvcValidation.js" />

+    <Content Include="Scripts\MicrosoftMvcValidation.debug.js" />

+    <Content Include="Views\Account\ChangePassword.aspx" />

+    <Content Include="Views\Account\ChangePasswordSuccess.aspx" />

+    <Content Include="Views\Account\LogOn.aspx" />

+    <Content Include="Views\Account\Register.aspx" />

+    <Content Include="Views\Home\About.aspx" />

+    <Content Include="Views\Home\Index.aspx" />

+    <Content Include="Views\Shared\Error.aspx" />

+    <Content Include="Views\Shared\LogOnUserControl.ascx" />

+    <Content Include="Views\Shared\Site.Master" />

+    <Content Include="Views\Web.config" />

+  </ItemGroup>

+  <ItemGroup>

+    <WebReferences Include="Web References\" />

+  </ItemGroup>

+  <ItemGroup>

+    <Folder Include="App_Data\" />

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

+  <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target> -->

+  <Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">

+    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)" />

+  </Target>

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">

+        <WebProjectProperties>

+          <UseIIS>False</UseIIS>

+          <AutoAssignPort>True</AutoAssignPort>

+          <DevelopmentServerPort>2575</DevelopmentServerPort>

+          <DevelopmentServerVPath>/</DevelopmentServerVPath>

+          <IISUrl>

+          </IISUrl>

+          <NTLMAuthentication>False</NTLMAuthentication>

+          <UseCustomServer>False</UseCustomServer>

+          <CustomServerUrl>

+          </CustomServerUrl>

+          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>

+        </WebProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+</Project>
\ No newline at end of file
diff --git a/src/test/resources/NPanday11480/NPanday11480/Properties/AssemblyInfo.cs b/src/test/resources/NPanday11480/NPanday11480/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..8523cec
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;

+using System.Runtime.CompilerServices;

+using System.Runtime.InteropServices;

+

+// General Information about an assembly is controlled through the following 

+// set of attributes. Change these attribute values to modify the information

+// associated with an assembly.

+[assembly: AssemblyTitle("NPanday11480")]

+[assembly: AssemblyDescription("")]

+[assembly: AssemblyConfiguration("")]

+[assembly: AssemblyCompany("g2ix")]

+[assembly: AssemblyProduct("NPanday11480")]

+[assembly: AssemblyCopyright("Copyright © g2ix 2010")]

+[assembly: AssemblyTrademark("")]

+[assembly: AssemblyCulture("")]

+

+// Setting ComVisible to false makes the types in this assembly not visible 

+// to COM components.  If you need to access a type in this assembly from 

+// COM, set the ComVisible attribute to true on that type.

+[assembly: ComVisible(false)]

+

+// The following GUID is for the ID of the typelib if this project is exposed to COM

+[assembly: Guid("e5ded509-b81f-487c-996b-28901d1bdfda")]

+

+// Version information for an assembly consists of the following four values:

+//

+//      Major Version

+//      Minor Version 

+//      Build Number

+//      Revision

+//

+// You can specify all the values or you can default the Revision and Build Numbers 

+// by using the '*' as shown below:

+[assembly: AssemblyVersion("1.0.0.0")]

+[assembly: AssemblyFileVersion("1.0.0.0")]

diff --git a/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftAjax.debug.js b/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftAjax.debug.js
new file mode 100644
index 0000000..51d7b06
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftAjax.debug.js
@@ -0,0 +1,7117 @@
+// Name:        MicrosoftAjax.debug.js

+// Assembly:    System.Web.Extensions

+// Version:     4.0.0.0

+// FileVersion: 4.0.20526.0

+//-----------------------------------------------------------------------

+// Copyright (C) Microsoft Corporation. All rights reserved.

+//-----------------------------------------------------------------------

+// MicrosoftAjax.js

+// Microsoft AJAX Framework.

+ 

+Function.__typeName = 'Function';

+Function.__class = true;

+Function.createCallback = function Function$createCallback(method, context) {

+    /// <summary locid="M:J#Function.createCallback" />

+    /// <param name="method" type="Function"></param>

+    /// <param name="context" mayBeNull="true"></param>

+    /// <returns type="Function"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "method", type: Function},

+        {name: "context", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    return function() {

+        var l = arguments.length;

+        if (l > 0) {

+            var args = [];

+            for (var i = 0; i < l; i++) {

+                args[i] = arguments[i];

+            }

+            args[l] = context;

+            return method.apply(this, args);

+        }

+        return method.call(this, context);

+    }

+}

+Function.createDelegate = function Function$createDelegate(instance, method) {

+    /// <summary locid="M:J#Function.createDelegate" />

+    /// <param name="instance" mayBeNull="true"></param>

+    /// <param name="method" type="Function"></param>

+    /// <returns type="Function"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "instance", mayBeNull: true},

+        {name: "method", type: Function}

+    ]);

+    if (e) throw e;

+    return function() {

+        return method.apply(instance, arguments);

+    }

+}

+Function.emptyFunction = Function.emptyMethod = function Function$emptyMethod() {

+    /// <summary locid="M:J#Function.emptyMethod" />

+}

+Function.validateParameters = function Function$validateParameters(parameters, expectedParameters, validateParameterCount) {

+    /// <summary locid="M:J#Function.validateParameters" />

+    /// <param name="parameters"></param>

+    /// <param name="expectedParameters"></param>

+    /// <param name="validateParameterCount" type="Boolean" optional="true"></param>

+    /// <returns type="Error" mayBeNull="true"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "parameters"},

+        {name: "expectedParameters"},

+        {name: "validateParameterCount", type: Boolean, optional: true}

+    ]);

+    if (e) throw e;

+    return Function._validateParams(parameters, expectedParameters, validateParameterCount);

+}

+Function._validateParams = function Function$_validateParams(params, expectedParams, validateParameterCount) {

+    var e, expectedLength = expectedParams.length;

+    validateParameterCount = validateParameterCount || (typeof(validateParameterCount) === "undefined");

+    e = Function._validateParameterCount(params, expectedParams, validateParameterCount);

+    if (e) {

+        e.popStackFrame();

+        return e;

+    }

+    for (var i = 0, l = params.length; i < l; i++) {

+        var expectedParam = expectedParams[Math.min(i, expectedLength - 1)],

+            paramName = expectedParam.name;

+        if (expectedParam.parameterArray) {

+            paramName += "[" + (i - expectedLength + 1) + "]";

+        }

+        else if (!validateParameterCount && (i >= expectedLength)) {

+            break;

+        }

+        e = Function._validateParameter(params[i], expectedParam, paramName);

+        if (e) {

+            e.popStackFrame();

+            return e;

+        }

+    }

+    return null;

+}

+Function._validateParameterCount = function Function$_validateParameterCount(params, expectedParams, validateParameterCount) {

+    var i, error,

+        expectedLen = expectedParams.length,

+        actualLen = params.length;

+    if (actualLen < expectedLen) {

+        var minParams = expectedLen;

+        for (i = 0; i < expectedLen; i++) {

+            var param = expectedParams[i];

+            if (param.optional || param.parameterArray) {

+                minParams--;

+            }

+        }        

+        if (actualLen < minParams) {

+            error = true;

+        }

+    }

+    else if (validateParameterCount && (actualLen > expectedLen)) {

+        error = true;      

+        for (i = 0; i < expectedLen; i++) {

+            if (expectedParams[i].parameterArray) {

+                error = false; 

+                break;

+            }

+        }  

+    }

+    if (error) {

+        var e = Error.parameterCount();

+        e.popStackFrame();

+        return e;

+    }

+    return null;

+}

+Function._validateParameter = function Function$_validateParameter(param, expectedParam, paramName) {

+    var e,

+        expectedType = expectedParam.type,

+        expectedInteger = !!expectedParam.integer,

+        expectedDomElement = !!expectedParam.domElement,

+        mayBeNull = !!expectedParam.mayBeNull;

+    e = Function._validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName);

+    if (e) {

+        e.popStackFrame();

+        return e;

+    }

+    var expectedElementType = expectedParam.elementType,

+        elementMayBeNull = !!expectedParam.elementMayBeNull;

+    if (expectedType === Array && typeof(param) !== "undefined" && param !== null &&

+        (expectedElementType || !elementMayBeNull)) {

+        var expectedElementInteger = !!expectedParam.elementInteger,

+            expectedElementDomElement = !!expectedParam.elementDomElement;

+        for (var i=0; i < param.length; i++) {

+            var elem = param[i];

+            e = Function._validateParameterType(elem, expectedElementType,

+                expectedElementInteger, expectedElementDomElement, elementMayBeNull,

+                paramName + "[" + i + "]");

+            if (e) {

+                e.popStackFrame();

+                return e;

+            }

+        }

+    }

+    return null;

+}

+Function._validateParameterType = function Function$_validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName) {

+    var e, i;

+    if (typeof(param) === "undefined") {

+        if (mayBeNull) {

+            return null;

+        }

+        else {

+            e = Error.argumentUndefined(paramName);

+            e.popStackFrame();

+            return e;

+        }

+    }

+    if (param === null) {

+        if (mayBeNull) {

+            return null;

+        }

+        else {

+            e = Error.argumentNull(paramName);

+            e.popStackFrame();

+            return e;

+        }

+    }

+    if (expectedType && expectedType.__enum) {

+        if (typeof(param) !== 'number') {

+            e = Error.argumentType(paramName, Object.getType(param), expectedType);

+            e.popStackFrame();

+            return e;

+        }

+        if ((param % 1) === 0) {

+            var values = expectedType.prototype;

+            if (!expectedType.__flags || (param === 0)) {

+                for (i in values) {

+                    if (values[i] === param) return null;

+                }

+            }

+            else {

+                var v = param;

+                for (i in values) {

+                    var vali = values[i];

+                    if (vali === 0) continue;

+                    if ((vali & param) === vali) {

+                        v -= vali;

+                    }

+                    if (v === 0) return null;

+                }

+            }

+        }

+        e = Error.argumentOutOfRange(paramName, param, String.format(Sys.Res.enumInvalidValue, param, expectedType.getName()));

+        e.popStackFrame();

+        return e;

+    }

+    if (expectedDomElement && (!Sys._isDomElement(param) || (param.nodeType === 3))) {

+        e = Error.argument(paramName, Sys.Res.argumentDomElement);

+        e.popStackFrame();

+        return e;

+    }

+    if (expectedType && !Sys._isInstanceOfType(expectedType, param)) {

+        e = Error.argumentType(paramName, Object.getType(param), expectedType);

+        e.popStackFrame();

+        return e;

+    }

+    if (expectedType === Number && expectedInteger) {

+        if ((param % 1) !== 0) {

+            e = Error.argumentOutOfRange(paramName, param, Sys.Res.argumentInteger);

+            e.popStackFrame();

+            return e;

+        }

+    }

+    return null;

+}

+ 

+Error.__typeName = 'Error';

+Error.__class = true;

+Error.create = function Error$create(message, errorInfo) {

+    /// <summary locid="M:J#Error.create" />

+    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>

+    /// <param name="errorInfo" optional="true" mayBeNull="true"></param>

+    /// <returns type="Error"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "message", type: String, mayBeNull: true, optional: true},

+        {name: "errorInfo", mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    var err = new Error(message);

+    err.message = message;

+    if (errorInfo) {

+        for (var v in errorInfo) {

+            err[v] = errorInfo[v];

+        }

+    }

+    err.popStackFrame();

+    return err;

+}

+Error.argument = function Error$argument(paramName, message) {

+    /// <summary locid="M:J#Error.argument" />

+    /// <param name="paramName" type="String" optional="true" mayBeNull="true"></param>

+    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>

+    /// <returns></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "paramName", type: String, mayBeNull: true, optional: true},

+        {name: "message", type: String, mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    var displayMessage = "Sys.ArgumentException: " + (message ? message : Sys.Res.argument);

+    if (paramName) {

+        displayMessage += "\n" + String.format(Sys.Res.paramName, paramName);

+    }

+    var err = Error.create(displayMessage, { name: "Sys.ArgumentException", paramName: paramName });

+    err.popStackFrame();

+    return err;

+}

+Error.argumentNull = function Error$argumentNull(paramName, message) {

+    /// <summary locid="M:J#Error.argumentNull" />

+    /// <param name="paramName" type="String" optional="true" mayBeNull="true"></param>

+    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>

+    /// <returns></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "paramName", type: String, mayBeNull: true, optional: true},

+        {name: "message", type: String, mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    var displayMessage = "Sys.ArgumentNullException: " + (message ? message : Sys.Res.argumentNull);

+    if (paramName) {

+        displayMessage += "\n" + String.format(Sys.Res.paramName, paramName);

+    }

+    var err = Error.create(displayMessage, { name: "Sys.ArgumentNullException", paramName: paramName });

+    err.popStackFrame();

+    return err;

+}

+Error.argumentOutOfRange = function Error$argumentOutOfRange(paramName, actualValue, message) {

+    /// <summary locid="M:J#Error.argumentOutOfRange" />

+    /// <param name="paramName" type="String" optional="true" mayBeNull="true"></param>

+    /// <param name="actualValue" optional="true" mayBeNull="true"></param>

+    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>

+    /// <returns></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "paramName", type: String, mayBeNull: true, optional: true},

+        {name: "actualValue", mayBeNull: true, optional: true},

+        {name: "message", type: String, mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    var displayMessage = "Sys.ArgumentOutOfRangeException: " + (message ? message : Sys.Res.argumentOutOfRange);

+    if (paramName) {

+        displayMessage += "\n" + String.format(Sys.Res.paramName, paramName);

+    }

+    if (typeof(actualValue) !== "undefined" && actualValue !== null) {

+        displayMessage += "\n" + String.format(Sys.Res.actualValue, actualValue);

+    }

+    var err = Error.create(displayMessage, {

+        name: "Sys.ArgumentOutOfRangeException",

+        paramName: paramName,

+        actualValue: actualValue

+    });

+    err.popStackFrame();

+    return err;

+}

+Error.argumentType = function Error$argumentType(paramName, actualType, expectedType, message) {

+    /// <summary locid="M:J#Error.argumentType" />

+    /// <param name="paramName" type="String" optional="true" mayBeNull="true"></param>

+    /// <param name="actualType" type="Type" optional="true" mayBeNull="true"></param>

+    /// <param name="expectedType" type="Type" optional="true" mayBeNull="true"></param>

+    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>

+    /// <returns></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "paramName", type: String, mayBeNull: true, optional: true},

+        {name: "actualType", type: Type, mayBeNull: true, optional: true},

+        {name: "expectedType", type: Type, mayBeNull: true, optional: true},

+        {name: "message", type: String, mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    var displayMessage = "Sys.ArgumentTypeException: ";

+    if (message) {

+        displayMessage += message;

+    }

+    else if (actualType && expectedType) {

+        displayMessage +=

+            String.format(Sys.Res.argumentTypeWithTypes, actualType.getName(), expectedType.getName());

+    }

+    else {

+        displayMessage += Sys.Res.argumentType;

+    }

+    if (paramName) {

+        displayMessage += "\n" + String.format(Sys.Res.paramName, paramName);

+    }

+    var err = Error.create(displayMessage, {

+        name: "Sys.ArgumentTypeException",

+        paramName: paramName,

+        actualType: actualType,

+        expectedType: expectedType

+    });

+    err.popStackFrame();

+    return err;

+}

+Error.argumentUndefined = function Error$argumentUndefined(paramName, message) {

+    /// <summary locid="M:J#Error.argumentUndefined" />

+    /// <param name="paramName" type="String" optional="true" mayBeNull="true"></param>

+    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>

+    /// <returns></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "paramName", type: String, mayBeNull: true, optional: true},

+        {name: "message", type: String, mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    var displayMessage = "Sys.ArgumentUndefinedException: " + (message ? message : Sys.Res.argumentUndefined);

+    if (paramName) {

+        displayMessage += "\n" + String.format(Sys.Res.paramName, paramName);

+    }

+    var err = Error.create(displayMessage, { name: "Sys.ArgumentUndefinedException", paramName: paramName });

+    err.popStackFrame();

+    return err;

+}

+Error.format = function Error$format(message) {

+    /// <summary locid="M:J#Error.format" />

+    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>

+    /// <returns></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "message", type: String, mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    var displayMessage = "Sys.FormatException: " + (message ? message : Sys.Res.format);

+    var err = Error.create(displayMessage, {name: 'Sys.FormatException'});

+    err.popStackFrame();

+    return err;

+}

+Error.invalidOperation = function Error$invalidOperation(message) {

+    /// <summary locid="M:J#Error.invalidOperation" />

+    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>

+    /// <returns></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "message", type: String, mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    var displayMessage = "Sys.InvalidOperationException: " + (message ? message : Sys.Res.invalidOperation);

+    var err = Error.create(displayMessage, {name: 'Sys.InvalidOperationException'});

+    err.popStackFrame();

+    return err;

+}

+Error.notImplemented = function Error$notImplemented(message) {

+    /// <summary locid="M:J#Error.notImplemented" />

+    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>

+    /// <returns></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "message", type: String, mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    var displayMessage = "Sys.NotImplementedException: " + (message ? message : Sys.Res.notImplemented);

+    var err = Error.create(displayMessage, {name: 'Sys.NotImplementedException'});

+    err.popStackFrame();

+    return err;

+}

+Error.parameterCount = function Error$parameterCount(message) {

+    /// <summary locid="M:J#Error.parameterCount" />

+    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>

+    /// <returns></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "message", type: String, mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    var displayMessage = "Sys.ParameterCountException: " + (message ? message : Sys.Res.parameterCount);

+    var err = Error.create(displayMessage, {name: 'Sys.ParameterCountException'});

+    err.popStackFrame();

+    return err;

+}

+Error.prototype.popStackFrame = function Error$popStackFrame() {

+    /// <summary locid="M:J#checkParam" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+    if (typeof(this.stack) === "undefined" || this.stack === null ||

+        typeof(this.fileName) === "undefined" || this.fileName === null ||

+        typeof(this.lineNumber) === "undefined" || this.lineNumber === null) {

+        return;

+    }

+    var stackFrames = this.stack.split("\n");

+    var currentFrame = stackFrames[0];

+    var pattern = this.fileName + ":" + this.lineNumber;

+    while(typeof(currentFrame) !== "undefined" &&

+          currentFrame !== null &&

+          currentFrame.indexOf(pattern) === -1) {

+        stackFrames.shift();

+        currentFrame = stackFrames[0];

+    }

+    var nextFrame = stackFrames[1];

+    if (typeof(nextFrame) === "undefined" || nextFrame === null) {

+        return;

+    }

+    var nextFrameParts = nextFrame.match(/@(.*):(\d+)$/);

+    if (typeof(nextFrameParts) === "undefined" || nextFrameParts === null) {

+        return;

+    }

+    this.fileName = nextFrameParts[1];

+    this.lineNumber = parseInt(nextFrameParts[2]);

+    stackFrames.shift();

+    this.stack = stackFrames.join("\n");

+}

+ 

+Object.__typeName = 'Object';

+Object.__class = true;

+Object.getType = function Object$getType(instance) {

+    /// <summary locid="M:J#Object.getType" />

+    /// <param name="instance"></param>

+    /// <returns type="Type"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "instance"}

+    ]);

+    if (e) throw e;

+    var ctor = instance.constructor;

+    if (!ctor || (typeof(ctor) !== "function") || !ctor.__typeName || (ctor.__typeName === 'Object')) {

+        return Object;

+    }

+    return ctor;

+}

+Object.getTypeName = function Object$getTypeName(instance) {

+    /// <summary locid="M:J#Object.getTypeName" />

+    /// <param name="instance"></param>

+    /// <returns type="String"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "instance"}

+    ]);

+    if (e) throw e;

+    return Object.getType(instance).getName();

+}

+ 

+String.__typeName = 'String';

+String.__class = true;

+String.prototype.endsWith = function String$endsWith(suffix) {

+    /// <summary locid="M:J#String.endsWith" />

+    /// <param name="suffix" type="String"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "suffix", type: String}

+    ]);

+    if (e) throw e;

+    return (this.substr(this.length - suffix.length) === suffix);

+}

+String.prototype.startsWith = function String$startsWith(prefix) {

+    /// <summary locid="M:J#String.startsWith" />

+    /// <param name="prefix" type="String"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "prefix", type: String}

+    ]);

+    if (e) throw e;

+    return (this.substr(0, prefix.length) === prefix);

+}

+String.prototype.trim = function String$trim() {

+    /// <summary locid="M:J#String.trim" />

+    /// <returns type="String"></returns>

+    if (arguments.length !== 0) throw Error.parameterCount();

+    return this.replace(/^\s+|\s+$/g, '');

+}

+String.prototype.trimEnd = function String$trimEnd() {

+    /// <summary locid="M:J#String.trimEnd" />

+    /// <returns type="String"></returns>

+    if (arguments.length !== 0) throw Error.parameterCount();

+    return this.replace(/\s+$/, '');

+}

+String.prototype.trimStart = function String$trimStart() {

+    /// <summary locid="M:J#String.trimStart" />

+    /// <returns type="String"></returns>

+    if (arguments.length !== 0) throw Error.parameterCount();

+    return this.replace(/^\s+/, '');

+}

+String.format = function String$format(format, args) {

+    /// <summary locid="M:J#String.format" />

+    /// <param name="format" type="String"></param>

+    /// <param name="args" parameterArray="true" mayBeNull="true"></param>

+    /// <returns type="String"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "format", type: String},

+        {name: "args", mayBeNull: true, parameterArray: true}

+    ]);

+    if (e) throw e;

+    return String._toFormattedString(false, arguments);

+}

+String._toFormattedString = function String$_toFormattedString(useLocale, args) {

+    var result = '';

+    var format = args[0];

+    for (var i=0;;) {

+        var open = format.indexOf('{', i);

+        var close = format.indexOf('}', i);

+        if ((open < 0) && (close < 0)) {

+            result += format.slice(i);

+            break;

+        }

+        if ((close > 0) && ((close < open) || (open < 0))) {

+            if (format.charAt(close + 1) !== '}') {

+                throw Error.argument('format', Sys.Res.stringFormatBraceMismatch);

+            }

+            result += format.slice(i, close + 1);

+            i = close + 2;

+            continue;

+        }

+        result += format.slice(i, open);

+        i = open + 1;

+        if (format.charAt(i) === '{') {

+            result += '{';

+            i++;

+            continue;

+        }

+        if (close < 0) throw Error.argument('format', Sys.Res.stringFormatBraceMismatch);

+        var brace = format.substring(i, close);

+        var colonIndex = brace.indexOf(':');

+        var argNumber = parseInt((colonIndex < 0)? brace : brace.substring(0, colonIndex), 10) + 1;

+        if (isNaN(argNumber)) throw Error.argument('format', Sys.Res.stringFormatInvalid);

+        var argFormat = (colonIndex < 0)? '' : brace.substring(colonIndex + 1);

+        var arg = args[argNumber];

+        if (typeof(arg) === "undefined" || arg === null) {

+            arg = '';

+        }

+        if (arg.toFormattedString) {

+            result += arg.toFormattedString(argFormat);

+        }

+        else if (useLocale && arg.localeFormat) {

+            result += arg.localeFormat(argFormat);

+        }

+        else if (arg.format) {

+            result += arg.format(argFormat);

+        }

+        else

+            result += arg.toString();

+        i = close + 1;

+    }

+    return result;

+}

+ 

+Boolean.__typeName = 'Boolean';

+Boolean.__class = true;

+Boolean.parse = function Boolean$parse(value) {

+    /// <summary locid="M:J#Boolean.parse" />

+    /// <param name="value" type="String"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "value", type: String}

+    ], false);

+    if (e) throw e;

+    var v = value.trim().toLowerCase();

+    if (v === 'false') return false;

+    if (v === 'true') return true;

+    throw Error.argumentOutOfRange('value', value, Sys.Res.boolTrueOrFalse);

+}

+ 

+Date.__typeName = 'Date';

+Date.__class = true;

+ 

+Number.__typeName = 'Number';

+Number.__class = true;

+ 

+RegExp.__typeName = 'RegExp';

+RegExp.__class = true;

+ 

+if (!window) this.window = this;

+window.Type = Function;

+Type.__fullyQualifiedIdentifierRegExp = new RegExp("^[^.0-9 \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]([^ \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]*[^. \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\])?$", "i");

+Type.__identifierRegExp = new RegExp("^[^.0-9 \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\][^. \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]*$", "i");

+Type.prototype.callBaseMethod = function Type$callBaseMethod(instance, name, baseArguments) {

+    /// <summary locid="M:J#Type.callBaseMethod" />

+    /// <param name="instance"></param>

+    /// <param name="name" type="String"></param>

+    /// <param name="baseArguments" type="Array" optional="true" mayBeNull="true" elementMayBeNull="true"></param>

+    /// <returns></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "instance"},

+        {name: "name", type: String},

+        {name: "baseArguments", type: Array, mayBeNull: true, optional: true, elementMayBeNull: true}

+    ]);

+    if (e) throw e;

+    var baseMethod = Sys._getBaseMethod(this, instance, name);

+    if (!baseMethod) throw Error.invalidOperation(String.format(Sys.Res.methodNotFound, name));

+    if (!baseArguments) {

+        return baseMethod.apply(instance);

+    }

+    else {

+        return baseMethod.apply(instance, baseArguments);

+    }

+}

+Type.prototype.getBaseMethod = function Type$getBaseMethod(instance, name) {

+    /// <summary locid="M:J#Type.getBaseMethod" />

+    /// <param name="instance"></param>

+    /// <param name="name" type="String"></param>

+    /// <returns type="Function" mayBeNull="true"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "instance"},

+        {name: "name", type: String}

+    ]);

+    if (e) throw e;

+    return Sys._getBaseMethod(this, instance, name);

+}

+Type.prototype.getBaseType = function Type$getBaseType() {

+    /// <summary locid="M:J#Type.getBaseType" />

+    /// <returns type="Type" mayBeNull="true"></returns>

+    if (arguments.length !== 0) throw Error.parameterCount();

+    return (typeof(this.__baseType) === "undefined") ? null : this.__baseType;

+}

+Type.prototype.getInterfaces = function Type$getInterfaces() {

+    /// <summary locid="M:J#Type.getInterfaces" />

+    /// <returns type="Array" elementType="Type" mayBeNull="false" elementMayBeNull="false"></returns>

+    if (arguments.length !== 0) throw Error.parameterCount();

+    var result = [];

+    var type = this;

+    while(type) {

+        var interfaces = type.__interfaces;

+        if (interfaces) {

+            for (var i = 0, l = interfaces.length; i < l; i++) {

+                var interfaceType = interfaces[i];

+                if (!Array.contains(result, interfaceType)) {

+                    result[result.length] = interfaceType;

+                }

+            }

+        }

+        type = type.__baseType;

+    }

+    return result;

+}

+Type.prototype.getName = function Type$getName() {

+    /// <summary locid="M:J#Type.getName" />

+    /// <returns type="String"></returns>

+    if (arguments.length !== 0) throw Error.parameterCount();

+    return (typeof(this.__typeName) === "undefined") ? "" : this.__typeName;

+}

+Type.prototype.implementsInterface = function Type$implementsInterface(interfaceType) {

+    /// <summary locid="M:J#Type.implementsInterface" />

+    /// <param name="interfaceType" type="Type"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "interfaceType", type: Type}

+    ]);

+    if (e) throw e;

+    this.resolveInheritance();

+    var interfaceName = interfaceType.getName();

+    var cache = this.__interfaceCache;

+    if (cache) {

+        var cacheEntry = cache[interfaceName];

+        if (typeof(cacheEntry) !== 'undefined') return cacheEntry;

+    }

+    else {

+        cache = this.__interfaceCache = {};

+    }

+    var baseType = this;

+    while (baseType) {

+        var interfaces = baseType.__interfaces;

+        if (interfaces) {

+            if (Array.indexOf(interfaces, interfaceType) !== -1) {

+                return cache[interfaceName] = true;

+            }

+        }

+        baseType = baseType.__baseType;

+    }

+    return cache[interfaceName] = false;

+}

+Type.prototype.inheritsFrom = function Type$inheritsFrom(parentType) {

+    /// <summary locid="M:J#Type.inheritsFrom" />

+    /// <param name="parentType" type="Type"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "parentType", type: Type}

+    ]);

+    if (e) throw e;

+    this.resolveInheritance();

+    var baseType = this.__baseType;

+    while (baseType) {

+        if (baseType === parentType) {

+            return true;

+        }

+        baseType = baseType.__baseType;

+    }

+    return false;

+}

+Type.prototype.initializeBase = function Type$initializeBase(instance, baseArguments) {

+    /// <summary locid="M:J#Type.initializeBase" />

+    /// <param name="instance"></param>

+    /// <param name="baseArguments" type="Array" optional="true" mayBeNull="true" elementMayBeNull="true"></param>

+    /// <returns></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "instance"},

+        {name: "baseArguments", type: Array, mayBeNull: true, optional: true, elementMayBeNull: true}

+    ]);

+    if (e) throw e;

+    if (!Sys._isInstanceOfType(this, instance)) throw Error.argumentType('instance', Object.getType(instance), this);

+    this.resolveInheritance();

+    if (this.__baseType) {

+        if (!baseArguments) {

+            this.__baseType.apply(instance);

+        }

+        else {

+            this.__baseType.apply(instance, baseArguments);

+        }

+    }

+    return instance;

+}

+Type.prototype.isImplementedBy = function Type$isImplementedBy(instance) {

+    /// <summary locid="M:J#Type.isImplementedBy" />

+    /// <param name="instance" mayBeNull="true"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "instance", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    if (typeof(instance) === "undefined" || instance === null) return false;

+    var instanceType = Object.getType(instance);

+    return !!(instanceType.implementsInterface && instanceType.implementsInterface(this));

+}

+Type.prototype.isInstanceOfType = function Type$isInstanceOfType(instance) {

+    /// <summary locid="M:J#Type.isInstanceOfType" />

+    /// <param name="instance" mayBeNull="true"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "instance", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    return Sys._isInstanceOfType(this, instance);

+}

+Type.prototype.registerClass = function Type$registerClass(typeName, baseType, interfaceTypes) {

+    /// <summary locid="M:J#Type.registerClass" />

+    /// <param name="typeName" type="String"></param>

+    /// <param name="baseType" type="Type" optional="true" mayBeNull="true"></param>

+    /// <param name="interfaceTypes" parameterArray="true" type="Type"></param>

+    /// <returns type="Type"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "typeName", type: String},

+        {name: "baseType", type: Type, mayBeNull: true, optional: true},

+        {name: "interfaceTypes", type: Type, parameterArray: true}

+    ]);

+    if (e) throw e;

+    if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw Error.argument('typeName', Sys.Res.notATypeName);

+    var parsedName;

+    try {

+        parsedName = eval(typeName);

+    }

+    catch(e) {

+        throw Error.argument('typeName', Sys.Res.argumentTypeName);

+    }

+    if (parsedName !== this) throw Error.argument('typeName', Sys.Res.badTypeName);

+    if (Sys.__registeredTypes[typeName]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, typeName));

+    if ((arguments.length > 1) && (typeof(baseType) === 'undefined')) throw Error.argumentUndefined('baseType');

+    if (baseType && !baseType.__class) throw Error.argument('baseType', Sys.Res.baseNotAClass);

+    this.prototype.constructor = this;

+    this.__typeName = typeName;

+    this.__class = true;

+    if (baseType) {

+        this.__baseType = baseType;

+        this.__basePrototypePending = true;

+    }

+    Sys.__upperCaseTypes[typeName.toUpperCase()] = this;

+    if (interfaceTypes) {

+        this.__interfaces = [];

+        this.resolveInheritance();

+        for (var i = 2, l = arguments.length; i < l; i++) {

+            var interfaceType = arguments[i];

+            if (!interfaceType.__interface) throw Error.argument('interfaceTypes[' + (i - 2) + ']', Sys.Res.notAnInterface);

+            for (var methodName in interfaceType.prototype) {

+                var method = interfaceType.prototype[methodName];

+                if (!this.prototype[methodName]) {

+                    this.prototype[methodName] = method;

+                }

+            }

+            this.__interfaces.push(interfaceType);

+        }

+    }

+    Sys.__registeredTypes[typeName] = true;

+    return this;

+}

+Type.prototype.registerInterface = function Type$registerInterface(typeName) {

+    /// <summary locid="M:J#Type.registerInterface" />

+    /// <param name="typeName" type="String"></param>

+    /// <returns type="Type"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "typeName", type: String}

+    ]);

+    if (e) throw e;

+    if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw Error.argument('typeName', Sys.Res.notATypeName);

+    var parsedName;

+    try {

+        parsedName = eval(typeName);

+    }

+    catch(e) {

+        throw Error.argument('typeName', Sys.Res.argumentTypeName);

+    }

+    if (parsedName !== this) throw Error.argument('typeName', Sys.Res.badTypeName);

+    if (Sys.__registeredTypes[typeName]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, typeName));

+    Sys.__upperCaseTypes[typeName.toUpperCase()] = this;

+    this.prototype.constructor = this;

+    this.__typeName = typeName;

+    this.__interface = true;

+    Sys.__registeredTypes[typeName] = true;

+    return this;

+}

+Type.prototype.resolveInheritance = function Type$resolveInheritance() {

+    /// <summary locid="M:J#Type.resolveInheritance" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+    if (this.__basePrototypePending) {

+        var baseType = this.__baseType;

+        baseType.resolveInheritance();

+        for (var memberName in baseType.prototype) {

+            var memberValue = baseType.prototype[memberName];

+            if (!this.prototype[memberName]) {

+                this.prototype[memberName] = memberValue;

+            }

+        }

+        delete this.__basePrototypePending;

+    }

+}

+Type.getRootNamespaces = function Type$getRootNamespaces() {

+    /// <summary locid="M:J#Type.getRootNamespaces" />

+    /// <returns type="Array"></returns>

+    if (arguments.length !== 0) throw Error.parameterCount();

+    return Array.clone(Sys.__rootNamespaces);

+}

+Type.isClass = function Type$isClass(type) {

+    /// <summary locid="M:J#Type.isClass" />

+    /// <param name="type" mayBeNull="true"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "type", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    if ((typeof(type) === 'undefined') || (type === null)) return false;

+    return !!type.__class;

+}

+Type.isInterface = function Type$isInterface(type) {

+    /// <summary locid="M:J#Type.isInterface" />

+    /// <param name="type" mayBeNull="true"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "type", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    if ((typeof(type) === 'undefined') || (type === null)) return false;

+    return !!type.__interface;

+}

+Type.isNamespace = function Type$isNamespace(object) {

+    /// <summary locid="M:J#Type.isNamespace" />

+    /// <param name="object" mayBeNull="true"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "object", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    if ((typeof(object) === 'undefined') || (object === null)) return false;

+    return !!object.__namespace;

+}

+Type.parse = function Type$parse(typeName, ns) {

+    /// <summary locid="M:J#Type.parse" />

+    /// <param name="typeName" type="String" mayBeNull="true"></param>

+    /// <param name="ns" optional="true" mayBeNull="true"></param>

+    /// <returns type="Type" mayBeNull="true"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "typeName", type: String, mayBeNull: true},

+        {name: "ns", mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    var fn;

+    if (ns) {

+        fn = Sys.__upperCaseTypes[ns.getName().toUpperCase() + '.' + typeName.toUpperCase()];

+        return fn || null;

+    }

+    if (!typeName) return null;

+    if (!Type.__htClasses) {

+        Type.__htClasses = {};

+    }

+    fn = Type.__htClasses[typeName];

+    if (!fn) {

+        fn = eval(typeName);

+        if (typeof(fn) !== 'function') throw Error.argument('typeName', Sys.Res.notATypeName);

+        Type.__htClasses[typeName] = fn;

+    }

+    return fn;

+}

+Type.registerNamespace = function Type$registerNamespace(namespacePath) {

+    /// <summary locid="M:J#Type.registerNamespace" />

+    /// <param name="namespacePath" type="String"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "namespacePath", type: String}

+    ]);

+    if (e) throw e;

+    Type._registerNamespace(namespacePath);

+}

+Type._registerNamespace = function Type$_registerNamespace(namespacePath) {

+    if (!Type.__fullyQualifiedIdentifierRegExp.test(namespacePath)) throw Error.argument('namespacePath', Sys.Res.invalidNameSpace);

+    var rootObject = window;

+    var namespaceParts = namespacePath.split('.');

+    for (var i = 0; i < namespaceParts.length; i++) {

+        var currentPart = namespaceParts[i];

+        var ns = rootObject[currentPart];

+        var nsType = typeof(ns);

+        if ((nsType !== "undefined") && (ns !== null)) {

+            if (nsType === "function") {

+                throw Error.invalidOperation(String.format(Sys.Res.namespaceContainsClass, namespaceParts.splice(0, i + 1).join('.')));

+            }

+            if ((typeof(ns) !== "object") || (ns instanceof Array)) {

+                throw Error.invalidOperation(String.format(Sys.Res.namespaceContainsNonObject, namespaceParts.splice(0, i + 1).join('.')));

+            }

+        }

+        if (!ns) {

+            ns = rootObject[currentPart] = {};

+        }

+        if (!ns.__namespace) {

+            if ((i === 0) && (namespacePath !== "Sys")) {

+                Sys.__rootNamespaces[Sys.__rootNamespaces.length] = ns;

+            }

+            ns.__namespace = true;

+            ns.__typeName = namespaceParts.slice(0, i + 1).join('.');

+            var parsedName;

+            try {

+                parsedName = eval(ns.__typeName);

+            }

+            catch(e) {

+                parsedName = null;

+            }

+            if (parsedName !== ns) {

+                delete rootObject[currentPart];

+                throw Error.argument('namespacePath', Sys.Res.invalidNameSpace);

+            }

+            ns.getName = function ns$getName() {return this.__typeName;}

+        }

+        rootObject = ns;

+    }

+}

+Type._checkDependency = function Type$_checkDependency(dependency, featureName) {

+    var scripts = Type._registerScript._scripts, isDependent = (scripts ? (!!scripts[dependency]) : false);

+    if ((typeof(featureName) !== 'undefined') && !isDependent) {

+        throw Error.invalidOperation(String.format(Sys.Res.requiredScriptReferenceNotIncluded, 

+        featureName, dependency));

+    }

+    return isDependent;

+}

+Type._registerScript = function Type$_registerScript(scriptName, dependencies) {

+    var scripts = Type._registerScript._scripts;

+    if (!scripts) {

+        Type._registerScript._scripts = scripts = {};

+    }

+    if (scripts[scriptName]) {

+        throw Error.invalidOperation(String.format(Sys.Res.scriptAlreadyLoaded, scriptName));

+    }

+    scripts[scriptName] = true;

+    if (dependencies) {

+        for (var i = 0, l = dependencies.length; i < l; i++) {

+            var dependency = dependencies[i];

+            if (!Type._checkDependency(dependency)) {

+                throw Error.invalidOperation(String.format(Sys.Res.scriptDependencyNotFound, scriptName, dependency));

+            }

+        }

+    }

+}

+Type._registerNamespace("Sys");

+Sys.__upperCaseTypes = {};

+Sys.__rootNamespaces = [Sys];

+Sys.__registeredTypes = {};

+Sys._isInstanceOfType = function Sys$_isInstanceOfType(type, instance) {

+    if (typeof(instance) === "undefined" || instance === null) return false;

+    if (instance instanceof type) return true;

+    var instanceType = Object.getType(instance);

+    return !!(instanceType === type) ||

+           (instanceType.inheritsFrom && instanceType.inheritsFrom(type)) ||

+           (instanceType.implementsInterface && instanceType.implementsInterface(type));

+}

+Sys._getBaseMethod = function Sys$_getBaseMethod(type, instance, name) {

+    if (!Sys._isInstanceOfType(type, instance)) throw Error.argumentType('instance', Object.getType(instance), type);

+    var baseType = type.getBaseType();

+    if (baseType) {

+        var baseMethod = baseType.prototype[name];

+        return (baseMethod instanceof Function) ? baseMethod : null;

+    }

+    return null;

+}

+Sys._isDomElement = function Sys$_isDomElement(obj) {

+    var val = false;

+    if (typeof (obj.nodeType) !== 'number') {

+        var doc = obj.ownerDocument || obj.document || obj;

+        if (doc != obj) {

+            var w = doc.defaultView || doc.parentWindow;

+            val = (w != obj);

+        }

+        else {

+            val = (typeof (doc.body) === 'undefined');

+        }

+    }

+    return !val;

+}

+ 

+Array.__typeName = 'Array';

+Array.__class = true;

+Array.add = Array.enqueue = function Array$enqueue(array, item) {

+    /// <summary locid="M:J#Array.enqueue" />

+    /// <param name="array" type="Array" elementMayBeNull="true"></param>

+    /// <param name="item" mayBeNull="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "array", type: Array, elementMayBeNull: true},

+        {name: "item", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    array[array.length] = item;

+}

+Array.addRange = function Array$addRange(array, items) {

+    /// <summary locid="M:J#Array.addRange" />

+    /// <param name="array" type="Array" elementMayBeNull="true"></param>

+    /// <param name="items" type="Array" elementMayBeNull="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "array", type: Array, elementMayBeNull: true},

+        {name: "items", type: Array, elementMayBeNull: true}

+    ]);

+    if (e) throw e;

+    array.push.apply(array, items);

+}

+Array.clear = function Array$clear(array) {

+    /// <summary locid="M:J#Array.clear" />

+    /// <param name="array" type="Array" elementMayBeNull="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "array", type: Array, elementMayBeNull: true}

+    ]);

+    if (e) throw e;

+    array.length = 0;

+}

+Array.clone = function Array$clone(array) {

+    /// <summary locid="M:J#Array.clone" />

+    /// <param name="array" type="Array" elementMayBeNull="true"></param>

+    /// <returns type="Array" elementMayBeNull="true"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "array", type: Array, elementMayBeNull: true}

+    ]);

+    if (e) throw e;

+    if (array.length === 1) {

+        return [array[0]];

+    }

+    else {

+        return Array.apply(null, array);

+    }

+}

+Array.contains = function Array$contains(array, item) {

+    /// <summary locid="M:J#Array.contains" />

+    /// <param name="array" type="Array" elementMayBeNull="true"></param>

+    /// <param name="item" mayBeNull="true"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "array", type: Array, elementMayBeNull: true},

+        {name: "item", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    return (Sys._indexOf(array, item) >= 0);

+}

+Array.dequeue = function Array$dequeue(array) {

+    /// <summary locid="M:J#Array.dequeue" />

+    /// <param name="array" type="Array" elementMayBeNull="true"></param>

+    /// <returns mayBeNull="true"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "array", type: Array, elementMayBeNull: true}

+    ]);

+    if (e) throw e;

+    return array.shift();

+}

+Array.forEach = function Array$forEach(array, method, instance) {

+    /// <summary locid="M:J#Array.forEach" />

+    /// <param name="array" type="Array" elementMayBeNull="true"></param>

+    /// <param name="method" type="Function"></param>

+    /// <param name="instance" optional="true" mayBeNull="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "array", type: Array, elementMayBeNull: true},

+        {name: "method", type: Function},

+        {name: "instance", mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    for (var i = 0, l = array.length; i < l; i++) {

+        var elt = array[i];

+        if (typeof(elt) !== 'undefined') method.call(instance, elt, i, array);

+    }

+}

+Array.indexOf = function Array$indexOf(array, item, start) {

+    /// <summary locid="M:J#Array.indexOf" />

+    /// <param name="array" type="Array" elementMayBeNull="true"></param>

+    /// <param name="item" optional="true" mayBeNull="true"></param>

+    /// <param name="start" optional="true" mayBeNull="true"></param>

+    /// <returns type="Number"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "array", type: Array, elementMayBeNull: true},

+        {name: "item", mayBeNull: true, optional: true},

+        {name: "start", mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    return Sys._indexOf(array, item, start);

+}

+Array.insert = function Array$insert(array, index, item) {

+    /// <summary locid="M:J#Array.insert" />

+    /// <param name="array" type="Array" elementMayBeNull="true"></param>

+    /// <param name="index" mayBeNull="true"></param>

+    /// <param name="item" mayBeNull="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "array", type: Array, elementMayBeNull: true},

+        {name: "index", mayBeNull: true},

+        {name: "item", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    array.splice(index, 0, item);

+}

+Array.parse = function Array$parse(value) {

+    /// <summary locid="M:J#Array.parse" />

+    /// <param name="value" type="String" mayBeNull="true"></param>

+    /// <returns type="Array" elementMayBeNull="true"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "value", type: String, mayBeNull: true}

+    ]);

+    if (e) throw e;

+    if (!value) return [];

+    var v = eval(value);

+    if (!Array.isInstanceOfType(v)) throw Error.argument('value', Sys.Res.arrayParseBadFormat);

+    return v;

+}

+Array.remove = function Array$remove(array, item) {

+    /// <summary locid="M:J#Array.remove" />

+    /// <param name="array" type="Array" elementMayBeNull="true"></param>

+    /// <param name="item" mayBeNull="true"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "array", type: Array, elementMayBeNull: true},

+        {name: "item", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    var index = Sys._indexOf(array, item);

+    if (index >= 0) {

+        array.splice(index, 1);

+    }

+    return (index >= 0);

+}

+Array.removeAt = function Array$removeAt(array, index) {

+    /// <summary locid="M:J#Array.removeAt" />

+    /// <param name="array" type="Array" elementMayBeNull="true"></param>

+    /// <param name="index" mayBeNull="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "array", type: Array, elementMayBeNull: true},

+        {name: "index", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    array.splice(index, 1);

+}

+Sys._indexOf = function Sys$_indexOf(array, item, start) {

+    if (typeof(item) === "undefined") return -1;

+    var length = array.length;

+    if (length !== 0) {

+        start = start - 0;

+        if (isNaN(start)) {

+            start = 0;

+        }

+        else {

+            if (isFinite(start)) {

+                start = start - (start % 1);

+            }

+            if (start < 0) {

+                start = Math.max(0, length + start);

+            }

+        }

+        for (var i = start; i < length; i++) {

+            if ((typeof(array[i]) !== "undefined") && (array[i] === item)) {

+                return i;

+            }

+        }

+    }

+    return -1;

+}

+Type._registerScript._scripts = {

+	"MicrosoftAjaxCore.js": true,

+	"MicrosoftAjaxGlobalization.js": true,

+	"MicrosoftAjaxSerialization.js": true,

+	"MicrosoftAjaxComponentModel.js": true,

+	"MicrosoftAjaxHistory.js": true,

+	"MicrosoftAjaxNetwork.js" : true,

+	"MicrosoftAjaxWebServices.js": true };

+ 

+Sys.IDisposable = function Sys$IDisposable() {

+    throw Error.notImplemented();

+}

+    function Sys$IDisposable$dispose() {

+        throw Error.notImplemented();

+    }

+Sys.IDisposable.prototype = {

+    dispose: Sys$IDisposable$dispose

+}

+Sys.IDisposable.registerInterface('Sys.IDisposable');

+ 

+Sys.StringBuilder = function Sys$StringBuilder(initialText) {

+    /// <summary locid="M:J#Sys.StringBuilder.#ctor" />

+    /// <param name="initialText" optional="true" mayBeNull="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "initialText", mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    this._parts = (typeof(initialText) !== 'undefined' && initialText !== null && initialText !== '') ?

+        [initialText.toString()] : [];

+    this._value = {};

+    this._len = 0;

+}

+    function Sys$StringBuilder$append(text) {

+        /// <summary locid="M:J#Sys.StringBuilder.append" />

+        /// <param name="text" mayBeNull="true"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "text", mayBeNull: true}

+        ]);

+        if (e) throw e;

+        this._parts[this._parts.length] = text;

+    }

+    function Sys$StringBuilder$appendLine(text) {

+        /// <summary locid="M:J#Sys.StringBuilder.appendLine" />

+        /// <param name="text" optional="true" mayBeNull="true"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "text", mayBeNull: true, optional: true}

+        ]);

+        if (e) throw e;

+        this._parts[this._parts.length] =

+            ((typeof(text) === 'undefined') || (text === null) || (text === '')) ?

+            '\r\n' : text + '\r\n';

+    }

+    function Sys$StringBuilder$clear() {

+        /// <summary locid="M:J#Sys.StringBuilder.clear" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        this._parts = [];

+        this._value = {};

+        this._len = 0;

+    }

+    function Sys$StringBuilder$isEmpty() {

+        /// <summary locid="M:J#Sys.StringBuilder.isEmpty" />

+        /// <returns type="Boolean"></returns>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (this._parts.length === 0) return true;

+        return this.toString() === '';

+    }

+    function Sys$StringBuilder$toString(separator) {

+        /// <summary locid="M:J#Sys.StringBuilder.toString" />

+        /// <param name="separator" type="String" optional="true" mayBeNull="true"></param>

+        /// <returns type="String"></returns>

+        var e = Function._validateParams(arguments, [

+            {name: "separator", type: String, mayBeNull: true, optional: true}

+        ]);

+        if (e) throw e;

+        separator = separator || '';

+        var parts = this._parts;

+        if (this._len !== parts.length) {

+            this._value = {};

+            this._len = parts.length;

+        }

+        var val = this._value;

+        if (typeof(val[separator]) === 'undefined') {

+            if (separator !== '') {

+                for (var i = 0; i < parts.length;) {

+                    if ((typeof(parts[i]) === 'undefined') || (parts[i] === '') || (parts[i] === null)) {

+                        parts.splice(i, 1);

+                    }

+                    else {

+                        i++;

+                    }

+                }

+            }

+            val[separator] = this._parts.join(separator);

+        }

+        return val[separator];

+    }

+Sys.StringBuilder.prototype = {

+    append: Sys$StringBuilder$append,

+    appendLine: Sys$StringBuilder$appendLine,

+    clear: Sys$StringBuilder$clear,

+    isEmpty: Sys$StringBuilder$isEmpty,

+    toString: Sys$StringBuilder$toString

+}

+Sys.StringBuilder.registerClass('Sys.StringBuilder');

+ 

+Sys.Browser = {};

+Sys.Browser.InternetExplorer = {};

+Sys.Browser.Firefox = {};

+Sys.Browser.Safari = {};

+Sys.Browser.Opera = {};

+Sys.Browser.agent = null;

+Sys.Browser.hasDebuggerStatement = false;

+Sys.Browser.name = navigator.appName;

+Sys.Browser.version = parseFloat(navigator.appVersion);

+Sys.Browser.documentMode = 0;

+if (navigator.userAgent.indexOf(' MSIE ') > -1) {

+    Sys.Browser.agent = Sys.Browser.InternetExplorer;

+    Sys.Browser.version = parseFloat(navigator.userAgent.match(/MSIE (\d+\.\d+)/)[1]);

+    if (Sys.Browser.version >= 8) {

+        if (document.documentMode >= 7) {

+            Sys.Browser.documentMode = document.documentMode;    

+        }

+    }

+    Sys.Browser.hasDebuggerStatement = true;

+}

+else if (navigator.userAgent.indexOf(' Firefox/') > -1) {

+    Sys.Browser.agent = Sys.Browser.Firefox;

+    Sys.Browser.version = parseFloat(navigator.userAgent.match(/ Firefox\/(\d+\.\d+)/)[1]);

+    Sys.Browser.name = 'Firefox';

+    Sys.Browser.hasDebuggerStatement = true;

+}

+else if (navigator.userAgent.indexOf(' AppleWebKit/') > -1) {

+    Sys.Browser.agent = Sys.Browser.Safari;

+    Sys.Browser.version = parseFloat(navigator.userAgent.match(/ AppleWebKit\/(\d+(\.\d+)?)/)[1]);

+    Sys.Browser.name = 'Safari';

+}

+else if (navigator.userAgent.indexOf('Opera/') > -1) {

+    Sys.Browser.agent = Sys.Browser.Opera;

+}

+ 

+Sys.EventArgs = function Sys$EventArgs() {

+    /// <summary locid="M:J#Sys.EventArgs.#ctor" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+}

+Sys.EventArgs.registerClass('Sys.EventArgs');

+Sys.EventArgs.Empty = new Sys.EventArgs();

+ 

+Sys.CancelEventArgs = function Sys$CancelEventArgs() {

+    /// <summary locid="M:J#Sys.CancelEventArgs.#ctor" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+    Sys.CancelEventArgs.initializeBase(this);

+    this._cancel = false;

+}

+    function Sys$CancelEventArgs$get_cancel() {

+        /// <value type="Boolean" locid="P:J#Sys.CancelEventArgs.cancel"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._cancel;

+    }

+    function Sys$CancelEventArgs$set_cancel(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: Boolean}]);

+        if (e) throw e;

+        this._cancel = value;

+    }

+Sys.CancelEventArgs.prototype = {

+    get_cancel: Sys$CancelEventArgs$get_cancel,

+    set_cancel: Sys$CancelEventArgs$set_cancel

+}

+Sys.CancelEventArgs.registerClass('Sys.CancelEventArgs', Sys.EventArgs);

+Type.registerNamespace('Sys.UI');

+ 

+Sys._Debug = function Sys$_Debug() {

+    /// <summary locid="M:J#Sys.Debug.#ctor" />

+    /// <field name="isDebug" type="Boolean" locid="F:J#Sys.Debug.isDebug"></field>

+    if (arguments.length !== 0) throw Error.parameterCount();

+}

+    function Sys$_Debug$_appendConsole(text) {

+        if ((typeof(Debug) !== 'undefined') && Debug.writeln) {

+            Debug.writeln(text);

+        }

+        if (window.console && window.console.log) {

+            window.console.log(text);

+        }

+        if (window.opera) {

+            window.opera.postError(text);

+        }

+        if (window.debugService) {

+            window.debugService.trace(text);

+        }

+    }

+    function Sys$_Debug$_appendTrace(text) {

+        var traceElement = document.getElementById('TraceConsole');

+        if (traceElement && (traceElement.tagName.toUpperCase() === 'TEXTAREA')) {

+            traceElement.value += text + '\n';

+        }

+    }

+    function Sys$_Debug$assert(condition, message, displayCaller) {

+        /// <summary locid="M:J#Sys.Debug.assert" />

+        /// <param name="condition" type="Boolean"></param>

+        /// <param name="message" type="String" optional="true" mayBeNull="true"></param>

+        /// <param name="displayCaller" type="Boolean" optional="true"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "condition", type: Boolean},

+            {name: "message", type: String, mayBeNull: true, optional: true},

+            {name: "displayCaller", type: Boolean, optional: true}

+        ]);

+        if (e) throw e;

+        if (!condition) {

+            message = (displayCaller && this.assert.caller) ?

+                String.format(Sys.Res.assertFailedCaller, message, this.assert.caller) :

+                String.format(Sys.Res.assertFailed, message);

+            if (confirm(String.format(Sys.Res.breakIntoDebugger, message))) {

+                this.fail(message);

+            }

+        }

+    }

+    function Sys$_Debug$clearTrace() {

+        /// <summary locid="M:J#Sys.Debug.clearTrace" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        var traceElement = document.getElementById('TraceConsole');

+        if (traceElement && (traceElement.tagName.toUpperCase() === 'TEXTAREA')) {

+            traceElement.value = '';

+        }

+    }

+    function Sys$_Debug$fail(message) {

+        /// <summary locid="M:J#Sys.Debug.fail" />

+        /// <param name="message" type="String" mayBeNull="true"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "message", type: String, mayBeNull: true}

+        ]);

+        if (e) throw e;

+        this._appendConsole(message);

+        if (Sys.Browser.hasDebuggerStatement) {

+            eval('debugger');

+        }

+    }

+    function Sys$_Debug$trace(text) {

+        /// <summary locid="M:J#Sys.Debug.trace" />

+        /// <param name="text"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "text"}

+        ]);

+        if (e) throw e;

+        this._appendConsole(text);

+        this._appendTrace(text);

+    }

+    function Sys$_Debug$traceDump(object, name) {

+        /// <summary locid="M:J#Sys.Debug.traceDump" />

+        /// <param name="object" mayBeNull="true"></param>

+        /// <param name="name" type="String" mayBeNull="true" optional="true"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "object", mayBeNull: true},

+            {name: "name", type: String, mayBeNull: true, optional: true}

+        ]);

+        if (e) throw e;

+        var text = this._traceDump(object, name, true);

+    }

+    function Sys$_Debug$_traceDump(object, name, recursive, indentationPadding, loopArray) {

+        name = name? name : 'traceDump';

+        indentationPadding = indentationPadding? indentationPadding : '';

+        if (object === null) {

+            this.trace(indentationPadding + name + ': null');

+            return;

+        }

+        switch(typeof(object)) {

+            case 'undefined':

+                this.trace(indentationPadding + name + ': Undefined');

+                break;

+            case 'number': case 'string': case 'boolean':

+                this.trace(indentationPadding + name + ': ' + object);

+                break;

+            default:

+                if (Date.isInstanceOfType(object) || RegExp.isInstanceOfType(object)) {

+                    this.trace(indentationPadding + name + ': ' + object.toString());

+                    break;

+                }

+                if (!loopArray) {

+                    loopArray = [];

+                }

+                else if (Array.contains(loopArray, object)) {

+                    this.trace(indentationPadding + name + ': ...');

+                    return;

+                }

+                Array.add(loopArray, object);

+                if ((object == window) || (object === document) ||

+                    (window.HTMLElement && (object instanceof HTMLElement)) ||

+                    (typeof(object.nodeName) === 'string')) {

+                    var tag = object.tagName? object.tagName : 'DomElement';

+                    if (object.id) {

+                        tag += ' - ' + object.id;

+                    }

+                    this.trace(indentationPadding + name + ' {' +  tag + '}');

+                }

+                else {

+                    var typeName = Object.getTypeName(object);

+                    this.trace(indentationPadding + name + (typeof(typeName) === 'string' ? ' {' + typeName + '}' : ''));

+                    if ((indentationPadding === '') || recursive) {

+                        indentationPadding += "    ";

+                        var i, length, properties, p, v;

+                        if (Array.isInstanceOfType(object)) {

+                            length = object.length;

+                            for (i = 0; i < length; i++) {

+                                this._traceDump(object[i], '[' + i + ']', recursive, indentationPadding, loopArray);

+                            }

+                        }

+                        else {

+                            for (p in object) {

+                                v = object[p];

+                                if (!Function.isInstanceOfType(v)) {

+                                    this._traceDump(v, p, recursive, indentationPadding, loopArray);

+                                }

+                            }

+                        }

+                    }

+                }

+                Array.remove(loopArray, object);

+        }

+    }

+Sys._Debug.prototype = {

+    _appendConsole: Sys$_Debug$_appendConsole,

+    _appendTrace: Sys$_Debug$_appendTrace,

+    assert: Sys$_Debug$assert,

+    clearTrace: Sys$_Debug$clearTrace,

+    fail: Sys$_Debug$fail,

+    trace: Sys$_Debug$trace,

+    traceDump: Sys$_Debug$traceDump,

+    _traceDump: Sys$_Debug$_traceDump

+}

+Sys._Debug.registerClass('Sys._Debug');

+Sys.Debug = new Sys._Debug();

+    Sys.Debug.isDebug = true;

+ 

+function Sys$Enum$parse(value, ignoreCase) {

+    /// <summary locid="M:J#Sys.Enum.parse" />

+    /// <param name="value" type="String"></param>

+    /// <param name="ignoreCase" type="Boolean" optional="true"></param>

+    /// <returns></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "value", type: String},

+        {name: "ignoreCase", type: Boolean, optional: true}

+    ]);

+    if (e) throw e;

+    var values, parsed, val;

+    if (ignoreCase) {

+        values = this.__lowerCaseValues;

+        if (!values) {

+            this.__lowerCaseValues = values = {};

+            var prototype = this.prototype;

+            for (var name in prototype) {

+                values[name.toLowerCase()] = prototype[name];

+            }

+        }

+    }

+    else {

+        values = this.prototype;

+    }

+    if (!this.__flags) {

+        val = (ignoreCase ? value.toLowerCase() : value);

+        parsed = values[val.trim()];

+        if (typeof(parsed) !== 'number') throw Error.argument('value', String.format(Sys.Res.enumInvalidValue, value, this.__typeName));

+        return parsed;

+    }

+    else {

+        var parts = (ignoreCase ? value.toLowerCase() : value).split(',');

+        var v = 0;

+        for (var i = parts.length - 1; i >= 0; i--) {

+            var part = parts[i].trim();

+            parsed = values[part];

+            if (typeof(parsed) !== 'number') throw Error.argument('value', String.format(Sys.Res.enumInvalidValue, value.split(',')[i].trim(), this.__typeName));

+            v |= parsed;

+        }

+        return v;

+    }

+}

+function Sys$Enum$toString(value) {

+    /// <summary locid="M:J#Sys.Enum.toString" />

+    /// <param name="value" optional="true" mayBeNull="true"></param>

+    /// <returns type="String"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "value", mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    if ((typeof(value) === 'undefined') || (value === null)) return this.__string;

+    if ((typeof(value) != 'number') || ((value % 1) !== 0)) throw Error.argumentType('value', Object.getType(value), this);

+    var values = this.prototype;

+    var i;

+    if (!this.__flags || (value === 0)) {

+        for (i in values) {

+            if (values[i] === value) {

+                return i;

+            }

+        }

+    }

+    else {

+        var sorted = this.__sortedValues;

+        if (!sorted) {

+            sorted = [];

+            for (i in values) {

+                sorted[sorted.length] = {key: i, value: values[i]};

+            }

+            sorted.sort(function(a, b) {

+                return a.value - b.value;

+            });

+            this.__sortedValues = sorted;

+        }

+        var parts = [];

+        var v = value;

+        for (i = sorted.length - 1; i >= 0; i--) {

+            var kvp = sorted[i];

+            var vali = kvp.value;

+            if (vali === 0) continue;

+            if ((vali & value) === vali) {

+                parts[parts.length] = kvp.key;

+                v -= vali;

+                if (v === 0) break;

+            }

+        }

+        if (parts.length && v === 0) return parts.reverse().join(', ');

+    }

+    throw Error.argumentOutOfRange('value', value, String.format(Sys.Res.enumInvalidValue, value, this.__typeName));

+}

+Type.prototype.registerEnum = function Type$registerEnum(name, flags) {

+    /// <summary locid="M:J#Sys.UI.LineType.#ctor" />

+    /// <param name="name" type="String"></param>

+    /// <param name="flags" type="Boolean" optional="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "name", type: String},

+        {name: "flags", type: Boolean, optional: true}

+    ]);

+    if (e) throw e;

+    if (!Type.__fullyQualifiedIdentifierRegExp.test(name)) throw Error.argument('name', Sys.Res.notATypeName);

+    var parsedName;

+    try {

+        parsedName = eval(name);

+    }

+    catch(e) {

+        throw Error.argument('name', Sys.Res.argumentTypeName);

+    }

+    if (parsedName !== this) throw Error.argument('name', Sys.Res.badTypeName);

+    if (Sys.__registeredTypes[name]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, name));

+    for (var j in this.prototype) {

+        var val = this.prototype[j];

+        if (!Type.__identifierRegExp.test(j)) throw Error.invalidOperation(String.format(Sys.Res.enumInvalidValueName, j));

+        if (typeof(val) !== 'number' || (val % 1) !== 0) throw Error.invalidOperation(Sys.Res.enumValueNotInteger);

+        if (typeof(this[j]) !== 'undefined') throw Error.invalidOperation(String.format(Sys.Res.enumReservedName, j));

+    }

+    Sys.__upperCaseTypes[name.toUpperCase()] = this;

+    for (var i in this.prototype) {

+        this[i] = this.prototype[i];

+    }

+    this.__typeName = name;

+    this.parse = Sys$Enum$parse;

+    this.__string = this.toString();

+    this.toString = Sys$Enum$toString;

+    this.__flags = flags;

+    this.__enum = true;

+    Sys.__registeredTypes[name] = true;

+}

+Type.isEnum = function Type$isEnum(type) {

+    /// <summary locid="M:J#Type.isEnum" />

+    /// <param name="type" mayBeNull="true"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "type", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    if ((typeof(type) === 'undefined') || (type === null)) return false;

+    return !!type.__enum;

+}

+Type.isFlags = function Type$isFlags(type) {

+    /// <summary locid="M:J#Type.isFlags" />

+    /// <param name="type" mayBeNull="true"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "type", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    if ((typeof(type) === 'undefined') || (type === null)) return false;

+    return !!type.__flags;

+}

+Sys.CollectionChange = function Sys$CollectionChange(action, newItems, newStartingIndex, oldItems, oldStartingIndex) {

+    /// <summary locid="M:J#Sys.CollectionChange.#ctor" />

+    /// <param name="action" type="Sys.NotifyCollectionChangedAction"></param>

+    /// <param name="newItems" optional="true" mayBeNull="true"></param>

+    /// <param name="newStartingIndex" type="Number" integer="true" optional="true" mayBeNull="true"></param>

+    /// <param name="oldItems" optional="true" mayBeNull="true"></param>

+    /// <param name="oldStartingIndex" type="Number" integer="true" optional="true" mayBeNull="true"></param>

+    /// <field name="action" type="Sys.NotifyCollectionChangedAction" locid="F:J#Sys.CollectionChange.action"></field>

+    /// <field name="newItems" type="Array" mayBeNull="true" elementMayBeNull="true" locid="F:J#Sys.CollectionChange.newItems"></field>

+    /// <field name="newStartingIndex" type="Number" integer="true" locid="F:J#Sys.CollectionChange.newStartingIndex"></field>

+    /// <field name="oldItems" type="Array" mayBeNull="true" elementMayBeNull="true" locid="F:J#Sys.CollectionChange.oldItems"></field>

+    /// <field name="oldStartingIndex" type="Number" integer="true" locid="F:J#Sys.CollectionChange.oldStartingIndex"></field>

+    var e = Function._validateParams(arguments, [

+        {name: "action", type: Sys.NotifyCollectionChangedAction},

+        {name: "newItems", mayBeNull: true, optional: true},

+        {name: "newStartingIndex", type: Number, mayBeNull: true, integer: true, optional: true},

+        {name: "oldItems", mayBeNull: true, optional: true},

+        {name: "oldStartingIndex", type: Number, mayBeNull: true, integer: true, optional: true}

+    ]);

+    if (e) throw e;

+    this.action = action;

+    if (newItems) {

+        if (!(newItems instanceof Array)) {

+            newItems = [newItems];

+        }

+    }

+    this.newItems = newItems || null;

+    if (typeof newStartingIndex !== "number") {

+        newStartingIndex = -1;

+    }

+    this.newStartingIndex = newStartingIndex;

+    if (oldItems) {

+        if (!(oldItems instanceof Array)) {

+            oldItems = [oldItems];

+        }

+    }

+    this.oldItems = oldItems || null;

+    if (typeof oldStartingIndex !== "number") {

+        oldStartingIndex = -1;

+    }

+    this.oldStartingIndex = oldStartingIndex;

+}

+Sys.CollectionChange.registerClass("Sys.CollectionChange");

+Sys.NotifyCollectionChangedAction = function Sys$NotifyCollectionChangedAction() {

+    /// <summary locid="M:J#Sys.NotifyCollectionChangedAction.#ctor" />

+    /// <field name="add" type="Number" integer="true" static="true" locid="F:J#Sys.NotifyCollectionChangedAction.add"></field>

+    /// <field name="remove" type="Number" integer="true" static="true" locid="F:J#Sys.NotifyCollectionChangedAction.remove"></field>

+    /// <field name="reset" type="Number" integer="true" static="true" locid="F:J#Sys.NotifyCollectionChangedAction.reset"></field>

+    if (arguments.length !== 0) throw Error.parameterCount();

+    throw Error.notImplemented();

+}

+Sys.NotifyCollectionChangedAction.prototype = {

+    add: 0,

+    remove: 1,

+    reset: 2

+}

+Sys.NotifyCollectionChangedAction.registerEnum('Sys.NotifyCollectionChangedAction');

+Sys.NotifyCollectionChangedEventArgs = function Sys$NotifyCollectionChangedEventArgs(changes) {

+    /// <summary locid="M:J#Sys.NotifyCollectionChangedEventArgs.#ctor" />

+    /// <param name="changes" type="Array" elementType="Sys.CollectionChange"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "changes", type: Array, elementType: Sys.CollectionChange}

+    ]);

+    if (e) throw e;

+    this._changes = changes;

+    Sys.NotifyCollectionChangedEventArgs.initializeBase(this);

+}

+    function Sys$NotifyCollectionChangedEventArgs$get_changes() {

+        /// <value type="Array" elementType="Sys.CollectionChange" locid="P:J#Sys.NotifyCollectionChangedEventArgs.changes"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._changes || [];

+    }

+Sys.NotifyCollectionChangedEventArgs.prototype = {

+    get_changes: Sys$NotifyCollectionChangedEventArgs$get_changes

+}

+Sys.NotifyCollectionChangedEventArgs.registerClass("Sys.NotifyCollectionChangedEventArgs", Sys.EventArgs);

+Sys.Observer = function Sys$Observer() {

+    throw Error.invalidOperation();

+}

+Sys.Observer.registerClass("Sys.Observer");

+Sys.Observer.makeObservable = function Sys$Observer$makeObservable(target) {

+    /// <summary locid="M:J#Sys.Observer.makeObservable" />

+    /// <param name="target" mayBeNull="false"></param>

+    /// <returns></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "target"}

+    ]);

+    if (e) throw e;

+    var isArray = target instanceof Array,

+        o = Sys.Observer;

+    Sys.Observer._ensureObservable(target);

+    if (target.setValue === o._observeMethods.setValue) return target;

+    o._addMethods(target, o._observeMethods);

+    if (isArray) {

+        o._addMethods(target, o._arrayMethods);

+    }

+    return target;

+}

+Sys.Observer._ensureObservable = function Sys$Observer$_ensureObservable(target) {

+    var type = typeof target;

+    if ((type === "string") || (type === "number") || (type === "boolean") || (type === "date")) {

+        throw Error.invalidOperation(String.format(Sys.Res.notObservable, type));

+    }

+}

+Sys.Observer._addMethods = function Sys$Observer$_addMethods(target, methods) {

+    for (var m in methods) {

+        if (target[m] && (target[m] !== methods[m])) {

+            throw Error.invalidOperation(String.format(Sys.Res.observableConflict, m));

+        }

+        target[m] = methods[m];

+    }

+}

+Sys.Observer._addEventHandler = function Sys$Observer$_addEventHandler(target, eventName, handler) {

+    Sys.Observer._getContext(target, true).events._addHandler(eventName, handler);

+}

+Sys.Observer.addEventHandler = function Sys$Observer$addEventHandler(target, eventName, handler) {

+    /// <summary locid="M:J#Sys.Observer.addEventHandler" />

+    /// <param name="target"></param>

+    /// <param name="eventName" type="String"></param>

+    /// <param name="handler" type="Function"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target"},

+        {name: "eventName", type: String},

+        {name: "handler", type: Function}

+    ]);

+    if (e) throw e;

+    Sys.Observer._ensureObservable(target);

+    Sys.Observer._addEventHandler(target, eventName, handler);

+}

+Sys.Observer._removeEventHandler = function Sys$Observer$_removeEventHandler(target, eventName, handler) {

+    Sys.Observer._getContext(target, true).events._removeHandler(eventName, handler);

+}

+Sys.Observer.removeEventHandler = function Sys$Observer$removeEventHandler(target, eventName, handler) {

+    /// <summary locid="M:J#Sys.Observer.removeEventHandler" />

+    /// <param name="target"></param>

+    /// <param name="eventName" type="String"></param>

+    /// <param name="handler" type="Function"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target"},

+        {name: "eventName", type: String},

+        {name: "handler", type: Function}

+    ]);

+    if (e) throw e;

+    Sys.Observer._ensureObservable(target);

+    Sys.Observer._removeEventHandler(target, eventName, handler);

+}

+Sys.Observer.raiseEvent = function Sys$Observer$raiseEvent(target, eventName, eventArgs) {

+    /// <summary locid="M:J#Sys.Observer.raiseEvent" />

+    /// <param name="target"></param>

+    /// <param name="eventName" type="String"></param>

+    /// <param name="eventArgs" type="Sys.EventArgs"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target"},

+        {name: "eventName", type: String},

+        {name: "eventArgs", type: Sys.EventArgs}

+    ]);

+    if (e) throw e;

+    Sys.Observer._ensureObservable(target);

+    var ctx = Sys.Observer._getContext(target);

+    if (!ctx) return;

+    var handler = ctx.events.getHandler(eventName);

+    if (handler) {

+        handler(target, eventArgs);

+    }

+}

+Sys.Observer.addPropertyChanged = function Sys$Observer$addPropertyChanged(target, handler) {

+    /// <summary locid="M:J#Sys.Observer.addPropertyChanged" />

+    /// <param name="target" mayBeNull="false"></param>

+    /// <param name="handler" type="Function"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target"},

+        {name: "handler", type: Function}

+    ]);

+    if (e) throw e;

+    Sys.Observer._ensureObservable(target);

+    Sys.Observer._addEventHandler(target, "propertyChanged", handler);

+}

+Sys.Observer.removePropertyChanged = function Sys$Observer$removePropertyChanged(target, handler) {

+    /// <summary locid="M:J#Sys.Observer.removePropertyChanged" />

+    /// <param name="target" mayBeNull="false"></param>

+    /// <param name="handler" type="Function"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target"},

+        {name: "handler", type: Function}

+    ]);

+    if (e) throw e;

+    Sys.Observer._ensureObservable(target);

+    Sys.Observer._removeEventHandler(target, "propertyChanged", handler);

+}

+Sys.Observer.beginUpdate = function Sys$Observer$beginUpdate(target) {

+    /// <summary locid="M:J#Sys.Observer.beginUpdate" />

+    /// <param name="target" mayBeNull="false"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target"}

+    ]);

+    if (e) throw e;

+    Sys.Observer._ensureObservable(target);

+    Sys.Observer._getContext(target, true).updating = true;

+}

+Sys.Observer.endUpdate = function Sys$Observer$endUpdate(target) {

+    /// <summary locid="M:J#Sys.Observer.endUpdate" />

+    /// <param name="target" mayBeNull="false"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target"}

+    ]);

+    if (e) throw e;

+    Sys.Observer._ensureObservable(target);

+    var ctx = Sys.Observer._getContext(target);

+    if (!ctx || !ctx.updating) return;

+    ctx.updating = false;

+    var dirty = ctx.dirty;

+    ctx.dirty = false;

+    if (dirty) {

+        if (target instanceof Array) {

+            var changes = ctx.changes;

+            ctx.changes = null;

+            Sys.Observer.raiseCollectionChanged(target, changes);

+        }

+        Sys.Observer.raisePropertyChanged(target, "");

+    }

+}

+Sys.Observer.isUpdating = function Sys$Observer$isUpdating(target) {

+    /// <summary locid="M:J#Sys.Observer.isUpdating" />

+    /// <param name="target" mayBeNull="false"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "target"}

+    ]);

+    if (e) throw e;

+    Sys.Observer._ensureObservable(target);

+    var ctx = Sys.Observer._getContext(target);

+    return ctx ? ctx.updating : false;

+}

+Sys.Observer._setValue = function Sys$Observer$_setValue(target, propertyName, value) {

+    var getter, setter, mainTarget = target, path = propertyName.split('.');

+    for (var i = 0, l = (path.length - 1); i < l ; i++) {

+        var name = path[i];

+        getter = target["get_" + name]; 

+        if (typeof (getter) === "function") {

+            target = getter.call(target);

+        }

+        else {

+            target = target[name];

+        }

+        var type = typeof (target);

+        if ((target === null) || (type === "undefined")) {

+            throw Error.invalidOperation(String.format(Sys.Res.nullReferenceInPath, propertyName));

+        }

+    }    

+    var currentValue, lastPath = path[l];

+    getter = target["get_" + lastPath];

+    setter = target["set_" + lastPath];

+    if (typeof(getter) === 'function') {

+        currentValue = getter.call(target);

+    }

+    else {

+        currentValue = target[lastPath];

+    }

+    if (typeof(setter) === 'function') {

+        setter.call(target, value);

+    }

+    else {

+        target[lastPath] = value;

+    }

+    if (currentValue !== value) {

+        var ctx = Sys.Observer._getContext(mainTarget);

+        if (ctx && ctx.updating) {

+            ctx.dirty = true;

+            return;

+        };

+        Sys.Observer.raisePropertyChanged(mainTarget, path[0]);

+    }

+}

+Sys.Observer.setValue = function Sys$Observer$setValue(target, propertyName, value) {

+    /// <summary locid="M:J#Sys.Observer.setValue" />

+    /// <param name="target" mayBeNull="false"></param>

+    /// <param name="propertyName" type="String"></param>

+    /// <param name="value" mayBeNull="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target"},

+        {name: "propertyName", type: String},

+        {name: "value", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    Sys.Observer._ensureObservable(target);

+    Sys.Observer._setValue(target, propertyName, value);

+}

+Sys.Observer.raisePropertyChanged = function Sys$Observer$raisePropertyChanged(target, propertyName) {

+    /// <summary locid="M:J#Sys.Observer.raisePropertyChanged" />

+    /// <param name="target" mayBeNull="false"></param>

+    /// <param name="propertyName" type="String"></param>

+    Sys.Observer.raiseEvent(target, "propertyChanged", new Sys.PropertyChangedEventArgs(propertyName));

+}

+Sys.Observer.addCollectionChanged = function Sys$Observer$addCollectionChanged(target, handler) {

+    /// <summary locid="M:J#Sys.Observer.addCollectionChanged" />

+    /// <param name="target" type="Array" elementMayBeNull="true"></param>

+    /// <param name="handler" type="Function"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target", type: Array, elementMayBeNull: true},

+        {name: "handler", type: Function}

+    ]);

+    if (e) throw e;

+    Sys.Observer._addEventHandler(target, "collectionChanged", handler);

+}

+Sys.Observer.removeCollectionChanged = function Sys$Observer$removeCollectionChanged(target, handler) {

+    /// <summary locid="M:J#Sys.Observer.removeCollectionChanged" />

+    /// <param name="target" type="Array" elementMayBeNull="true"></param>

+    /// <param name="handler" type="Function"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target", type: Array, elementMayBeNull: true},

+        {name: "handler", type: Function}

+    ]);

+    if (e) throw e;

+    Sys.Observer._removeEventHandler(target, "collectionChanged", handler);

+}

+Sys.Observer._collectionChange = function Sys$Observer$_collectionChange(target, change) {

+    var ctx = Sys.Observer._getContext(target);

+    if (ctx && ctx.updating) {

+        ctx.dirty = true;

+        var changes = ctx.changes;

+        if (!changes) {

+            ctx.changes = changes = [change];

+        }

+        else {

+            changes.push(change);

+        }

+    }

+    else {

+        Sys.Observer.raiseCollectionChanged(target, [change]);

+        Sys.Observer.raisePropertyChanged(target, 'length');

+    }

+}

+Sys.Observer.add = function Sys$Observer$add(target, item) {

+    /// <summary locid="M:J#Sys.Observer.add" />

+    /// <param name="target" type="Array" elementMayBeNull="true"></param>

+    /// <param name="item" mayBeNull="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target", type: Array, elementMayBeNull: true},

+        {name: "item", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    var change = new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add, [item], target.length);

+    Array.add(target, item);

+    Sys.Observer._collectionChange(target, change);

+}

+Sys.Observer.addRange = function Sys$Observer$addRange(target, items) {

+    /// <summary locid="M:J#Sys.Observer.addRange" />

+    /// <param name="target" type="Array" elementMayBeNull="true"></param>

+    /// <param name="items" type="Array" elementMayBeNull="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target", type: Array, elementMayBeNull: true},

+        {name: "items", type: Array, elementMayBeNull: true}

+    ]);

+    if (e) throw e;

+    var change = new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add, items, target.length);

+    Array.addRange(target, items);

+    Sys.Observer._collectionChange(target, change);

+}

+Sys.Observer.clear = function Sys$Observer$clear(target) {

+    /// <summary locid="M:J#Sys.Observer.clear" />

+    /// <param name="target" type="Array" elementMayBeNull="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target", type: Array, elementMayBeNull: true}

+    ]);

+    if (e) throw e;

+    var oldItems = Array.clone(target);

+    Array.clear(target);

+    Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.reset, null, -1, oldItems, 0));

+}

+Sys.Observer.insert = function Sys$Observer$insert(target, index, item) {

+    /// <summary locid="M:J#Sys.Observer.insert" />

+    /// <param name="target" type="Array" elementMayBeNull="true"></param>

+    /// <param name="index" type="Number" integer="true"></param>

+    /// <param name="item" mayBeNull="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target", type: Array, elementMayBeNull: true},

+        {name: "index", type: Number, integer: true},

+        {name: "item", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    Array.insert(target, index, item);

+    Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add, [item], index));

+}

+Sys.Observer.remove = function Sys$Observer$remove(target, item) {

+    /// <summary locid="M:J#Sys.Observer.remove" />

+    /// <param name="target" type="Array" elementMayBeNull="true"></param>

+    /// <param name="item" mayBeNull="true"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "target", type: Array, elementMayBeNull: true},

+        {name: "item", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    var index = Array.indexOf(target, item);

+    if (index !== -1) {

+        Array.remove(target, item);

+        Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove, null, -1, [item], index));

+        return true;

+    }

+    return false;

+}

+Sys.Observer.removeAt = function Sys$Observer$removeAt(target, index) {

+    /// <summary locid="M:J#Sys.Observer.removeAt" />

+    /// <param name="target" type="Array" elementMayBeNull="true"></param>

+    /// <param name="index" type="Number" integer="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target", type: Array, elementMayBeNull: true},

+        {name: "index", type: Number, integer: true}

+    ]);

+    if (e) throw e;

+    if ((index > -1) && (index < target.length)) {

+        var item = target[index];

+        Array.removeAt(target, index);

+        Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove, null, -1, [item], index));

+    }

+}

+Sys.Observer.raiseCollectionChanged = function Sys$Observer$raiseCollectionChanged(target, changes) {

+    /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+    /// <param name="target"></param>

+    /// <param name="changes" type="Array" elementType="Sys.CollectionChange"></param>

+    Sys.Observer.raiseEvent(target, "collectionChanged", new Sys.NotifyCollectionChangedEventArgs(changes));

+}

+Sys.Observer._observeMethods = {

+    add_propertyChanged: function(handler) {

+        Sys.Observer._addEventHandler(this, "propertyChanged", handler);

+    },

+    remove_propertyChanged: function(handler) {

+        Sys.Observer._removeEventHandler(this, "propertyChanged", handler);

+    },

+    addEventHandler: function(eventName, handler) {

+        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+        /// <param name="eventName" type="String"></param>

+        /// <param name="handler" type="Function"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "eventName", type: String},

+            {name: "handler", type: Function}

+        ]);

+        if (e) throw e;

+        Sys.Observer._addEventHandler(this, eventName, handler);

+    },

+    removeEventHandler: function(eventName, handler) {

+        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+        /// <param name="eventName" type="String"></param>

+        /// <param name="handler" type="Function"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "eventName", type: String},

+            {name: "handler", type: Function}

+        ]);

+        if (e) throw e;

+        Sys.Observer._removeEventHandler(this, eventName, handler);

+    },

+    get_isUpdating: function() {

+        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+        /// <returns type="Boolean"></returns>

+        return Sys.Observer.isUpdating(this);

+    },

+    beginUpdate: function() {

+        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+        Sys.Observer.beginUpdate(this);

+    },

+    endUpdate: function() {

+        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+        Sys.Observer.endUpdate(this);

+    },

+    setValue: function(name, value) {

+        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+        /// <param name="name" type="String"></param>

+        /// <param name="value" mayBeNull="true"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "name", type: String},

+            {name: "value", mayBeNull: true}

+        ]);

+        if (e) throw e;

+        Sys.Observer._setValue(this, name, value);

+    },

+    raiseEvent: function(eventName, eventArgs) {

+        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+        /// <param name="eventName" type="String"></param>

+        /// <param name="eventArgs" type="Sys.EventArgs"></param>

+        Sys.Observer.raiseEvent(this, eventName, eventArgs);

+    },

+    raisePropertyChanged: function(name) {

+        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+        /// <param name="name" type="String"></param>

+        Sys.Observer.raiseEvent(this, "propertyChanged", new Sys.PropertyChangedEventArgs(name));

+    }

+}

+Sys.Observer._arrayMethods = {

+    add_collectionChanged: function(handler) {

+        Sys.Observer._addEventHandler(this, "collectionChanged", handler);

+    },

+    remove_collectionChanged: function(handler) {

+        Sys.Observer._removeEventHandler(this, "collectionChanged", handler);

+    },

+    add: function(item) {

+        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+        /// <param name="item" mayBeNull="true"></param>

+        Sys.Observer.add(this, item);

+    },

+    addRange: function(items) {

+        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+        /// <param name="items" type="Array" elementMayBeNull="true"></param>

+        Sys.Observer.addRange(this, items);

+    },

+    clear: function() {

+        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+        Sys.Observer.clear(this);

+    },

+    insert: function(index, item) { 

+        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+        /// <param name="index" type="Number" integer="true"></param>

+        /// <param name="item" mayBeNull="true"></param>

+        Sys.Observer.insert(this, index, item);

+    },

+    remove: function(item) {

+        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+        /// <param name="item" mayBeNull="true"></param>

+        /// <returns type="Boolean"></returns>

+        return Sys.Observer.remove(this, item);

+    },

+    removeAt: function(index) {

+        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+        /// <param name="index" type="Number" integer="true"></param>

+        Sys.Observer.removeAt(this, index);

+    },

+    raiseCollectionChanged: function(changes) {

+        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />

+        /// <param name="changes" type="Array" elementType="Sys.CollectionChange"></param>

+        Sys.Observer.raiseEvent(this, "collectionChanged", new Sys.NotifyCollectionChangedEventArgs(changes));

+    }

+}

+Sys.Observer._getContext = function Sys$Observer$_getContext(obj, create) {

+    var ctx = obj._observerContext;

+    if (ctx) return ctx();

+    if (create) {

+        return (obj._observerContext = Sys.Observer._createContext())();

+    }

+    return null;

+}

+Sys.Observer._createContext = function Sys$Observer$_createContext() {

+    var ctx = {

+        events: new Sys.EventHandlerList()

+    };

+    return function() {

+        return ctx;

+    }

+}

+Date._appendPreOrPostMatch = function Date$_appendPreOrPostMatch(preMatch, strBuilder) {

+    var quoteCount = 0;

+    var escaped = false;

+    for (var i = 0, il = preMatch.length; i < il; i++) {

+        var c = preMatch.charAt(i);

+        switch (c) {

+        case '\'':

+            if (escaped) strBuilder.append("'");

+            else quoteCount++;

+            escaped = false;

+            break;

+        case '\\':

+            if (escaped) strBuilder.append("\\");

+            escaped = !escaped;

+            break;

+        default:

+            strBuilder.append(c);

+            escaped = false;

+            break;

+        }

+    }

+    return quoteCount;

+}

+Date._expandFormat = function Date$_expandFormat(dtf, format) {

+    if (!format) {

+        format = "F";

+    }

+    var len = format.length;

+    if (len === 1) {

+        switch (format) {

+        case "d":

+            return dtf.ShortDatePattern;

+        case "D":

+            return dtf.LongDatePattern;

+        case "t":

+            return dtf.ShortTimePattern;

+        case "T":

+            return dtf.LongTimePattern;

+        case "f":

+            return dtf.LongDatePattern + " " + dtf.ShortTimePattern;

+        case "F":

+            return dtf.FullDateTimePattern;

+        case "M": case "m":

+            return dtf.MonthDayPattern;

+        case "s":

+            return dtf.SortableDateTimePattern;

+        case "Y": case "y":

+            return dtf.YearMonthPattern;

+        default:

+            throw Error.format(Sys.Res.formatInvalidString);

+        }

+    }

+    else if ((len === 2) && (format.charAt(0) === "%")) {

+        format = format.charAt(1);

+    }

+    return format;

+}

+Date._expandYear = function Date$_expandYear(dtf, year) {

+    var now = new Date(),

+        era = Date._getEra(now);

+    if (year < 100) {

+        var curr = Date._getEraYear(now, dtf, era);

+        year += curr - (curr % 100);

+        if (year > dtf.Calendar.TwoDigitYearMax) {

+            year -= 100;

+        }

+    }

+    return year;

+}

+Date._getEra = function Date$_getEra(date, eras) {

+    if (!eras) return 0;

+    var start, ticks = date.getTime();

+    for (var i = 0, l = eras.length; i < l; i += 4) {

+        start = eras[i+2];

+        if ((start === null) || (ticks >= start)) {

+            return i;

+        }

+    }

+    return 0;

+}

+Date._getEraYear = function Date$_getEraYear(date, dtf, era, sortable) {

+    var year = date.getFullYear();

+    if (!sortable && dtf.eras) {

+        year -= dtf.eras[era + 3];

+    }    

+    return year;

+}

+Date._getParseRegExp = function Date$_getParseRegExp(dtf, format) {

+    if (!dtf._parseRegExp) {

+        dtf._parseRegExp = {};

+    }

+    else if (dtf._parseRegExp[format]) {

+        return dtf._parseRegExp[format];

+    }

+    var expFormat = Date._expandFormat(dtf, format);

+    expFormat = expFormat.replace(/([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g, "\\\\$1");

+    var regexp = new Sys.StringBuilder("^");

+    var groups = [];

+    var index = 0;

+    var quoteCount = 0;

+    var tokenRegExp = Date._getTokenRegExp();

+    var match;

+    while ((match = tokenRegExp.exec(expFormat)) !== null) {

+        var preMatch = expFormat.slice(index, match.index);

+        index = tokenRegExp.lastIndex;

+        quoteCount += Date._appendPreOrPostMatch(preMatch, regexp);

+        if ((quoteCount%2) === 1) {

+            regexp.append(match[0]);

+            continue;

+        }

+        switch (match[0]) {

+            case 'dddd': case 'ddd':

+            case 'MMMM': case 'MMM':

+            case 'gg': case 'g':

+                regexp.append("(\\D+)");

+                break;

+            case 'tt': case 't':

+                regexp.append("(\\D*)");

+                break;

+            case 'yyyy':

+                regexp.append("(\\d{4})");

+                break;

+            case 'fff':

+                regexp.append("(\\d{3})");

+                break;

+            case 'ff':

+                regexp.append("(\\d{2})");

+                break;

+            case 'f':

+                regexp.append("(\\d)");

+                break;

+            case 'dd': case 'd':

+            case 'MM': case 'M':

+            case 'yy': case 'y':

+            case 'HH': case 'H':

+            case 'hh': case 'h':

+            case 'mm': case 'm':

+            case 'ss': case 's':

+                regexp.append("(\\d\\d?)");

+                break;

+            case 'zzz':

+                regexp.append("([+-]?\\d\\d?:\\d{2})");

+                break;

+            case 'zz': case 'z':

+                regexp.append("([+-]?\\d\\d?)");

+                break;

+            case '/':

+                regexp.append("(\\" + dtf.DateSeparator + ")");

+                break;

+            default:

+                Sys.Debug.fail("Invalid date format pattern");

+        }

+        Array.add(groups, match[0]);

+    }

+    Date._appendPreOrPostMatch(expFormat.slice(index), regexp);

+    regexp.append("$");

+    var regexpStr = regexp.toString().replace(/\s+/g, "\\s+");

+    var parseRegExp = {'regExp': regexpStr, 'groups': groups};

+    dtf._parseRegExp[format] = parseRegExp;

+    return parseRegExp;

+}

+Date._getTokenRegExp = function Date$_getTokenRegExp() {

+    return /\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g;

+}

+Date.parseLocale = function Date$parseLocale(value, formats) {

+    /// <summary locid="M:J#Date.parseLocale" />

+    /// <param name="value" type="String"></param>

+    /// <param name="formats" parameterArray="true" optional="true" mayBeNull="true"></param>

+    /// <returns type="Date"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "value", type: String},

+        {name: "formats", mayBeNull: true, optional: true, parameterArray: true}

+    ]);

+    if (e) throw e;

+    return Date._parse(value, Sys.CultureInfo.CurrentCulture, arguments);

+}

+Date.parseInvariant = function Date$parseInvariant(value, formats) {

+    /// <summary locid="M:J#Date.parseInvariant" />

+    /// <param name="value" type="String"></param>

+    /// <param name="formats" parameterArray="true" optional="true" mayBeNull="true"></param>

+    /// <returns type="Date"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "value", type: String},

+        {name: "formats", mayBeNull: true, optional: true, parameterArray: true}

+    ]);

+    if (e) throw e;

+    return Date._parse(value, Sys.CultureInfo.InvariantCulture, arguments);

+}

+Date._parse = function Date$_parse(value, cultureInfo, args) {

+    var i, l, date, format, formats, custom = false;

+    for (i = 1, l = args.length; i < l; i++) {

+        format = args[i];

+        if (format) {

+            custom = true;

+            date = Date._parseExact(value, format, cultureInfo);

+            if (date) return date;

+        }

+    }

+    if (! custom) {

+        formats = cultureInfo._getDateTimeFormats();

+        for (i = 0, l = formats.length; i < l; i++) {

+            date = Date._parseExact(value, formats[i], cultureInfo);

+            if (date) return date;

+        }

+    }

+    return null;

+}

+Date._parseExact = function Date$_parseExact(value, format, cultureInfo) {

+    value = value.trim();

+    var dtf = cultureInfo.dateTimeFormat,

+        parseInfo = Date._getParseRegExp(dtf, format),

+        match = new RegExp(parseInfo.regExp).exec(value);

+    if (match === null) return null;

+    

+    var groups = parseInfo.groups,

+        era = null, year = null, month = null, date = null, weekDay = null,

+        hour = 0, hourOffset, min = 0, sec = 0, msec = 0, tzMinOffset = null,

+        pmHour = false;

+    for (var j = 0, jl = groups.length; j < jl; j++) {

+        var matchGroup = match[j+1];

+        if (matchGroup) {

+            switch (groups[j]) {

+                case 'dd': case 'd':

+                    date = parseInt(matchGroup, 10);

+                    if ((date < 1) || (date > 31)) return null;

+                    break;

+                case 'MMMM':

+                    month = cultureInfo._getMonthIndex(matchGroup);

+                    if ((month < 0) || (month > 11)) return null;

+                    break;

+                case 'MMM':

+                    month = cultureInfo._getAbbrMonthIndex(matchGroup);

+                    if ((month < 0) || (month > 11)) return null;

+                    break;

+                case 'M': case 'MM':

+                    month = parseInt(matchGroup, 10) - 1;

+                    if ((month < 0) || (month > 11)) return null;

+                    break;

+                case 'y': case 'yy':

+                    year = Date._expandYear(dtf,parseInt(matchGroup, 10));

+                    if ((year < 0) || (year > 9999)) return null;

+                    break;

+                case 'yyyy':

+                    year = parseInt(matchGroup, 10);

+                    if ((year < 0) || (year > 9999)) return null;

+                    break;

+                case 'h': case 'hh':

+                    hour = parseInt(matchGroup, 10);

+                    if (hour === 12) hour = 0;

+                    if ((hour < 0) || (hour > 11)) return null;

+                    break;

+                case 'H': case 'HH':

+                    hour = parseInt(matchGroup, 10);

+                    if ((hour < 0) || (hour > 23)) return null;

+                    break;

+                case 'm': case 'mm':

+                    min = parseInt(matchGroup, 10);

+                    if ((min < 0) || (min > 59)) return null;

+                    break;

+                case 's': case 'ss':

+                    sec = parseInt(matchGroup, 10);

+                    if ((sec < 0) || (sec > 59)) return null;

+                    break;

+                case 'tt': case 't':

+                    var upperToken = matchGroup.toUpperCase();

+                    pmHour = (upperToken === dtf.PMDesignator.toUpperCase());

+                    if (!pmHour && (upperToken !== dtf.AMDesignator.toUpperCase())) return null;

+                    break;

+                case 'f':

+                    msec = parseInt(matchGroup, 10) * 100;

+                    if ((msec < 0) || (msec > 999)) return null;

+                    break;

+                case 'ff':

+                    msec = parseInt(matchGroup, 10) * 10;

+                    if ((msec < 0) || (msec > 999)) return null;

+                    break;

+                case 'fff':

+                    msec = parseInt(matchGroup, 10);

+                    if ((msec < 0) || (msec > 999)) return null;

+                    break;

+                case 'dddd':

+                    weekDay = cultureInfo._getDayIndex(matchGroup);

+                    if ((weekDay < 0) || (weekDay > 6)) return null;

+                    break;

+                case 'ddd':

+                    weekDay = cultureInfo._getAbbrDayIndex(matchGroup);

+                    if ((weekDay < 0) || (weekDay > 6)) return null;

+                    break;

+                case 'zzz':

+                    var offsets = matchGroup.split(/:/);

+                    if (offsets.length !== 2) return null;

+                    hourOffset = parseInt(offsets[0], 10);

+                    if ((hourOffset < -12) || (hourOffset > 13)) return null;

+                    var minOffset = parseInt(offsets[1], 10);

+                    if ((minOffset < 0) || (minOffset > 59)) return null;

+                    tzMinOffset = (hourOffset * 60) + (matchGroup.startsWith('-')? -minOffset : minOffset);

+                    break;

+                case 'z': case 'zz':

+                    hourOffset = parseInt(matchGroup, 10);

+                    if ((hourOffset < -12) || (hourOffset > 13)) return null;

+                    tzMinOffset = hourOffset * 60;

+                    break;

+                case 'g': case 'gg':

+                    var eraName = matchGroup;

+                    if (!eraName || !dtf.eras) return null;

+                    eraName = eraName.toLowerCase().trim();

+                    for (var i = 0, l = dtf.eras.length; i < l; i += 4) {

+                        if (eraName === dtf.eras[i + 1].toLowerCase()) {

+                            era = i;

+                            break;

+                        }

+                    }

+                    if (era === null) return null;

+                    break;

+            }

+        }

+    }

+    var result = new Date(), defaults, convert = dtf.Calendar.convert;

+    if (convert) {

+        defaults = convert.fromGregorian(result);

+    }

+    if (!convert) {

+        defaults = [result.getFullYear(), result.getMonth(), result.getDate()];

+    }

+    if (year === null) {

+        year = defaults[0];

+    }

+    else if (dtf.eras) {

+        year += dtf.eras[(era || 0) + 3];

+    }

+    if (month === null) {

+        month = defaults[1];

+    }

+    if (date === null) {

+        date = defaults[2];

+    }

+    if (convert) {

+        result = convert.toGregorian(year, month, date);

+        if (result === null) return null;

+    }

+    else {

+        result.setFullYear(year, month, date);

+        if (result.getDate() !== date) return null;

+        if ((weekDay !== null) && (result.getDay() !== weekDay)) {

+            return null;

+        }

+    }

+    if (pmHour && (hour < 12)) {

+        hour += 12;

+    }

+    result.setHours(hour, min, sec, msec);

+    if (tzMinOffset !== null) {

+        var adjustedMin = result.getMinutes() - (tzMinOffset + result.getTimezoneOffset());

+        result.setHours(result.getHours() + parseInt(adjustedMin/60, 10), adjustedMin%60);

+    }

+    return result;

+}

+Date.prototype.format = function Date$format(format) {

+    /// <summary locid="M:J#Date.format" />

+    /// <param name="format" type="String"></param>

+    /// <returns type="String"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "format", type: String}

+    ]);

+    if (e) throw e;

+    return this._toFormattedString(format, Sys.CultureInfo.InvariantCulture);

+}

+Date.prototype.localeFormat = function Date$localeFormat(format) {

+    /// <summary locid="M:J#Date.localeFormat" />

+    /// <param name="format" type="String"></param>

+    /// <returns type="String"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "format", type: String}

+    ]);

+    if (e) throw e;

+    return this._toFormattedString(format, Sys.CultureInfo.CurrentCulture);

+}

+Date.prototype._toFormattedString = function Date$_toFormattedString(format, cultureInfo) {

+    var dtf = cultureInfo.dateTimeFormat,

+        convert = dtf.Calendar.convert;

+    if (!format || !format.length || (format === 'i')) {

+        if (cultureInfo && cultureInfo.name.length) {

+            if (convert) {

+                return this._toFormattedString(dtf.FullDateTimePattern, cultureInfo);

+            }

+            else {

+                var eraDate = new Date(this.getTime());

+                var era = Date._getEra(this, dtf.eras);

+                eraDate.setFullYear(Date._getEraYear(this, dtf, era));

+                return eraDate.toLocaleString();

+            }

+        }

+        else {

+            return this.toString();

+        }

+    }

+    var eras = dtf.eras,

+        sortable = (format === "s");

+    format = Date._expandFormat(dtf, format);

+    var ret = new Sys.StringBuilder();

+    var hour;

+    function addLeadingZero(num) {

+        if (num < 10) {

+            return '0' + num;

+        }

+        return num.toString();

+    }

+    function addLeadingZeros(num) {

+        if (num < 10) {

+            return '00' + num;

+        }

+        if (num < 100) {

+            return '0' + num;

+        }

+        return num.toString();

+    }

+    function padYear(year) {

+        if (year < 10) {

+            return '000' + year;

+        }

+        else if (year < 100) {

+            return '00' + year;

+        }

+        else if (year < 1000) {

+            return '0' + year;

+        }

+        return year.toString();

+    }

+    

+    var foundDay, checkedDay, dayPartRegExp = /([^d]|^)(d|dd)([^d]|$)/g;

+    function hasDay() {

+        if (foundDay || checkedDay) {

+            return foundDay;

+        }

+        foundDay = dayPartRegExp.test(format);

+        checkedDay = true;

+        return foundDay;

+    }

+    

+    var quoteCount = 0,

+        tokenRegExp = Date._getTokenRegExp(),

+        converted;

+    if (!sortable && convert) {

+        converted = convert.fromGregorian(this);

+    }

+    for (;;) {

+        var index = tokenRegExp.lastIndex;

+        var ar = tokenRegExp.exec(format);

+        var preMatch = format.slice(index, ar ? ar.index : format.length);

+        quoteCount += Date._appendPreOrPostMatch(preMatch, ret);

+        if (!ar) break;

+        if ((quoteCount%2) === 1) {

+            ret.append(ar[0]);

+            continue;

+        }

+        

+        function getPart(date, part) {

+            if (converted) {

+                return converted[part];

+            }

+            switch (part) {

+                case 0: return date.getFullYear();

+                case 1: return date.getMonth();

+                case 2: return date.getDate();

+            }

+        }

+        switch (ar[0]) {

+        case "dddd":

+            ret.append(dtf.DayNames[this.getDay()]);

+            break;

+        case "ddd":

+            ret.append(dtf.AbbreviatedDayNames[this.getDay()]);

+            break;

+        case "dd":

+            foundDay = true;

+            ret.append(addLeadingZero(getPart(this, 2)));

+            break;

+        case "d":

+            foundDay = true;

+            ret.append(getPart(this, 2));

+            break;

+        case "MMMM":

+            ret.append((dtf.MonthGenitiveNames && hasDay())

+                ? dtf.MonthGenitiveNames[getPart(this, 1)]

+                : dtf.MonthNames[getPart(this, 1)]);

+            break;

+        case "MMM":

+            ret.append((dtf.AbbreviatedMonthGenitiveNames && hasDay())

+                ? dtf.AbbreviatedMonthGenitiveNames[getPart(this, 1)]

+                : dtf.AbbreviatedMonthNames[getPart(this, 1)]);

+            break;

+        case "MM":

+            ret.append(addLeadingZero(getPart(this, 1) + 1));

+            break;

+        case "M":

+            ret.append(getPart(this, 1) + 1);

+            break;

+        case "yyyy":

+            ret.append(padYear(converted ? converted[0] : Date._getEraYear(this, dtf, Date._getEra(this, eras), sortable)));

+            break;

+        case "yy":

+            ret.append(addLeadingZero((converted ? converted[0] : Date._getEraYear(this, dtf, Date._getEra(this, eras), sortable)) % 100));

+            break;

+        case "y":

+            ret.append((converted ? converted[0] : Date._getEraYear(this, dtf, Date._getEra(this, eras), sortable)) % 100);

+            break;

+        case "hh":

+            hour = this.getHours() % 12;

+            if (hour === 0) hour = 12;

+            ret.append(addLeadingZero(hour));

+            break;

+        case "h":

+            hour = this.getHours() % 12;

+            if (hour === 0) hour = 12;

+            ret.append(hour);

+            break;

+        case "HH":

+            ret.append(addLeadingZero(this.getHours()));

+            break;

+        case "H":

+            ret.append(this.getHours());

+            break;

+        case "mm":

+            ret.append(addLeadingZero(this.getMinutes()));

+            break;

+        case "m":

+            ret.append(this.getMinutes());

+            break;

+        case "ss":

+            ret.append(addLeadingZero(this.getSeconds()));

+            break;

+        case "s":

+            ret.append(this.getSeconds());

+            break;

+        case "tt":

+            ret.append((this.getHours() < 12) ? dtf.AMDesignator : dtf.PMDesignator);

+            break;

+        case "t":

+            ret.append(((this.getHours() < 12) ? dtf.AMDesignator : dtf.PMDesignator).charAt(0));

+            break;

+        case "f":

+            ret.append(addLeadingZeros(this.getMilliseconds()).charAt(0));

+            break;

+        case "ff":

+            ret.append(addLeadingZeros(this.getMilliseconds()).substr(0, 2));

+            break;

+        case "fff":

+            ret.append(addLeadingZeros(this.getMilliseconds()));

+            break;

+        case "z":

+            hour = this.getTimezoneOffset() / 60;

+            ret.append(((hour <= 0) ? '+' : '-') + Math.floor(Math.abs(hour)));

+            break;

+        case "zz":

+            hour = this.getTimezoneOffset() / 60;

+            ret.append(((hour <= 0) ? '+' : '-') + addLeadingZero(Math.floor(Math.abs(hour))));

+            break;

+        case "zzz":

+            hour = this.getTimezoneOffset() / 60;

+            ret.append(((hour <= 0) ? '+' : '-') + addLeadingZero(Math.floor(Math.abs(hour))) +

+                ":" + addLeadingZero(Math.abs(this.getTimezoneOffset() % 60)));

+            break;

+        case "g":

+        case "gg":

+            if (dtf.eras) {

+                ret.append(dtf.eras[Date._getEra(this, eras) + 1]);

+            }

+            break;

+        case "/":

+            ret.append(dtf.DateSeparator);

+            break;

+        default:

+            Sys.Debug.fail("Invalid date format pattern");

+        }

+    }

+    return ret.toString();

+}

+String.localeFormat = function String$localeFormat(format, args) {

+    /// <summary locid="M:J#String.localeFormat" />

+    /// <param name="format" type="String"></param>

+    /// <param name="args" parameterArray="true" mayBeNull="true"></param>

+    /// <returns type="String"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "format", type: String},

+        {name: "args", mayBeNull: true, parameterArray: true}

+    ]);

+    if (e) throw e;

+    return String._toFormattedString(true, arguments);

+}

+Number.parseLocale = function Number$parseLocale(value) {

+    /// <summary locid="M:J#Number.parseLocale" />

+    /// <param name="value" type="String"></param>

+    /// <returns type="Number"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "value", type: String}

+    ], false);

+    if (e) throw e;

+    return Number._parse(value, Sys.CultureInfo.CurrentCulture);

+}

+Number.parseInvariant = function Number$parseInvariant(value) {

+    /// <summary locid="M:J#Number.parseInvariant" />

+    /// <param name="value" type="String"></param>

+    /// <returns type="Number"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "value", type: String}

+    ], false);

+    if (e) throw e;

+    return Number._parse(value, Sys.CultureInfo.InvariantCulture);

+}

+Number._parse = function Number$_parse(value, cultureInfo) {

+    value = value.trim();

+    

+    if (value.match(/^[+-]?infinity$/i)) {

+        return parseFloat(value);

+    }

+    if (value.match(/^0x[a-f0-9]+$/i)) {

+        return parseInt(value);

+    }

+    var numFormat = cultureInfo.numberFormat;

+    var signInfo = Number._parseNumberNegativePattern(value, numFormat, numFormat.NumberNegativePattern);

+    var sign = signInfo[0];

+    var num = signInfo[1];

+    

+    if ((sign === '') && (numFormat.NumberNegativePattern !== 1)) {

+        signInfo = Number._parseNumberNegativePattern(value, numFormat, 1);

+        sign = signInfo[0];

+        num = signInfo[1];

+    }

+    if (sign === '') sign = '+';

+    

+    var exponent;

+    var intAndFraction;

+    var exponentPos = num.indexOf('e');

+    if (exponentPos < 0) exponentPos = num.indexOf('E');

+    if (exponentPos < 0) {

+        intAndFraction = num;

+        exponent = null;

+    }

+    else {

+        intAndFraction = num.substr(0, exponentPos);

+        exponent = num.substr(exponentPos + 1);

+    }

+    

+    var integer;

+    var fraction;

+    var decimalPos = intAndFraction.indexOf(numFormat.NumberDecimalSeparator);

+    if (decimalPos < 0) {

+        integer = intAndFraction;

+        fraction = null;

+    }

+    else {

+        integer = intAndFraction.substr(0, decimalPos);

+        fraction = intAndFraction.substr(decimalPos + numFormat.NumberDecimalSeparator.length);

+    }

+    

+    integer = integer.split(numFormat.NumberGroupSeparator).join('');

+    var altNumGroupSeparator = numFormat.NumberGroupSeparator.replace(/\u00A0/g, " ");

+    if (numFormat.NumberGroupSeparator !== altNumGroupSeparator) {

+        integer = integer.split(altNumGroupSeparator).join('');

+    }

+    

+    var p = sign + integer;

+    if (fraction !== null) {

+        p += '.' + fraction;

+    }

+    if (exponent !== null) {

+        var expSignInfo = Number._parseNumberNegativePattern(exponent, numFormat, 1);

+        if (expSignInfo[0] === '') {

+            expSignInfo[0] = '+';

+        }

+        p += 'e' + expSignInfo[0] + expSignInfo[1];

+    }

+    if (p.match(/^[+-]?\d*\.?\d*(e[+-]?\d+)?$/)) {

+        return parseFloat(p);

+    }

+    return Number.NaN;

+}

+Number._parseNumberNegativePattern = function Number$_parseNumberNegativePattern(value, numFormat, numberNegativePattern) {

+    var neg = numFormat.NegativeSign;

+    var pos = numFormat.PositiveSign;    

+    switch (numberNegativePattern) {

+        case 4: 

+            neg = ' ' + neg;

+            pos = ' ' + pos;

+        case 3: 

+            if (value.endsWith(neg)) {

+                return ['-', value.substr(0, value.length - neg.length)];

+            }

+            else if (value.endsWith(pos)) {

+                return ['+', value.substr(0, value.length - pos.length)];

+            }

+            break;

+        case 2: 

+            neg += ' ';

+            pos += ' ';

+        case 1: 

+            if (value.startsWith(neg)) {

+                return ['-', value.substr(neg.length)];

+            }

+            else if (value.startsWith(pos)) {

+                return ['+', value.substr(pos.length)];

+            }

+            break;

+        case 0: 

+            if (value.startsWith('(') && value.endsWith(')')) {

+                return ['-', value.substr(1, value.length - 2)];

+            }

+            break;

+        default:

+            Sys.Debug.fail("");

+    }

+    return ['', value];

+}

+Number.prototype.format = function Number$format(format) {

+    /// <summary locid="M:J#Number.format" />

+    /// <param name="format" type="String"></param>

+    /// <returns type="String"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "format", type: String}

+    ]);

+    if (e) throw e;

+    return this._toFormattedString(format, Sys.CultureInfo.InvariantCulture);

+}

+Number.prototype.localeFormat = function Number$localeFormat(format) {

+    /// <summary locid="M:J#Number.localeFormat" />

+    /// <param name="format" type="String"></param>

+    /// <returns type="String"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "format", type: String}

+    ]);

+    if (e) throw e;

+    return this._toFormattedString(format, Sys.CultureInfo.CurrentCulture);

+}

+Number.prototype._toFormattedString = function Number$_toFormattedString(format, cultureInfo) {

+    if (!format || (format.length === 0) || (format === 'i')) {

+        if (cultureInfo && (cultureInfo.name.length > 0)) {

+            return this.toLocaleString();

+        }

+        else {

+            return this.toString();

+        }

+    }

+    

+    var _percentPositivePattern = ["n %", "n%", "%n" ];

+    var _percentNegativePattern = ["-n %", "-n%", "-%n"];

+    var _numberNegativePattern = ["(n)","-n","- n","n-","n -"];

+    var _currencyPositivePattern = ["$n","n$","$ n","n $"];

+    var _currencyNegativePattern = ["($n)","-$n","$-n","$n-","(n$)","-n$","n-$","n$-","-n $","-$ n","n $-","$ n-","$ -n","n- $","($ n)","(n $)"];

+    function zeroPad(str, count, left) {

+        for (var l=str.length; l < count; l++) {

+            str = (left ? ('0' + str) : (str + '0'));

+        }

+        return str;

+    }

+    

+    function expandNumber(number, precision, groupSizes, sep, decimalChar) {

+        Sys.Debug.assert(groupSizes.length > 0, "groupSizes must be an array of at least 1");

+        var curSize = groupSizes[0];

+        var curGroupIndex = 1;

+        var factor = Math.pow(10, precision);

+        var rounded = (Math.round(number * factor) / factor);

+        if (!isFinite(rounded)) {

+            rounded = number;

+        }

+        number = rounded;

+        

+        var numberString = number.toString();

+        var right = "";

+        var exponent;

+        

+        

+        var split = numberString.split(/e/i);

+        numberString = split[0];

+        exponent = (split.length > 1 ? parseInt(split[1]) : 0);

+        split = numberString.split('.');

+        numberString = split[0];

+        right = split.length > 1 ? split[1] : "";

+        

+        var l;

+        if (exponent > 0) {

+            right = zeroPad(right, exponent, false);

+            numberString += right.slice(0, exponent);

+            right = right.substr(exponent);

+        }

+        else if (exponent < 0) {

+            exponent = -exponent;

+            numberString = zeroPad(numberString, exponent+1, true);

+            right = numberString.slice(-exponent, numberString.length) + right;

+            numberString = numberString.slice(0, -exponent);

+        }

+        if (precision > 0) {

+            if (right.length > precision) {

+                right = right.slice(0, precision);

+            }

+            else {

+                right = zeroPad(right, precision, false);

+            }

+            right = decimalChar + right;

+        }

+        else { 

+            right = "";

+        }

+        var stringIndex = numberString.length-1;

+        var ret = "";

+        while (stringIndex >= 0) {

+            if (curSize === 0 || curSize > stringIndex) {

+                if (ret.length > 0)

+                    return numberString.slice(0, stringIndex + 1) + sep + ret + right;

+                else

+                    return numberString.slice(0, stringIndex + 1) + right;

+            }

+            if (ret.length > 0)

+                ret = numberString.slice(stringIndex - curSize + 1, stringIndex+1) + sep + ret;

+            else

+                ret = numberString.slice(stringIndex - curSize + 1, stringIndex+1);

+            stringIndex -= curSize;

+            if (curGroupIndex < groupSizes.length) {

+                curSize = groupSizes[curGroupIndex];

+                curGroupIndex++;

+            }

+        }

+        return numberString.slice(0, stringIndex + 1) + sep + ret + right;

+    }

+    var nf = cultureInfo.numberFormat;

+    var number = Math.abs(this);

+    if (!format)

+        format = "D";

+    var precision = -1;

+    if (format.length > 1) precision = parseInt(format.slice(1), 10);

+    var pattern;

+    switch (format.charAt(0)) {

+    case "d":

+    case "D":

+        pattern = 'n';

+        if (precision !== -1) {

+            number = zeroPad(""+number, precision, true);

+        }

+        if (this < 0) number = -number;

+        break;

+    case "c":

+    case "C":

+        if (this < 0) pattern = _currencyNegativePattern[nf.CurrencyNegativePattern];

+        else pattern = _currencyPositivePattern[nf.CurrencyPositivePattern];

+        if (precision === -1) precision = nf.CurrencyDecimalDigits;

+        number = expandNumber(Math.abs(this), precision, nf.CurrencyGroupSizes, nf.CurrencyGroupSeparator, nf.CurrencyDecimalSeparator);

+        break;

+    case "n":

+    case "N":

+        if (this < 0) pattern = _numberNegativePattern[nf.NumberNegativePattern];

+        else pattern = 'n';

+        if (precision === -1) precision = nf.NumberDecimalDigits;

+        number = expandNumber(Math.abs(this), precision, nf.NumberGroupSizes, nf.NumberGroupSeparator, nf.NumberDecimalSeparator);

+        break;

+    case "p":

+    case "P":

+        if (this < 0) pattern = _percentNegativePattern[nf.PercentNegativePattern];

+        else pattern = _percentPositivePattern[nf.PercentPositivePattern];

+        if (precision === -1) precision = nf.PercentDecimalDigits;

+        number = expandNumber(Math.abs(this) * 100, precision, nf.PercentGroupSizes, nf.PercentGroupSeparator, nf.PercentDecimalSeparator);

+        break;

+    default:

+        throw Error.format(Sys.Res.formatBadFormatSpecifier);

+    }

+    var regex = /n|\$|-|%/g;

+    var ret = "";

+    for (;;) {

+        var index = regex.lastIndex;

+        var ar = regex.exec(pattern);

+        ret += pattern.slice(index, ar ? ar.index : pattern.length);

+        if (!ar)

+            break;

+        switch (ar[0]) {

+        case "n":

+            ret += number;

+            break;

+        case "$":

+            ret += nf.CurrencySymbol;

+            break;

+        case "-":

+            if (/[1-9]/.test(number)) {

+                ret += nf.NegativeSign;

+            }

+            break;

+        case "%":

+            ret += nf.PercentSymbol;

+            break;

+        default:

+            Sys.Debug.fail("Invalid number format pattern");

+        }

+    }

+    return ret;

+}

+ 

+Sys.CultureInfo = function Sys$CultureInfo(name, numberFormat, dateTimeFormat) {

+    /// <summary locid="M:J#Sys.CultureInfo.#ctor" />

+    /// <param name="name" type="String"></param>

+    /// <param name="numberFormat" type="Object"></param>

+    /// <param name="dateTimeFormat" type="Object"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "name", type: String},

+        {name: "numberFormat", type: Object},

+        {name: "dateTimeFormat", type: Object}

+    ]);

+    if (e) throw e;

+    this.name = name;

+    this.numberFormat = numberFormat;

+    this.dateTimeFormat = dateTimeFormat;

+}

+    function Sys$CultureInfo$_getDateTimeFormats() {

+        if (! this._dateTimeFormats) {

+            var dtf = this.dateTimeFormat;

+            this._dateTimeFormats =

+              [ dtf.MonthDayPattern,

+                dtf.YearMonthPattern,

+                dtf.ShortDatePattern,

+                dtf.ShortTimePattern,

+                dtf.LongDatePattern,

+                dtf.LongTimePattern,

+                dtf.FullDateTimePattern,

+                dtf.RFC1123Pattern,

+                dtf.SortableDateTimePattern,

+                dtf.UniversalSortableDateTimePattern ];

+        }

+        return this._dateTimeFormats;

+    }

+    function Sys$CultureInfo$_getIndex(value, a1, a2) {

+        var upper = this._toUpper(value),

+            i = Array.indexOf(a1, upper);

+        if (i === -1) {

+            i = Array.indexOf(a2, upper);

+        }

+        return i;

+    }

+    function Sys$CultureInfo$_getMonthIndex(value) {

+        if (!this._upperMonths) {

+            this._upperMonths = this._toUpperArray(this.dateTimeFormat.MonthNames);

+            this._upperMonthsGenitive = this._toUpperArray(this.dateTimeFormat.MonthGenitiveNames);

+        }

+        return this._getIndex(value, this._upperMonths, this._upperMonthsGenitive);

+    }

+    function Sys$CultureInfo$_getAbbrMonthIndex(value) {

+        if (!this._upperAbbrMonths) {

+            this._upperAbbrMonths = this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames);

+            this._upperAbbrMonthsGenitive = this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthGenitiveNames);

+        }

+        return this._getIndex(value, this._upperAbbrMonths, this._upperAbbrMonthsGenitive);

+    }

+    function Sys$CultureInfo$_getDayIndex(value) {

+        if (!this._upperDays) {

+            this._upperDays = this._toUpperArray(this.dateTimeFormat.DayNames);

+        }

+        return Array.indexOf(this._upperDays, this._toUpper(value));

+    }

+    function Sys$CultureInfo$_getAbbrDayIndex(value) {

+        if (!this._upperAbbrDays) {

+            this._upperAbbrDays = this._toUpperArray(this.dateTimeFormat.AbbreviatedDayNames);

+        }

+        return Array.indexOf(this._upperAbbrDays, this._toUpper(value));

+    }

+    function Sys$CultureInfo$_toUpperArray(arr) {

+        var result = [];

+        for (var i = 0, il = arr.length; i < il; i++) {

+            result[i] = this._toUpper(arr[i]);

+        }

+        return result;

+    }

+    function Sys$CultureInfo$_toUpper(value) {

+        return value.split("\u00A0").join(' ').toUpperCase();

+    }

+Sys.CultureInfo.prototype = {

+    _getDateTimeFormats: Sys$CultureInfo$_getDateTimeFormats,

+    _getIndex: Sys$CultureInfo$_getIndex,

+    _getMonthIndex: Sys$CultureInfo$_getMonthIndex,

+    _getAbbrMonthIndex: Sys$CultureInfo$_getAbbrMonthIndex,

+    _getDayIndex: Sys$CultureInfo$_getDayIndex,

+    _getAbbrDayIndex: Sys$CultureInfo$_getAbbrDayIndex,

+    _toUpperArray: Sys$CultureInfo$_toUpperArray,

+    _toUpper: Sys$CultureInfo$_toUpper

+}

+Sys.CultureInfo.registerClass('Sys.CultureInfo');

+Sys.CultureInfo._parse = function Sys$CultureInfo$_parse(value) {

+    var dtf = value.dateTimeFormat;

+    if (dtf && !dtf.eras) {

+        dtf.eras = value.eras;

+    }

+    return new Sys.CultureInfo(value.name, value.numberFormat, dtf);

+}

+Sys.CultureInfo.InvariantCulture = Sys.CultureInfo._parse({"name":"","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecimalSeparator":".","IsReadOnly":true,"CurrencyGroupSizes":[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","CurrencySymbol":"\u00A4","NaNSymbol":"NaN","CurrencyNegativePattern":0,"NumberNegativePattern":1,"PercentPositivePattern":0,"PercentNegativePattern":0,"NegativeInfinitySymbol":"-Infinity","NegativeSign":"-","NumberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"Infinity","PositiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"\u2030","NativeDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"@-62135568000000@","MaxSupportedDateTime":"@253402300799999@","AlgorithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":true},"DateSeparator":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"FullDateTimePattern":"dddd, dd MMMM yyyy HH:mm:ss","LongDatePattern":"dddd, dd MMMM yyyy","LongTimePattern":"HH:mm:ss","MonthDayPattern":"MMMM dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH\':\'mm\':\'ss \'GMT\'","ShortDatePattern":"MM/dd/yyyy","ShortTimePattern":"HH:mm","SortableDateTimePattern":"yyyy\'-\'MM\'-\'dd\'T\'HH\':\'mm\':\'ss","TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy\'-\'MM\'-\'dd HH\':\'mm\':\'ss\'Z\'","YearMonthPattern":"yyyy MMMM","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"AbbreviatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","May","June","July","August","September","October","November","December",""],"IsReadOnly":true,"NativeCalendarName":"Gregorian Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["January","February","March","April","May","June","July","August","September","October","November","December",""]},"eras":[1,"A.D.",null,0]});

+if (typeof(__cultureInfo) === "object") {

+    Sys.CultureInfo.CurrentCulture = Sys.CultureInfo._parse(__cultureInfo);

+    delete __cultureInfo;    

+}

+else {

+    Sys.CultureInfo.CurrentCulture = Sys.CultureInfo._parse({"name":"en-US","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecimalSeparator":".","IsReadOnly":false,"CurrencyGroupSizes":[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","CurrencySymbol":"$","NaNSymbol":"NaN","CurrencyNegativePattern":0,"NumberNegativePattern":1,"PercentPositivePattern":0,"PercentNegativePattern":0,"NegativeInfinitySymbol":"-Infinity","NegativeSign":"-","NumberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"Infinity","PositiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"\u2030","NativeDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"@-62135568000000@","MaxSupportedDateTime":"@253402300799999@","AlgorithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":false},"DateSeparator":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"FullDateTimePattern":"dddd, MMMM dd, yyyy h:mm:ss tt","LongDatePattern":"dddd, MMMM dd, yyyy","LongTimePattern":"h:mm:ss tt","MonthDayPattern":"MMMM dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH\':\'mm\':\'ss \'GMT\'","ShortDatePattern":"M/d/yyyy","ShortTimePattern":"h:mm tt","SortableDateTimePattern":"yyyy\'-\'MM\'-\'dd\'T\'HH\':\'mm\':\'ss","TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy\'-\'MM\'-\'dd HH\':\'mm\':\'ss\'Z\'","YearMonthPattern":"MMMM, yyyy","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"AbbreviatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","May","June","July","August","September","October","November","December",""],"IsReadOnly":false,"NativeCalendarName":"Gregorian Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["January","February","March","April","May","June","July","August","September","October","November","December",""]},"eras":[1,"A.D.",null,0]});

+}

+Type.registerNamespace('Sys.Serialization');

+Sys.Serialization.JavaScriptSerializer = function Sys$Serialization$JavaScriptSerializer() {

+    /// <summary locid="M:J#Sys.Serialization.JavaScriptSerializer.#ctor" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+}

+Sys.Serialization.JavaScriptSerializer.registerClass('Sys.Serialization.JavaScriptSerializer');

+Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs = [];

+Sys.Serialization.JavaScriptSerializer._charsToEscape = [];

+Sys.Serialization.JavaScriptSerializer._dateRegEx = new RegExp('(^|[^\\\\])\\"\\\\/Date\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\+|-)[0-9]{4})?\\)\\\\/\\"', 'g');

+Sys.Serialization.JavaScriptSerializer._escapeChars = {};

+Sys.Serialization.JavaScriptSerializer._escapeRegEx = new RegExp('["\\\\\\x00-\\x1F]', 'i');

+Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal = new RegExp('["\\\\\\x00-\\x1F]', 'g');

+Sys.Serialization.JavaScriptSerializer._jsonRegEx = new RegExp('[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]', 'g');

+Sys.Serialization.JavaScriptSerializer._jsonStringRegEx = new RegExp('"(\\\\.|[^"\\\\])*"', 'g');

+Sys.Serialization.JavaScriptSerializer._serverTypeFieldName = '__type';

+Sys.Serialization.JavaScriptSerializer._init = function Sys$Serialization$JavaScriptSerializer$_init() {

+    var replaceChars = ['\\u0000','\\u0001','\\u0002','\\u0003','\\u0004','\\u0005','\\u0006','\\u0007',

+                        '\\b','\\t','\\n','\\u000b','\\f','\\r','\\u000e','\\u000f','\\u0010','\\u0011',

+                        '\\u0012','\\u0013','\\u0014','\\u0015','\\u0016','\\u0017','\\u0018','\\u0019',

+                        '\\u001a','\\u001b','\\u001c','\\u001d','\\u001e','\\u001f'];

+    Sys.Serialization.JavaScriptSerializer._charsToEscape[0] = '\\';

+    Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['\\'] = new RegExp('\\\\', 'g');

+    Sys.Serialization.JavaScriptSerializer._escapeChars['\\'] = '\\\\';

+    Sys.Serialization.JavaScriptSerializer._charsToEscape[1] = '"';

+    Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['"'] = new RegExp('"', 'g');

+    Sys.Serialization.JavaScriptSerializer._escapeChars['"'] = '\\"';

+    for (var i = 0; i < 32; i++) {

+        var c = String.fromCharCode(i);

+        Sys.Serialization.JavaScriptSerializer._charsToEscape[i+2] = c;

+        Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[c] = new RegExp(c, 'g');

+        Sys.Serialization.JavaScriptSerializer._escapeChars[c] = replaceChars[i];

+    }

+}

+Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeBooleanWithBuilder(object, stringBuilder) {

+    stringBuilder.append(object.toString());

+}

+Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeNumberWithBuilder(object, stringBuilder) {

+    if (isFinite(object)) {

+        stringBuilder.append(String(object));

+    }

+    else {

+        throw Error.invalidOperation(Sys.Res.cannotSerializeNonFiniteNumbers);

+    }

+}

+Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeStringWithBuilder(string, stringBuilder) {

+    stringBuilder.append('"');

+    if (Sys.Serialization.JavaScriptSerializer._escapeRegEx.test(string)) {

+        if (Sys.Serialization.JavaScriptSerializer._charsToEscape.length === 0) {

+            Sys.Serialization.JavaScriptSerializer._init();

+        }

+        if (string.length < 128) {

+            string = string.replace(Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal,

+                function(x) { return Sys.Serialization.JavaScriptSerializer._escapeChars[x]; });

+        }

+        else {

+            for (var i = 0; i < 34; i++) {

+                var c = Sys.Serialization.JavaScriptSerializer._charsToEscape[i];

+                if (string.indexOf(c) !== -1) {

+                    if (Sys.Browser.agent === Sys.Browser.Opera || Sys.Browser.agent === Sys.Browser.FireFox) {

+                        string = string.split(c).join(Sys.Serialization.JavaScriptSerializer._escapeChars[c]);

+                    }

+                    else {

+                        string = string.replace(Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[c],

+                            Sys.Serialization.JavaScriptSerializer._escapeChars[c]);

+                    }

+                }

+            }

+       }

+    }

+    stringBuilder.append(string);

+    stringBuilder.append('"');

+}

+Sys.Serialization.JavaScriptSerializer._serializeWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeWithBuilder(object, stringBuilder, sort, prevObjects) {

+    var i;

+    switch (typeof object) {

+    case 'object':

+        if (object) {

+            if (prevObjects){

+                for( var j = 0; j < prevObjects.length; j++) {

+                    if (prevObjects[j] === object) {

+                        throw Error.invalidOperation(Sys.Res.cannotSerializeObjectWithCycle);

+                    }

+                }

+            }

+            else {

+                prevObjects = new Array();

+            }

+            try {

+                Array.add(prevObjects, object);

+                

+                if (Number.isInstanceOfType(object)){

+                    Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(object, stringBuilder);

+                }

+                else if (Boolean.isInstanceOfType(object)){

+                    Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(object, stringBuilder);

+                }

+                else if (String.isInstanceOfType(object)){

+                    Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(object, stringBuilder);

+                }

+            

+                else if (Array.isInstanceOfType(object)) {

+                    stringBuilder.append('[');

+                   

+                    for (i = 0; i < object.length; ++i) {

+                        if (i > 0) {

+                            stringBuilder.append(',');

+                        }

+                        Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(object[i], stringBuilder,false,prevObjects);

+                    }

+                    stringBuilder.append(']');

+                }

+                else {

+                    if (Date.isInstanceOfType(object)) {

+                        stringBuilder.append('"\\/Date(');

+                        stringBuilder.append(object.getTime());

+                        stringBuilder.append(')\\/"');

+                        break;

+                    }

+                    var properties = [];

+                    var propertyCount = 0;

+                    for (var name in object) {

+                        if (name.startsWith('$')) {

+                            continue;

+                        }

+                        if (name === Sys.Serialization.JavaScriptSerializer._serverTypeFieldName && propertyCount !== 0){

+                            properties[propertyCount++] = properties[0];

+                            properties[0] = name;

+                        }

+                        else{

+                            properties[propertyCount++] = name;

+                        }

+                    }

+                    if (sort) properties.sort();

+                    stringBuilder.append('{');

+                    var needComma = false;

+                     

+                    for (i=0; i<propertyCount; i++) {

+                        var value = object[properties[i]];

+                        if (typeof value !== 'undefined' && typeof value !== 'function') {

+                            if (needComma) {

+                                stringBuilder.append(',');

+                            }

+                            else {

+                                needComma = true;

+                            }

+                           

+                            Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(properties[i], stringBuilder, sort, prevObjects);

+                            stringBuilder.append(':');

+                            Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(value, stringBuilder, sort, prevObjects);

+                          

+                        }

+                    }

+                stringBuilder.append('}');

+                }

+            }

+            finally {

+                Array.removeAt(prevObjects, prevObjects.length - 1);

+            }

+        }

+        else {

+            stringBuilder.append('null');

+        }

+        break;

+    case 'number':

+        Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(object, stringBuilder);

+        break;

+    case 'string':

+        Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(object, stringBuilder);

+        break;

+    case 'boolean':

+        Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(object, stringBuilder);

+        break;

+    default:

+        stringBuilder.append('null');

+        break;

+    }

+}

+Sys.Serialization.JavaScriptSerializer.serialize = function Sys$Serialization$JavaScriptSerializer$serialize(object) {

+    /// <summary locid="M:J#Sys.Serialization.JavaScriptSerializer.serialize" />

+    /// <param name="object" mayBeNull="true"></param>

+    /// <returns type="String"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "object", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    var stringBuilder = new Sys.StringBuilder();

+    Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(object, stringBuilder, false);

+    return stringBuilder.toString();

+}

+Sys.Serialization.JavaScriptSerializer.deserialize = function Sys$Serialization$JavaScriptSerializer$deserialize(data, secure) {

+    /// <summary locid="M:J#Sys.Serialization.JavaScriptSerializer.deserialize" />

+    /// <param name="data" type="String"></param>

+    /// <param name="secure" type="Boolean" optional="true"></param>

+    /// <returns></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "data", type: String},

+        {name: "secure", type: Boolean, optional: true}

+    ]);

+    if (e) throw e;

+    

+    if (data.length === 0) throw Error.argument('data', Sys.Res.cannotDeserializeEmptyString);

+    try {    

+        var exp = data.replace(Sys.Serialization.JavaScriptSerializer._dateRegEx, "$1new Date($2)");

+        

+        if (secure && Sys.Serialization.JavaScriptSerializer._jsonRegEx.test(

+             exp.replace(Sys.Serialization.JavaScriptSerializer._jsonStringRegEx, ''))) throw null;

+        return eval('(' + exp + ')');

+    }

+    catch (e) {

+         throw Error.argument('data', Sys.Res.cannotDeserializeInvalidJson);

+    }

+}

+Type.registerNamespace('Sys.UI');

+ 

+Sys.EventHandlerList = function Sys$EventHandlerList() {

+    /// <summary locid="M:J#Sys.EventHandlerList.#ctor" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+    this._list = {};

+}

+    function Sys$EventHandlerList$_addHandler(id, handler) {

+        Array.add(this._getEvent(id, true), handler);

+    }

+    function Sys$EventHandlerList$addHandler(id, handler) {

+        /// <summary locid="M:J#Sys.EventHandlerList.addHandler" />

+        /// <param name="id" type="String"></param>

+        /// <param name="handler" type="Function"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "id", type: String},

+            {name: "handler", type: Function}

+        ]);

+        if (e) throw e;

+        this._addHandler(id, handler);

+    }

+    function Sys$EventHandlerList$_removeHandler(id, handler) {

+        var evt = this._getEvent(id);

+        if (!evt) return;

+        Array.remove(evt, handler);

+    }

+    function Sys$EventHandlerList$removeHandler(id, handler) {

+        /// <summary locid="M:J#Sys.EventHandlerList.removeHandler" />

+        /// <param name="id" type="String"></param>

+        /// <param name="handler" type="Function"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "id", type: String},

+            {name: "handler", type: Function}

+        ]);

+        if (e) throw e;

+        this._removeHandler(id, handler);

+    }

+    function Sys$EventHandlerList$getHandler(id) {

+        /// <summary locid="M:J#Sys.EventHandlerList.getHandler" />

+        /// <param name="id" type="String"></param>

+        /// <returns type="Function"></returns>

+        var e = Function._validateParams(arguments, [

+            {name: "id", type: String}

+        ]);

+        if (e) throw e;

+        var evt = this._getEvent(id);

+        if (!evt || (evt.length === 0)) return null;

+        evt = Array.clone(evt);

+        return function(source, args) {

+            for (var i = 0, l = evt.length; i < l; i++) {

+                evt[i](source, args);

+            }

+        };

+    }

+    function Sys$EventHandlerList$_getEvent(id, create) {

+        if (!this._list[id]) {

+            if (!create) return null;

+            this._list[id] = [];

+        }

+        return this._list[id];

+    }

+Sys.EventHandlerList.prototype = {

+    _addHandler: Sys$EventHandlerList$_addHandler,

+    addHandler: Sys$EventHandlerList$addHandler,

+    _removeHandler: Sys$EventHandlerList$_removeHandler,

+    removeHandler: Sys$EventHandlerList$removeHandler,

+    getHandler: Sys$EventHandlerList$getHandler,

+    _getEvent: Sys$EventHandlerList$_getEvent

+}

+Sys.EventHandlerList.registerClass('Sys.EventHandlerList');

+Sys.CommandEventArgs = function Sys$CommandEventArgs(commandName, commandArgument, commandSource) {

+    /// <summary locid="M:J#Sys.CommandEventArgs.#ctor" />

+    /// <param name="commandName" type="String"></param>

+    /// <param name="commandArgument" mayBeNull="true"></param>

+    /// <param name="commandSource" mayBeNull="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "commandName", type: String},

+        {name: "commandArgument", mayBeNull: true},

+        {name: "commandSource", mayBeNull: true}

+    ]);

+    if (e) throw e;

+    Sys.CommandEventArgs.initializeBase(this);

+    this._commandName = commandName;

+    this._commandArgument = commandArgument;

+    this._commandSource = commandSource;

+}

+    function Sys$CommandEventArgs$get_commandName() {

+        /// <value type="String" locid="P:J#Sys.CommandEventArgs.commandName"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._commandName;

+    }

+    function Sys$CommandEventArgs$get_commandArgument() {

+        /// <value mayBeNull="true" locid="P:J#Sys.CommandEventArgs.commandArgument"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._commandArgument;

+    }

+    function Sys$CommandEventArgs$get_commandSource() {

+        /// <value mayBeNull="true" locid="P:J#Sys.CommandEventArgs.commandSource"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._commandSource;

+    }

+Sys.CommandEventArgs.prototype = {

+    _commandName: null,

+    _commandArgument: null,

+    _commandSource: null,

+    get_commandName: Sys$CommandEventArgs$get_commandName,

+    get_commandArgument: Sys$CommandEventArgs$get_commandArgument,

+    get_commandSource: Sys$CommandEventArgs$get_commandSource

+}

+Sys.CommandEventArgs.registerClass("Sys.CommandEventArgs", Sys.CancelEventArgs);

+ 

+Sys.INotifyPropertyChange = function Sys$INotifyPropertyChange() {

+    /// <summary locid="M:J#Sys.INotifyPropertyChange.#ctor" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+    throw Error.notImplemented();

+}

+    function Sys$INotifyPropertyChange$add_propertyChanged(handler) {

+    /// <summary locid="E:J#Sys.INotifyPropertyChange.propertyChanged" />

+    var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+    if (e) throw e;

+        throw Error.notImplemented();

+    }

+    function Sys$INotifyPropertyChange$remove_propertyChanged(handler) {

+    var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+    if (e) throw e;

+        throw Error.notImplemented();

+    }

+Sys.INotifyPropertyChange.prototype = {

+    add_propertyChanged: Sys$INotifyPropertyChange$add_propertyChanged,

+    remove_propertyChanged: Sys$INotifyPropertyChange$remove_propertyChanged

+}

+Sys.INotifyPropertyChange.registerInterface('Sys.INotifyPropertyChange');

+ 

+Sys.PropertyChangedEventArgs = function Sys$PropertyChangedEventArgs(propertyName) {

+    /// <summary locid="M:J#Sys.PropertyChangedEventArgs.#ctor" />

+    /// <param name="propertyName" type="String"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "propertyName", type: String}

+    ]);

+    if (e) throw e;

+    Sys.PropertyChangedEventArgs.initializeBase(this);

+    this._propertyName = propertyName;

+}

+ 

+    function Sys$PropertyChangedEventArgs$get_propertyName() {

+        /// <value type="String" locid="P:J#Sys.PropertyChangedEventArgs.propertyName"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._propertyName;

+    }

+Sys.PropertyChangedEventArgs.prototype = {

+    get_propertyName: Sys$PropertyChangedEventArgs$get_propertyName

+}

+Sys.PropertyChangedEventArgs.registerClass('Sys.PropertyChangedEventArgs', Sys.EventArgs);

+ 

+Sys.INotifyDisposing = function Sys$INotifyDisposing() {

+    /// <summary locid="M:J#Sys.INotifyDisposing.#ctor" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+    throw Error.notImplemented();

+}

+    function Sys$INotifyDisposing$add_disposing(handler) {

+    /// <summary locid="E:J#Sys.INotifyDisposing.disposing" />

+    var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+    if (e) throw e;

+        throw Error.notImplemented();

+    }

+    function Sys$INotifyDisposing$remove_disposing(handler) {

+    var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+    if (e) throw e;

+        throw Error.notImplemented();

+    }

+Sys.INotifyDisposing.prototype = {

+    add_disposing: Sys$INotifyDisposing$add_disposing,

+    remove_disposing: Sys$INotifyDisposing$remove_disposing

+}

+Sys.INotifyDisposing.registerInterface("Sys.INotifyDisposing");

+ 

+Sys.Component = function Sys$Component() {

+    /// <summary locid="M:J#Sys.Component.#ctor" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+    if (Sys.Application) Sys.Application.registerDisposableObject(this);

+}

+    function Sys$Component$get_events() {

+        /// <value type="Sys.EventHandlerList" locid="P:J#Sys.Component.events"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (!this._events) {

+            this._events = new Sys.EventHandlerList();

+        }

+        return this._events;

+    }

+    function Sys$Component$get_id() {

+        /// <value type="String" locid="P:J#Sys.Component.id"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._id;

+    }

+    function Sys$Component$set_id(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: String}]);

+        if (e) throw e;

+        if (this._idSet) throw Error.invalidOperation(Sys.Res.componentCantSetIdTwice);

+        this._idSet = true;

+        var oldId = this.get_id();

+        if (oldId && Sys.Application.findComponent(oldId)) throw Error.invalidOperation(Sys.Res.componentCantSetIdAfterAddedToApp);

+        this._id = value;

+    }

+    function Sys$Component$get_isInitialized() {

+        /// <value type="Boolean" locid="P:J#Sys.Component.isInitialized"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._initialized;

+    }

+    function Sys$Component$get_isUpdating() {

+        /// <value type="Boolean" locid="P:J#Sys.Component.isUpdating"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._updating;

+    }

+    function Sys$Component$add_disposing(handler) {

+        /// <summary locid="E:J#Sys.Component.disposing" />

+        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+        if (e) throw e;

+        this.get_events().addHandler("disposing", handler);

+    }

+    function Sys$Component$remove_disposing(handler) {

+        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+        if (e) throw e;

+        this.get_events().removeHandler("disposing", handler);

+    }

+    function Sys$Component$add_propertyChanged(handler) {

+        /// <summary locid="E:J#Sys.Component.propertyChanged" />

+        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+        if (e) throw e;

+        this.get_events().addHandler("propertyChanged", handler);

+    }

+    function Sys$Component$remove_propertyChanged(handler) {

+        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+        if (e) throw e;

+        this.get_events().removeHandler("propertyChanged", handler);

+    }

+    function Sys$Component$beginUpdate() {

+        this._updating = true;

+    }

+    function Sys$Component$dispose() {

+        if (this._events) {

+            var handler = this._events.getHandler("disposing");

+            if (handler) {

+                handler(this, Sys.EventArgs.Empty);

+            }

+        }

+        delete this._events;

+        Sys.Application.unregisterDisposableObject(this);

+        Sys.Application.removeComponent(this);

+    }

+    function Sys$Component$endUpdate() {

+        this._updating = false;

+        if (!this._initialized) this.initialize();

+        this.updated();

+    }

+    function Sys$Component$initialize() {

+        this._initialized = true;

+    }

+    function Sys$Component$raisePropertyChanged(propertyName) {

+        /// <summary locid="M:J#Sys.Component.raisePropertyChanged" />

+        /// <param name="propertyName" type="String"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "propertyName", type: String}

+        ]);

+        if (e) throw e;

+        if (!this._events) return;

+        var handler = this._events.getHandler("propertyChanged");

+        if (handler) {

+            handler(this, new Sys.PropertyChangedEventArgs(propertyName));

+        }

+    }

+    function Sys$Component$updated() {

+    }

+Sys.Component.prototype = {

+    _id: null,

+    _idSet: false,

+    _initialized: false,

+    _updating: false,

+    get_events: Sys$Component$get_events,

+    get_id: Sys$Component$get_id,

+    set_id: Sys$Component$set_id,

+    get_isInitialized: Sys$Component$get_isInitialized,

+    get_isUpdating: Sys$Component$get_isUpdating,

+    add_disposing: Sys$Component$add_disposing,

+    remove_disposing: Sys$Component$remove_disposing,

+    add_propertyChanged: Sys$Component$add_propertyChanged,

+    remove_propertyChanged: Sys$Component$remove_propertyChanged,

+    beginUpdate: Sys$Component$beginUpdate,

+    dispose: Sys$Component$dispose,

+    endUpdate: Sys$Component$endUpdate,

+    initialize: Sys$Component$initialize,

+    raisePropertyChanged: Sys$Component$raisePropertyChanged,

+    updated: Sys$Component$updated

+}

+Sys.Component.registerClass('Sys.Component', null, Sys.IDisposable, Sys.INotifyPropertyChange, Sys.INotifyDisposing);

+function Sys$Component$_setProperties(target, properties) {

+    /// <summary locid="M:J#Sys.Component._setProperties" />

+    /// <param name="target"></param>

+    /// <param name="properties"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "target"},

+        {name: "properties"}

+    ]);

+    if (e) throw e;

+    var current;

+    var targetType = Object.getType(target);

+    var isObject = (targetType === Object) || (targetType === Sys.UI.DomElement);

+    var isComponent = Sys.Component.isInstanceOfType(target) && !target.get_isUpdating();

+    if (isComponent) target.beginUpdate();

+    for (var name in properties) {

+        var val = properties[name];

+        var getter = isObject ? null : target["get_" + name];

+        if (isObject || typeof(getter) !== 'function') {

+            var targetVal = target[name];

+            if (!isObject && typeof(targetVal) === 'undefined') throw Error.invalidOperation(String.format(Sys.Res.propertyUndefined, name));

+            if (!val || (typeof(val) !== 'object') || (isObject && !targetVal)) {

+                target[name] = val;

+            }

+            else {

+                Sys$Component$_setProperties(targetVal, val);

+            }

+        }

+        else {

+            var setter = target["set_" + name];

+            if (typeof(setter) === 'function') {

+                setter.apply(target, [val]);

+            }

+            else if (val instanceof Array) {

+                current = getter.apply(target);

+                if (!(current instanceof Array)) throw new Error.invalidOperation(String.format(Sys.Res.propertyNotAnArray, name));

+                for (var i = 0, j = current.length, l= val.length; i < l; i++, j++) {

+                    current[j] = val[i];

+                }

+            }

+            else if ((typeof(val) === 'object') && (Object.getType(val) === Object)) {

+                current = getter.apply(target);

+                if ((typeof(current) === 'undefined') || (current === null)) throw new Error.invalidOperation(String.format(Sys.Res.propertyNullOrUndefined, name));

+                Sys$Component$_setProperties(current, val);

+            }

+            else {

+                throw new Error.invalidOperation(String.format(Sys.Res.propertyNotWritable, name));

+            }

+        }

+    }

+    if (isComponent) target.endUpdate();

+}

+function Sys$Component$_setReferences(component, references) {

+    for (var name in references) {

+        var setter = component["set_" + name];

+        var reference = $find(references[name]);

+        if (typeof(setter) !== 'function') throw new Error.invalidOperation(String.format(Sys.Res.propertyNotWritable, name));

+        if (!reference) throw Error.invalidOperation(String.format(Sys.Res.referenceNotFound, references[name]));

+        setter.apply(component, [reference]);

+    }

+}

+var $create = Sys.Component.create = function Sys$Component$create(type, properties, events, references, element) {

+    /// <summary locid="M:J#Sys.Component.create" />

+    /// <param name="type" type="Type"></param>

+    /// <param name="properties" optional="true" mayBeNull="true"></param>

+    /// <param name="events" optional="true" mayBeNull="true"></param>

+    /// <param name="references" optional="true" mayBeNull="true"></param>

+    /// <param name="element" domElement="true" optional="true" mayBeNull="true"></param>

+    /// <returns type="Sys.UI.Component"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "type", type: Type},

+        {name: "properties", mayBeNull: true, optional: true},

+        {name: "events", mayBeNull: true, optional: true},

+        {name: "references", mayBeNull: true, optional: true},

+        {name: "element", mayBeNull: true, domElement: true, optional: true}

+    ]);

+    if (e) throw e;

+    if (!type.inheritsFrom(Sys.Component)) {

+        throw Error.argument('type', String.format(Sys.Res.createNotComponent, type.getName()));

+    }

+    if (type.inheritsFrom(Sys.UI.Behavior) || type.inheritsFrom(Sys.UI.Control)) {

+        if (!element) throw Error.argument('element', Sys.Res.createNoDom);

+    }

+    else if (element) throw Error.argument('element', Sys.Res.createComponentOnDom);

+    var component = (element ? new type(element): new type());

+    var app = Sys.Application;

+    var creatingComponents = app.get_isCreatingComponents();

+    component.beginUpdate();

+    if (properties) {

+        Sys$Component$_setProperties(component, properties);

+    }

+    if (events) {

+        for (var name in events) {

+            if (!(component["add_" + name] instanceof Function)) throw new Error.invalidOperation(String.format(Sys.Res.undefinedEvent, name));

+            if (!(events[name] instanceof Function)) throw new Error.invalidOperation(Sys.Res.eventHandlerNotFunction);

+            component["add_" + name](events[name]);

+        }

+    }

+    if (component.get_id()) {

+        app.addComponent(component);

+    }

+    if (creatingComponents) {

+        app._createdComponents[app._createdComponents.length] = component;

+        if (references) {

+            app._addComponentToSecondPass(component, references);

+        }

+        else {

+            component.endUpdate();

+        }

+    }

+    else {

+        if (references) {

+            Sys$Component$_setReferences(component, references);

+        }

+        component.endUpdate();

+    }

+    return component;

+}

+ 

+Sys.UI.MouseButton = function Sys$UI$MouseButton() {

+    /// <summary locid="M:J#Sys.UI.MouseButton.#ctor" />

+    /// <field name="leftButton" type="Number" integer="true" static="true" locid="F:J#Sys.UI.MouseButton.leftButton"></field>

+    /// <field name="middleButton" type="Number" integer="true" static="true" locid="F:J#Sys.UI.MouseButton.middleButton"></field>

+    /// <field name="rightButton" type="Number" integer="true" static="true" locid="F:J#Sys.UI.MouseButton.rightButton"></field>

+    if (arguments.length !== 0) throw Error.parameterCount();

+    throw Error.notImplemented();

+}

+Sys.UI.MouseButton.prototype = {

+    leftButton: 0,

+    middleButton: 1,

+    rightButton: 2

+}

+Sys.UI.MouseButton.registerEnum("Sys.UI.MouseButton");

+ 

+Sys.UI.Key = function Sys$UI$Key() {

+    /// <summary locid="M:J#Sys.UI.Key.#ctor" />

+    /// <field name="backspace" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.backspace"></field>

+    /// <field name="tab" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.tab"></field>

+    /// <field name="enter" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.enter"></field>

+    /// <field name="esc" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.esc"></field>

+    /// <field name="space" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.space"></field>

+    /// <field name="pageUp" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.pageUp"></field>

+    /// <field name="pageDown" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.pageDown"></field>

+    /// <field name="end" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.end"></field>

+    /// <field name="home" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.home"></field>

+    /// <field name="left" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.left"></field>

+    /// <field name="up" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.up"></field>

+    /// <field name="right" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.right"></field>

+    /// <field name="down" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.down"></field>

+    /// <field name="del" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.del"></field>

+    if (arguments.length !== 0) throw Error.parameterCount();

+    throw Error.notImplemented();

+}

+Sys.UI.Key.prototype = {

+    backspace: 8,

+    tab: 9,

+    enter: 13,

+    esc: 27,

+    space: 32,

+    pageUp: 33,

+    pageDown: 34,

+    end: 35,

+    home: 36,

+    left: 37,

+    up: 38,

+    right: 39,

+    down: 40,

+    del: 127

+}

+Sys.UI.Key.registerEnum("Sys.UI.Key");

+ 

+Sys.UI.Point = function Sys$UI$Point(x, y) {

+    /// <summary locid="M:J#Sys.UI.Point.#ctor" />

+    /// <param name="x" type="Number" integer="true"></param>

+    /// <param name="y" type="Number" integer="true"></param>

+    /// <field name="x" type="Number" integer="true" locid="F:J#Sys.UI.Point.x"></field>

+    /// <field name="y" type="Number" integer="true" locid="F:J#Sys.UI.Point.y"></field>

+    var e = Function._validateParams(arguments, [

+        {name: "x", type: Number, integer: true},

+        {name: "y", type: Number, integer: true}

+    ]);

+    if (e) throw e;

+    this.x = x;

+    this.y = y;

+}

+Sys.UI.Point.registerClass('Sys.UI.Point');

+ 

+Sys.UI.Bounds = function Sys$UI$Bounds(x, y, width, height) {

+    /// <summary locid="M:J#Sys.UI.Bounds.#ctor" />

+    /// <param name="x" type="Number" integer="true"></param>

+    /// <param name="y" type="Number" integer="true"></param>

+    /// <param name="width" type="Number" integer="true"></param>

+    /// <param name="height" type="Number" integer="true"></param>

+    /// <field name="x" type="Number" integer="true" locid="F:J#Sys.UI.Bounds.x"></field>

+    /// <field name="y" type="Number" integer="true" locid="F:J#Sys.UI.Bounds.y"></field>

+    /// <field name="width" type="Number" integer="true" locid="F:J#Sys.UI.Bounds.width"></field>

+    /// <field name="height" type="Number" integer="true" locid="F:J#Sys.UI.Bounds.height"></field>

+    var e = Function._validateParams(arguments, [

+        {name: "x", type: Number, integer: true},

+        {name: "y", type: Number, integer: true},

+        {name: "width", type: Number, integer: true},

+        {name: "height", type: Number, integer: true}

+    ]);

+    if (e) throw e;

+    this.x = x;

+    this.y = y;

+    this.height = height;

+    this.width = width;

+}

+Sys.UI.Bounds.registerClass('Sys.UI.Bounds');

+ 

+Sys.UI.DomEvent = function Sys$UI$DomEvent(eventObject) {

+    /// <summary locid="M:J#Sys.UI.DomEvent.#ctor" />

+    /// <param name="eventObject"></param>

+    /// <field name="altKey" type="Boolean" locid="F:J#Sys.UI.DomEvent.altKey"></field>

+    /// <field name="button" type="Sys.UI.MouseButton" locid="F:J#Sys.UI.DomEvent.button"></field>

+    /// <field name="charCode" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.charCode"></field>

+    /// <field name="clientX" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.clientX"></field>

+    /// <field name="clientY" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.clientY"></field>

+    /// <field name="ctrlKey" type="Boolean" locid="F:J#Sys.UI.DomEvent.ctrlKey"></field>

+    /// <field name="keyCode" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.keyCode"></field>

+    /// <field name="offsetX" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.offsetX"></field>

+    /// <field name="offsetY" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.offsetY"></field>

+    /// <field name="screenX" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.screenX"></field>

+    /// <field name="screenY" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.screenY"></field>

+    /// <field name="shiftKey" type="Boolean" locid="F:J#Sys.UI.DomEvent.shiftKey"></field>

+    /// <field name="target" locid="F:J#Sys.UI.DomEvent.target"></field>

+    /// <field name="type" type="String" locid="F:J#Sys.UI.DomEvent.type"></field>

+    var e = Function._validateParams(arguments, [

+        {name: "eventObject"}

+    ]);

+    if (e) throw e;

+    var ev = eventObject;

+    var etype = this.type = ev.type.toLowerCase();

+    this.rawEvent = ev;

+    this.altKey = ev.altKey;

+    if (typeof(ev.button) !== 'undefined') {

+        this.button = (typeof(ev.which) !== 'undefined') ? ev.button :

+            (ev.button === 4) ? Sys.UI.MouseButton.middleButton :

+            (ev.button === 2) ? Sys.UI.MouseButton.rightButton :

+            Sys.UI.MouseButton.leftButton;

+    }

+    if (etype === 'keypress') {

+        this.charCode = ev.charCode || ev.keyCode;

+    }

+    else if (ev.keyCode && (ev.keyCode === 46)) {

+        this.keyCode = 127;

+    }

+    else {

+        this.keyCode = ev.keyCode;

+    }

+    this.clientX = ev.clientX;

+    this.clientY = ev.clientY;

+    this.ctrlKey = ev.ctrlKey;

+    this.target = ev.target ? ev.target : ev.srcElement;

+    if (!etype.startsWith('key')) {

+        if ((typeof(ev.offsetX) !== 'undefined') && (typeof(ev.offsetY) !== 'undefined')) {

+            this.offsetX = ev.offsetX;

+            this.offsetY = ev.offsetY;

+        }

+        else if (this.target && (this.target.nodeType !== 3) && (typeof(ev.clientX) === 'number')) {

+            var loc = Sys.UI.DomElement.getLocation(this.target);

+            var w = Sys.UI.DomElement._getWindow(this.target);

+            this.offsetX = (w.pageXOffset || 0) + ev.clientX - loc.x;

+            this.offsetY = (w.pageYOffset || 0) + ev.clientY - loc.y;

+        }

+    }

+    this.screenX = ev.screenX;

+    this.screenY = ev.screenY;

+    this.shiftKey = ev.shiftKey;

+}

+    function Sys$UI$DomEvent$preventDefault() {

+        /// <summary locid="M:J#Sys.UI.DomEvent.preventDefault" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (this.rawEvent.preventDefault) {

+            this.rawEvent.preventDefault();

+        }

+        else if (window.event) {

+            this.rawEvent.returnValue = false;

+        }

+    }

+    function Sys$UI$DomEvent$stopPropagation() {

+        /// <summary locid="M:J#Sys.UI.DomEvent.stopPropagation" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (this.rawEvent.stopPropagation) {

+            this.rawEvent.stopPropagation();

+        }

+        else if (window.event) {

+            this.rawEvent.cancelBubble = true;

+        }

+    }

+Sys.UI.DomEvent.prototype = {

+    preventDefault: Sys$UI$DomEvent$preventDefault,

+    stopPropagation: Sys$UI$DomEvent$stopPropagation

+}

+Sys.UI.DomEvent.registerClass('Sys.UI.DomEvent');

+var $addHandler = Sys.UI.DomEvent.addHandler = function Sys$UI$DomEvent$addHandler(element, eventName, handler, autoRemove) {

+    /// <summary locid="M:J#Sys.UI.DomEvent.addHandler" />

+    /// <param name="element"></param>

+    /// <param name="eventName" type="String"></param>

+    /// <param name="handler" type="Function"></param>

+    /// <param name="autoRemove" type="Boolean" optional="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "element"},

+        {name: "eventName", type: String},

+        {name: "handler", type: Function},

+        {name: "autoRemove", type: Boolean, optional: true}

+    ]);

+    if (e) throw e;

+    Sys.UI.DomEvent._ensureDomNode(element);

+    if (eventName === "error") throw Error.invalidOperation(Sys.Res.addHandlerCantBeUsedForError);

+    if (!element._events) {

+        element._events = {};

+    }

+    var eventCache = element._events[eventName];

+    if (!eventCache) {

+        element._events[eventName] = eventCache = [];

+    }

+    var browserHandler;

+    if (element.addEventListener) {

+        browserHandler = function(e) {

+            return handler.call(element, new Sys.UI.DomEvent(e));

+        }

+        element.addEventListener(eventName, browserHandler, false);

+    }

+    else if (element.attachEvent) {

+        browserHandler = function() {

+            var e = {};

+            try {e = Sys.UI.DomElement._getWindow(element).event} catch(ex) {}

+            return handler.call(element, new Sys.UI.DomEvent(e));

+        }

+        element.attachEvent('on' + eventName, browserHandler);

+    }

+    eventCache[eventCache.length] = {handler: handler, browserHandler: browserHandler, autoRemove: autoRemove };

+    if (autoRemove) {

+        var d = element.dispose;

+        if (d !== Sys.UI.DomEvent._disposeHandlers) {

+            element.dispose = Sys.UI.DomEvent._disposeHandlers;

+            if (typeof(d) !== "undefined") {

+                element._chainDispose = d;

+            }

+        }

+    }

+}

+var $addHandlers = Sys.UI.DomEvent.addHandlers = function Sys$UI$DomEvent$addHandlers(element, events, handlerOwner, autoRemove) {

+    /// <summary locid="M:J#Sys.UI.DomEvent.addHandlers" />

+    /// <param name="element"></param>

+    /// <param name="events" type="Object"></param>

+    /// <param name="handlerOwner" optional="true"></param>

+    /// <param name="autoRemove" type="Boolean" optional="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "element"},

+        {name: "events", type: Object},

+        {name: "handlerOwner", optional: true},

+        {name: "autoRemove", type: Boolean, optional: true}

+    ]);

+    if (e) throw e;

+    Sys.UI.DomEvent._ensureDomNode(element);

+    for (var name in events) {

+        var handler = events[name];

+        if (typeof(handler) !== 'function') throw Error.invalidOperation(Sys.Res.cantAddNonFunctionhandler);

+        if (handlerOwner) {

+            handler = Function.createDelegate(handlerOwner, handler);

+        }

+        $addHandler(element, name, handler, autoRemove || false);

+    }

+}

+var $clearHandlers = Sys.UI.DomEvent.clearHandlers = function Sys$UI$DomEvent$clearHandlers(element) {

+    /// <summary locid="M:J#Sys.UI.DomEvent.clearHandlers" />

+    /// <param name="element"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "element"}

+    ]);

+    if (e) throw e;

+    Sys.UI.DomEvent._ensureDomNode(element);

+    Sys.UI.DomEvent._clearHandlers(element, false);

+}

+Sys.UI.DomEvent._clearHandlers = function Sys$UI$DomEvent$_clearHandlers(element, autoRemoving) {

+    if (element._events) {

+        var cache = element._events;

+        for (var name in cache) {

+            var handlers = cache[name];

+            for (var i = handlers.length - 1; i >= 0; i--) {

+                var entry = handlers[i];

+                if (!autoRemoving || entry.autoRemove) {

+                    $removeHandler(element, name, entry.handler);

+                }

+            }

+        }

+        element._events = null;

+    }

+}

+Sys.UI.DomEvent._disposeHandlers = function Sys$UI$DomEvent$_disposeHandlers() {

+    Sys.UI.DomEvent._clearHandlers(this, true);

+    var d = this._chainDispose, type = typeof(d);

+    if (type !== "undefined") {

+        this.dispose = d;

+        this._chainDispose = null;

+        if (type === "function") {

+            this.dispose();

+        }

+    }

+}

+var $removeHandler = Sys.UI.DomEvent.removeHandler = function Sys$UI$DomEvent$removeHandler(element, eventName, handler) {

+    /// <summary locid="M:J#Sys.UI.DomEvent.removeHandler" />

+    /// <param name="element"></param>

+    /// <param name="eventName" type="String"></param>

+    /// <param name="handler" type="Function"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "element"},

+        {name: "eventName", type: String},

+        {name: "handler", type: Function}

+    ]);

+    if (e) throw e;

+    Sys.UI.DomEvent._removeHandler(element, eventName, handler);

+}

+Sys.UI.DomEvent._removeHandler = function Sys$UI$DomEvent$_removeHandler(element, eventName, handler) {

+    Sys.UI.DomEvent._ensureDomNode(element);

+    var browserHandler = null;

+    if ((typeof(element._events) !== 'object') || !element._events) throw Error.invalidOperation(Sys.Res.eventHandlerInvalid);

+    var cache = element._events[eventName];

+    if (!(cache instanceof Array)) throw Error.invalidOperation(Sys.Res.eventHandlerInvalid);

+    for (var i = 0, l = cache.length; i < l; i++) {

+        if (cache[i].handler === handler) {

+            browserHandler = cache[i].browserHandler;

+            break;

+        }

+    }

+    if (typeof(browserHandler) !== 'function') throw Error.invalidOperation(Sys.Res.eventHandlerInvalid);

+    if (element.removeEventListener) {

+        element.removeEventListener(eventName, browserHandler, false);

+    }

+    else if (element.detachEvent) {

+        element.detachEvent('on' + eventName, browserHandler);

+    }

+    cache.splice(i, 1);

+}

+Sys.UI.DomEvent._ensureDomNode = function Sys$UI$DomEvent$_ensureDomNode(element) {

+    if (element.tagName && (element.tagName.toUpperCase() === "SCRIPT")) return;

+    

+    var doc = element.ownerDocument || element.document || element;

+    if ((typeof(element.document) !== 'object') && (element != doc) && (typeof(element.nodeType) !== 'number')) {

+        throw Error.argument("element", Sys.Res.argumentDomNode);

+    }

+}

+ 

+Sys.UI.DomElement = function Sys$UI$DomElement() {

+    /// <summary locid="M:J#Sys.UI.DomElement.#ctor" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+    throw Error.notImplemented();

+}

+Sys.UI.DomElement.registerClass('Sys.UI.DomElement');

+Sys.UI.DomElement.addCssClass = function Sys$UI$DomElement$addCssClass(element, className) {

+    /// <summary locid="M:J#Sys.UI.DomElement.addCssClass" />

+    /// <param name="element" domElement="true"></param>

+    /// <param name="className" type="String"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "element", domElement: true},

+        {name: "className", type: String}

+    ]);

+    if (e) throw e;

+    if (!Sys.UI.DomElement.containsCssClass(element, className)) {

+        if (element.className === '') {

+            element.className = className;

+        }

+        else {

+            element.className += ' ' + className;

+        }

+    }

+}

+Sys.UI.DomElement.containsCssClass = function Sys$UI$DomElement$containsCssClass(element, className) {

+    /// <summary locid="M:J#Sys.UI.DomElement.containsCssClass" />

+    /// <param name="element" domElement="true"></param>

+    /// <param name="className" type="String"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "element", domElement: true},

+        {name: "className", type: String}

+    ]);

+    if (e) throw e;

+    return Array.contains(element.className.split(' '), className);

+}

+Sys.UI.DomElement.getBounds = function Sys$UI$DomElement$getBounds(element) {

+    /// <summary locid="M:J#Sys.UI.DomElement.getBounds" />

+    /// <param name="element" domElement="true"></param>

+    /// <returns type="Sys.UI.Bounds"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "element", domElement: true}

+    ]);

+    if (e) throw e;

+    var offset = Sys.UI.DomElement.getLocation(element);

+    return new Sys.UI.Bounds(offset.x, offset.y, element.offsetWidth || 0, element.offsetHeight || 0);

+}

+var $get = Sys.UI.DomElement.getElementById = function Sys$UI$DomElement$getElementById(id, element) {

+    /// <summary locid="M:J#Sys.UI.DomElement.getElementById" />

+    /// <param name="id" type="String"></param>

+    /// <param name="element" domElement="true" optional="true" mayBeNull="true"></param>

+    /// <returns domElement="true" mayBeNull="true"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "id", type: String},

+        {name: "element", mayBeNull: true, domElement: true, optional: true}

+    ]);

+    if (e) throw e;

+    if (!element) return document.getElementById(id);

+    if (element.getElementById) return element.getElementById(id);

+    var nodeQueue = [];

+    var childNodes = element.childNodes;

+    for (var i = 0; i < childNodes.length; i++) {

+        var node = childNodes[i];

+        if (node.nodeType == 1) {

+            nodeQueue[nodeQueue.length] = node;

+        }

+    }

+    while (nodeQueue.length) {

+        node = nodeQueue.shift();

+        if (node.id == id) {

+            return node;

+        }

+        childNodes = node.childNodes;

+        for (i = 0; i < childNodes.length; i++) {

+            node = childNodes[i];

+            if (node.nodeType == 1) {

+                nodeQueue[nodeQueue.length] = node;

+            }

+        }

+    }

+    return null;

+}

+if (document.documentElement.getBoundingClientRect) {

+    Sys.UI.DomElement.getLocation = function Sys$UI$DomElement$getLocation(element) {

+        /// <summary locid="M:J#Sys.UI.DomElement.getLocation" />

+        /// <param name="element" domElement="true"></param>

+        /// <returns type="Sys.UI.Point"></returns>

+        var e = Function._validateParams(arguments, [

+            {name: "element", domElement: true}

+        ]);

+        if (e) throw e;

+        if (element.self || element.nodeType === 9) return new Sys.UI.Point(0,0);

+        var clientRect = element.getBoundingClientRect();

+        if (!clientRect) {

+            return new Sys.UI.Point(0,0);

+        }

+        var documentElement = element.ownerDocument.documentElement,

+            offsetX = Math.floor(clientRect.left + 0.5) + documentElement.scrollLeft,

+            offsetY = Math.floor(clientRect.top + 0.5) + documentElement.scrollTop;

+        if (Sys.Browser.agent === Sys.Browser.InternetExplorer) {

+            try {

+                var f = element.ownerDocument.parentWindow.frameElement || null;

+                if (f) {

+                    var offset = (f.frameBorder === "0" || f.frameBorder === "no") ? 2 : 0;

+                    offsetX += offset;

+                    offsetY += offset;

+                }

+            }

+            catch(ex) {

+            }

+            if (Sys.Browser.version <= 7) {

+                

+                var multiplier, before, rect, d = document.createElement("div");

+                d.style.cssText = "position:absolute !important;left:0px !important;right:0px !important;height:0px !important;width:1px !important;display:hidden !important";

+                try {

+                    before = document.body.childNodes[0];

+                    document.body.insertBefore(d, before);

+                    rect = d.getBoundingClientRect();

+                    document.body.removeChild(d);

+                    multiplier = (rect.right - rect.left);

+                }

+                catch (e) {

+                }

+                if (multiplier && (multiplier !== 1)) {

+                    offsetX = Math.floor(offsetX / multiplier);

+                    offsetY = Math.floor(offsetY / multiplier);

+                }

+            }        

+            if ((document.documentMode || 0) < 8) {

+                offsetX -= 2;

+                offsetY -= 2;

+            }

+        }

+        return new Sys.UI.Point(offsetX, offsetY);

+    }

+}

+else if (Sys.Browser.agent === Sys.Browser.Safari) {

+    Sys.UI.DomElement.getLocation = function Sys$UI$DomElement$getLocation(element) {

+        /// <summary locid="M:J#Sys.UI.DomElement.getLocation" />

+        /// <param name="element" domElement="true"></param>

+        /// <returns type="Sys.UI.Point"></returns>

+        var e = Function._validateParams(arguments, [

+            {name: "element", domElement: true}

+        ]);

+        if (e) throw e;

+        if ((element.window && (element.window === element)) || element.nodeType === 9) return new Sys.UI.Point(0,0);

+        var offsetX = 0, offsetY = 0,

+            parent,

+            previous = null,

+            previousStyle = null,

+            currentStyle;

+        for (parent = element; parent; previous = parent, previousStyle = currentStyle, parent = parent.offsetParent) {

+            currentStyle = Sys.UI.DomElement._getCurrentStyle(parent);

+            var tagName = parent.tagName ? parent.tagName.toUpperCase() : null;

+            if ((parent.offsetLeft || parent.offsetTop) &&

+                ((tagName !== "BODY") || (!previousStyle || previousStyle.position !== "absolute"))) {

+                offsetX += parent.offsetLeft;

+                offsetY += parent.offsetTop;

+            }

+            if (previous && Sys.Browser.version >= 3) {

+                offsetX += parseInt(currentStyle.borderLeftWidth);

+                offsetY += parseInt(currentStyle.borderTopWidth);

+            }

+        }

+        currentStyle = Sys.UI.DomElement._getCurrentStyle(element);

+        var elementPosition = currentStyle ? currentStyle.position : null;

+        if (!elementPosition || (elementPosition !== "absolute")) {

+            for (parent = element.parentNode; parent; parent = parent.parentNode) {

+                tagName = parent.tagName ? parent.tagName.toUpperCase() : null;

+                if ((tagName !== "BODY") && (tagName !== "HTML") && (parent.scrollLeft || parent.scrollTop)) {

+                    offsetX -= (parent.scrollLeft || 0);

+                    offsetY -= (parent.scrollTop || 0);

+                }

+                currentStyle = Sys.UI.DomElement._getCurrentStyle(parent);

+                var parentPosition = currentStyle ? currentStyle.position : null;

+                if (parentPosition && (parentPosition === "absolute")) break;

+            }

+        }

+        return new Sys.UI.Point(offsetX, offsetY);

+    }

+}

+else {

+    Sys.UI.DomElement.getLocation = function Sys$UI$DomElement$getLocation(element) {

+        /// <summary locid="M:J#Sys.UI.DomElement.getLocation" />

+        /// <param name="element" domElement="true"></param>

+        /// <returns type="Sys.UI.Point"></returns>

+        var e = Function._validateParams(arguments, [

+            {name: "element", domElement: true}

+        ]);

+        if (e) throw e;

+        if ((element.window && (element.window === element)) || element.nodeType === 9) return new Sys.UI.Point(0,0);

+        var offsetX = 0, offsetY = 0,

+            parent,

+            previous = null,

+            previousStyle = null,

+            currentStyle = null;

+        for (parent = element; parent; previous = parent, previousStyle = currentStyle, parent = parent.offsetParent) {

+            var tagName = parent.tagName ? parent.tagName.toUpperCase() : null;

+            currentStyle = Sys.UI.DomElement._getCurrentStyle(parent);

+            if ((parent.offsetLeft || parent.offsetTop) &&

+                !((tagName === "BODY") &&

+                (!previousStyle || previousStyle.position !== "absolute"))) {

+                offsetX += parent.offsetLeft;

+                offsetY += parent.offsetTop;

+            }

+            if (previous !== null && currentStyle) {

+                if ((tagName !== "TABLE") && (tagName !== "TD") && (tagName !== "HTML")) {

+                    offsetX += parseInt(currentStyle.borderLeftWidth) || 0;

+                    offsetY += parseInt(currentStyle.borderTopWidth) || 0;

+                }

+                if (tagName === "TABLE" &&

+                    (currentStyle.position === "relative" || currentStyle.position === "absolute")) {

+                    offsetX += parseInt(currentStyle.marginLeft) || 0;

+                    offsetY += parseInt(currentStyle.marginTop) || 0;

+                }

+            }

+        }

+        currentStyle = Sys.UI.DomElement._getCurrentStyle(element);

+        var elementPosition = currentStyle ? currentStyle.position : null;

+        if (!elementPosition || (elementPosition !== "absolute")) {

+            for (parent = element.parentNode; parent; parent = parent.parentNode) {

+                tagName = parent.tagName ? parent.tagName.toUpperCase() : null;

+                if ((tagName !== "BODY") && (tagName !== "HTML") && (parent.scrollLeft || parent.scrollTop)) {

+                    offsetX -= (parent.scrollLeft || 0);

+                    offsetY -= (parent.scrollTop || 0);

+                    currentStyle = Sys.UI.DomElement._getCurrentStyle(parent);

+                    if (currentStyle) {

+                        offsetX += parseInt(currentStyle.borderLeftWidth) || 0;

+                        offsetY += parseInt(currentStyle.borderTopWidth) || 0;

+                    }

+                }

+            }

+        }

+        return new Sys.UI.Point(offsetX, offsetY);

+    }

+}

+Sys.UI.DomElement.isDomElement = function Sys$UI$DomElement$isDomElement(obj) {

+    /// <summary locid="M:J#Sys.UI.DomElement.isDomElement" />

+    /// <param name="obj"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "obj"}

+    ]);

+    if (e) throw e;

+    return Sys._isDomElement(obj);

+}

+Sys.UI.DomElement.removeCssClass = function Sys$UI$DomElement$removeCssClass(element, className) {

+    /// <summary locid="M:J#Sys.UI.DomElement.removeCssClass" />

+    /// <param name="element" domElement="true"></param>

+    /// <param name="className" type="String"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "element", domElement: true},

+        {name: "className", type: String}

+    ]);

+    if (e) throw e;

+    var currentClassName = ' ' + element.className + ' ';

+    var index = currentClassName.indexOf(' ' + className + ' ');

+    if (index >= 0) {

+        element.className = (currentClassName.substr(0, index) + ' ' +

+            currentClassName.substring(index + className.length + 1, currentClassName.length)).trim();

+    }

+}

+Sys.UI.DomElement.resolveElement = function Sys$UI$DomElement$resolveElement(elementOrElementId, containerElement) {

+    /// <summary locid="M:J#Sys.UI.DomElement.resolveElement" />

+    /// <param name="elementOrElementId" mayBeNull="true"></param>

+    /// <param name="containerElement" domElement="true" optional="true" mayBeNull="true"></param>

+    /// <returns domElement="true"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "elementOrElementId", mayBeNull: true},

+        {name: "containerElement", mayBeNull: true, domElement: true, optional: true}

+    ]);

+    if (e) throw e;

+    var el = elementOrElementId;

+    if (!el) return null;

+    if (typeof(el) === "string") {

+        el = Sys.UI.DomElement.getElementById(el, containerElement);

+        if (!el) {

+            throw Error.argument("elementOrElementId", String.format(Sys.Res.elementNotFound, elementOrElementId));

+        }

+    }

+    else if(!Sys.UI.DomElement.isDomElement(el)) {

+        throw Error.argument("elementOrElementId", Sys.Res.expectedElementOrId);

+    }

+    return el;

+}

+Sys.UI.DomElement.raiseBubbleEvent = function Sys$UI$DomElement$raiseBubbleEvent(source, args) {

+    /// <summary locid="M:J#Sys.UI.DomElement.raiseBubbleEvent" />

+    /// <param name="source" domElement="true"></param>

+    /// <param name="args" type="Sys.EventArgs"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "source", domElement: true},

+        {name: "args", type: Sys.EventArgs}

+    ]);

+    if (e) throw e;

+    var target = source;

+    while (target) {

+        var control = target.control;

+        if (control && control.onBubbleEvent && control.raiseBubbleEvent) {

+            Sys.UI.DomElement._raiseBubbleEventFromControl(control, source, args);

+            return;

+        }

+        target = target.parentNode;

+    }

+}

+Sys.UI.DomElement._raiseBubbleEventFromControl = function Sys$UI$DomElement$_raiseBubbleEventFromControl(control, source, args) {

+    if (!control.onBubbleEvent(source, args)) {

+        control._raiseBubbleEvent(source, args);

+    }

+}

+Sys.UI.DomElement.setLocation = function Sys$UI$DomElement$setLocation(element, x, y) {

+    /// <summary locid="M:J#Sys.UI.DomElement.setLocation" />

+    /// <param name="element" domElement="true"></param>

+    /// <param name="x" type="Number" integer="true"></param>

+    /// <param name="y" type="Number" integer="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "element", domElement: true},

+        {name: "x", type: Number, integer: true},

+        {name: "y", type: Number, integer: true}

+    ]);

+    if (e) throw e;

+    var style = element.style;

+    style.position = 'absolute';

+    style.left = x + "px";

+    style.top = y + "px";

+}

+Sys.UI.DomElement.toggleCssClass = function Sys$UI$DomElement$toggleCssClass(element, className) {

+    /// <summary locid="M:J#Sys.UI.DomElement.toggleCssClass" />

+    /// <param name="element" domElement="true"></param>

+    /// <param name="className" type="String"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "element", domElement: true},

+        {name: "className", type: String}

+    ]);

+    if (e) throw e;

+    if (Sys.UI.DomElement.containsCssClass(element, className)) {

+        Sys.UI.DomElement.removeCssClass(element, className);

+    }

+    else {

+        Sys.UI.DomElement.addCssClass(element, className);

+    }

+}

+Sys.UI.DomElement.getVisibilityMode = function Sys$UI$DomElement$getVisibilityMode(element) {

+    /// <summary locid="M:J#Sys.UI.DomElement.getVisibilityMode" />

+    /// <param name="element" domElement="true"></param>

+    /// <returns type="Sys.UI.VisibilityMode"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "element", domElement: true}

+    ]);

+    if (e) throw e;

+    return (element._visibilityMode === Sys.UI.VisibilityMode.hide) ?

+        Sys.UI.VisibilityMode.hide :

+        Sys.UI.VisibilityMode.collapse;

+}

+Sys.UI.DomElement.setVisibilityMode = function Sys$UI$DomElement$setVisibilityMode(element, value) {

+    /// <summary locid="M:J#Sys.UI.DomElement.setVisibilityMode" />

+    /// <param name="element" domElement="true"></param>

+    /// <param name="value" type="Sys.UI.VisibilityMode"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "element", domElement: true},

+        {name: "value", type: Sys.UI.VisibilityMode}

+    ]);

+    if (e) throw e;

+    Sys.UI.DomElement._ensureOldDisplayMode(element);

+    if (element._visibilityMode !== value) {

+        element._visibilityMode = value;

+        if (Sys.UI.DomElement.getVisible(element) === false) {

+            if (element._visibilityMode === Sys.UI.VisibilityMode.hide) {

+                element.style.display = element._oldDisplayMode;

+            }

+            else {

+                element.style.display = 'none';

+            }

+        }

+        element._visibilityMode = value;

+    }

+}

+Sys.UI.DomElement.getVisible = function Sys$UI$DomElement$getVisible(element) {

+    /// <summary locid="M:J#Sys.UI.DomElement.getVisible" />

+    /// <param name="element" domElement="true"></param>

+    /// <returns type="Boolean"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "element", domElement: true}

+    ]);

+    if (e) throw e;

+    var style = element.currentStyle || Sys.UI.DomElement._getCurrentStyle(element);

+    if (!style) return true;

+    return (style.visibility !== 'hidden') && (style.display !== 'none');

+}

+Sys.UI.DomElement.setVisible = function Sys$UI$DomElement$setVisible(element, value) {

+    /// <summary locid="M:J#Sys.UI.DomElement.setVisible" />

+    /// <param name="element" domElement="true"></param>

+    /// <param name="value" type="Boolean"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "element", domElement: true},

+        {name: "value", type: Boolean}

+    ]);

+    if (e) throw e;

+    if (value !== Sys.UI.DomElement.getVisible(element)) {

+        Sys.UI.DomElement._ensureOldDisplayMode(element);

+        element.style.visibility = value ? 'visible' : 'hidden';

+        if (value || (element._visibilityMode === Sys.UI.VisibilityMode.hide)) {

+            element.style.display = element._oldDisplayMode;

+        }

+        else {

+            element.style.display = 'none';

+        }

+    }

+}

+Sys.UI.DomElement._ensureOldDisplayMode = function Sys$UI$DomElement$_ensureOldDisplayMode(element) {

+    if (!element._oldDisplayMode) {

+        var style = element.currentStyle || Sys.UI.DomElement._getCurrentStyle(element);

+        element._oldDisplayMode = style ? style.display : null;

+        if (!element._oldDisplayMode || element._oldDisplayMode === 'none') {

+            switch(element.tagName.toUpperCase()) {

+                case 'DIV': case 'P': case 'ADDRESS': case 'BLOCKQUOTE': case 'BODY': case 'COL':

+                case 'COLGROUP': case 'DD': case 'DL': case 'DT': case 'FIELDSET': case 'FORM':

+                case 'H1': case 'H2': case 'H3': case 'H4': case 'H5': case 'H6': case 'HR':

+                case 'IFRAME': case 'LEGEND': case 'OL': case 'PRE': case 'TABLE': case 'TD':

+                case 'TH': case 'TR': case 'UL':

+                    element._oldDisplayMode = 'block';

+                    break;

+                case 'LI':

+                    element._oldDisplayMode = 'list-item';

+                    break;

+                default:

+                    element._oldDisplayMode = 'inline';

+            }

+        }

+    }

+}

+Sys.UI.DomElement._getWindow = function Sys$UI$DomElement$_getWindow(element) {

+    var doc = element.ownerDocument || element.document || element;

+    return doc.defaultView || doc.parentWindow;

+}

+Sys.UI.DomElement._getCurrentStyle = function Sys$UI$DomElement$_getCurrentStyle(element) {

+    if (element.nodeType === 3) return null;

+    var w = Sys.UI.DomElement._getWindow(element);

+    if (element.documentElement) element = element.documentElement;

+    var computedStyle = (w && (element !== w) && w.getComputedStyle) ?

+        w.getComputedStyle(element, null) :

+        element.currentStyle || element.style;

+    if (!computedStyle && (Sys.Browser.agent === Sys.Browser.Safari) && element.style) {

+        var oldDisplay = element.style.display;

+        var oldPosition = element.style.position;

+        element.style.position = 'absolute';

+        element.style.display = 'block';

+        var style = w.getComputedStyle(element, null);

+        element.style.display = oldDisplay;

+        element.style.position = oldPosition;

+        computedStyle = {};

+        for (var n in style) {

+            computedStyle[n] = style[n];

+        }

+        computedStyle.display = 'none';

+    }

+    return computedStyle;

+}

+ 

+Sys.IContainer = function Sys$IContainer() {

+    throw Error.notImplemented();

+}

+    function Sys$IContainer$addComponent(component) {

+        /// <summary locid="M:J#Sys.IContainer.addComponent" />

+        /// <param name="component" type="Sys.Component"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "component", type: Sys.Component}

+        ]);

+        if (e) throw e;

+        throw Error.notImplemented();

+    }

+    function Sys$IContainer$removeComponent(component) {

+        /// <summary locid="M:J#Sys.IContainer.removeComponent" />

+        /// <param name="component" type="Sys.Component"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "component", type: Sys.Component}

+        ]);

+        if (e) throw e;

+        throw Error.notImplemented();

+    }

+    function Sys$IContainer$findComponent(id) {

+        /// <summary locid="M:J#Sys.IContainer.findComponent" />

+        /// <param name="id" type="String"></param>

+        /// <returns type="Sys.Component"></returns>

+        var e = Function._validateParams(arguments, [

+            {name: "id", type: String}

+        ]);

+        if (e) throw e;

+        throw Error.notImplemented();

+    }

+    function Sys$IContainer$getComponents() {

+        /// <summary locid="M:J#Sys.IContainer.getComponents" />

+        /// <returns type="Array" elementType="Sys.Component"></returns>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        throw Error.notImplemented();

+    }

+Sys.IContainer.prototype = {

+    addComponent: Sys$IContainer$addComponent,

+    removeComponent: Sys$IContainer$removeComponent,

+    findComponent: Sys$IContainer$findComponent,

+    getComponents: Sys$IContainer$getComponents

+}

+Sys.IContainer.registerInterface("Sys.IContainer");

+ 

+Sys.ApplicationLoadEventArgs = function Sys$ApplicationLoadEventArgs(components, isPartialLoad) {

+    /// <summary locid="M:J#Sys.ApplicationLoadEventArgs.#ctor" />

+    /// <param name="components" type="Array" elementType="Sys.Component"></param>

+    /// <param name="isPartialLoad" type="Boolean"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "components", type: Array, elementType: Sys.Component},

+        {name: "isPartialLoad", type: Boolean}

+    ]);

+    if (e) throw e;

+    Sys.ApplicationLoadEventArgs.initializeBase(this);

+    this._components = components;

+    this._isPartialLoad = isPartialLoad;

+}

+ 

+    function Sys$ApplicationLoadEventArgs$get_components() {

+        /// <value type="Array" elementType="Sys.Component" locid="P:J#Sys.ApplicationLoadEventArgs.components"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._components;

+    }

+    function Sys$ApplicationLoadEventArgs$get_isPartialLoad() {

+        /// <value type="Boolean" locid="P:J#Sys.ApplicationLoadEventArgs.isPartialLoad"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._isPartialLoad;

+    }

+Sys.ApplicationLoadEventArgs.prototype = {

+    get_components: Sys$ApplicationLoadEventArgs$get_components,

+    get_isPartialLoad: Sys$ApplicationLoadEventArgs$get_isPartialLoad

+}

+Sys.ApplicationLoadEventArgs.registerClass('Sys.ApplicationLoadEventArgs', Sys.EventArgs);

+ 

+Sys._Application = function Sys$_Application() {

+    /// <summary locid="M:J#Sys.Application.#ctor" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+    Sys._Application.initializeBase(this);

+    this._disposableObjects = [];

+    this._components = {};

+    this._createdComponents = [];

+    this._secondPassComponents = [];

+    this._unloadHandlerDelegate = Function.createDelegate(this, this._unloadHandler);

+    Sys.UI.DomEvent.addHandler(window, "unload", this._unloadHandlerDelegate);

+    this._domReady();

+}

+    function Sys$_Application$get_isCreatingComponents() {

+        /// <value type="Boolean" locid="P:J#Sys.Application.isCreatingComponents"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._creatingComponents;

+    }

+    function Sys$_Application$get_isDisposing() {

+        /// <value type="Boolean" locid="P:J#Sys.Application.isDisposing"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._disposing;

+    }

+    function Sys$_Application$add_init(handler) {

+        /// <summary locid="E:J#Sys.Application.init" />

+        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+        if (e) throw e;

+        if (this._initialized) {

+            handler(this, Sys.EventArgs.Empty);

+        }

+        else {

+            this.get_events().addHandler("init", handler);

+        }

+    }

+    function Sys$_Application$remove_init(handler) {

+        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+        if (e) throw e;

+        this.get_events().removeHandler("init", handler);

+    }

+    function Sys$_Application$add_load(handler) {

+        /// <summary locid="E:J#Sys.Application.load" />

+        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+        if (e) throw e;

+        this.get_events().addHandler("load", handler);

+    }

+    function Sys$_Application$remove_load(handler) {

+        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+        if (e) throw e;

+        this.get_events().removeHandler("load", handler);

+    }

+    function Sys$_Application$add_unload(handler) {

+        /// <summary locid="E:J#Sys.Application.unload" />

+        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+        if (e) throw e;

+        this.get_events().addHandler("unload", handler);

+    }

+    function Sys$_Application$remove_unload(handler) {

+        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+        if (e) throw e;

+        this.get_events().removeHandler("unload", handler);

+    }

+    function Sys$_Application$addComponent(component) {

+        /// <summary locid="M:J#Sys.Application.addComponent" />

+        /// <param name="component" type="Sys.Component"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "component", type: Sys.Component}

+        ]);

+        if (e) throw e;

+        var id = component.get_id();

+        if (!id) throw Error.invalidOperation(Sys.Res.cantAddWithoutId);

+        if (typeof(this._components[id]) !== 'undefined') throw Error.invalidOperation(String.format(Sys.Res.appDuplicateComponent, id));

+        this._components[id] = component;

+    }

+    function Sys$_Application$beginCreateComponents() {

+        /// <summary locid="M:J#Sys.Application.beginCreateComponents" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        this._creatingComponents = true;

+    }

+    function Sys$_Application$dispose() {

+        /// <summary locid="M:J#Sys.Application.dispose" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (!this._disposing) {

+            this._disposing = true;

+            if (this._timerCookie) {

+                window.clearTimeout(this._timerCookie);

+                delete this._timerCookie;

+            }

+            if (this._endRequestHandler) {

+                Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this._endRequestHandler);

+                delete this._endRequestHandler;

+            }

+            if (this._beginRequestHandler) {

+                Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(this._beginRequestHandler);

+                delete this._beginRequestHandler;

+            }

+            if (window.pageUnload) {

+                window.pageUnload(this, Sys.EventArgs.Empty);

+            }

+            var unloadHandler = this.get_events().getHandler("unload");

+            if (unloadHandler) {

+                unloadHandler(this, Sys.EventArgs.Empty);

+            }

+            var disposableObjects = Array.clone(this._disposableObjects);

+            for (var i = 0, l = disposableObjects.length; i < l; i++) {

+                var object = disposableObjects[i];

+                if (typeof(object) !== "undefined") {

+                    object.dispose();

+                }

+            }

+            Array.clear(this._disposableObjects);

+            Sys.UI.DomEvent.removeHandler(window, "unload", this._unloadHandlerDelegate);

+            if (Sys._ScriptLoader) {

+                var sl = Sys._ScriptLoader.getInstance();

+                if(sl) {

+                    sl.dispose();

+                }

+            }

+            Sys._Application.callBaseMethod(this, 'dispose');

+        }

+    }

+    function Sys$_Application$disposeElement(element, childNodesOnly) {

+        /// <summary locid="M:J#Sys._Application.disposeElement" />

+        /// <param name="element"></param>

+        /// <param name="childNodesOnly" type="Boolean"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "element"},

+            {name: "childNodesOnly", type: Boolean}

+        ]);

+        if (e) throw e;

+        if (element.nodeType === 1) {

+            var children = element.getElementsByTagName("*");

+            for (var i = children.length - 1; i >= 0; i--) {

+                this._disposeElementInternal(children[i]);

+            }

+            if (!childNodesOnly) {

+                this._disposeElementInternal(element);

+            }

+        }

+    }

+    function Sys$_Application$endCreateComponents() {

+        /// <summary locid="M:J#Sys.Application.endCreateComponents" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        var components = this._secondPassComponents;

+        for (var i = 0, l = components.length; i < l; i++) {

+            var component = components[i].component;

+            Sys$Component$_setReferences(component, components[i].references);

+            component.endUpdate();

+        }

+        this._secondPassComponents = [];

+        this._creatingComponents = false;

+    }

+    function Sys$_Application$findComponent(id, parent) {

+        /// <summary locid="M:J#Sys.Application.findComponent" />

+        /// <param name="id" type="String"></param>

+        /// <param name="parent" optional="true" mayBeNull="true"></param>

+        /// <returns type="Sys.Component" mayBeNull="true"></returns>

+        var e = Function._validateParams(arguments, [

+            {name: "id", type: String},

+            {name: "parent", mayBeNull: true, optional: true}

+        ]);

+        if (e) throw e;

+        return (parent ?

+            ((Sys.IContainer.isInstanceOfType(parent)) ?

+                parent.findComponent(id) :

+                parent[id] || null) :

+            Sys.Application._components[id] || null);

+    }

+    function Sys$_Application$getComponents() {

+        /// <summary locid="M:J#Sys.Application.getComponents" />

+        /// <returns type="Array" elementType="Sys.Component"></returns>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        var res = [];

+        var components = this._components;

+        for (var name in components) {

+            res[res.length] = components[name];

+        }

+        return res;

+    }

+    function Sys$_Application$initialize() {

+        /// <summary locid="M:J#Sys.Application.initialize" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if(!this.get_isInitialized() && !this._disposing) {

+            Sys._Application.callBaseMethod(this, 'initialize');

+            this._raiseInit();

+            if (this.get_stateString) {

+                if (Sys.WebForms && Sys.WebForms.PageRequestManager) {

+                    this._beginRequestHandler = Function.createDelegate(this, this._onPageRequestManagerBeginRequest);

+                    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(this._beginRequestHandler);

+                    this._endRequestHandler = Function.createDelegate(this, this._onPageRequestManagerEndRequest);

+                    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._endRequestHandler);

+                }

+                var loadedEntry = this.get_stateString();

+                if (loadedEntry !== this._currentEntry) {

+                    this._navigate(loadedEntry);

+                }

+                else {

+                    this._ensureHistory();

+                }

+            }

+            this.raiseLoad();

+        }

+    }

+    function Sys$_Application$notifyScriptLoaded() {

+        /// <summary locid="M:J#Sys.Application.notifyScriptLoaded" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+    }

+    function Sys$_Application$registerDisposableObject(object) {

+        /// <summary locid="M:J#Sys.Application.registerDisposableObject" />

+        /// <param name="object" type="Sys.IDisposable"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "object", type: Sys.IDisposable}

+        ]);

+        if (e) throw e;

+        if (!this._disposing) {

+            var objects = this._disposableObjects,

+                i = objects.length;

+            objects[i] = object;

+            object.__msdisposeindex = i;

+        }

+    }

+    function Sys$_Application$raiseLoad() {

+        /// <summary locid="M:J#Sys.Application.raiseLoad" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        var h = this.get_events().getHandler("load");

+        var args = new Sys.ApplicationLoadEventArgs(Array.clone(this._createdComponents), !!this._loaded);

+        this._loaded = true;

+        if (h) {

+            h(this, args);

+        }

+        if (window.pageLoad) {

+            window.pageLoad(this, args);

+        }

+        this._createdComponents = [];

+    }

+    function Sys$_Application$removeComponent(component) {

+        /// <summary locid="M:J#Sys.Application.removeComponent" />

+        /// <param name="component" type="Sys.Component"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "component", type: Sys.Component}

+        ]);

+        if (e) throw e;

+        var id = component.get_id();

+        if (id) delete this._components[id];

+    }

+    function Sys$_Application$unregisterDisposableObject(object) {

+        /// <summary locid="M:J#Sys.Application.unregisterDisposableObject" />

+        /// <param name="object" type="Sys.IDisposable"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "object", type: Sys.IDisposable}

+        ]);

+        if (e) throw e;

+        if (!this._disposing) {

+            var i = object.__msdisposeindex;

+            if (typeof(i) === "number") {

+                var disposableObjects = this._disposableObjects;

+                delete disposableObjects[i];

+                delete object.__msdisposeindex;

+                if (++this._deleteCount > 1000) {

+                    var newArray = [];

+                    for (var j = 0, l = disposableObjects.length; j < l; j++) {

+                        object = disposableObjects[j];

+                        if (typeof(object) !== "undefined") {

+                            object.__msdisposeindex = newArray.length;

+                            newArray.push(object);

+                        }

+                    }

+                    this._disposableObjects = newArray;

+                    this._deleteCount = 0;

+                }

+            }

+        }

+    }

+    function Sys$_Application$_addComponentToSecondPass(component, references) {

+        this._secondPassComponents[this._secondPassComponents.length] = {component: component, references: references};

+    }

+    function Sys$_Application$_disposeComponents(list) {

+        if (list) {

+            for (var i = list.length - 1; i >= 0; i--) {

+                var item = list[i];

+                if (typeof(item.dispose) === "function") {

+                    item.dispose();

+                }

+            }

+        }

+    }

+    function Sys$_Application$_disposeElementInternal(element) {

+        var d = element.dispose;

+        if (d && typeof(d) === "function") {

+            element.dispose();

+        }

+        else {

+            var c = element.control;

+            if (c && typeof(c.dispose) === "function") {

+                c.dispose();

+            }

+        }

+        var list = element._behaviors;

+        if (list) {

+            this._disposeComponents(list);

+        }

+        list = element._components;

+        if (list) {

+            this._disposeComponents(list);

+            element._components = null;

+        }

+    }

+    function Sys$_Application$_domReady() {

+        var check, er, app = this;

+        function init() { app.initialize(); }

+        var onload = function() {

+            Sys.UI.DomEvent.removeHandler(window, "load", onload);

+            init();

+        }

+        Sys.UI.DomEvent.addHandler(window, "load", onload);

+        

+        if (document.addEventListener) {

+            try {

+                document.addEventListener("DOMContentLoaded", check = function() {

+                    document.removeEventListener("DOMContentLoaded", check, false);

+                    init();

+                }, false);

+            }

+            catch (er) { }

+        }

+        else if (document.attachEvent) {

+            if ((window == window.top) && document.documentElement.doScroll) {

+                var timeout, el = document.createElement("div");

+                check = function() {

+                    try {

+                        el.doScroll("left");

+                    }

+                    catch (er) {

+                        timeout = window.setTimeout(check, 0);

+                        return;

+                    }

+                    el = null;

+                    init();

+                }

+                check();

+            }

+            else {

+		document.attachEvent("onreadystatechange", check = function() {

+                    if (document.readyState === "complete") {

+                        document.detachEvent("onreadystatechange", check);

+                        init();

+                    }

+                });

+            }

+        }

+    }

+    function Sys$_Application$_raiseInit() {

+        var handler = this.get_events().getHandler("init");

+        if (handler) {

+            this.beginCreateComponents();

+            handler(this, Sys.EventArgs.Empty);

+            this.endCreateComponents();

+        }

+    }

+    function Sys$_Application$_unloadHandler(event) {

+        this.dispose();

+    }

+Sys._Application.prototype = {

+    _creatingComponents: false,

+    _disposing: false,

+    _deleteCount: 0,

+    get_isCreatingComponents: Sys$_Application$get_isCreatingComponents,

+    get_isDisposing: Sys$_Application$get_isDisposing,

+    add_init: Sys$_Application$add_init,

+    remove_init: Sys$_Application$remove_init,

+    add_load: Sys$_Application$add_load,

+    remove_load: Sys$_Application$remove_load,

+    add_unload: Sys$_Application$add_unload,

+    remove_unload: Sys$_Application$remove_unload,

+    addComponent: Sys$_Application$addComponent,

+    beginCreateComponents: Sys$_Application$beginCreateComponents,

+    dispose: Sys$_Application$dispose,

+    disposeElement: Sys$_Application$disposeElement,

+    endCreateComponents: Sys$_Application$endCreateComponents,

+    findComponent: Sys$_Application$findComponent,

+    getComponents: Sys$_Application$getComponents,

+    initialize: Sys$_Application$initialize,

+    notifyScriptLoaded: Sys$_Application$notifyScriptLoaded,

+    registerDisposableObject: Sys$_Application$registerDisposableObject,

+    raiseLoad: Sys$_Application$raiseLoad,

+    removeComponent: Sys$_Application$removeComponent,

+    unregisterDisposableObject: Sys$_Application$unregisterDisposableObject,

+    _addComponentToSecondPass: Sys$_Application$_addComponentToSecondPass,

+    _disposeComponents: Sys$_Application$_disposeComponents,

+    _disposeElementInternal: Sys$_Application$_disposeElementInternal,

+    _domReady: Sys$_Application$_domReady,

+    _raiseInit: Sys$_Application$_raiseInit,

+    _unloadHandler: Sys$_Application$_unloadHandler

+}

+Sys._Application.registerClass('Sys._Application', Sys.Component, Sys.IContainer);

+Sys.Application = new Sys._Application();

+var $find = Sys.Application.findComponent;

+ 

+Sys.UI.Behavior = function Sys$UI$Behavior(element) {

+    /// <summary locid="M:J#Sys.UI.Behavior.#ctor" />

+    /// <param name="element" domElement="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "element", domElement: true}

+    ]);

+    if (e) throw e;

+    Sys.UI.Behavior.initializeBase(this);

+    this._element = element;

+    var behaviors = element._behaviors;

+    if (!behaviors) {

+        element._behaviors = [this];

+    }

+    else {

+        behaviors[behaviors.length] = this;

+    }

+}

+    function Sys$UI$Behavior$get_element() {

+        /// <value domElement="true" locid="P:J#Sys.UI.Behavior.element"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._element;

+    }

+    function Sys$UI$Behavior$get_id() {

+        /// <value type="String" locid="P:J#Sys.UI.Behavior.id"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        var baseId = Sys.UI.Behavior.callBaseMethod(this, 'get_id');

+        if (baseId) return baseId;

+        if (!this._element || !this._element.id) return '';

+        return this._element.id + '$' + this.get_name();

+    }

+    function Sys$UI$Behavior$get_name() {

+        /// <value type="String" locid="P:J#Sys.UI.Behavior.name"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (this._name) return this._name;

+        var name = Object.getTypeName(this);

+        var i = name.lastIndexOf('.');

+        if (i !== -1) name = name.substr(i + 1);

+        if (!this.get_isInitialized()) this._name = name;

+        return name;

+    }

+    function Sys$UI$Behavior$set_name(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: String}]);

+        if (e) throw e;

+        if ((value === '') || (value.charAt(0) === ' ') || (value.charAt(value.length - 1) === ' '))

+            throw Error.argument('value', Sys.Res.invalidId);

+        if (typeof(this._element[value]) !== 'undefined')

+            throw Error.invalidOperation(String.format(Sys.Res.behaviorDuplicateName, value));

+        if (this.get_isInitialized()) throw Error.invalidOperation(Sys.Res.cantSetNameAfterInit);

+        this._name = value;

+    }

+    function Sys$UI$Behavior$initialize() {

+        Sys.UI.Behavior.callBaseMethod(this, 'initialize');

+        var name = this.get_name();

+        if (name) this._element[name] = this;

+    }

+    function Sys$UI$Behavior$dispose() {

+        Sys.UI.Behavior.callBaseMethod(this, 'dispose');

+        var e = this._element;

+        if (e) {

+            var name = this.get_name();

+            if (name) {

+                e[name] = null;

+            }

+            var behaviors = e._behaviors;

+            Array.remove(behaviors, this);

+            if (behaviors.length === 0) {

+                e._behaviors = null;

+            }

+            delete this._element;

+        }

+    }

+Sys.UI.Behavior.prototype = {

+    _name: null,

+    get_element: Sys$UI$Behavior$get_element,

+    get_id: Sys$UI$Behavior$get_id,

+    get_name: Sys$UI$Behavior$get_name,

+    set_name: Sys$UI$Behavior$set_name,

+    initialize: Sys$UI$Behavior$initialize,

+    dispose: Sys$UI$Behavior$dispose

+}

+Sys.UI.Behavior.registerClass('Sys.UI.Behavior', Sys.Component);

+Sys.UI.Behavior.getBehaviorByName = function Sys$UI$Behavior$getBehaviorByName(element, name) {

+    /// <summary locid="M:J#Sys.UI.Behavior.getBehaviorByName" />

+    /// <param name="element" domElement="true"></param>

+    /// <param name="name" type="String"></param>

+    /// <returns type="Sys.UI.Behavior" mayBeNull="true"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "element", domElement: true},

+        {name: "name", type: String}

+    ]);

+    if (e) throw e;

+    var b = element[name];

+    return (b && Sys.UI.Behavior.isInstanceOfType(b)) ? b : null;

+}

+Sys.UI.Behavior.getBehaviors = function Sys$UI$Behavior$getBehaviors(element) {

+    /// <summary locid="M:J#Sys.UI.Behavior.getBehaviors" />

+    /// <param name="element" domElement="true"></param>

+    /// <returns type="Array" elementType="Sys.UI.Behavior"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "element", domElement: true}

+    ]);

+    if (e) throw e;

+    if (!element._behaviors) return [];

+    return Array.clone(element._behaviors);

+}

+Sys.UI.Behavior.getBehaviorsByType = function Sys$UI$Behavior$getBehaviorsByType(element, type) {

+    /// <summary locid="M:J#Sys.UI.Behavior.getBehaviorsByType" />

+    /// <param name="element" domElement="true"></param>

+    /// <param name="type" type="Type"></param>

+    /// <returns type="Array" elementType="Sys.UI.Behavior"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "element", domElement: true},

+        {name: "type", type: Type}

+    ]);

+    if (e) throw e;

+    var behaviors = element._behaviors;

+    var results = [];

+    if (behaviors) {

+        for (var i = 0, l = behaviors.length; i < l; i++) {

+            if (type.isInstanceOfType(behaviors[i])) {

+                results[results.length] = behaviors[i];

+            }

+        }

+    }

+    return results;

+}

+ 

+Sys.UI.VisibilityMode = function Sys$UI$VisibilityMode() {

+    /// <summary locid="M:J#Sys.UI.VisibilityMode.#ctor" />

+    /// <field name="hide" type="Number" integer="true" static="true" locid="F:J#Sys.UI.VisibilityMode.hide"></field>

+    /// <field name="collapse" type="Number" integer="true" static="true" locid="F:J#Sys.UI.VisibilityMode.collapse"></field>

+    if (arguments.length !== 0) throw Error.parameterCount();

+    throw Error.notImplemented();

+}

+Sys.UI.VisibilityMode.prototype = {

+    hide: 0,

+    collapse: 1

+}

+Sys.UI.VisibilityMode.registerEnum("Sys.UI.VisibilityMode");

+ 

+Sys.UI.Control = function Sys$UI$Control(element) {

+    /// <summary locid="M:J#Sys.UI.Control.#ctor" />

+    /// <param name="element" domElement="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "element", domElement: true}

+    ]);

+    if (e) throw e;

+    if (typeof(element.control) !== 'undefined') throw Error.invalidOperation(Sys.Res.controlAlreadyDefined);

+    Sys.UI.Control.initializeBase(this);

+    this._element = element;

+    element.control = this;

+    var role = this.get_role();

+    if (role) {

+        element.setAttribute("role", role);

+    }

+}

+    function Sys$UI$Control$get_element() {

+        /// <value domElement="true" locid="P:J#Sys.UI.Control.element"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._element;

+    }

+    function Sys$UI$Control$get_id() {

+        /// <value type="String" locid="P:J#Sys.UI.Control.id"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (!this._element) return '';

+        return this._element.id;

+    }

+    function Sys$UI$Control$set_id(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: String}]);

+        if (e) throw e;

+        throw Error.invalidOperation(Sys.Res.cantSetId);

+    }

+    function Sys$UI$Control$get_parent() {

+        /// <value type="Sys.UI.Control" locid="P:J#Sys.UI.Control.parent"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (this._parent) return this._parent;

+        if (!this._element) return null;

+        

+        var parentElement = this._element.parentNode;

+        while (parentElement) {

+            if (parentElement.control) {

+                return parentElement.control;

+            }

+            parentElement = parentElement.parentNode;

+        }

+        return null;

+    }

+    function Sys$UI$Control$set_parent(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: Sys.UI.Control}]);

+        if (e) throw e;

+        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);

+        var parents = [this];

+        var current = value;

+        while (current) {

+            if (Array.contains(parents, current)) throw Error.invalidOperation(Sys.Res.circularParentChain);

+            parents[parents.length] = current;

+            current = current.get_parent();

+        }

+        this._parent = value;

+    }

+    function Sys$UI$Control$get_role() {

+        /// <value type="String" locid="P:J#Sys.UI.Control.role"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return null;

+    }

+    function Sys$UI$Control$get_visibilityMode() {

+        /// <value type="Sys.UI.VisibilityMode" locid="P:J#Sys.UI.Control.visibilityMode"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);

+        return Sys.UI.DomElement.getVisibilityMode(this._element);

+    }

+    function Sys$UI$Control$set_visibilityMode(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: Sys.UI.VisibilityMode}]);

+        if (e) throw e;

+        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);

+        Sys.UI.DomElement.setVisibilityMode(this._element, value);

+    }

+    function Sys$UI$Control$get_visible() {

+        /// <value type="Boolean" locid="P:J#Sys.UI.Control.visible"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);

+        return Sys.UI.DomElement.getVisible(this._element);

+    }

+    function Sys$UI$Control$set_visible(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: Boolean}]);

+        if (e) throw e;

+        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);

+        Sys.UI.DomElement.setVisible(this._element, value)

+    }

+    function Sys$UI$Control$addCssClass(className) {

+        /// <summary locid="M:J#Sys.UI.Control.addCssClass" />

+        /// <param name="className" type="String"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "className", type: String}

+        ]);

+        if (e) throw e;

+        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);

+        Sys.UI.DomElement.addCssClass(this._element, className);

+    }

+    function Sys$UI$Control$dispose() {

+        Sys.UI.Control.callBaseMethod(this, 'dispose');

+        if (this._element) {

+            this._element.control = null;

+            delete this._element;

+        }

+        if (this._parent) delete this._parent;

+    }

+    function Sys$UI$Control$onBubbleEvent(source, args) {

+        /// <summary locid="M:J#Sys.UI.Control.onBubbleEvent" />

+        /// <param name="source"></param>

+        /// <param name="args" type="Sys.EventArgs"></param>

+        /// <returns type="Boolean"></returns>

+        var e = Function._validateParams(arguments, [

+            {name: "source"},

+            {name: "args", type: Sys.EventArgs}

+        ]);

+        if (e) throw e;

+        return false;

+    }

+    function Sys$UI$Control$raiseBubbleEvent(source, args) {

+        /// <summary locid="M:J#Sys.UI.Control.raiseBubbleEvent" />

+        /// <param name="source"></param>

+        /// <param name="args" type="Sys.EventArgs"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "source"},

+            {name: "args", type: Sys.EventArgs}

+        ]);

+        if (e) throw e;

+        this._raiseBubbleEvent(source, args);

+    }

+    function Sys$UI$Control$_raiseBubbleEvent(source, args) {

+        var currentTarget = this.get_parent();

+        while (currentTarget) {

+            if (currentTarget.onBubbleEvent(source, args)) {

+                return;

+            }

+            currentTarget = currentTarget.get_parent();

+        }

+    }

+    function Sys$UI$Control$removeCssClass(className) {

+        /// <summary locid="M:J#Sys.UI.Control.removeCssClass" />

+        /// <param name="className" type="String"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "className", type: String}

+        ]);

+        if (e) throw e;

+        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);

+        Sys.UI.DomElement.removeCssClass(this._element, className);

+    }

+    function Sys$UI$Control$toggleCssClass(className) {

+        /// <summary locid="M:J#Sys.UI.Control.toggleCssClass" />

+        /// <param name="className" type="String"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "className", type: String}

+        ]);

+        if (e) throw e;

+        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);

+        Sys.UI.DomElement.toggleCssClass(this._element, className);

+    }

+Sys.UI.Control.prototype = {

+    _parent: null,

+    _visibilityMode: Sys.UI.VisibilityMode.hide,

+    get_element: Sys$UI$Control$get_element,

+    get_id: Sys$UI$Control$get_id,

+    set_id: Sys$UI$Control$set_id,

+    get_parent: Sys$UI$Control$get_parent,

+    set_parent: Sys$UI$Control$set_parent,

+    get_role: Sys$UI$Control$get_role,

+    get_visibilityMode: Sys$UI$Control$get_visibilityMode,

+    set_visibilityMode: Sys$UI$Control$set_visibilityMode,

+    get_visible: Sys$UI$Control$get_visible,

+    set_visible: Sys$UI$Control$set_visible,

+    addCssClass: Sys$UI$Control$addCssClass,

+    dispose: Sys$UI$Control$dispose,

+    onBubbleEvent: Sys$UI$Control$onBubbleEvent,

+    raiseBubbleEvent: Sys$UI$Control$raiseBubbleEvent,

+    _raiseBubbleEvent: Sys$UI$Control$_raiseBubbleEvent,

+    removeCssClass: Sys$UI$Control$removeCssClass,

+    toggleCssClass: Sys$UI$Control$toggleCssClass

+}

+Sys.UI.Control.registerClass('Sys.UI.Control', Sys.Component);

+Sys.HistoryEventArgs = function Sys$HistoryEventArgs(state) {

+    /// <summary locid="M:J#Sys.HistoryEventArgs.#ctor" />

+    /// <param name="state" type="Object"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "state", type: Object}

+    ]);

+    if (e) throw e;

+    Sys.HistoryEventArgs.initializeBase(this);

+    this._state = state;

+}

+    function Sys$HistoryEventArgs$get_state() {

+        /// <value type="Object" locid="P:J#Sys.HistoryEventArgs.state"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._state;

+    }

+Sys.HistoryEventArgs.prototype = {

+    get_state: Sys$HistoryEventArgs$get_state

+}

+Sys.HistoryEventArgs.registerClass('Sys.HistoryEventArgs', Sys.EventArgs);

+Sys.Application._appLoadHandler = null;

+Sys.Application._beginRequestHandler = null;

+Sys.Application._clientId = null;

+Sys.Application._currentEntry = '';

+Sys.Application._endRequestHandler = null;

+Sys.Application._history = null;

+Sys.Application._enableHistory = false;

+Sys.Application._historyEnabledInScriptManager = false;

+Sys.Application._historyFrame = null;

+Sys.Application._historyInitialized = false;

+Sys.Application._historyPointIsNew = false;

+Sys.Application._ignoreTimer = false;

+Sys.Application._initialState = null;

+Sys.Application._state = {};

+Sys.Application._timerCookie = 0;

+Sys.Application._timerHandler = null;

+Sys.Application._uniqueId = null;

+Sys._Application.prototype.get_stateString = function Sys$_Application$get_stateString() {

+    /// <summary locid="M:J#Sys._Application.get_stateString" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+    var hash = null;

+    

+    if (Sys.Browser.agent === Sys.Browser.Firefox) {

+        var href = window.location.href;

+        var hashIndex = href.indexOf('#');

+        if (hashIndex !== -1) {

+            hash = href.substring(hashIndex + 1);

+        }

+        else {

+            hash = "";

+        }

+        return hash;

+    }

+    else {

+        hash = window.location.hash;

+    }

+    

+    if ((hash.length > 0) && (hash.charAt(0) === '#')) {

+        hash = hash.substring(1);

+    }

+    return hash;

+};

+Sys._Application.prototype.get_enableHistory = function Sys$_Application$get_enableHistory() {

+    /// <summary locid="M:J#Sys._Application.get_enableHistory" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+    return this._enableHistory;

+};

+Sys._Application.prototype.set_enableHistory = function Sys$_Application$set_enableHistory(value) {

+    if (this._initialized && !this._initializing) {

+        throw Error.invalidOperation(Sys.Res.historyCannotEnableHistory);

+    }

+    else if (this._historyEnabledInScriptManager && !value) {

+        throw Error.invalidOperation(Sys.Res.invalidHistorySettingCombination);

+    }

+    this._enableHistory = value;

+};

+Sys._Application.prototype.add_navigate = function Sys$_Application$add_navigate(handler) {

+    /// <summary locid="E:J#Sys.Application.navigate" />

+    /// <param name="handler" type="Function"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "handler", type: Function}

+    ]);

+    if (e) throw e;

+    this.get_events().addHandler("navigate", handler);

+};

+Sys._Application.prototype.remove_navigate = function Sys$_Application$remove_navigate(handler) {

+    /// <summary locid="M:J#Sys._Application.remove_navigate" />

+    /// <param name="handler" type="Function"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "handler", type: Function}

+    ]);

+    if (e) throw e;

+    this.get_events().removeHandler("navigate", handler);

+};

+Sys._Application.prototype.addHistoryPoint = function Sys$_Application$addHistoryPoint(state, title) {

+    /// <summary locid="M:J#Sys.Application.addHistoryPoint" />

+    /// <param name="state" type="Object"></param>

+    /// <param name="title" type="String" optional="true" mayBeNull="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "state", type: Object},

+        {name: "title", type: String, mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    if (!this._enableHistory) throw Error.invalidOperation(Sys.Res.historyCannotAddHistoryPointWithHistoryDisabled);

+    for (var n in state) {

+        var v = state[n];

+        var t = typeof(v);

+        if ((v !== null) && ((t === 'object') || (t === 'function') || (t === 'undefined'))) {

+            throw Error.argument('state', Sys.Res.stateMustBeStringDictionary);

+        }

+    }

+    this._ensureHistory();

+    var initialState = this._state;

+    for (var key in state) {

+        var value = state[key];

+        if (value === null) {

+            if (typeof(initialState[key]) !== 'undefined') {

+                delete initialState[key];

+            }

+        }

+        else {

+            initialState[key] = value;

+        }

+    }

+    var entry = this._serializeState(initialState);

+    this._historyPointIsNew = true;

+    this._setState(entry, title);

+    this._raiseNavigate();

+};

+Sys._Application.prototype.setServerId = function Sys$_Application$setServerId(clientId, uniqueId) {

+    /// <summary locid="M:J#Sys.Application.setServerId" />

+    /// <param name="clientId" type="String"></param>

+    /// <param name="uniqueId" type="String"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "clientId", type: String},

+        {name: "uniqueId", type: String}

+    ]);

+    if (e) throw e;

+    this._clientId = clientId;

+    this._uniqueId = uniqueId;

+};

+Sys._Application.prototype.setServerState = function Sys$_Application$setServerState(value) {

+    /// <summary locid="M:J#Sys.Application.setServerState" />

+    /// <param name="value" type="String"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "value", type: String}

+    ]);

+    if (e) throw e;

+    this._ensureHistory();

+    this._state.__s = value;

+    this._updateHiddenField(value);

+};

+Sys._Application.prototype._deserializeState = function Sys$_Application$_deserializeState(entry) {

+    var result = {};

+    entry = entry || '';

+    var serverSeparator = entry.indexOf('&&');

+    if ((serverSeparator !== -1) && (serverSeparator + 2 < entry.length)) {

+        result.__s = entry.substr(serverSeparator + 2);

+        entry = entry.substr(0, serverSeparator);

+    }

+    var tokens = entry.split('&');

+    for (var i = 0, l = tokens.length; i < l; i++) {

+        var token = tokens[i];

+        var equal = token.indexOf('=');

+        if ((equal !== -1) && (equal + 1 < token.length)) {

+            var name = token.substr(0, equal);

+            var value = token.substr(equal + 1);

+            result[name] = decodeURIComponent(value);

+        }

+    }

+    return result;

+};

+Sys._Application.prototype._enableHistoryInScriptManager = function Sys$_Application$_enableHistoryInScriptManager() {

+    this._enableHistory = true;

+    this._historyEnabledInScriptManager = true;

+};

+Sys._Application.prototype._ensureHistory = function Sys$_Application$_ensureHistory() {

+    if (!this._historyInitialized && this._enableHistory) {

+        if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.documentMode < 8)) {

+            this._historyFrame = document.getElementById('__historyFrame');

+            if (!this._historyFrame) throw Error.invalidOperation(Sys.Res.historyMissingFrame);

+            this._ignoreIFrame = true;

+        }

+        this._timerHandler = Function.createDelegate(this, this._onIdle);

+        this._timerCookie = window.setTimeout(this._timerHandler, 100);

+        

+        try {

+            this._initialState = this._deserializeState(this.get_stateString());

+        } catch(e) {}

+        

+        this._historyInitialized = true;

+    }

+};

+Sys._Application.prototype._navigate = function Sys$_Application$_navigate(entry) {

+    this._ensureHistory();

+    var state = this._deserializeState(entry);

+    

+    if (this._uniqueId) {

+        var oldServerEntry = this._state.__s || '';

+        var newServerEntry = state.__s || '';

+        if (newServerEntry !== oldServerEntry) {

+            this._updateHiddenField(newServerEntry);

+            __doPostBack(this._uniqueId, newServerEntry);

+            this._state = state;

+            return;

+        }

+    }

+    this._setState(entry);

+    this._state = state;

+    this._raiseNavigate();

+};

+Sys._Application.prototype._onIdle = function Sys$_Application$_onIdle() {

+    delete this._timerCookie;

+    

+    var entry = this.get_stateString();

+    if (entry !== this._currentEntry) {

+        if (!this._ignoreTimer) {

+            this._historyPointIsNew = false;

+            this._navigate(entry);

+        }

+    }

+    else {

+        this._ignoreTimer = false;

+    }

+    this._timerCookie = window.setTimeout(this._timerHandler, 100);

+};

+Sys._Application.prototype._onIFrameLoad = function Sys$_Application$_onIFrameLoad(entry) {

+    this._ensureHistory();

+    if (!this._ignoreIFrame) {

+        this._historyPointIsNew = false;

+        this._navigate(entry);

+    }

+    this._ignoreIFrame = false;

+};

+Sys._Application.prototype._onPageRequestManagerBeginRequest = function Sys$_Application$_onPageRequestManagerBeginRequest(sender, args) {

+    this._ignoreTimer = true;

+};

+Sys._Application.prototype._onPageRequestManagerEndRequest = function Sys$_Application$_onPageRequestManagerEndRequest(sender, args) {

+    var dataItem = args.get_dataItems()[this._clientId];

+    var eventTarget = document.getElementById("__EVENTTARGET");

+    if (eventTarget && eventTarget.value === this._uniqueId) {

+        eventTarget.value = '';

+    }

+    if (typeof(dataItem) !== 'undefined') {

+        this.setServerState(dataItem);

+        this._historyPointIsNew = true;

+    }

+    else {

+        this._ignoreTimer = false;

+    }

+    var entry = this._serializeState(this._state);

+    if (entry !== this._currentEntry) {

+        this._ignoreTimer = true;

+        this._setState(entry);

+        this._raiseNavigate();

+    }

+};

+Sys._Application.prototype._raiseNavigate = function Sys$_Application$_raiseNavigate() {

+    var h = this.get_events().getHandler("navigate");

+    var stateClone = {};

+    for (var key in this._state) {

+        if (key !== '__s') {

+            stateClone[key] = this._state[key];

+        }

+    }

+    var args = new Sys.HistoryEventArgs(stateClone);

+    if (h) {

+        h(this, args);

+    }

+    var err;

+    try {

+        if ((Sys.Browser.agent === Sys.Browser.Firefox) && window.location.hash &&

+            (!window.frameElement || window.top.location.hash)) {

+            window.history.go(0);

+        }

+    }

+    catch(err) {

+    }

+};

+Sys._Application.prototype._serializeState = function Sys$_Application$_serializeState(state) {

+    var serialized = [];

+    for (var key in state) {

+        var value = state[key];

+        if (key === '__s') {

+            var serverState = value;

+        }

+        else {

+            if (key.indexOf('=') !== -1) throw Error.argument('state', Sys.Res.stateFieldNameInvalid);

+            serialized[serialized.length] = key + '=' + encodeURIComponent(value);

+        }

+    }

+    return serialized.join('&') + (serverState ? '&&' + serverState : '');

+};

+Sys._Application.prototype._setState = function Sys$_Application$_setState(entry, title) {

+    if (this._enableHistory) {

+        entry = entry || '';

+        if (entry !== this._currentEntry) {

+            if (window.theForm) {

+                var action = window.theForm.action;

+                var hashIndex = action.indexOf('#');

+                window.theForm.action = ((hashIndex !== -1) ? action.substring(0, hashIndex) : action) + '#' + entry;

+            }

+        

+            if (this._historyFrame && this._historyPointIsNew) {

+                this._ignoreIFrame = true;

+                var frameDoc = this._historyFrame.contentWindow.document;

+                frameDoc.open("javascript:'<html></html>'");

+                frameDoc.write("<html><head><title>" + (title || document.title) +

+                    "</title><scri" + "pt type=\"text/javascript\">parent.Sys.Application._onIFrameLoad(" + 

+                    Sys.Serialization.JavaScriptSerializer.serialize(entry) +

+                    ");</scri" + "pt></head><body></body></html>");

+                frameDoc.close();

+            }

+            this._ignoreTimer = false;

+            this._currentEntry = entry;

+            if (this._historyFrame || this._historyPointIsNew) {

+                var currentHash = this.get_stateString();

+                if (entry !== currentHash) {

+                    var loc = document.location;

+                    if (loc.href.length - loc.hash.length + entry.length > 1024) {

+                        throw Error.invalidOperation(Sys.Res.urlMustBeLessThan1024chars);

+                    }

+                    window.location.hash = entry;

+                    this._currentEntry = this.get_stateString();

+                    if ((typeof(title) !== 'undefined') && (title !== null)) {

+                        document.title = title;

+                    }

+                }

+            }

+            this._historyPointIsNew = false;

+        }

+    }

+};

+Sys._Application.prototype._updateHiddenField = function Sys$_Application$_updateHiddenField(value) {

+    if (this._clientId) {

+        var serverStateField = document.getElementById(this._clientId);

+        if (serverStateField) {

+            serverStateField.value = value;

+        }

+    }

+};

+ 

+if (!window.XMLHttpRequest) {

+    window.XMLHttpRequest = function window$XMLHttpRequest() {

+        var progIDs = [ 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP' ];

+        for (var i = 0, l = progIDs.length; i < l; i++) {

+            try {

+                return new ActiveXObject(progIDs[i]);

+            }

+            catch (ex) {

+            }

+        }

+        return null;

+    }

+}

+Type.registerNamespace('Sys.Net');

+ 

+Sys.Net.WebRequestExecutor = function Sys$Net$WebRequestExecutor() {

+    /// <summary locid="M:J#Sys.Net.WebRequestExecutor.#ctor" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+    this._webRequest = null;

+    this._resultObject = null;

+}

+    function Sys$Net$WebRequestExecutor$get_webRequest() {

+        /// <value type="Sys.Net.WebRequest" locid="P:J#Sys.Net.WebRequestExecutor.webRequest"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._webRequest;

+    }

+    function Sys$Net$WebRequestExecutor$_set_webRequest(value) {

+        if (this.get_started()) {

+            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOnceStarted, 'set_webRequest'));

+        }

+        this._webRequest = value;

+    }

+    function Sys$Net$WebRequestExecutor$get_started() {

+        /// <value type="Boolean" locid="P:J#Sys.Net.WebRequestExecutor.started"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        throw Error.notImplemented();

+    }

+    function Sys$Net$WebRequestExecutor$get_responseAvailable() {

+        /// <value type="Boolean" locid="P:J#Sys.Net.WebRequestExecutor.responseAvailable"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        throw Error.notImplemented();

+    }

+    function Sys$Net$WebRequestExecutor$get_timedOut() {

+        /// <value type="Boolean" locid="P:J#Sys.Net.WebRequestExecutor.timedOut"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        throw Error.notImplemented();

+    }

+    function Sys$Net$WebRequestExecutor$get_aborted() {

+        /// <value type="Boolean" locid="P:J#Sys.Net.WebRequestExecutor.aborted"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        throw Error.notImplemented();

+    }

+    function Sys$Net$WebRequestExecutor$get_responseData() {

+        /// <value type="String" locid="P:J#Sys.Net.WebRequestExecutor.responseData"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        throw Error.notImplemented();

+    }

+    function Sys$Net$WebRequestExecutor$get_statusCode() {

+        /// <value type="Number" locid="P:J#Sys.Net.WebRequestExecutor.statusCode"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        throw Error.notImplemented();

+    }

+    function Sys$Net$WebRequestExecutor$get_statusText() {

+        /// <value type="String" locid="P:J#Sys.Net.WebRequestExecutor.statusText"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        throw Error.notImplemented();

+    }

+    function Sys$Net$WebRequestExecutor$get_xml() {

+        /// <value locid="P:J#Sys.Net.WebRequestExecutor.xml"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        throw Error.notImplemented();

+    }

+    function Sys$Net$WebRequestExecutor$get_object() {

+        /// <value locid="P:J#Sys.Net.WebRequestExecutor.object"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (!this._resultObject) {

+            this._resultObject = Sys.Serialization.JavaScriptSerializer.deserialize(this.get_responseData());

+        }

+        return this._resultObject;

+    }

+    function Sys$Net$WebRequestExecutor$executeRequest() {

+        /// <summary locid="M:J#Sys.Net.WebRequestExecutor.executeRequest" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        throw Error.notImplemented();

+    }

+    function Sys$Net$WebRequestExecutor$abort() {

+        /// <summary locid="M:J#Sys.Net.WebRequestExecutor.abort" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        throw Error.notImplemented();

+    }

+    function Sys$Net$WebRequestExecutor$getResponseHeader(header) {

+        /// <summary locid="M:J#Sys.Net.WebRequestExecutor.getResponseHeader" />

+        /// <param name="header" type="String"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "header", type: String}

+        ]);

+        if (e) throw e;

+        throw Error.notImplemented();

+    }

+    function Sys$Net$WebRequestExecutor$getAllResponseHeaders() {

+        /// <summary locid="M:J#Sys.Net.WebRequestExecutor.getAllResponseHeaders" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        throw Error.notImplemented();

+    }

+Sys.Net.WebRequestExecutor.prototype = {

+    get_webRequest: Sys$Net$WebRequestExecutor$get_webRequest,

+    _set_webRequest: Sys$Net$WebRequestExecutor$_set_webRequest,

+    get_started: Sys$Net$WebRequestExecutor$get_started,

+    get_responseAvailable: Sys$Net$WebRequestExecutor$get_responseAvailable,

+    get_timedOut: Sys$Net$WebRequestExecutor$get_timedOut,

+    get_aborted: Sys$Net$WebRequestExecutor$get_aborted,

+    get_responseData: Sys$Net$WebRequestExecutor$get_responseData,

+    get_statusCode: Sys$Net$WebRequestExecutor$get_statusCode,

+    get_statusText: Sys$Net$WebRequestExecutor$get_statusText,

+    get_xml: Sys$Net$WebRequestExecutor$get_xml,

+    get_object: Sys$Net$WebRequestExecutor$get_object,

+    executeRequest: Sys$Net$WebRequestExecutor$executeRequest,

+    abort: Sys$Net$WebRequestExecutor$abort,

+    getResponseHeader: Sys$Net$WebRequestExecutor$getResponseHeader,

+    getAllResponseHeaders: Sys$Net$WebRequestExecutor$getAllResponseHeaders

+}

+Sys.Net.WebRequestExecutor.registerClass('Sys.Net.WebRequestExecutor');

+ 

+Sys.Net.XMLDOM = function Sys$Net$XMLDOM(markup) {

+    /// <summary locid="M:J#Sys.Net.XMLDOM.#ctor" />

+    /// <param name="markup" type="String"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "markup", type: String}

+    ]);

+    if (e) throw e;

+    if (!window.DOMParser) {

+        var progIDs = [ 'Msxml2.DOMDocument.3.0', 'Msxml2.DOMDocument' ];

+        for (var i = 0, l = progIDs.length; i < l; i++) {

+            try {

+                var xmlDOM = new ActiveXObject(progIDs[i]);

+                xmlDOM.async = false;

+                xmlDOM.loadXML(markup);

+                xmlDOM.setProperty('SelectionLanguage', 'XPath');

+                return xmlDOM;

+            }

+            catch (ex) {

+            }

+        }

+    }

+    else {

+        try {

+            var domParser = new window.DOMParser();

+            return domParser.parseFromString(markup, 'text/xml');

+        }

+        catch (ex) {

+        }

+    }

+    return null;

+}

+Sys.Net.XMLHttpExecutor = function Sys$Net$XMLHttpExecutor() {

+    /// <summary locid="M:J#Sys.Net.XMLHttpExecutor.#ctor" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+    Sys.Net.XMLHttpExecutor.initializeBase(this);

+    var _this = this;

+    this._xmlHttpRequest = null;

+    this._webRequest = null;

+    this._responseAvailable = false;

+    this._timedOut = false;

+    this._timer = null;

+    this._aborted = false;

+    this._started = false;

+    this._onReadyStateChange = (function () {

+        

+        if (_this._xmlHttpRequest.readyState === 4 ) {

+            try {

+                if (typeof(_this._xmlHttpRequest.status) === "undefined") {

+                    return;

+                }

+            }

+            catch(ex) {

+                return;

+            }

+            

+            _this._clearTimer();

+            _this._responseAvailable = true;

+                _this._webRequest.completed(Sys.EventArgs.Empty);

+                if (_this._xmlHttpRequest != null) {

+                    _this._xmlHttpRequest.onreadystatechange = Function.emptyMethod;

+                    _this._xmlHttpRequest = null;

+                }

+        }

+    });

+    this._clearTimer = (function() {

+        if (_this._timer != null) {

+            window.clearTimeout(_this._timer);

+            _this._timer = null;

+        }

+    });

+    this._onTimeout = (function() {

+        if (!_this._responseAvailable) {

+            _this._clearTimer();

+            _this._timedOut = true;

+            _this._xmlHttpRequest.onreadystatechange = Function.emptyMethod;

+            _this._xmlHttpRequest.abort();

+            _this._webRequest.completed(Sys.EventArgs.Empty);

+            _this._xmlHttpRequest = null;

+        }

+    });

+}

+    function Sys$Net$XMLHttpExecutor$get_timedOut() {

+        /// <value type="Boolean" locid="P:J#Sys.Net.XMLHttpExecutor.timedOut"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._timedOut;

+    }

+    function Sys$Net$XMLHttpExecutor$get_started() {

+        /// <value type="Boolean" locid="P:J#Sys.Net.XMLHttpExecutor.started"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._started;

+    }

+    function Sys$Net$XMLHttpExecutor$get_responseAvailable() {

+        /// <value type="Boolean" locid="P:J#Sys.Net.XMLHttpExecutor.responseAvailable"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._responseAvailable;

+    }

+    function Sys$Net$XMLHttpExecutor$get_aborted() {

+        /// <value type="Boolean" locid="P:J#Sys.Net.XMLHttpExecutor.aborted"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._aborted;

+    }

+    function Sys$Net$XMLHttpExecutor$executeRequest() {

+        /// <summary locid="M:J#Sys.Net.XMLHttpExecutor.executeRequest" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        this._webRequest = this.get_webRequest();

+        if (this._started) {

+            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOnceStarted, 'executeRequest'));

+        }

+        if (this._webRequest === null) {

+            throw Error.invalidOperation(Sys.Res.nullWebRequest);

+        }

+        var body = this._webRequest.get_body();

+        var headers = this._webRequest.get_headers();

+        this._xmlHttpRequest = new XMLHttpRequest();

+        this._xmlHttpRequest.onreadystatechange = this._onReadyStateChange;

+        var verb = this._webRequest.get_httpVerb();

+        this._xmlHttpRequest.open(verb, this._webRequest.getResolvedUrl(), true );

+        this._xmlHttpRequest.setRequestHeader("X-Requested-With", "XMLHttpRequest");

+        if (headers) {

+            for (var header in headers) {

+                var val = headers[header];

+                if (typeof(val) !== "function")

+                    this._xmlHttpRequest.setRequestHeader(header, val);

+            }

+        }

+        if (verb.toLowerCase() === "post") {

+            if ((headers === null) || !headers['Content-Type']) {

+                this._xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');

+            }

+            if (!body) {

+                body = "";

+            }

+        }

+        var timeout = this._webRequest.get_timeout();

+        if (timeout > 0) {

+            this._timer = window.setTimeout(Function.createDelegate(this, this._onTimeout), timeout);

+        }

+        this._xmlHttpRequest.send(body);

+        this._started = true;

+    }

+    function Sys$Net$XMLHttpExecutor$getResponseHeader(header) {

+        /// <summary locid="M:J#Sys.Net.XMLHttpExecutor.getResponseHeader" />

+        /// <param name="header" type="String"></param>

+        /// <returns type="String"></returns>

+        var e = Function._validateParams(arguments, [

+            {name: "header", type: String}

+        ]);

+        if (e) throw e;

+        if (!this._responseAvailable) {

+            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'getResponseHeader'));

+        }

+        if (!this._xmlHttpRequest) {

+            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'getResponseHeader'));

+        }

+        var result;

+        try {

+            result = this._xmlHttpRequest.getResponseHeader(header);

+        } catch (e) {

+        }

+        if (!result) result = "";

+        return result;

+    }

+    function Sys$Net$XMLHttpExecutor$getAllResponseHeaders() {

+        /// <summary locid="M:J#Sys.Net.XMLHttpExecutor.getAllResponseHeaders" />

+        /// <returns type="String"></returns>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (!this._responseAvailable) {

+            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'getAllResponseHeaders'));

+        }

+        if (!this._xmlHttpRequest) {

+            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'getAllResponseHeaders'));

+        }

+        return this._xmlHttpRequest.getAllResponseHeaders();

+    }

+    function Sys$Net$XMLHttpExecutor$get_responseData() {

+        /// <value type="String" locid="P:J#Sys.Net.XMLHttpExecutor.responseData"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (!this._responseAvailable) {

+            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_responseData'));

+        }

+        if (!this._xmlHttpRequest) {

+            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_responseData'));

+        }

+        return this._xmlHttpRequest.responseText;

+    }

+    function Sys$Net$XMLHttpExecutor$get_statusCode() {

+        /// <value type="Number" locid="P:J#Sys.Net.XMLHttpExecutor.statusCode"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (!this._responseAvailable) {

+            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_statusCode'));

+        }

+        if (!this._xmlHttpRequest) {

+            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_statusCode'));

+        }

+        var result = 0;

+        try {

+            result = this._xmlHttpRequest.status;

+        }

+        catch(ex) {

+        }

+        return result;

+    }

+    function Sys$Net$XMLHttpExecutor$get_statusText() {

+        /// <value type="String" locid="P:J#Sys.Net.XMLHttpExecutor.statusText"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (!this._responseAvailable) {

+            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_statusText'));

+        }

+        if (!this._xmlHttpRequest) {

+            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_statusText'));

+        }

+        return this._xmlHttpRequest.statusText;

+    }

+    function Sys$Net$XMLHttpExecutor$get_xml() {

+        /// <value locid="P:J#Sys.Net.XMLHttpExecutor.xml"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (!this._responseAvailable) {

+            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_xml'));

+        }

+        if (!this._xmlHttpRequest) {

+            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_xml'));

+        }

+        var xml = this._xmlHttpRequest.responseXML;

+        if (!xml || !xml.documentElement) {

+            xml = Sys.Net.XMLDOM(this._xmlHttpRequest.responseText);

+            if (!xml || !xml.documentElement)

+                return null;

+        }

+        else if (navigator.userAgent.indexOf('MSIE') !== -1) {

+            xml.setProperty('SelectionLanguage', 'XPath');

+        }

+        if (xml.documentElement.namespaceURI === "http://www.mozilla.org/newlayout/xml/parsererror.xml" &&

+            xml.documentElement.tagName === "parsererror") {

+            return null;

+        }

+        

+        if (xml.documentElement.firstChild && xml.documentElement.firstChild.tagName === "parsererror") {

+            return null;

+        }

+        

+        return xml;

+    }

+    function Sys$Net$XMLHttpExecutor$abort() {

+        /// <summary locid="M:J#Sys.Net.XMLHttpExecutor.abort" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (!this._started) {

+            throw Error.invalidOperation(Sys.Res.cannotAbortBeforeStart);

+        }

+        if (this._aborted || this._responseAvailable || this._timedOut)

+            return;

+        this._aborted = true;

+        this._clearTimer();

+        if (this._xmlHttpRequest && !this._responseAvailable) {

+            this._xmlHttpRequest.onreadystatechange = Function.emptyMethod;

+            this._xmlHttpRequest.abort();

+            

+            this._xmlHttpRequest = null;            

+            this._webRequest.completed(Sys.EventArgs.Empty);

+        }

+    }

+Sys.Net.XMLHttpExecutor.prototype = {

+    get_timedOut: Sys$Net$XMLHttpExecutor$get_timedOut,

+    get_started: Sys$Net$XMLHttpExecutor$get_started,

+    get_responseAvailable: Sys$Net$XMLHttpExecutor$get_responseAvailable,

+    get_aborted: Sys$Net$XMLHttpExecutor$get_aborted,

+    executeRequest: Sys$Net$XMLHttpExecutor$executeRequest,

+    getResponseHeader: Sys$Net$XMLHttpExecutor$getResponseHeader,

+    getAllResponseHeaders: Sys$Net$XMLHttpExecutor$getAllResponseHeaders,

+    get_responseData: Sys$Net$XMLHttpExecutor$get_responseData,

+    get_statusCode: Sys$Net$XMLHttpExecutor$get_statusCode,

+    get_statusText: Sys$Net$XMLHttpExecutor$get_statusText,

+    get_xml: Sys$Net$XMLHttpExecutor$get_xml,

+    abort: Sys$Net$XMLHttpExecutor$abort

+}

+Sys.Net.XMLHttpExecutor.registerClass('Sys.Net.XMLHttpExecutor', Sys.Net.WebRequestExecutor);

+ 

+Sys.Net._WebRequestManager = function Sys$Net$_WebRequestManager() {

+    /// <summary locid="P:J#Sys.Net.WebRequestManager.#ctor" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+    this._defaultTimeout = 0;

+    this._defaultExecutorType = "Sys.Net.XMLHttpExecutor";

+}

+    function Sys$Net$_WebRequestManager$add_invokingRequest(handler) {

+        /// <summary locid="E:J#Sys.Net.WebRequestManager.invokingRequest" />

+        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+        if (e) throw e;

+        this._get_eventHandlerList().addHandler("invokingRequest", handler);

+    }

+    function Sys$Net$_WebRequestManager$remove_invokingRequest(handler) {

+        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+        if (e) throw e;

+        this._get_eventHandlerList().removeHandler("invokingRequest", handler);

+    }

+    function Sys$Net$_WebRequestManager$add_completedRequest(handler) {

+        /// <summary locid="E:J#Sys.Net.WebRequestManager.completedRequest" />

+        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+        if (e) throw e;

+        this._get_eventHandlerList().addHandler("completedRequest", handler);

+    }

+    function Sys$Net$_WebRequestManager$remove_completedRequest(handler) {

+        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+        if (e) throw e;

+        this._get_eventHandlerList().removeHandler("completedRequest", handler);

+    }

+    function Sys$Net$_WebRequestManager$_get_eventHandlerList() {

+        if (!this._events) {

+            this._events = new Sys.EventHandlerList();

+        }

+        return this._events;

+    }

+    function Sys$Net$_WebRequestManager$get_defaultTimeout() {

+        /// <value type="Number" locid="P:J#Sys.Net.WebRequestManager.defaultTimeout"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._defaultTimeout;

+    }

+    function Sys$Net$_WebRequestManager$set_defaultTimeout(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: Number}]);

+        if (e) throw e;

+        if (value < 0) {

+            throw Error.argumentOutOfRange("value", value, Sys.Res.invalidTimeout);

+        }

+        this._defaultTimeout = value;

+    }

+    function Sys$Net$_WebRequestManager$get_defaultExecutorType() {

+        /// <value type="String" locid="P:J#Sys.Net.WebRequestManager.defaultExecutorType"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._defaultExecutorType;

+    }

+    function Sys$Net$_WebRequestManager$set_defaultExecutorType(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: String}]);

+        if (e) throw e;

+        this._defaultExecutorType = value;

+    }

+    function Sys$Net$_WebRequestManager$executeRequest(webRequest) {

+        /// <summary locid="M:J#Sys.Net.WebRequestManager.executeRequest" />

+        /// <param name="webRequest" type="Sys.Net.WebRequest"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "webRequest", type: Sys.Net.WebRequest}

+        ]);

+        if (e) throw e;

+        var executor = webRequest.get_executor();

+        if (!executor) {

+            var failed = false;

+            try {

+                var executorType = eval(this._defaultExecutorType);

+                executor = new executorType();

+            } catch (e) {

+                failed = true;

+            }

+            if (failed  || !Sys.Net.WebRequestExecutor.isInstanceOfType(executor) || !executor) {

+                throw Error.argument("defaultExecutorType", String.format(Sys.Res.invalidExecutorType, this._defaultExecutorType));

+            }

+            webRequest.set_executor(executor);

+        }

+        if (executor.get_aborted()) {

+            return;

+        }

+        var evArgs = new Sys.Net.NetworkRequestEventArgs(webRequest);

+        var handler = this._get_eventHandlerList().getHandler("invokingRequest");

+        if (handler) {

+            handler(this, evArgs);

+        }

+        if (!evArgs.get_cancel()) {

+            executor.executeRequest();

+        }

+    }

+Sys.Net._WebRequestManager.prototype = {

+    add_invokingRequest: Sys$Net$_WebRequestManager$add_invokingRequest,

+    remove_invokingRequest: Sys$Net$_WebRequestManager$remove_invokingRequest,

+    add_completedRequest: Sys$Net$_WebRequestManager$add_completedRequest,

+    remove_completedRequest: Sys$Net$_WebRequestManager$remove_completedRequest,

+    _get_eventHandlerList: Sys$Net$_WebRequestManager$_get_eventHandlerList,

+    get_defaultTimeout: Sys$Net$_WebRequestManager$get_defaultTimeout,

+    set_defaultTimeout: Sys$Net$_WebRequestManager$set_defaultTimeout,

+    get_defaultExecutorType: Sys$Net$_WebRequestManager$get_defaultExecutorType,

+    set_defaultExecutorType: Sys$Net$_WebRequestManager$set_defaultExecutorType,

+    executeRequest: Sys$Net$_WebRequestManager$executeRequest

+}

+Sys.Net._WebRequestManager.registerClass('Sys.Net._WebRequestManager');

+Sys.Net.WebRequestManager = new Sys.Net._WebRequestManager();

+ 

+Sys.Net.NetworkRequestEventArgs = function Sys$Net$NetworkRequestEventArgs(webRequest) {

+    /// <summary locid="M:J#Sys.Net.NetworkRequestEventArgs.#ctor" />

+    /// <param name="webRequest" type="Sys.Net.WebRequest"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "webRequest", type: Sys.Net.WebRequest}

+    ]);

+    if (e) throw e;

+    Sys.Net.NetworkRequestEventArgs.initializeBase(this);

+    this._webRequest = webRequest;

+}

+    function Sys$Net$NetworkRequestEventArgs$get_webRequest() {

+        /// <value type="Sys.Net.WebRequest" locid="P:J#Sys.Net.NetworkRequestEventArgs.webRequest"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._webRequest;

+    }

+Sys.Net.NetworkRequestEventArgs.prototype = {

+    get_webRequest: Sys$Net$NetworkRequestEventArgs$get_webRequest

+}

+Sys.Net.NetworkRequestEventArgs.registerClass('Sys.Net.NetworkRequestEventArgs', Sys.CancelEventArgs);

+ 

+Sys.Net.WebRequest = function Sys$Net$WebRequest() {

+    /// <summary locid="M:J#Sys.Net.WebRequest.#ctor" />

+    if (arguments.length !== 0) throw Error.parameterCount();

+    this._url = "";

+    this._headers = { };

+    this._body = null;

+    this._userContext = null;

+    this._httpVerb = null;

+    this._executor = null;

+    this._invokeCalled = false;

+    this._timeout = 0;

+}

+    function Sys$Net$WebRequest$add_completed(handler) {

+    /// <summary locid="E:J#Sys.Net.WebRequest.completed" />

+    var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+    if (e) throw e;

+        this._get_eventHandlerList().addHandler("completed", handler);

+    }

+    function Sys$Net$WebRequest$remove_completed(handler) {

+    var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);

+    if (e) throw e;

+        this._get_eventHandlerList().removeHandler("completed", handler);

+    }

+    function Sys$Net$WebRequest$completed(eventArgs) {

+        /// <summary locid="M:J#Sys.Net.WebRequest.completed" />

+        /// <param name="eventArgs" type="Sys.EventArgs"></param>

+        var e = Function._validateParams(arguments, [

+            {name: "eventArgs", type: Sys.EventArgs}

+        ]);

+        if (e) throw e;

+        var handler = Sys.Net.WebRequestManager._get_eventHandlerList().getHandler("completedRequest");

+        if (handler) {

+            handler(this._executor, eventArgs);

+        }

+        handler = this._get_eventHandlerList().getHandler("completed");

+        if (handler) {

+            handler(this._executor, eventArgs);

+        }

+    }

+    function Sys$Net$WebRequest$_get_eventHandlerList() {

+        if (!this._events) {

+            this._events = new Sys.EventHandlerList();

+        }

+        return this._events;

+    }

+    function Sys$Net$WebRequest$get_url() {

+        /// <value type="String" locid="P:J#Sys.Net.WebRequest.url"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._url;

+    }

+    function Sys$Net$WebRequest$set_url(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: String}]);

+        if (e) throw e;

+        this._url = value;

+    }

+    function Sys$Net$WebRequest$get_headers() {

+        /// <value locid="P:J#Sys.Net.WebRequest.headers"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._headers;

+    }

+    function Sys$Net$WebRequest$get_httpVerb() {

+        /// <value type="String" locid="P:J#Sys.Net.WebRequest.httpVerb"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (this._httpVerb === null) {

+            if (this._body === null) {

+                return "GET";

+            }

+            return "POST";

+        }

+        return this._httpVerb;

+    }

+    function Sys$Net$WebRequest$set_httpVerb(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: String}]);

+        if (e) throw e;

+        if (value.length === 0) {

+            throw Error.argument('value', Sys.Res.invalidHttpVerb);

+        }

+        this._httpVerb = value;

+    }

+    function Sys$Net$WebRequest$get_body() {

+        /// <value mayBeNull="true" locid="P:J#Sys.Net.WebRequest.body"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._body;

+    }

+    function Sys$Net$WebRequest$set_body(value) {

+        var e = Function._validateParams(arguments, [{name: "value", mayBeNull: true}]);

+        if (e) throw e;

+        this._body = value;

+    }

+    function Sys$Net$WebRequest$get_userContext() {

+        /// <value mayBeNull="true" locid="P:J#Sys.Net.WebRequest.userContext"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._userContext;

+    }

+    function Sys$Net$WebRequest$set_userContext(value) {

+        var e = Function._validateParams(arguments, [{name: "value", mayBeNull: true}]);

+        if (e) throw e;

+        this._userContext = value;

+    }

+    function Sys$Net$WebRequest$get_executor() {

+        /// <value type="Sys.Net.WebRequestExecutor" locid="P:J#Sys.Net.WebRequest.executor"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._executor;

+    }

+    function Sys$Net$WebRequest$set_executor(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: Sys.Net.WebRequestExecutor}]);

+        if (e) throw e;

+        if (this._executor !== null && this._executor.get_started()) {

+            throw Error.invalidOperation(Sys.Res.setExecutorAfterActive);

+        }

+        this._executor = value;

+        this._executor._set_webRequest(this);

+    }

+    function Sys$Net$WebRequest$get_timeout() {

+        /// <value type="Number" locid="P:J#Sys.Net.WebRequest.timeout"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (this._timeout === 0) {

+            return Sys.Net.WebRequestManager.get_defaultTimeout();

+        }

+        return this._timeout;

+    }

+    function Sys$Net$WebRequest$set_timeout(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: Number}]);

+        if (e) throw e;

+        if (value < 0) {

+            throw Error.argumentOutOfRange("value", value, Sys.Res.invalidTimeout);

+        }

+        this._timeout = value;

+    }

+    function Sys$Net$WebRequest$getResolvedUrl() {

+        /// <summary locid="M:J#Sys.Net.WebRequest.getResolvedUrl" />

+        /// <returns type="String"></returns>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return Sys.Net.WebRequest._resolveUrl(this._url);

+    }

+    function Sys$Net$WebRequest$invoke() {

+        /// <summary locid="M:J#Sys.Net.WebRequest.invoke" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        if (this._invokeCalled) {

+            throw Error.invalidOperation(Sys.Res.invokeCalledTwice);

+        }

+        Sys.Net.WebRequestManager.executeRequest(this);

+        this._invokeCalled = true;

+    }

+Sys.Net.WebRequest.prototype = {

+    add_completed: Sys$Net$WebRequest$add_completed,

+    remove_completed: Sys$Net$WebRequest$remove_completed,

+    completed: Sys$Net$WebRequest$completed,

+    _get_eventHandlerList: Sys$Net$WebRequest$_get_eventHandlerList,

+    get_url: Sys$Net$WebRequest$get_url,

+    set_url: Sys$Net$WebRequest$set_url,

+    get_headers: Sys$Net$WebRequest$get_headers,

+    get_httpVerb: Sys$Net$WebRequest$get_httpVerb,

+    set_httpVerb: Sys$Net$WebRequest$set_httpVerb,

+    get_body: Sys$Net$WebRequest$get_body,

+    set_body: Sys$Net$WebRequest$set_body,

+    get_userContext: Sys$Net$WebRequest$get_userContext,

+    set_userContext: Sys$Net$WebRequest$set_userContext,

+    get_executor: Sys$Net$WebRequest$get_executor,

+    set_executor: Sys$Net$WebRequest$set_executor,

+    get_timeout: Sys$Net$WebRequest$get_timeout,

+    set_timeout: Sys$Net$WebRequest$set_timeout,

+    getResolvedUrl: Sys$Net$WebRequest$getResolvedUrl,

+    invoke: Sys$Net$WebRequest$invoke

+}

+Sys.Net.WebRequest._resolveUrl = function Sys$Net$WebRequest$_resolveUrl(url, baseUrl) {

+    if (url && url.indexOf('://') !== -1) {

+        return url;

+    }

+    if (!baseUrl || baseUrl.length === 0) {

+        var baseElement = document.getElementsByTagName('base')[0];

+        if (baseElement && baseElement.href && baseElement.href.length > 0) {

+            baseUrl = baseElement.href;

+        }

+        else {

+            baseUrl = document.URL;

+        }

+    }

+    var qsStart = baseUrl.indexOf('?');

+    if (qsStart !== -1) {

+        baseUrl = baseUrl.substr(0, qsStart);

+    }

+    qsStart = baseUrl.indexOf('#');

+    if (qsStart !== -1) {

+        baseUrl = baseUrl.substr(0, qsStart);

+    }

+    baseUrl = baseUrl.substr(0, baseUrl.lastIndexOf('/') + 1);

+    if (!url || url.length === 0) {

+        return baseUrl;

+    }

+    if (url.charAt(0) === '/') {

+        var slashslash = baseUrl.indexOf('://');

+        if (slashslash === -1) {

+            throw Error.argument("baseUrl", Sys.Res.badBaseUrl1);

+        }

+        var nextSlash = baseUrl.indexOf('/', slashslash + 3);

+        if (nextSlash === -1) {

+            throw Error.argument("baseUrl", Sys.Res.badBaseUrl2);

+        }

+        return baseUrl.substr(0, nextSlash) + url;

+    }

+    else {

+        var lastSlash = baseUrl.lastIndexOf('/');

+        if (lastSlash === -1) {

+            throw Error.argument("baseUrl", Sys.Res.badBaseUrl3);

+        }

+        return baseUrl.substr(0, lastSlash+1) + url;

+    }

+}

+Sys.Net.WebRequest._createQueryString = function Sys$Net$WebRequest$_createQueryString(queryString, encodeMethod, addParams) {

+    encodeMethod = encodeMethod || encodeURIComponent;

+    var i = 0, obj, val, arg, sb = new Sys.StringBuilder();

+    if (queryString) {

+        for (arg in queryString) {

+            obj = queryString[arg];

+            if (typeof(obj) === "function") continue;

+            val = Sys.Serialization.JavaScriptSerializer.serialize(obj);

+            if (i++) {

+                sb.append('&');

+            }

+            sb.append(arg);

+            sb.append('=');

+            sb.append(encodeMethod(val));

+        }

+    }

+    if (addParams) {

+        if (i) {

+            sb.append('&');

+        }

+        sb.append(addParams);

+    }

+    return sb.toString();

+}

+Sys.Net.WebRequest._createUrl = function Sys$Net$WebRequest$_createUrl(url, queryString, addParams) {

+    if (!queryString && !addParams) {

+        return url;

+    }

+    var qs = Sys.Net.WebRequest._createQueryString(queryString, null, addParams);

+    return qs.length

+        ? url + ((url && url.indexOf('?') >= 0) ? "&" : "?") + qs

+        : url;

+}

+Sys.Net.WebRequest.registerClass('Sys.Net.WebRequest');

+ 

+Sys._ScriptLoaderTask = function Sys$_ScriptLoaderTask(scriptElement, completedCallback) {

+    /// <summary locid="M:J#Sys._ScriptLoaderTask.#ctor" />

+    /// <param name="scriptElement" domElement="true"></param>

+    /// <param name="completedCallback" type="Function"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "scriptElement", domElement: true},

+        {name: "completedCallback", type: Function}

+    ]);

+    if (e) throw e;

+    this._scriptElement = scriptElement;

+    this._completedCallback = completedCallback;

+}

+    function Sys$_ScriptLoaderTask$get_scriptElement() {

+        /// <value domElement="true" locid="P:J#Sys._ScriptLoaderTask.scriptElement"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._scriptElement;

+    }

+    function Sys$_ScriptLoaderTask$dispose() {

+        if(this._disposed) {

+            return;

+        }

+        this._disposed = true;

+        this._removeScriptElementHandlers();

+        Sys._ScriptLoaderTask._clearScript(this._scriptElement);

+        this._scriptElement = null;

+    }

+    function Sys$_ScriptLoaderTask$execute() {

+        /// <summary locid="M:J#Sys._ScriptLoaderTask.execute" />

+        if (arguments.length !== 0) throw Error.parameterCount();

+        this._addScriptElementHandlers();

+        var headElements = document.getElementsByTagName('head');

+        if (headElements.length === 0) {

+             throw new Error.invalidOperation(Sys.Res.scriptLoadFailedNoHead);

+        }

+        else {

+             headElements[0].appendChild(this._scriptElement);

+        }

+    }

+    function Sys$_ScriptLoaderTask$_addScriptElementHandlers() {

+        this._scriptLoadDelegate = Function.createDelegate(this, this._scriptLoadHandler);

+        

+        if (Sys.Browser.agent !== Sys.Browser.InternetExplorer) {

+            this._scriptElement.readyState = 'loaded';

+            $addHandler(this._scriptElement, 'load', this._scriptLoadDelegate);

+        }

+        else {

+            $addHandler(this._scriptElement, 'readystatechange', this._scriptLoadDelegate);

+        }    

+        if (this._scriptElement.addEventListener) {

+            this._scriptErrorDelegate = Function.createDelegate(this, this._scriptErrorHandler);

+            this._scriptElement.addEventListener('error', this._scriptErrorDelegate, false);

+        }

+    }

+    function Sys$_ScriptLoaderTask$_removeScriptElementHandlers() {

+        if(this._scriptLoadDelegate) {

+            var scriptElement = this.get_scriptElement();

+            if (Sys.Browser.agent !== Sys.Browser.InternetExplorer) {

+                $removeHandler(scriptElement, 'load', this._scriptLoadDelegate);

+            }

+            else {

+                $removeHandler(scriptElement, 'readystatechange', this._scriptLoadDelegate);

+            }

+            if (this._scriptErrorDelegate) {

+                this._scriptElement.removeEventListener('error', this._scriptErrorDelegate, false);

+                this._scriptErrorDelegate = null;

+            }

+            this._scriptLoadDelegate = null;

+        }

+    }

+    function Sys$_ScriptLoaderTask$_scriptErrorHandler() {

+        if(this._disposed) {

+            return;

+        }

+        

+        this._completedCallback(this.get_scriptElement(), false);

+    }

+    function Sys$_ScriptLoaderTask$_scriptLoadHandler() {

+        if(this._disposed) {

+            return;

+        }

+        var scriptElement = this.get_scriptElement();

+        if ((scriptElement.readyState !== 'loaded') &&

+            (scriptElement.readyState !== 'complete')) {

+            return;

+        }

+        

+        this._completedCallback(scriptElement, true);

+    }

+Sys._ScriptLoaderTask.prototype = {

+    get_scriptElement: Sys$_ScriptLoaderTask$get_scriptElement,

+    dispose: Sys$_ScriptLoaderTask$dispose,

+    execute: Sys$_ScriptLoaderTask$execute,

+    _addScriptElementHandlers: Sys$_ScriptLoaderTask$_addScriptElementHandlers,    

+    _removeScriptElementHandlers: Sys$_ScriptLoaderTask$_removeScriptElementHandlers,    

+    _scriptErrorHandler: Sys$_ScriptLoaderTask$_scriptErrorHandler,

+    _scriptLoadHandler: Sys$_ScriptLoaderTask$_scriptLoadHandler  

+}

+Sys._ScriptLoaderTask.registerClass("Sys._ScriptLoaderTask", null, Sys.IDisposable);

+Sys._ScriptLoaderTask._clearScript = function Sys$_ScriptLoaderTask$_clearScript(scriptElement) {

+    if (!Sys.Debug.isDebug) {

+        scriptElement.parentNode.removeChild(scriptElement);

+    }

+}

+Type.registerNamespace('Sys.Net');

+ 

+Sys.Net.WebServiceProxy = function Sys$Net$WebServiceProxy() {

+}

+    function Sys$Net$WebServiceProxy$get_timeout() {

+        /// <value type="Number" locid="P:J#Sys.Net.WebServiceProxy.timeout"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._timeout || 0;

+    }

+    function Sys$Net$WebServiceProxy$set_timeout(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: Number}]);

+        if (e) throw e;

+        if (value < 0) { throw Error.argumentOutOfRange('value', value, Sys.Res.invalidTimeout); }

+        this._timeout = value;

+    }

+    function Sys$Net$WebServiceProxy$get_defaultUserContext() {

+        /// <value mayBeNull="true" locid="P:J#Sys.Net.WebServiceProxy.defaultUserContext"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return (typeof(this._userContext) === "undefined") ? null : this._userContext;

+    }

+    function Sys$Net$WebServiceProxy$set_defaultUserContext(value) {

+        var e = Function._validateParams(arguments, [{name: "value", mayBeNull: true}]);

+        if (e) throw e;

+        this._userContext = value;

+    }

+    function Sys$Net$WebServiceProxy$get_defaultSucceededCallback() {

+        /// <value type="Function" mayBeNull="true" locid="P:J#Sys.Net.WebServiceProxy.defaultSucceededCallback"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._succeeded || null;

+    }

+    function Sys$Net$WebServiceProxy$set_defaultSucceededCallback(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: Function, mayBeNull: true}]);

+        if (e) throw e;

+        this._succeeded = value;

+    }

+    function Sys$Net$WebServiceProxy$get_defaultFailedCallback() {

+        /// <value type="Function" mayBeNull="true" locid="P:J#Sys.Net.WebServiceProxy.defaultFailedCallback"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._failed || null;

+    }

+    function Sys$Net$WebServiceProxy$set_defaultFailedCallback(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: Function, mayBeNull: true}]);

+        if (e) throw e;

+        this._failed = value;

+    }

+    function Sys$Net$WebServiceProxy$get_enableJsonp() {

+        /// <value type="Boolean" locid="P:J#Sys.Net.WebServiceProxy.enableJsonp"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return !!this._jsonp;

+    }

+    function Sys$Net$WebServiceProxy$set_enableJsonp(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: Boolean}]);

+        if (e) throw e;

+        this._jsonp = value;

+    }

+    function Sys$Net$WebServiceProxy$get_path() {

+        /// <value type="String" locid="P:J#Sys.Net.WebServiceProxy.path"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._path || null;

+    }

+    function Sys$Net$WebServiceProxy$set_path(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: String}]);

+        if (e) throw e;

+        this._path = value;

+    }

+    function Sys$Net$WebServiceProxy$get_jsonpCallbackParameter() {

+        /// <value type="String" locid="P:J#Sys.Net.WebServiceProxy.jsonpCallbackParameter"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._callbackParameter || "callback";

+    }

+    function Sys$Net$WebServiceProxy$set_jsonpCallbackParameter(value) {

+        var e = Function._validateParams(arguments, [{name: "value", type: String}]);

+        if (e) throw e;

+        this._callbackParameter = value;

+    }

+    function Sys$Net$WebServiceProxy$_invoke(servicePath, methodName, useGet, params, onSuccess, onFailure, userContext) {

+        /// <summary locid="M:J#Sys.Net.WebServiceProxy._invoke" />

+        /// <param name="servicePath" type="String"></param>

+        /// <param name="methodName" type="String"></param>

+        /// <param name="useGet" type="Boolean"></param>

+        /// <param name="params"></param>

+        /// <param name="onSuccess" type="Function" mayBeNull="true" optional="true"></param>

+        /// <param name="onFailure" type="Function" mayBeNull="true" optional="true"></param>

+        /// <param name="userContext" mayBeNull="true" optional="true"></param>

+        /// <returns type="Sys.Net.WebRequest" mayBeNull="true"></returns>

+        var e = Function._validateParams(arguments, [

+            {name: "servicePath", type: String},

+            {name: "methodName", type: String},

+            {name: "useGet", type: Boolean},

+            {name: "params"},

+            {name: "onSuccess", type: Function, mayBeNull: true, optional: true},

+            {name: "onFailure", type: Function, mayBeNull: true, optional: true},

+            {name: "userContext", mayBeNull: true, optional: true}

+        ]);

+        if (e) throw e;

+        onSuccess = onSuccess || this.get_defaultSucceededCallback();

+        onFailure = onFailure || this.get_defaultFailedCallback();

+        if (userContext === null || typeof userContext === 'undefined') userContext = this.get_defaultUserContext();

+        return Sys.Net.WebServiceProxy.invoke(servicePath, methodName, useGet, params, onSuccess, onFailure, userContext, this.get_timeout(), this.get_enableJsonp(), this.get_jsonpCallbackParameter());

+    }

+Sys.Net.WebServiceProxy.prototype = {

+    get_timeout: Sys$Net$WebServiceProxy$get_timeout,

+    set_timeout: Sys$Net$WebServiceProxy$set_timeout,

+    get_defaultUserContext: Sys$Net$WebServiceProxy$get_defaultUserContext,

+    set_defaultUserContext: Sys$Net$WebServiceProxy$set_defaultUserContext,

+    get_defaultSucceededCallback: Sys$Net$WebServiceProxy$get_defaultSucceededCallback,

+    set_defaultSucceededCallback: Sys$Net$WebServiceProxy$set_defaultSucceededCallback,

+    get_defaultFailedCallback: Sys$Net$WebServiceProxy$get_defaultFailedCallback,

+    set_defaultFailedCallback: Sys$Net$WebServiceProxy$set_defaultFailedCallback,

+    get_enableJsonp: Sys$Net$WebServiceProxy$get_enableJsonp,

+    set_enableJsonp: Sys$Net$WebServiceProxy$set_enableJsonp,

+    get_path: Sys$Net$WebServiceProxy$get_path,

+    set_path: Sys$Net$WebServiceProxy$set_path,

+    get_jsonpCallbackParameter: Sys$Net$WebServiceProxy$get_jsonpCallbackParameter,

+    set_jsonpCallbackParameter: Sys$Net$WebServiceProxy$set_jsonpCallbackParameter,

+    _invoke: Sys$Net$WebServiceProxy$_invoke

+}

+Sys.Net.WebServiceProxy.registerClass('Sys.Net.WebServiceProxy');

+Sys.Net.WebServiceProxy.invoke = function Sys$Net$WebServiceProxy$invoke(servicePath, methodName, useGet, params, onSuccess, onFailure, userContext, timeout, enableJsonp, jsonpCallbackParameter) {

+    /// <summary locid="M:J#Sys.Net.WebServiceProxy.invoke" />

+    /// <param name="servicePath" type="String"></param>

+    /// <param name="methodName" type="String" mayBeNull="true" optional="true"></param>

+    /// <param name="useGet" type="Boolean" optional="true"></param>

+    /// <param name="params" mayBeNull="true" optional="true"></param>

+    /// <param name="onSuccess" type="Function" mayBeNull="true" optional="true"></param>

+    /// <param name="onFailure" type="Function" mayBeNull="true" optional="true"></param>

+    /// <param name="userContext" mayBeNull="true" optional="true"></param>

+    /// <param name="timeout" type="Number" optional="true"></param>

+    /// <param name="enableJsonp" type="Boolean" optional="true" mayBeNull="true"></param>

+    /// <param name="jsonpCallbackParameter" type="String" optional="true" mayBeNull="true"></param>

+    /// <returns type="Sys.Net.WebRequest" mayBeNull="true"></returns>

+    var e = Function._validateParams(arguments, [

+        {name: "servicePath", type: String},

+        {name: "methodName", type: String, mayBeNull: true, optional: true},

+        {name: "useGet", type: Boolean, optional: true},

+        {name: "params", mayBeNull: true, optional: true},

+        {name: "onSuccess", type: Function, mayBeNull: true, optional: true},

+        {name: "onFailure", type: Function, mayBeNull: true, optional: true},

+        {name: "userContext", mayBeNull: true, optional: true},

+        {name: "timeout", type: Number, optional: true},

+        {name: "enableJsonp", type: Boolean, mayBeNull: true, optional: true},

+        {name: "jsonpCallbackParameter", type: String, mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    var schemeHost = (enableJsonp !== false) ? Sys.Net.WebServiceProxy._xdomain.exec(servicePath) : null,

+        tempCallback, jsonp = schemeHost && (schemeHost.length === 3) && 

+            ((schemeHost[1] !== location.protocol) || (schemeHost[2] !== location.host));

+    useGet = jsonp || useGet;

+    if (jsonp) {

+        jsonpCallbackParameter = jsonpCallbackParameter || "callback";

+        tempCallback = "_jsonp" + Sys._jsonp++;

+    }

+    if (!params) params = {};

+    var urlParams = params;

+    if (!useGet || !urlParams) urlParams = {};

+    var script, error, timeoutcookie = null, loader, body = null,

+        url = Sys.Net.WebRequest._createUrl(methodName

+            ? (servicePath+"/"+encodeURIComponent(methodName))

+            : servicePath, urlParams, jsonp ? (jsonpCallbackParameter + "=Sys." + tempCallback) : null);

+    if (jsonp) {

+        script = document.createElement("script");

+        script.src = url;

+        loader = new Sys._ScriptLoaderTask(script, function(script, loaded) {

+            if (!loaded || tempCallback) {

+                jsonpComplete({ Message: String.format(Sys.Res.webServiceFailedNoMsg, methodName) }, -1);

+            }

+        });

+        function jsonpComplete(data, statusCode) {

+            if (timeoutcookie !== null) {

+                window.clearTimeout(timeoutcookie);

+                timeoutcookie = null;

+            }

+            loader.dispose();

+            delete Sys[tempCallback];

+            tempCallback = null; 

+            if ((typeof(statusCode) !== "undefined") && (statusCode !== 200)) {

+                if (onFailure) {

+                    error = new Sys.Net.WebServiceError(false,

+                            data.Message || String.format(Sys.Res.webServiceFailedNoMsg, methodName),

+                            data.StackTrace || null,

+                            data.ExceptionType || null,

+                            data);

+                    error._statusCode = statusCode;

+                    onFailure(error, userContext, methodName);

+                }

+                else {

+                    if (data.StackTrace && data.Message) {

+                        error = data.StackTrace + "-- " + data.Message;

+                    }

+                    else {

+                        error = data.StackTrace || data.Message;

+                    }

+                    error = String.format(error ? Sys.Res.webServiceFailed : Sys.Res.webServiceFailedNoMsg, methodName, error);

+                    throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceFailed, methodName, error));

+                }

+            }

+            else if (onSuccess) {

+                onSuccess(data, userContext, methodName);

+            }

+        }

+        Sys[tempCallback] = jsonpComplete;

+        loader.execute();

+        return null;

+    }

+    var request = new Sys.Net.WebRequest();

+    request.set_url(url);

+    request.get_headers()['Content-Type'] = 'application/json; charset=utf-8';

+    if (!useGet) {

+        body = Sys.Serialization.JavaScriptSerializer.serialize(params);

+        if (body === "{}") body = "";

+    }

+    request.set_body(body);

+    request.add_completed(onComplete);

+    if (timeout && timeout > 0) request.set_timeout(timeout);

+    request.invoke();

+    

+    function onComplete(response, eventArgs) {

+        if (response.get_responseAvailable()) {

+            var statusCode = response.get_statusCode();

+            var result = null;

+           

+            try {

+                var contentType = response.getResponseHeader("Content-Type");

+                if (contentType.startsWith("application/json")) {

+                    result = response.get_object();

+                }

+                else if (contentType.startsWith("text/xml")) {

+                    result = response.get_xml();

+                }

+                else {

+                    result = response.get_responseData();

+                }

+            } catch (ex) {

+            }

+            var error = response.getResponseHeader("jsonerror");

+            var errorObj = (error === "true");

+            if (errorObj) {

+                if (result) {

+                    result = new Sys.Net.WebServiceError(false, result.Message, result.StackTrace, result.ExceptionType, result);

+                }

+            }

+            else if (contentType.startsWith("application/json")) {

+                result = (!result || (typeof(result.d) === "undefined")) ? result : result.d;

+            }

+            if (((statusCode < 200) || (statusCode >= 300)) || errorObj) {

+                if (onFailure) {

+                    if (!result || !errorObj) {

+                        result = new Sys.Net.WebServiceError(false , String.format(Sys.Res.webServiceFailedNoMsg, methodName));

+                    }

+                    result._statusCode = statusCode;

+                    onFailure(result, userContext, methodName);

+                }

+                else {

+                    if (result && errorObj) {

+                        error = result.get_exceptionType() + "-- " + result.get_message();

+                    }

+                    else {

+                        error = response.get_responseData();

+                    }

+                    throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceFailed, methodName, error));

+                }

+            }

+            else if (onSuccess) {

+                onSuccess(result, userContext, methodName);

+            }

+        }

+        else {

+            var msg;

+            if (response.get_timedOut()) {

+                msg = String.format(Sys.Res.webServiceTimedOut, methodName);

+            }

+            else {

+                msg = String.format(Sys.Res.webServiceFailedNoMsg, methodName)

+            }

+            if (onFailure) {

+                onFailure(new Sys.Net.WebServiceError(response.get_timedOut(), msg, "", ""), userContext, methodName);

+            }

+            else {

+                throw Sys.Net.WebServiceProxy._createFailedError(methodName, msg);

+            }

+        }

+    }

+    return request;

+}

+Sys.Net.WebServiceProxy._createFailedError = function Sys$Net$WebServiceProxy$_createFailedError(methodName, errorMessage) {

+    var displayMessage = "Sys.Net.WebServiceFailedException: " + errorMessage;

+    var e = Error.create(displayMessage, { 'name': 'Sys.Net.WebServiceFailedException', 'methodName': methodName });

+    e.popStackFrame();

+    return e;

+}

+Sys.Net.WebServiceProxy._defaultFailedCallback = function Sys$Net$WebServiceProxy$_defaultFailedCallback(err, methodName) {

+    var error = err.get_exceptionType() + "-- " + err.get_message();

+    throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceFailed, methodName, error));

+}

+Sys.Net.WebServiceProxy._generateTypedConstructor = function Sys$Net$WebServiceProxy$_generateTypedConstructor(type) {

+    return function(properties) {

+        if (properties) {

+            for (var name in properties) {

+                this[name] = properties[name];

+            }

+        }

+        this.__type = type;

+    }

+}

+Sys._jsonp = 0;

+Sys.Net.WebServiceProxy._xdomain = /^\s*([a-zA-Z0-9\+\-\.]+\:)\/\/([^?#\/]+)/;

+ 

+Sys.Net.WebServiceError = function Sys$Net$WebServiceError(timedOut, message, stackTrace, exceptionType, errorObject) {

+    /// <summary locid="M:J#Sys.Net.WebServiceError.#ctor" />

+    /// <param name="timedOut" type="Boolean"></param>

+    /// <param name="message" type="String" mayBeNull="true"></param>

+    /// <param name="stackTrace" type="String" mayBeNull="true" optional="true"></param>

+    /// <param name="exceptionType" type="String" mayBeNull="true" optional="true"></param>

+    /// <param name="errorObject" type="Object" mayBeNull="true" optional="true"></param>

+    var e = Function._validateParams(arguments, [

+        {name: "timedOut", type: Boolean},

+        {name: "message", type: String, mayBeNull: true},

+        {name: "stackTrace", type: String, mayBeNull: true, optional: true},

+        {name: "exceptionType", type: String, mayBeNull: true, optional: true},

+        {name: "errorObject", type: Object, mayBeNull: true, optional: true}

+    ]);

+    if (e) throw e;

+    this._timedOut = timedOut;

+    this._message = message;

+    this._stackTrace = stackTrace;

+    this._exceptionType = exceptionType;

+    this._errorObject = errorObject;

+    this._statusCode = -1;

+}

+    function Sys$Net$WebServiceError$get_timedOut() {

+        /// <value type="Boolean" locid="P:J#Sys.Net.WebServiceError.timedOut"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._timedOut;

+    }

+    function Sys$Net$WebServiceError$get_statusCode() {

+        /// <value type="Number" locid="P:J#Sys.Net.WebServiceError.statusCode"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._statusCode;

+    }

+    function Sys$Net$WebServiceError$get_message() {

+        /// <value type="String" locid="P:J#Sys.Net.WebServiceError.message"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._message;

+    }

+    function Sys$Net$WebServiceError$get_stackTrace() {

+        /// <value type="String" locid="P:J#Sys.Net.WebServiceError.stackTrace"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._stackTrace || "";

+    }

+    function Sys$Net$WebServiceError$get_exceptionType() {

+        /// <value type="String" locid="P:J#Sys.Net.WebServiceError.exceptionType"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._exceptionType || "";

+    }

+    function Sys$Net$WebServiceError$get_errorObject() {

+        /// <value type="Object" locid="P:J#Sys.Net.WebServiceError.errorObject"></value>

+        if (arguments.length !== 0) throw Error.parameterCount();

+        return this._errorObject || null;

+    }

+Sys.Net.WebServiceError.prototype = {

+    get_timedOut: Sys$Net$WebServiceError$get_timedOut,

+    get_statusCode: Sys$Net$WebServiceError$get_statusCode,

+    get_message: Sys$Net$WebServiceError$get_message,

+    get_stackTrace: Sys$Net$WebServiceError$get_stackTrace,

+    get_exceptionType: Sys$Net$WebServiceError$get_exceptionType,

+    get_errorObject: Sys$Net$WebServiceError$get_errorObject

+}

+Sys.Net.WebServiceError.registerClass('Sys.Net.WebServiceError');

+

+

+Type.registerNamespace('Sys');

+

+Sys.Res={

+'urlMustBeLessThan1024chars':'The history state must be small enough to not make the url larger than 1024 characters.',

+'argumentTypeName':'Value is not the name of an existing type.',

+'cantBeCalledAfterDispose':'Can\'t be called after dispose.',

+'componentCantSetIdAfterAddedToApp':'The id property of a component can\'t be set after it\'s been added to the Application object.',

+'behaviorDuplicateName':'A behavior with name \'{0}\' already exists or it is the name of an existing property on the target element.',

+'notATypeName':'Value is not a valid type name.',

+'elementNotFound':'An element with id \'{0}\' could not be found.',

+'stateMustBeStringDictionary':'The state object can only have null and string fields.',

+'boolTrueOrFalse':'Value must be \'true\' or \'false\'.',

+'scriptLoadFailedNoHead':'ScriptLoader requires pages to contain a <head> element.',

+'stringFormatInvalid':'The format string is invalid.',

+'referenceNotFound':'Component \'{0}\' was not found.',

+'enumReservedName':'\'{0}\' is a reserved name that can\'t be used as an enum value name.',

+'circularParentChain':'The chain of control parents can\'t have circular references.',

+'namespaceContainsNonObject':'Object {0} already exists and is not an object.',

+'undefinedEvent':'\'{0}\' is not an event.',

+'propertyUndefined':'\'{0}\' is not a property or an existing field.',

+'observableConflict':'Object already contains a member with the name \'{0}\'.',

+'historyCannotEnableHistory':'Cannot set enableHistory after initialization.',

+'eventHandlerInvalid':'Handler was not added through the Sys.UI.DomEvent.addHandler method.',

+'scriptLoadFailedDebug':'The script \'{0}\' failed to load. Check for:\r\n Inaccessible path.\r\n Script errors. (IE) Enable \'Display a notification about every script error\' under advanced settings.',

+'propertyNotWritable':'\'{0}\' is not a writable property.',

+'enumInvalidValueName':'\'{0}\' is not a valid name for an enum value.',

+'controlAlreadyDefined':'A control is already associated with the element.',

+'addHandlerCantBeUsedForError':'Can\'t add a handler for the error event using this method. Please set the window.onerror property instead.',

+'cantAddNonFunctionhandler':'Can\'t add a handler that is not a function.',

+'invalidNameSpace':'Value is not a valid namespace identifier.',

+'notAnInterface':'Value is not a valid interface.',

+'eventHandlerNotFunction':'Handler must be a function.',

+'propertyNotAnArray':'\'{0}\' is not an Array property.',

+'namespaceContainsClass':'Object {0} already exists as a class, enum, or interface.',

+'typeRegisteredTwice':'Type {0} has already been registered. The type may be defined multiple times or the script file that defines it may have already been loaded. A possible cause is a change of settings during a partial update.',

+'cantSetNameAfterInit':'The name property can\'t be set on this object after initialization.',

+'historyMissingFrame':'For the history feature to work in IE, the page must have an iFrame element with id \'__historyFrame\' pointed to a page that gets its title from the \'title\' query string parameter and calls Sys.Application._onIFrameLoad() on the parent window. This can be done by setting EnableHistory to true on ScriptManager.',

+'appDuplicateComponent':'Two components with the same id \'{0}\' can\'t be added to the application.',

+'historyCannotAddHistoryPointWithHistoryDisabled':'A history point can only be added if enableHistory is set to true.',

+'baseNotAClass':'Value is not a class.',

+'expectedElementOrId':'Value must be a DOM element or DOM element Id.',

+'methodNotFound':'No method found with name \'{0}\'.',

+'arrayParseBadFormat':'Value must be a valid string representation for an array. It must start with a \'[\' and end with a \']\'.',

+'stateFieldNameInvalid':'State field names must not contain any \'=\' characters.',

+'cantSetId':'The id property can\'t be set on this object.',

+'stringFormatBraceMismatch':'The format string contains an unmatched opening or closing brace.',

+'enumValueNotInteger':'An enumeration definition can only contain integer values.',

+'propertyNullOrUndefined':'Cannot set the properties of \'{0}\' because it returned a null value.',

+'argumentDomNode':'Value must be a DOM element or a text node.',

+'componentCantSetIdTwice':'The id property of a component can\'t be set more than once.',

+'createComponentOnDom':'Value must be null for Components that are not Controls or Behaviors.',

+'createNotComponent':'{0} does not derive from Sys.Component.',

+'createNoDom':'Value must not be null for Controls and Behaviors.',

+'cantAddWithoutId':'Can\'t add a component that doesn\'t have an id.',

+'notObservable':'Instances of type \'{0}\' cannot be observed.',

+'badTypeName':'Value is not the name of the type being registered or the name is a reserved word.',

+'argumentInteger':'Value must be an integer.',

+'invokeCalledTwice':'Cannot call invoke more than once.',

+'webServiceFailed':'The server method \'{0}\' failed with the following error: {1}',

+'argumentType':'Object cannot be converted to the required type.',

+'argumentNull':'Value cannot be null.',

+'scriptAlreadyLoaded':'The script \'{0}\' has been referenced multiple times. If referencing Microsoft AJAX scripts explicitly, set the MicrosoftAjaxMode property of the ScriptManager to Explicit.',

+'scriptDependencyNotFound':'The script \'{0}\' failed to load because it is dependent on script \'{1}\'.',

+'formatBadFormatSpecifier':'Format specifier was invalid.',

+'requiredScriptReferenceNotIncluded':'\'{0}\' requires that you have included a script reference to \'{1}\'.',

+'webServiceFailedNoMsg':'The server method \'{0}\' failed.',

+'argumentDomElement':'Value must be a DOM element.',

+'invalidExecutorType':'Could not create a valid Sys.Net.WebRequestExecutor from: {0}.',

+'cannotCallBeforeResponse':'Cannot call {0} when responseAvailable is false.',

+'actualValue':'Actual value was {0}.',

+'enumInvalidValue':'\'{0}\' is not a valid value for enum {1}.',

+'scriptLoadFailed':'The script \'{0}\' could not be loaded.',

+'parameterCount':'Parameter count mismatch.',

+'cannotDeserializeEmptyString':'Cannot deserialize empty string.',

+'formatInvalidString':'Input string was not in a correct format.',

+'invalidTimeout':'Value must be greater than or equal to zero.',

+'cannotAbortBeforeStart':'Cannot abort when executor has not started.',

+'argument':'Value does not fall within the expected range.',

+'cannotDeserializeInvalidJson':'Cannot deserialize. The data does not correspond to valid JSON.',

+'invalidHttpVerb':'httpVerb cannot be set to an empty or null string.',

+'nullWebRequest':'Cannot call executeRequest with a null webRequest.',

+'eventHandlerInvalid':'Handler was not added through the Sys.UI.DomEvent.addHandler method.',

+'cannotSerializeNonFiniteNumbers':'Cannot serialize non finite numbers.',

+'argumentUndefined':'Value cannot be undefined.',

+'webServiceInvalidReturnType':'The server method \'{0}\' returned an invalid type. Expected type: {1}',

+'servicePathNotSet':'The path to the web service has not been set.',

+'argumentTypeWithTypes':'Object of type \'{0}\' cannot be converted to type \'{1}\'.',

+'cannotCallOnceStarted':'Cannot call {0} once started.',

+'badBaseUrl1':'Base URL does not contain ://.',

+'badBaseUrl2':'Base URL does not contain another /.',

+'badBaseUrl3':'Cannot find last / in base URL.',

+'setExecutorAfterActive':'Cannot set executor after it has become active.',

+'paramName':'Parameter name: {0}',

+'nullReferenceInPath':'Null reference while evaluating data path: \'{0}\'.',

+'cannotCallOutsideHandler':'Cannot call {0} outside of a completed event handler.',

+'cannotSerializeObjectWithCycle':'Cannot serialize object with cyclic reference within child properties.',

+'format':'One of the identified items was in an invalid format.',

+'assertFailedCaller':'Assertion Failed: {0}\r\nat {1}',

+'argumentOutOfRange':'Specified argument was out of the range of valid values.',

+'webServiceTimedOut':'The server method \'{0}\' timed out.',

+'notImplemented':'The method or operation is not implemented.',

+'assertFailed':'Assertion Failed: {0}',

+'invalidOperation':'Operation is not valid due to the current state of the object.',

+'breakIntoDebugger':'{0}\r\n\r\nBreak into debugger?'

+};

diff --git a/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftAjax.js b/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftAjax.js
new file mode 100644
index 0000000..9994d1b
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftAjax.js
@@ -0,0 +1,6 @@
+//----------------------------------------------------------

+// Copyright (C) Microsoft Corporation. All rights reserved.

+//----------------------------------------------------------

+// MicrosoftAjax.js

+Function.__typeName="Function";Function.__class=true;Function.createCallback=function(b,a){return function(){var e=arguments.length;if(e>0){var d=[];for(var c=0;c<e;c++)d[c]=arguments[c];d[e]=a;return b.apply(this,d)}return b.call(this,a)}};Function.createDelegate=function(a,b){return function(){return b.apply(a,arguments)}};Function.emptyFunction=Function.emptyMethod=function(){};Function.validateParameters=function(c,b,a){return Function._validateParams(c,b,a)};Function._validateParams=function(g,e,c){var a,d=e.length;c=c||typeof c==="undefined";a=Function._validateParameterCount(g,e,c);if(a){a.popStackFrame();return a}for(var b=0,i=g.length;b<i;b++){var f=e[Math.min(b,d-1)],h=f.name;if(f.parameterArray)h+="["+(b-d+1)+"]";else if(!c&&b>=d)break;a=Function._validateParameter(g[b],f,h);if(a){a.popStackFrame();return a}}return null};Function._validateParameterCount=function(j,d,i){var a,c,b=d.length,e=j.length;if(e<b){var f=b;for(a=0;a<b;a++){var g=d[a];if(g.optional||g.parameterArray)f--}if(e<f)c=true}else if(i&&e>b){c=true;for(a=0;a<b;a++)if(d[a].parameterArray){c=false;break}}if(c){var h=Error.parameterCount();h.popStackFrame();return h}return null};Function._validateParameter=function(c,a,h){var b,g=a.type,l=!!a.integer,k=!!a.domElement,m=!!a.mayBeNull;b=Function._validateParameterType(c,g,l,k,m,h);if(b){b.popStackFrame();return b}var e=a.elementType,f=!!a.elementMayBeNull;if(g===Array&&typeof c!=="undefined"&&c!==null&&(e||!f)){var j=!!a.elementInteger,i=!!a.elementDomElement;for(var d=0;d<c.length;d++){var n=c[d];b=Function._validateParameterType(n,e,j,i,f,h+"["+d+"]");if(b){b.popStackFrame();return b}}}return null};Function._validateParameterType=function(b,c,k,j,h,d){var a,g;if(typeof b==="undefined")if(h)return null;else{a=Error.argumentUndefined(d);a.popStackFrame();return a}if(b===null)if(h)return null;else{a=Error.argumentNull(d);a.popStackFrame();return a}if(c&&c.__enum){if(typeof b!=="number"){a=Error.argumentType(d,Object.getType(b),c);a.popStackFrame();return a}if(b%1===0){var e=c.prototype;if(!c.__flags||b===0){for(g in e)if(e[g]===b)return null}else{var i=b;for(g in e){var f=e[g];if(f===0)continue;if((f&b)===f)i-=f;if(i===0)return null}}}a=Error.argumentOutOfRange(d,b,String.format(Sys.Res.enumInvalidValue,b,c.getName()));a.popStackFrame();return a}if(j&&(!Sys._isDomElement(b)||b.nodeType===3)){a=Error.argument(d,Sys.Res.argumentDomElement);a.popStackFrame();return a}if(c&&!Sys._isInstanceOfType(c,b)){a=Error.argumentType(d,Object.getType(b),c);a.popStackFrame();return a}if(c===Number&&k)if(b%1!==0){a=Error.argumentOutOfRange(d,b,Sys.Res.argumentInteger);a.popStackFrame();return a}return null};Error.__typeName="Error";Error.__class=true;Error.create=function(d,b){var a=new Error(d);a.message=d;if(b)for(var c in b)a[c]=b[c];a.popStackFrame();return a};Error.argument=function(a,c){var b="Sys.ArgumentException: "+(c?c:Sys.Res.argument);if(a)b+="\n"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:"Sys.ArgumentException",paramName:a});d.popStackFrame();return d};Error.argumentNull=function(a,c){var b="Sys.ArgumentNullException: "+(c?c:Sys.Res.argumentNull);if(a)b+="\n"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:"Sys.ArgumentNullException",paramName:a});d.popStackFrame();return d};Error.argumentOutOfRange=function(c,a,d){var b="Sys.ArgumentOutOfRangeException: "+(d?d:Sys.Res.argumentOutOfRange);if(c)b+="\n"+String.format(Sys.Res.paramName,c);if(typeof a!=="undefined"&&a!==null)b+="\n"+String.format(Sys.Res.actualValue,a);var e=Error.create(b,{name:"Sys.ArgumentOutOfRangeException",paramName:c,actualValue:a});e.popStackFrame();return e};Error.argumentType=function(d,c,b,e){var a="Sys.ArgumentTypeException: ";if(e)a+=e;else if(c&&b)a+=String.format(Sys.Res.argumentTypeWithTypes,c.getName(),b.getName());else a+=Sys.Res.argumentType;if(d)a+="\n"+String.format(Sys.Res.paramName,d);var f=Error.create(a,{name:"Sys.ArgumentTypeException",paramName:d,actualType:c,expectedType:b});f.popStackFrame();return f};Error.argumentUndefined=function(a,c){var b="Sys.ArgumentUndefinedException: "+(c?c:Sys.Res.argumentUndefined);if(a)b+="\n"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:"Sys.ArgumentUndefinedException",paramName:a});d.popStackFrame();return d};Error.format=function(a){var c="Sys.FormatException: "+(a?a:Sys.Res.format),b=Error.create(c,{name:"Sys.FormatException"});b.popStackFrame();return b};Error.invalidOperation=function(a){var c="Sys.InvalidOperationException: "+(a?a:Sys.Res.invalidOperation),b=Error.create(c,{name:"Sys.InvalidOperationException"});b.popStackFrame();return b};Error.notImplemented=function(a){var c="Sys.NotImplementedException: "+(a?a:Sys.Res.notImplemented),b=Error.create(c,{name:"Sys.NotImplementedException"});b.popStackFrame();return b};Error.parameterCount=function(a){var c="Sys.ParameterCountException: "+(a?a:Sys.Res.parameterCount),b=Error.create(c,{name:"Sys.ParameterCountException"});b.popStackFrame();return b};Error.prototype.popStackFrame=function(){if(typeof this.stack==="undefined"||this.stack===null||typeof this.fileName==="undefined"||this.fileName===null||typeof this.lineNumber==="undefined"||this.lineNumber===null)return;var a=this.stack.split("\n"),c=a[0],e=this.fileName+":"+this.lineNumber;while(typeof c!=="undefined"&&c!==null&&c.indexOf(e)===-1){a.shift();c=a[0]}var d=a[1];if(typeof d==="undefined"||d===null)return;var b=d.match(/@(.*):(\d+)$/);if(typeof b==="undefined"||b===null)return;this.fileName=b[1];this.lineNumber=parseInt(b[2]);a.shift();this.stack=a.join("\n")};Object.__typeName="Object";Object.__class=true;Object.getType=function(b){var a=b.constructor;if(!a||typeof a!=="function"||!a.__typeName||a.__typeName==="Object")return Object;return a};Object.getTypeName=function(a){return Object.getType(a).getName()};String.__typeName="String";String.__class=true;String.prototype.endsWith=function(a){return this.substr(this.length-a.length)===a};String.prototype.startsWith=function(a){return this.substr(0,a.length)===a};String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")};String.prototype.trimEnd=function(){return this.replace(/\s+$/,"")};String.prototype.trimStart=function(){return this.replace(/^\s+/,"")};String.format=function(){return String._toFormattedString(false,arguments)};String._toFormattedString=function(l,j){var c="",e=j[0];for(var a=0;true;){var f=e.indexOf("{",a),d=e.indexOf("}",a);if(f<0&&d<0){c+=e.slice(a);break}if(d>0&&(d<f||f<0)){c+=e.slice(a,d+1);a=d+2;continue}c+=e.slice(a,f);a=f+1;if(e.charAt(a)==="{"){c+="{";a++;continue}if(d<0)break;var h=e.substring(a,d),g=h.indexOf(":"),k=parseInt(g<0?h:h.substring(0,g),10)+1,i=g<0?"":h.substring(g+1),b=j[k];if(typeof b==="undefined"||b===null)b="";if(b.toFormattedString)c+=b.toFormattedString(i);else if(l&&b.localeFormat)c+=b.localeFormat(i);else if(b.format)c+=b.format(i);else c+=b.toString();a=d+1}return c};Boolean.__typeName="Boolean";Boolean.__class=true;Boolean.parse=function(b){var a=b.trim().toLowerCase();if(a==="false")return false;if(a==="true")return true};Date.__typeName="Date";Date.__class=true;Number.__typeName="Number";Number.__class=true;RegExp.__typeName="RegExp";RegExp.__class=true;if(!window)this.window=this;window.Type=Function;Type.prototype.callBaseMethod=function(a,d,b){var c=Sys._getBaseMethod(this,a,d);if(!b)return c.apply(a);else return c.apply(a,b)};Type.prototype.getBaseMethod=function(a,b){return Sys._getBaseMethod(this,a,b)};Type.prototype.getBaseType=function(){return typeof this.__baseType==="undefined"?null:this.__baseType};Type.prototype.getInterfaces=function(){var a=[],b=this;while(b){var c=b.__interfaces;if(c)for(var d=0,f=c.length;d<f;d++){var e=c[d];if(!Array.contains(a,e))a[a.length]=e}b=b.__baseType}return a};Type.prototype.getName=function(){return typeof this.__typeName==="undefined"?"":this.__typeName};Type.prototype.implementsInterface=function(d){this.resolveInheritance();var c=d.getName(),a=this.__interfaceCache;if(a){var e=a[c];if(typeof e!=="undefined")return e}else a=this.__interfaceCache={};var b=this;while(b){var f=b.__interfaces;if(f)if(Array.indexOf(f,d)!==-1)return a[c]=true;b=b.__baseType}return a[c]=false};Type.prototype.inheritsFrom=function(b){this.resolveInheritance();var a=this.__baseType;while(a){if(a===b)return true;a=a.__baseType}return false};Type.prototype.initializeBase=function(a,b){this.resolveInheritance();if(this.__baseType)if(!b)this.__baseType.apply(a);else this.__baseType.apply(a,b);return a};Type.prototype.isImplementedBy=function(a){if(typeof a==="undefined"||a===null)return false;var b=Object.getType(a);return !!(b.implementsInterface&&b.implementsInterface(this))};Type.prototype.isInstanceOfType=function(a){return Sys._isInstanceOfType(this,a)};Type.prototype.registerClass=function(c,b,d){this.prototype.constructor=this;this.__typeName=c;this.__class=true;if(b){this.__baseType=b;this.__basePrototypePending=true}Sys.__upperCaseTypes[c.toUpperCase()]=this;if(d){this.__interfaces=[];for(var a=2,f=arguments.length;a<f;a++){var e=arguments[a];this.__interfaces.push(e)}}return this};Type.prototype.registerInterface=function(a){Sys.__upperCaseTypes[a.toUpperCase()]=this;this.prototype.constructor=this;this.__typeName=a;this.__interface=true;return this};Type.prototype.resolveInheritance=function(){if(this.__basePrototypePending){var b=this.__baseType;b.resolveInheritance();for(var a in b.prototype){var c=b.prototype[a];if(!this.prototype[a])this.prototype[a]=c}delete this.__basePrototypePending}};Type.getRootNamespaces=function(){return Array.clone(Sys.__rootNamespaces)};Type.isClass=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__class};Type.isInterface=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__interface};Type.isNamespace=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__namespace};Type.parse=function(typeName,ns){var fn;if(ns){fn=Sys.__upperCaseTypes[ns.getName().toUpperCase()+"."+typeName.toUpperCase()];return fn||null}if(!typeName)return null;if(!Type.__htClasses)Type.__htClasses={};fn=Type.__htClasses[typeName];if(!fn){fn=eval(typeName);Type.__htClasses[typeName]=fn}return fn};Type.registerNamespace=function(e){var d=window,c=e.split(".");for(var b=0;b<c.length;b++){var f=c[b],a=d[f];if(!a)a=d[f]={};if(!a.__namespace){if(b===0&&e!=="Sys")Sys.__rootNamespaces[Sys.__rootNamespaces.length]=a;a.__namespace=true;a.__typeName=c.slice(0,b+1).join(".");a.getName=function(){return this.__typeName}}d=a}};Type._checkDependency=function(c,a){var d=Type._registerScript._scripts,b=d?!!d[c]:false;if(typeof a!=="undefined"&&!b)throw Error.invalidOperation(String.format(Sys.Res.requiredScriptReferenceNotIncluded,a,c));return b};Type._registerScript=function(a,c){var b=Type._registerScript._scripts;if(!b)Type._registerScript._scripts=b={};if(b[a])throw Error.invalidOperation(String.format(Sys.Res.scriptAlreadyLoaded,a));b[a]=true;if(c)for(var d=0,f=c.length;d<f;d++){var e=c[d];if(!Type._checkDependency(e))throw Error.invalidOperation(String.format(Sys.Res.scriptDependencyNotFound,a,e))}};Type.registerNamespace("Sys");Sys.__upperCaseTypes={};Sys.__rootNamespaces=[Sys];Sys._isInstanceOfType=function(c,b){if(typeof b==="undefined"||b===null)return false;if(b instanceof c)return true;var a=Object.getType(b);return !!(a===c)||a.inheritsFrom&&a.inheritsFrom(c)||a.implementsInterface&&a.implementsInterface(c)};Sys._getBaseMethod=function(d,e,c){var b=d.getBaseType();if(b){var a=b.prototype[c];return a instanceof Function?a:null}return null};Sys._isDomElement=function(a){var c=false;if(typeof a.nodeType!=="number"){var b=a.ownerDocument||a.document||a;if(b!=a){var d=b.defaultView||b.parentWindow;c=d!=a}else c=typeof b.body==="undefined"}return !c};Array.__typeName="Array";Array.__class=true;Array.add=Array.enqueue=function(a,b){a[a.length]=b};Array.addRange=function(a,b){a.push.apply(a,b)};Array.clear=function(a){a.length=0};Array.clone=function(a){if(a.length===1)return [a[0]];else return Array.apply(null,a)};Array.contains=function(a,b){return Sys._indexOf(a,b)>=0};Array.dequeue=function(a){return a.shift()};Array.forEach=function(b,e,d){for(var a=0,f=b.length;a<f;a++){var c=b[a];if(typeof c!=="undefined")e.call(d,c,a,b)}};Array.indexOf=function(a,c,b){return Sys._indexOf(a,c,b)};Array.insert=function(a,b,c){a.splice(b,0,c)};Array.parse=function(value){if(!value)return [];return eval(value)};Array.remove=function(b,c){var a=Sys._indexOf(b,c);if(a>=0)b.splice(a,1);return a>=0};Array.removeAt=function(a,b){a.splice(b,1)};Sys._indexOf=function(d,e,a){if(typeof e==="undefined")return -1;var c=d.length;if(c!==0){a=a-0;if(isNaN(a))a=0;else{if(isFinite(a))a=a-a%1;if(a<0)a=Math.max(0,c+a)}for(var b=a;b<c;b++)if(typeof d[b]!=="undefined"&&d[b]===e)return b}return -1};Type._registerScript._scripts={"MicrosoftAjaxCore.js":true,"MicrosoftAjaxGlobalization.js":true,"MicrosoftAjaxSerialization.js":true,"MicrosoftAjaxComponentModel.js":true,"MicrosoftAjaxHistory.js":true,"MicrosoftAjaxNetwork.js":true,"MicrosoftAjaxWebServices.js":true};Sys.IDisposable=function(){};Sys.IDisposable.prototype={};Sys.IDisposable.registerInterface("Sys.IDisposable");Sys.StringBuilder=function(a){this._parts=typeof a!=="undefined"&&a!==null&&a!==""?[a.toString()]:[];this._value={};this._len=0};Sys.StringBuilder.prototype={append:function(a){this._parts[this._parts.length]=a},appendLine:function(a){this._parts[this._parts.length]=typeof a==="undefined"||a===null||a===""?"\r\n":a+"\r\n"},clear:function(){this._parts=[];this._value={};this._len=0},isEmpty:function(){if(this._parts.length===0)return true;return this.toString()===""},toString:function(a){a=a||"";var b=this._parts;if(this._len!==b.length){this._value={};this._len=b.length}var d=this._value;if(typeof d[a]==="undefined"){if(a!=="")for(var c=0;c<b.length;)if(typeof b[c]==="undefined"||b[c]===""||b[c]===null)b.splice(c,1);else c++;d[a]=this._parts.join(a)}return d[a]}};Sys.StringBuilder.registerClass("Sys.StringBuilder");Sys.Browser={};Sys.Browser.InternetExplorer={};Sys.Browser.Firefox={};Sys.Browser.Safari={};Sys.Browser.Opera={};Sys.Browser.agent=null;Sys.Browser.hasDebuggerStatement=false;Sys.Browser.name=navigator.appName;Sys.Browser.version=parseFloat(navigator.appVersion);Sys.Browser.documentMode=0;if(navigator.userAgent.indexOf(" MSIE ")>-1){Sys.Browser.agent=Sys.Browser.InternetExplorer;Sys.Browser.version=parseFloat(navigator.userAgent.match(/MSIE (\d+\.\d+)/)[1]);if(Sys.Browser.version>=8)if(document.documentMode>=7)Sys.Browser.documentMode=document.documentMode;Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(" Firefox/")>-1){Sys.Browser.agent=Sys.Browser.Firefox;Sys.Browser.version=parseFloat(navigator.userAgent.match(/Firefox\/(\d+\.\d+)/)[1]);Sys.Browser.name="Firefox";Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(" AppleWebKit/")>-1){Sys.Browser.agent=Sys.Browser.Safari;Sys.Browser.version=parseFloat(navigator.userAgent.match(/AppleWebKit\/(\d+(\.\d+)?)/)[1]);Sys.Browser.name="Safari"}else if(navigator.userAgent.indexOf("Opera/")>-1)Sys.Browser.agent=Sys.Browser.Opera;Sys.EventArgs=function(){};Sys.EventArgs.registerClass("Sys.EventArgs");Sys.EventArgs.Empty=new Sys.EventArgs;Sys.CancelEventArgs=function(){Sys.CancelEventArgs.initializeBase(this);this._cancel=false};Sys.CancelEventArgs.prototype={get_cancel:function(){return this._cancel},set_cancel:function(a){this._cancel=a}};Sys.CancelEventArgs.registerClass("Sys.CancelEventArgs",Sys.EventArgs);Type.registerNamespace("Sys.UI");Sys._Debug=function(){};Sys._Debug.prototype={_appendConsole:function(a){if(typeof Debug!=="undefined"&&Debug.writeln)Debug.writeln(a);if(window.console&&window.console.log)window.console.log(a);if(window.opera)window.opera.postError(a);if(window.debugService)window.debugService.trace(a)},_appendTrace:function(b){var a=document.getElementById("TraceConsole");if(a&&a.tagName.toUpperCase()==="TEXTAREA")a.value+=b+"\n"},assert:function(c,a,b){if(!c){a=b&&this.assert.caller?String.format(Sys.Res.assertFailedCaller,a,this.assert.caller):String.format(Sys.Res.assertFailed,a);if(confirm(String.format(Sys.Res.breakIntoDebugger,a)))this.fail(a)}},clearTrace:function(){var a=document.getElementById("TraceConsole");if(a&&a.tagName.toUpperCase()==="TEXTAREA")a.value=""},fail:function(message){this._appendConsole(message);if(Sys.Browser.hasDebuggerStatement)eval("debugger")},trace:function(a){this._appendConsole(a);this._appendTrace(a)},traceDump:function(a,b){var c=this._traceDump(a,b,true)},_traceDump:function(a,c,f,b,d){c=c?c:"traceDump";b=b?b:"";if(a===null){this.trace(b+c+": null");return}switch(typeof a){case "undefined":this.trace(b+c+": Undefined");break;case "number":case "string":case "boolean":this.trace(b+c+": "+a);break;default:if(Date.isInstanceOfType(a)||RegExp.isInstanceOfType(a)){this.trace(b+c+": "+a.toString());break}if(!d)d=[];else if(Array.contains(d,a)){this.trace(b+c+": ...");return}Array.add(d,a);if(a==window||a===document||window.HTMLElement&&a instanceof HTMLElement||typeof a.nodeName==="string"){var k=a.tagName?a.tagName:"DomElement";if(a.id)k+=" - "+a.id;this.trace(b+c+" {"+k+"}")}else{var i=Object.getTypeName(a);this.trace(b+c+(typeof i==="string"?" {"+i+"}":""));if(b===""||f){b+="    ";var e,j,l,g,h;if(Array.isInstanceOfType(a)){j=a.length;for(e=0;e<j;e++)this._traceDump(a[e],"["+e+"]",f,b,d)}else for(g in a){h=a[g];if(!Function.isInstanceOfType(h))this._traceDump(h,g,f,b,d)}}}Array.remove(d,a)}}};Sys._Debug.registerClass("Sys._Debug");Sys.Debug=new Sys._Debug;Sys.Debug.isDebug=false;function Sys$Enum$parse(c,e){var a,b,i;if(e){a=this.__lowerCaseValues;if(!a){this.__lowerCaseValues=a={};var g=this.prototype;for(var f in g)a[f.toLowerCase()]=g[f]}}else a=this.prototype;if(!this.__flags){i=e?c.toLowerCase():c;b=a[i.trim()];if(typeof b!=="number")throw Error.argument("value",String.format(Sys.Res.enumInvalidValue,c,this.__typeName));return b}else{var h=(e?c.toLowerCase():c).split(","),j=0;for(var d=h.length-1;d>=0;d--){var k=h[d].trim();b=a[k];if(typeof b!=="number")throw Error.argument("value",String.format(Sys.Res.enumInvalidValue,c.split(",")[d].trim(),this.__typeName));j|=b}return j}}function Sys$Enum$toString(c){if(typeof c==="undefined"||c===null)return this.__string;var d=this.prototype,a;if(!this.__flags||c===0){for(a in d)if(d[a]===c)return a}else{var b=this.__sortedValues;if(!b){b=[];for(a in d)b[b.length]={key:a,value:d[a]};b.sort(function(a,b){return a.value-b.value});this.__sortedValues=b}var e=[],g=c;for(a=b.length-1;a>=0;a--){var h=b[a],f=h.value;if(f===0)continue;if((f&c)===f){e[e.length]=h.key;g-=f;if(g===0)break}}if(e.length&&g===0)return e.reverse().join(", ")}return ""}Type.prototype.registerEnum=function(b,c){Sys.__upperCaseTypes[b.toUpperCase()]=this;for(var a in this.prototype)this[a]=this.prototype[a];this.__typeName=b;this.parse=Sys$Enum$parse;this.__string=this.toString();this.toString=Sys$Enum$toString;this.__flags=c;this.__enum=true};Type.isEnum=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__enum};Type.isFlags=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__flags};Sys.CollectionChange=function(e,a,c,b,d){this.action=e;if(a)if(!(a instanceof Array))a=[a];this.newItems=a||null;if(typeof c!=="number")c=-1;this.newStartingIndex=c;if(b)if(!(b instanceof Array))b=[b];this.oldItems=b||null;if(typeof d!=="number")d=-1;this.oldStartingIndex=d};Sys.CollectionChange.registerClass("Sys.CollectionChange");Sys.NotifyCollectionChangedAction=function(){throw Error.notImplemented()};Sys.NotifyCollectionChangedAction.prototype={add:0,remove:1,reset:2};Sys.NotifyCollectionChangedAction.registerEnum("Sys.NotifyCollectionChangedAction");Sys.NotifyCollectionChangedEventArgs=function(a){this._changes=a;Sys.NotifyCollectionChangedEventArgs.initializeBase(this)};Sys.NotifyCollectionChangedEventArgs.prototype={get_changes:function(){return this._changes||[]}};Sys.NotifyCollectionChangedEventArgs.registerClass("Sys.NotifyCollectionChangedEventArgs",Sys.EventArgs);Sys.Observer=function(){};Sys.Observer.registerClass("Sys.Observer");Sys.Observer.makeObservable=function(a){var c=a instanceof Array,b=Sys.Observer;if(a.setValue===b._observeMethods.setValue)return a;b._addMethods(a,b._observeMethods);if(c)b._addMethods(a,b._arrayMethods);return a};Sys.Observer._addMethods=function(c,b){for(var a in b)c[a]=b[a]};Sys.Observer._addEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._addHandler(a,b)};Sys.Observer.addEventHandler=function(c,a,b){Sys.Observer._addEventHandler(c,a,b)};Sys.Observer._removeEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._removeHandler(a,b)};Sys.Observer.removeEventHandler=function(c,a,b){Sys.Observer._removeEventHandler(c,a,b)};Sys.Observer.raiseEvent=function(b,e,d){var c=Sys.Observer._getContext(b);if(!c)return;var a=c.events.getHandler(e);if(a)a(b,d)};Sys.Observer.addPropertyChanged=function(b,a){Sys.Observer._addEventHandler(b,"propertyChanged",a)};Sys.Observer.removePropertyChanged=function(b,a){Sys.Observer._removeEventHandler(b,"propertyChanged",a)};Sys.Observer.beginUpdate=function(a){Sys.Observer._getContext(a,true).updating=true};Sys.Observer.endUpdate=function(b){var a=Sys.Observer._getContext(b);if(!a||!a.updating)return;a.updating=false;var d=a.dirty;a.dirty=false;if(d){if(b instanceof Array){var c=a.changes;a.changes=null;Sys.Observer.raiseCollectionChanged(b,c)}Sys.Observer.raisePropertyChanged(b,"")}};Sys.Observer.isUpdating=function(b){var a=Sys.Observer._getContext(b);return a?a.updating:false};Sys.Observer._setValue=function(a,j,g){var b,f,k=a,d=j.split(".");for(var i=0,m=d.length-1;i<m;i++){var l=d[i];b=a["get_"+l];if(typeof b==="function")a=b.call(a);else a=a[l];var n=typeof a;if(a===null||n==="undefined")throw Error.invalidOperation(String.format(Sys.Res.nullReferenceInPath,j))}var e,c=d[m];b=a["get_"+c];f=a["set_"+c];if(typeof b==="function")e=b.call(a);else e=a[c];if(typeof f==="function")f.call(a,g);else a[c]=g;if(e!==g){var h=Sys.Observer._getContext(k);if(h&&h.updating){h.dirty=true;return}Sys.Observer.raisePropertyChanged(k,d[0])}};Sys.Observer.setValue=function(b,a,c){Sys.Observer._setValue(b,a,c)};Sys.Observer.raisePropertyChanged=function(b,a){Sys.Observer.raiseEvent(b,"propertyChanged",new Sys.PropertyChangedEventArgs(a))};Sys.Observer.addCollectionChanged=function(b,a){Sys.Observer._addEventHandler(b,"collectionChanged",a)};Sys.Observer.removeCollectionChanged=function(b,a){Sys.Observer._removeEventHandler(b,"collectionChanged",a)};Sys.Observer._collectionChange=function(d,c){var a=Sys.Observer._getContext(d);if(a&&a.updating){a.dirty=true;var b=a.changes;if(!b)a.changes=b=[c];else b.push(c)}else{Sys.Observer.raiseCollectionChanged(d,[c]);Sys.Observer.raisePropertyChanged(d,"length")}};Sys.Observer.add=function(a,b){var c=new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add,[b],a.length);Array.add(a,b);Sys.Observer._collectionChange(a,c)};Sys.Observer.addRange=function(a,b){var c=new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add,b,a.length);Array.addRange(a,b);Sys.Observer._collectionChange(a,c)};Sys.Observer.clear=function(a){var b=Array.clone(a);Array.clear(a);Sys.Observer._collectionChange(a,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.reset,null,-1,b,0))};Sys.Observer.insert=function(a,b,c){Array.insert(a,b,c);Sys.Observer._collectionChange(a,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add,[c],b))};Sys.Observer.remove=function(a,b){var c=Array.indexOf(a,b);if(c!==-1){Array.remove(a,b);Sys.Observer._collectionChange(a,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove,null,-1,[b],c));return true}return false};Sys.Observer.removeAt=function(b,a){if(a>-1&&a<b.length){var c=b[a];Array.removeAt(b,a);Sys.Observer._collectionChange(b,new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove,null,-1,[c],a))}};Sys.Observer.raiseCollectionChanged=function(b,a){Sys.Observer.raiseEvent(b,"collectionChanged",new Sys.NotifyCollectionChangedEventArgs(a))};Sys.Observer._observeMethods={add_propertyChanged:function(a){Sys.Observer._addEventHandler(this,"propertyChanged",a)},remove_propertyChanged:function(a){Sys.Observer._removeEventHandler(this,"propertyChanged",a)},addEventHandler:function(a,b){Sys.Observer._addEventHandler(this,a,b)},removeEventHandler:function(a,b){Sys.Observer._removeEventHandler(this,a,b)},get_isUpdating:function(){return Sys.Observer.isUpdating(this)},beginUpdate:function(){Sys.Observer.beginUpdate(this)},endUpdate:function(){Sys.Observer.endUpdate(this)},setValue:function(b,a){Sys.Observer._setValue(this,b,a)},raiseEvent:function(b,a){Sys.Observer.raiseEvent(this,b,a)},raisePropertyChanged:function(a){Sys.Observer.raiseEvent(this,"propertyChanged",new Sys.PropertyChangedEventArgs(a))}};Sys.Observer._arrayMethods={add_collectionChanged:function(a){Sys.Observer._addEventHandler(this,"collectionChanged",a)},remove_collectionChanged:function(a){Sys.Observer._removeEventHandler(this,"collectionChanged",a)},add:function(a){Sys.Observer.add(this,a)},addRange:function(a){Sys.Observer.addRange(this,a)},clear:function(){Sys.Observer.clear(this)},insert:function(a,b){Sys.Observer.insert(this,a,b)},remove:function(a){return Sys.Observer.remove(this,a)},removeAt:function(a){Sys.Observer.removeAt(this,a)},raiseCollectionChanged:function(a){Sys.Observer.raiseEvent(this,"collectionChanged",new Sys.NotifyCollectionChangedEventArgs(a))}};Sys.Observer._getContext=function(b,c){var a=b._observerContext;if(a)return a();if(c)return (b._observerContext=Sys.Observer._createContext())();return null};Sys.Observer._createContext=function(){var a={events:new Sys.EventHandlerList};return function(){return a}};Date._appendPreOrPostMatch=function(e,b){var d=0,a=false;for(var c=0,g=e.length;c<g;c++){var f=e.charAt(c);switch(f){case "'":if(a)b.append("'");else d++;a=false;break;case "\\":if(a)b.append("\\");a=!a;break;default:b.append(f);a=false}}return d};Date._expandFormat=function(a,b){if(!b)b="F";var c=b.length;if(c===1)switch(b){case "d":return a.ShortDatePattern;case "D":return a.LongDatePattern;case "t":return a.ShortTimePattern;case "T":return a.LongTimePattern;case "f":return a.LongDatePattern+" "+a.ShortTimePattern;case "F":return a.FullDateTimePattern;case "M":case "m":return a.MonthDayPattern;case "s":return a.SortableDateTimePattern;case "Y":case "y":return a.YearMonthPattern;default:throw Error.format(Sys.Res.formatInvalidString)}else if(c===2&&b.charAt(0)==="%")b=b.charAt(1);return b};Date._expandYear=function(c,a){var d=new Date,e=Date._getEra(d);if(a<100){var b=Date._getEraYear(d,c,e);a+=b-b%100;if(a>c.Calendar.TwoDigitYearMax)a-=100}return a};Date._getEra=function(e,c){if(!c)return 0;var b,d=e.getTime();for(var a=0,f=c.length;a<f;a+=4){b=c[a+2];if(b===null||d>=b)return a}return 0};Date._getEraYear=function(d,b,e,c){var a=d.getFullYear();if(!c&&b.eras)a-=b.eras[e+3];return a};Date._getParseRegExp=function(b,e){if(!b._parseRegExp)b._parseRegExp={};else if(b._parseRegExp[e])return b._parseRegExp[e];var c=Date._expandFormat(b,e);c=c.replace(/([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g,"\\\\$1");var a=new Sys.StringBuilder("^"),j=[],f=0,i=0,h=Date._getTokenRegExp(),d;while((d=h.exec(c))!==null){var l=c.slice(f,d.index);f=h.lastIndex;i+=Date._appendPreOrPostMatch(l,a);if(i%2===1){a.append(d[0]);continue}switch(d[0]){case "dddd":case "ddd":case "MMMM":case "MMM":case "gg":case "g":a.append("(\\D+)");break;case "tt":case "t":a.append("(\\D*)");break;case "yyyy":a.append("(\\d{4})");break;case "fff":a.append("(\\d{3})");break;case "ff":a.append("(\\d{2})");break;case "f":a.append("(\\d)");break;case "dd":case "d":case "MM":case "M":case "yy":case "y":case "HH":case "H":case "hh":case "h":case "mm":case "m":case "ss":case "s":a.append("(\\d\\d?)");break;case "zzz":a.append("([+-]?\\d\\d?:\\d{2})");break;case "zz":case "z":a.append("([+-]?\\d\\d?)");break;case "/":a.append("(\\"+b.DateSeparator+")")}Array.add(j,d[0])}Date._appendPreOrPostMatch(c.slice(f),a);a.append("$");var k=a.toString().replace(/\s+/g,"\\s+"),g={"regExp":k,"groups":j};b._parseRegExp[e]=g;return g};Date._getTokenRegExp=function(){return /\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g};Date.parseLocale=function(a){return Date._parse(a,Sys.CultureInfo.CurrentCulture,arguments)};Date.parseInvariant=function(a){return Date._parse(a,Sys.CultureInfo.InvariantCulture,arguments)};Date._parse=function(h,d,i){var a,c,b,f,e,g=false;for(a=1,c=i.length;a<c;a++){f=i[a];if(f){g=true;b=Date._parseExact(h,f,d);if(b)return b}}if(!g){e=d._getDateTimeFormats();for(a=0,c=e.length;a<c;a++){b=Date._parseExact(h,e[a],d);if(b)return b}}return null};Date._parseExact=function(w,D,k){w=w.trim();var g=k.dateTimeFormat,A=Date._getParseRegExp(g,D),C=(new RegExp(A.regExp)).exec(w);if(C===null)return null;var B=A.groups,x=null,e=null,c=null,j=null,i=null,d=0,h,q=0,r=0,f=0,n=null,v=false;for(var t=0,E=B.length;t<E;t++){var a=C[t+1];if(a)switch(B[t]){case "dd":case "d":j=parseInt(a,10);if(j<1||j>31)return null;break;case "MMMM":c=k._getMonthIndex(a);if(c<0||c>11)return null;break;case "MMM":c=k._getAbbrMonthIndex(a);if(c<0||c>11)return null;break;case "M":case "MM":c=parseInt(a,10)-1;if(c<0||c>11)return null;break;case "y":case "yy":e=Date._expandYear(g,parseInt(a,10));if(e<0||e>9999)return null;break;case "yyyy":e=parseInt(a,10);if(e<0||e>9999)return null;break;case "h":case "hh":d=parseInt(a,10);if(d===12)d=0;if(d<0||d>11)return null;break;case "H":case "HH":d=parseInt(a,10);if(d<0||d>23)return null;break;case "m":case "mm":q=parseInt(a,10);if(q<0||q>59)return null;break;case "s":case "ss":r=parseInt(a,10);if(r<0||r>59)return null;break;case "tt":case "t":var z=a.toUpperCase();v=z===g.PMDesignator.toUpperCase();if(!v&&z!==g.AMDesignator.toUpperCase())return null;break;case "f":f=parseInt(a,10)*100;if(f<0||f>999)return null;break;case "ff":f=parseInt(a,10)*10;if(f<0||f>999)return null;break;case "fff":f=parseInt(a,10);if(f<0||f>999)return null;break;case "dddd":i=k._getDayIndex(a);if(i<0||i>6)return null;break;case "ddd":i=k._getAbbrDayIndex(a);if(i<0||i>6)return null;break;case "zzz":var u=a.split(/:/);if(u.length!==2)return null;h=parseInt(u[0],10);if(h<-12||h>13)return null;var o=parseInt(u[1],10);if(o<0||o>59)return null;n=h*60+(a.startsWith("-")?-o:o);break;case "z":case "zz":h=parseInt(a,10);if(h<-12||h>13)return null;n=h*60;break;case "g":case "gg":var p=a;if(!p||!g.eras)return null;p=p.toLowerCase().trim();for(var s=0,F=g.eras.length;s<F;s+=4)if(p===g.eras[s+1].toLowerCase()){x=s;break}if(x===null)return null}}var b=new Date,l,m=g.Calendar.convert;if(m)l=m.fromGregorian(b);if(!m)l=[b.getFullYear(),b.getMonth(),b.getDate()];if(e===null)e=l[0];else if(g.eras)e+=g.eras[(x||0)+3];if(c===null)c=l[1];if(j===null)j=l[2];if(m){b=m.toGregorian(e,c,j);if(b===null)return null}else{b.setFullYear(e,c,j);if(b.getDate()!==j)return null;if(i!==null&&b.getDay()!==i)return null}if(v&&d<12)d+=12;b.setHours(d,q,r,f);if(n!==null){var y=b.getMinutes()-(n+b.getTimezoneOffset());b.setHours(b.getHours()+parseInt(y/60,10),y%60)}return b};Date.prototype.format=function(a){return this._toFormattedString(a,Sys.CultureInfo.InvariantCulture)};Date.prototype.localeFormat=function(a){return this._toFormattedString(a,Sys.CultureInfo.CurrentCulture)};Date.prototype._toFormattedString=function(e,j){var b=j.dateTimeFormat,n=b.Calendar.convert;if(!e||!e.length||e==="i")if(j&&j.name.length)if(n)return this._toFormattedString(b.FullDateTimePattern,j);else{var r=new Date(this.getTime()),x=Date._getEra(this,b.eras);r.setFullYear(Date._getEraYear(this,b,x));return r.toLocaleString()}else return this.toString();var l=b.eras,k=e==="s";e=Date._expandFormat(b,e);var a=new Sys.StringBuilder,c;function d(a){if(a<10)return "0"+a;return a.toString()}function m(a){if(a<10)return "00"+a;if(a<100)return "0"+a;return a.toString()}function v(a){if(a<10)return "000"+a;else if(a<100)return "00"+a;else if(a<1000)return "0"+a;return a.toString()}var h,p,t=/([^d]|^)(d|dd)([^d]|$)/g;function s(){if(h||p)return h;h=t.test(e);p=true;return h}var q=0,o=Date._getTokenRegExp(),f;if(!k&&n)f=n.fromGregorian(this);for(;true;){var w=o.lastIndex,i=o.exec(e),u=e.slice(w,i?i.index:e.length);q+=Date._appendPreOrPostMatch(u,a);if(!i)break;if(q%2===1){a.append(i[0]);continue}function g(a,b){if(f)return f[b];switch(b){case 0:return a.getFullYear();case 1:return a.getMonth();case 2:return a.getDate()}}switch(i[0]){case "dddd":a.append(b.DayNames[this.getDay()]);break;case "ddd":a.append(b.AbbreviatedDayNames[this.getDay()]);break;case "dd":h=true;a.append(d(g(this,2)));break;case "d":h=true;a.append(g(this,2));break;case "MMMM":a.append(b.MonthGenitiveNames&&s()?b.MonthGenitiveNames[g(this,1)]:b.MonthNames[g(this,1)]);break;case "MMM":a.append(b.AbbreviatedMonthGenitiveNames&&s()?b.AbbreviatedMonthGenitiveNames[g(this,1)]:b.AbbreviatedMonthNames[g(this,1)]);break;case "MM":a.append(d(g(this,1)+1));break;case "M":a.append(g(this,1)+1);break;case "yyyy":a.append(v(f?f[0]:Date._getEraYear(this,b,Date._getEra(this,l),k)));break;case "yy":a.append(d((f?f[0]:Date._getEraYear(this,b,Date._getEra(this,l),k))%100));break;case "y":a.append((f?f[0]:Date._getEraYear(this,b,Date._getEra(this,l),k))%100);break;case "hh":c=this.getHours()%12;if(c===0)c=12;a.append(d(c));break;case "h":c=this.getHours()%12;if(c===0)c=12;a.append(c);break;case "HH":a.append(d(this.getHours()));break;case "H":a.append(this.getHours());break;case "mm":a.append(d(this.getMinutes()));break;case "m":a.append(this.getMinutes());break;case "ss":a.append(d(this.getSeconds()));break;case "s":a.append(this.getSeconds());break;case "tt":a.append(this.getHours()<12?b.AMDesignator:b.PMDesignator);break;case "t":a.append((this.getHours()<12?b.AMDesignator:b.PMDesignator).charAt(0));break;case "f":a.append(m(this.getMilliseconds()).charAt(0));break;case "ff":a.append(m(this.getMilliseconds()).substr(0,2));break;case "fff":a.append(m(this.getMilliseconds()));break;case "z":c=this.getTimezoneOffset()/60;a.append((c<=0?"+":"-")+Math.floor(Math.abs(c)));break;case "zz":c=this.getTimezoneOffset()/60;a.append((c<=0?"+":"-")+d(Math.floor(Math.abs(c))));break;case "zzz":c=this.getTimezoneOffset()/60;a.append((c<=0?"+":"-")+d(Math.floor(Math.abs(c)))+":"+d(Math.abs(this.getTimezoneOffset()%60)));break;case "g":case "gg":if(b.eras)a.append(b.eras[Date._getEra(this,l)+1]);break;case "/":a.append(b.DateSeparator)}}return a.toString()};String.localeFormat=function(){return String._toFormattedString(true,arguments)};Number.parseLocale=function(a){return Number._parse(a,Sys.CultureInfo.CurrentCulture)};Number.parseInvariant=function(a){return Number._parse(a,Sys.CultureInfo.InvariantCulture)};Number._parse=function(b,o){b=b.trim();if(b.match(/^[+-]?infinity$/i))return parseFloat(b);if(b.match(/^0x[a-f0-9]+$/i))return parseInt(b);var a=o.numberFormat,g=Number._parseNumberNegativePattern(b,a,a.NumberNegativePattern),h=g[0],e=g[1];if(h===""&&a.NumberNegativePattern!==1){g=Number._parseNumberNegativePattern(b,a,1);h=g[0];e=g[1]}if(h==="")h="+";var j,d,f=e.indexOf("e");if(f<0)f=e.indexOf("E");if(f<0){d=e;j=null}else{d=e.substr(0,f);j=e.substr(f+1)}var c,k,m=d.indexOf(a.NumberDecimalSeparator);if(m<0){c=d;k=null}else{c=d.substr(0,m);k=d.substr(m+a.NumberDecimalSeparator.length)}c=c.split(a.NumberGroupSeparator).join("");var n=a.NumberGroupSeparator.replace(/\u00A0/g," ");if(a.NumberGroupSeparator!==n)c=c.split(n).join("");var l=h+c;if(k!==null)l+="."+k;if(j!==null){var i=Number._parseNumberNegativePattern(j,a,1);if(i[0]==="")i[0]="+";l+="e"+i[0]+i[1]}if(l.match(/^[+-]?\d*\.?\d*(e[+-]?\d+)?$/))return parseFloat(l);return Number.NaN};Number._parseNumberNegativePattern=function(a,d,e){var b=d.NegativeSign,c=d.PositiveSign;switch(e){case 4:b=" "+b;c=" "+c;case 3:if(a.endsWith(b))return ["-",a.substr(0,a.length-b.length)];else if(a.endsWith(c))return ["+",a.substr(0,a.length-c.length)];break;case 2:b+=" ";c+=" ";case 1:if(a.startsWith(b))return ["-",a.substr(b.length)];else if(a.startsWith(c))return ["+",a.substr(c.length)];break;case 0:if(a.startsWith("(")&&a.endsWith(")"))return ["-",a.substr(1,a.length-2)]}return ["",a]};Number.prototype.format=function(a){return this._toFormattedString(a,Sys.CultureInfo.InvariantCulture)};Number.prototype.localeFormat=function(a){return this._toFormattedString(a,Sys.CultureInfo.CurrentCulture)};Number.prototype._toFormattedString=function(e,j){if(!e||e.length===0||e==="i")if(j&&j.name.length>0)return this.toLocaleString();else return this.toString();var o=["n %","n%","%n"],n=["-n %","-n%","-%n"],p=["(n)","-n","- n","n-","n -"],m=["$n","n$","$ n","n $"],l=["($n)","-$n","$-n","$n-","(n$)","-n$","n-$","n$-","-n $","-$ n","n $-","$ n-","$ -n","n- $","($ n)","(n $)"];function g(a,c,d){for(var b=a.length;b<c;b++)a=d?"0"+a:a+"0";return a}function i(j,i,l,n,p){var h=l[0],k=1,o=Math.pow(10,i),m=Math.round(j*o)/o;if(!isFinite(m))m=j;j=m;var b=j.toString(),a="",c,e=b.split(/e/i);b=e[0];c=e.length>1?parseInt(e[1]):0;e=b.split(".");b=e[0];a=e.length>1?e[1]:"";var q;if(c>0){a=g(a,c,false);b+=a.slice(0,c);a=a.substr(c)}else if(c<0){c=-c;b=g(b,c+1,true);a=b.slice(-c,b.length)+a;b=b.slice(0,-c)}if(i>0){if(a.length>i)a=a.slice(0,i);else a=g(a,i,false);a=p+a}else a="";var d=b.length-1,f="";while(d>=0){if(h===0||h>d)if(f.length>0)return b.slice(0,d+1)+n+f+a;else return b.slice(0,d+1)+a;if(f.length>0)f=b.slice(d-h+1,d+1)+n+f;else f=b.slice(d-h+1,d+1);d-=h;if(k<l.length){h=l[k];k++}}return b.slice(0,d+1)+n+f+a}var a=j.numberFormat,d=Math.abs(this);if(!e)e="D";var b=-1;if(e.length>1)b=parseInt(e.slice(1),10);var c;switch(e.charAt(0)){case "d":case "D":c="n";if(b!==-1)d=g(""+d,b,true);if(this<0)d=-d;break;case "c":case "C":if(this<0)c=l[a.CurrencyNegativePattern];else c=m[a.CurrencyPositivePattern];if(b===-1)b=a.CurrencyDecimalDigits;d=i(Math.abs(this),b,a.CurrencyGroupSizes,a.CurrencyGroupSeparator,a.CurrencyDecimalSeparator);break;case "n":case "N":if(this<0)c=p[a.NumberNegativePattern];else c="n";if(b===-1)b=a.NumberDecimalDigits;d=i(Math.abs(this),b,a.NumberGroupSizes,a.NumberGroupSeparator,a.NumberDecimalSeparator);break;case "p":case "P":if(this<0)c=n[a.PercentNegativePattern];else c=o[a.PercentPositivePattern];if(b===-1)b=a.PercentDecimalDigits;d=i(Math.abs(this)*100,b,a.PercentGroupSizes,a.PercentGroupSeparator,a.PercentDecimalSeparator);break;default:throw Error.format(Sys.Res.formatBadFormatSpecifier)}var k=/n|\$|-|%/g,f="";for(;true;){var q=k.lastIndex,h=k.exec(c);f+=c.slice(q,h?h.index:c.length);if(!h)break;switch(h[0]){case "n":f+=d;break;case "$":f+=a.CurrencySymbol;break;case "-":if(/[1-9]/.test(d))f+=a.NegativeSign;break;case "%":f+=a.PercentSymbol}}return f};Sys.CultureInfo=function(c,b,a){this.name=c;this.numberFormat=b;this.dateTimeFormat=a};Sys.CultureInfo.prototype={_getDateTimeFormats:function(){if(!this._dateTimeFormats){var a=this.dateTimeFormat;this._dateTimeFormats=[a.MonthDayPattern,a.YearMonthPattern,a.ShortDatePattern,a.ShortTimePattern,a.LongDatePattern,a.LongTimePattern,a.FullDateTimePattern,a.RFC1123Pattern,a.SortableDateTimePattern,a.UniversalSortableDateTimePattern]}return this._dateTimeFormats},_getIndex:function(c,d,e){var b=this._toUpper(c),a=Array.indexOf(d,b);if(a===-1)a=Array.indexOf(e,b);return a},_getMonthIndex:function(a){if(!this._upperMonths){this._upperMonths=this._toUpperArray(this.dateTimeFormat.MonthNames);this._upperMonthsGenitive=this._toUpperArray(this.dateTimeFormat.MonthGenitiveNames)}return this._getIndex(a,this._upperMonths,this._upperMonthsGenitive)},_getAbbrMonthIndex:function(a){if(!this._upperAbbrMonths){this._upperAbbrMonths=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames);this._upperAbbrMonthsGenitive=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthGenitiveNames)}return this._getIndex(a,this._upperAbbrMonths,this._upperAbbrMonthsGenitive)},_getDayIndex:function(a){if(!this._upperDays)this._upperDays=this._toUpperArray(this.dateTimeFormat.DayNames);return Array.indexOf(this._upperDays,this._toUpper(a))},_getAbbrDayIndex:function(a){if(!this._upperAbbrDays)this._upperAbbrDays=this._toUpperArray(this.dateTimeFormat.AbbreviatedDayNames);return Array.indexOf(this._upperAbbrDays,this._toUpper(a))},_toUpperArray:function(c){var b=[];for(var a=0,d=c.length;a<d;a++)b[a]=this._toUpper(c[a]);return b},_toUpper:function(a){return a.split("\u00a0").join(" ").toUpperCase()}};Sys.CultureInfo.registerClass("Sys.CultureInfo");Sys.CultureInfo._parse=function(a){var b=a.dateTimeFormat;if(b&&!b.eras)b.eras=a.eras;return new Sys.CultureInfo(a.name,a.numberFormat,b)};Sys.CultureInfo.InvariantCulture=Sys.CultureInfo._parse({"name":"","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecimalSeparator":".","IsReadOnly":true,"CurrencyGroupSizes":[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","CurrencySymbol":"\u00a4","NaNSymbol":"NaN","CurrencyNegativePattern":0,"NumberNegativePattern":1,"PercentPositivePattern":0,"PercentNegativePattern":0,"NegativeInfinitySymbol":"-Infinity","NegativeSign":"-","NumberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"Infinity","PositiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"\u2030","NativeDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"@-62135568000000@","MaxSupportedDateTime":"@253402300799999@","AlgorithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":true},"DateSeparator":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"FullDateTimePattern":"dddd, dd MMMM yyyy HH:mm:ss","LongDatePattern":"dddd, dd MMMM yyyy","LongTimePattern":"HH:mm:ss","MonthDayPattern":"MMMM dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'","ShortDatePattern":"MM/dd/yyyy","ShortTimePattern":"HH:mm","SortableDateTimePattern":"yyyy'-'MM'-'dd'T'HH':'mm':'ss","TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy'-'MM'-'dd HH':'mm':'ss'Z'","YearMonthPattern":"yyyy MMMM","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"AbbreviatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","May","June","July","August","September","October","November","December",""],"IsReadOnly":true,"NativeCalendarName":"Gregorian Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["January","February","March","April","May","June","July","August","September","October","November","December",""]},"eras":[1,"A.D.",null,0]});if(typeof __cultureInfo==="object"){Sys.CultureInfo.CurrentCulture=Sys.CultureInfo._parse(__cultureInfo);delete __cultureInfo}else Sys.CultureInfo.CurrentCulture=Sys.CultureInfo._parse({"name":"en-US","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecimalSeparator":".","IsReadOnly":false,"CurrencyGroupSizes":[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","CurrencySymbol":"$","NaNSymbol":"NaN","CurrencyNegativePattern":0,"NumberNegativePattern":1,"PercentPositivePattern":0,"PercentNegativePattern":0,"NegativeInfinitySymbol":"-Infinity","NegativeSign":"-","NumberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"Infinity","PositiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"\u2030","NativeDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"@-62135568000000@","MaxSupportedDateTime":"@253402300799999@","AlgorithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":false},"DateSeparator":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"FullDateTimePattern":"dddd, MMMM dd, yyyy h:mm:ss tt","LongDatePattern":"dddd, MMMM dd, yyyy","LongTimePattern":"h:mm:ss tt","MonthDayPattern":"MMMM dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'","ShortDatePattern":"M/d/yyyy","ShortTimePattern":"h:mm tt","SortableDateTimePattern":"yyyy'-'MM'-'dd'T'HH':'mm':'ss","TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy'-'MM'-'dd HH':'mm':'ss'Z'","YearMonthPattern":"MMMM, yyyy","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"AbbreviatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","May","June","July","August","September","October","November","December",""],"IsReadOnly":false,"NativeCalendarName":"Gregorian Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["January","February","March","April","May","June","July","August","September","October","November","December",""]},"eras":[1,"A.D.",null,0]});Type.registerNamespace("Sys.Serialization");Sys.Serialization.JavaScriptSerializer=function(){};Sys.Serialization.JavaScriptSerializer.registerClass("Sys.Serialization.JavaScriptSerializer");Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs=[];Sys.Serialization.JavaScriptSerializer._charsToEscape=[];Sys.Serialization.JavaScriptSerializer._dateRegEx=new RegExp('(^|[^\\\\])\\"\\\\/Date\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\+|-)[0-9]{4})?\\)\\\\/\\"',"g");Sys.Serialization.JavaScriptSerializer._escapeChars={};Sys.Serialization.JavaScriptSerializer._escapeRegEx=new RegExp('["\\\\\\x00-\\x1F]',"i");Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal=new RegExp('["\\\\\\x00-\\x1F]',"g");Sys.Serialization.JavaScriptSerializer._jsonRegEx=new RegExp("[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]","g");Sys.Serialization.JavaScriptSerializer._jsonStringRegEx=new RegExp('"(\\\\.|[^"\\\\])*"',"g");Sys.Serialization.JavaScriptSerializer._serverTypeFieldName="__type";Sys.Serialization.JavaScriptSerializer._init=function(){var c=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000b","\\f","\\r","\\u000e","\\u000f","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001a","\\u001b","\\u001c","\\u001d","\\u001e","\\u001f"];Sys.Serialization.JavaScriptSerializer._charsToEscape[0]="\\";Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs["\\"]=new RegExp("\\\\","g");Sys.Serialization.JavaScriptSerializer._escapeChars["\\"]="\\\\";Sys.Serialization.JavaScriptSerializer._charsToEscape[1]='"';Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['"']=new RegExp('"',"g");Sys.Serialization.JavaScriptSerializer._escapeChars['"']='\\"';for(var a=0;a<32;a++){var b=String.fromCharCode(a);Sys.Serialization.JavaScriptSerializer._charsToEscape[a+2]=b;Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[b]=new RegExp(b,"g");Sys.Serialization.JavaScriptSerializer._escapeChars[b]=c[a]}};Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder=function(b,a){a.append(b.toString())};Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder=function(a,b){if(isFinite(a))b.append(String(a));else throw Error.invalidOperation(Sys.Res.cannotSerializeNonFiniteNumbers)};Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder=function(a,c){c.append('"');if(Sys.Serialization.JavaScriptSerializer._escapeRegEx.test(a)){if(Sys.Serialization.JavaScriptSerializer._charsToEscape.length===0)Sys.Serialization.JavaScriptSerializer._init();if(a.length<128)a=a.replace(Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal,function(a){return Sys.Serialization.JavaScriptSerializer._escapeChars[a]});else for(var d=0;d<34;d++){var b=Sys.Serialization.JavaScriptSerializer._charsToEscape[d];if(a.indexOf(b)!==-1)if(Sys.Browser.agent===Sys.Browser.Opera||Sys.Browser.agent===Sys.Browser.FireFox)a=a.split(b).join(Sys.Serialization.JavaScriptSerializer._escapeChars[b]);else a=a.replace(Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[b],Sys.Serialization.JavaScriptSerializer._escapeChars[b])}}c.append(a);c.append('"')};Sys.Serialization.JavaScriptSerializer._serializeWithBuilder=function(b,a,i,g){var c;switch(typeof b){case "object":if(b)if(Number.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(b,a);else if(Boolean.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(b,a);else if(String.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(b,a);else if(Array.isInstanceOfType(b)){a.append("[");for(c=0;c<b.length;++c){if(c>0)a.append(",");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b[c],a,false,g)}a.append("]")}else{if(Date.isInstanceOfType(b)){a.append('"\\/Date(');a.append(b.getTime());a.append(')\\/"');break}var d=[],f=0;for(var e in b){if(e.startsWith("$"))continue;if(e===Sys.Serialization.JavaScriptSerializer._serverTypeFieldName&&f!==0){d[f++]=d[0];d[0]=e}else d[f++]=e}if(i)d.sort();a.append("{");var j=false;for(c=0;c<f;c++){var h=b[d[c]];if(typeof h!=="undefined"&&typeof h!=="function"){if(j)a.append(",");else j=true;Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(d[c],a,i,g);a.append(":");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(h,a,i,g)}}a.append("}")}else a.append("null");break;case "number":Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(b,a);break;case "string":Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(b,a);break;case "boolean":Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(b,a);break;default:a.append("null")}};Sys.Serialization.JavaScriptSerializer.serialize=function(b){var a=new Sys.StringBuilder;Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b,a,false);return a.toString()};Sys.Serialization.JavaScriptSerializer.deserialize=function(data,secure){if(data.length===0)throw Error.argument("data",Sys.Res.cannotDeserializeEmptyString);try{var exp=data.replace(Sys.Serialization.JavaScriptSerializer._dateRegEx,"$1new Date($2)");if(secure&&Sys.Serialization.JavaScriptSerializer._jsonRegEx.test(exp.replace(Sys.Serialization.JavaScriptSerializer._jsonStringRegEx,"")))throw null;return eval("("+exp+")")}catch(a){throw Error.argument("data",Sys.Res.cannotDeserializeInvalidJson)}};Type.registerNamespace("Sys.UI");Sys.EventHandlerList=function(){this._list={}};Sys.EventHandlerList.prototype={_addHandler:function(b,a){Array.add(this._getEvent(b,true),a)},addHandler:function(b,a){this._addHandler(b,a)},_removeHandler:function(c,b){var a=this._getEvent(c);if(!a)return;Array.remove(a,b)},removeHandler:function(b,a){this._removeHandler(b,a)},getHandler:function(b){var a=this._getEvent(b);if(!a||a.length===0)return null;a=Array.clone(a);return function(c,d){for(var b=0,e=a.length;b<e;b++)a[b](c,d)}},_getEvent:function(a,b){if(!this._list[a]){if(!b)return null;this._list[a]=[]}return this._list[a]}};Sys.EventHandlerList.registerClass("Sys.EventHandlerList");Sys.CommandEventArgs=function(c,a,b){Sys.CommandEventArgs.initializeBase(this);this._commandName=c;this._commandArgument=a;this._commandSource=b};Sys.CommandEventArgs.prototype={_commandName:null,_commandArgument:null,_commandSource:null,get_commandName:function(){return this._commandName},get_commandArgument:function(){return this._commandArgument},get_commandSource:function(){return this._commandSource}};Sys.CommandEventArgs.registerClass("Sys.CommandEventArgs",Sys.CancelEventArgs);Sys.INotifyPropertyChange=function(){};Sys.INotifyPropertyChange.prototype={};Sys.INotifyPropertyChange.registerInterface("Sys.INotifyPropertyChange");Sys.PropertyChangedEventArgs=function(a){Sys.PropertyChangedEventArgs.initializeBase(this);this._propertyName=a};Sys.PropertyChangedEventArgs.prototype={get_propertyName:function(){return this._propertyName}};Sys.PropertyChangedEventArgs.registerClass("Sys.PropertyChangedEventArgs",Sys.EventArgs);Sys.INotifyDisposing=function(){};Sys.INotifyDisposing.prototype={};Sys.INotifyDisposing.registerInterface("Sys.INotifyDisposing");Sys.Component=function(){if(Sys.Application)Sys.Application.registerDisposableObject(this)};Sys.Component.prototype={_id:null,_initialized:false,_updating:false,get_events:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_id:function(){return this._id},set_id:function(a){this._id=a},get_isInitialized:function(){return this._initialized},get_isUpdating:function(){return this._updating},add_disposing:function(a){this.get_events().addHandler("disposing",a)},remove_disposing:function(a){this.get_events().removeHandler("disposing",a)},add_propertyChanged:function(a){this.get_events().addHandler("propertyChanged",a)},remove_propertyChanged:function(a){this.get_events().removeHandler("propertyChanged",a)},beginUpdate:function(){this._updating=true},dispose:function(){if(this._events){var a=this._events.getHandler("disposing");if(a)a(this,Sys.EventArgs.Empty)}delete this._events;Sys.Application.unregisterDisposableObject(this);Sys.Application.removeComponent(this)},endUpdate:function(){this._updating=false;if(!this._initialized)this.initialize();this.updated()},initialize:function(){this._initialized=true},raisePropertyChanged:function(b){if(!this._events)return;var a=this._events.getHandler("propertyChanged");if(a)a(this,new Sys.PropertyChangedEventArgs(b))},updated:function(){}};Sys.Component.registerClass("Sys.Component",null,Sys.IDisposable,Sys.INotifyPropertyChange,Sys.INotifyDisposing);function Sys$Component$_setProperties(a,i){var d,j=Object.getType(a),e=j===Object||j===Sys.UI.DomElement,h=Sys.Component.isInstanceOfType(a)&&!a.get_isUpdating();if(h)a.beginUpdate();for(var c in i){var b=i[c],f=e?null:a["get_"+c];if(e||typeof f!=="function"){var k=a[c];if(!b||typeof b!=="object"||e&&!k)a[c]=b;else Sys$Component$_setProperties(k,b)}else{var l=a["set_"+c];if(typeof l==="function")l.apply(a,[b]);else if(b instanceof Array){d=f.apply(a);for(var g=0,m=d.length,n=b.length;g<n;g++,m++)d[m]=b[g]}else if(typeof b==="object"&&Object.getType(b)===Object){d=f.apply(a);Sys$Component$_setProperties(d,b)}}}if(h)a.endUpdate()}function Sys$Component$_setReferences(c,b){for(var a in b){var e=c["set_"+a],d=$find(b[a]);e.apply(c,[d])}}var $create=Sys.Component.create=function(h,f,d,c,g){var a=g?new h(g):new h,b=Sys.Application,i=b.get_isCreatingComponents();a.beginUpdate();if(f)Sys$Component$_setProperties(a,f);if(d)for(var e in d)a["add_"+e](d[e]);if(a.get_id())b.addComponent(a);if(i){b._createdComponents[b._createdComponents.length]=a;if(c)b._addComponentToSecondPass(a,c);else a.endUpdate()}else{if(c)Sys$Component$_setReferences(a,c);a.endUpdate()}return a};Sys.UI.MouseButton=function(){throw Error.notImplemented()};Sys.UI.MouseButton.prototype={leftButton:0,middleButton:1,rightButton:2};Sys.UI.MouseButton.registerEnum("Sys.UI.MouseButton");Sys.UI.Key=function(){throw Error.notImplemented()};Sys.UI.Key.prototype={backspace:8,tab:9,enter:13,esc:27,space:32,pageUp:33,pageDown:34,end:35,home:36,left:37,up:38,right:39,down:40,del:127};Sys.UI.Key.registerEnum("Sys.UI.Key");Sys.UI.Point=function(a,b){this.x=a;this.y=b};Sys.UI.Point.registerClass("Sys.UI.Point");Sys.UI.Bounds=function(c,d,b,a){this.x=c;this.y=d;this.height=a;this.width=b};Sys.UI.Bounds.registerClass("Sys.UI.Bounds");Sys.UI.DomEvent=function(e){var a=e,b=this.type=a.type.toLowerCase();this.rawEvent=a;this.altKey=a.altKey;if(typeof a.button!=="undefined")this.button=typeof a.which!=="undefined"?a.button:a.button===4?Sys.UI.MouseButton.middleButton:a.button===2?Sys.UI.MouseButton.rightButton:Sys.UI.MouseButton.leftButton;if(b==="keypress")this.charCode=a.charCode||a.keyCode;else if(a.keyCode&&a.keyCode===46)this.keyCode=127;else this.keyCode=a.keyCode;this.clientX=a.clientX;this.clientY=a.clientY;this.ctrlKey=a.ctrlKey;this.target=a.target?a.target:a.srcElement;if(!b.startsWith("key"))if(typeof a.offsetX!=="undefined"&&typeof a.offsetY!=="undefined"){this.offsetX=a.offsetX;this.offsetY=a.offsetY}else if(this.target&&this.target.nodeType!==3&&typeof a.clientX==="number"){var c=Sys.UI.DomElement.getLocation(this.target),d=Sys.UI.DomElement._getWindow(this.target);this.offsetX=(d.pageXOffset||0)+a.clientX-c.x;this.offsetY=(d.pageYOffset||0)+a.clientY-c.y}this.screenX=a.screenX;this.screenY=a.screenY;this.shiftKey=a.shiftKey};Sys.UI.DomEvent.prototype={preventDefault:function(){if(this.rawEvent.preventDefault)this.rawEvent.preventDefault();else if(window.event)this.rawEvent.returnValue=false},stopPropagation:function(){if(this.rawEvent.stopPropagation)this.rawEvent.stopPropagation();else if(window.event)this.rawEvent.cancelBubble=true}};Sys.UI.DomEvent.registerClass("Sys.UI.DomEvent");var $addHandler=Sys.UI.DomEvent.addHandler=function(a,d,e,g){if(!a._events)a._events={};var c=a._events[d];if(!c)a._events[d]=c=[];var b;if(a.addEventListener){b=function(b){return e.call(a,new Sys.UI.DomEvent(b))};a.addEventListener(d,b,false)}else if(a.attachEvent){b=function(){var b={};try{b=Sys.UI.DomElement._getWindow(a).event}catch(c){}return e.call(a,new Sys.UI.DomEvent(b))};a.attachEvent("on"+d,b)}c[c.length]={handler:e,browserHandler:b,autoRemove:g};if(g){var f=a.dispose;if(f!==Sys.UI.DomEvent._disposeHandlers){a.dispose=Sys.UI.DomEvent._disposeHandlers;if(typeof f!=="undefined")a._chainDispose=f}}},$addHandlers=Sys.UI.DomEvent.addHandlers=function(f,d,c,e){for(var b in d){var a=d[b];if(c)a=Function.createDelegate(c,a);$addHandler(f,b,a,e||false)}},$clearHandlers=Sys.UI.DomEvent.clearHandlers=function(a){Sys.UI.DomEvent._clearHandlers(a,false)};Sys.UI.DomEvent._clearHandlers=function(a,g){if(a._events){var e=a._events;for(var b in e){var d=e[b];for(var c=d.length-1;c>=0;c--){var f=d[c];if(!g||f.autoRemove)$removeHandler(a,b,f.handler)}}a._events=null}};Sys.UI.DomEvent._disposeHandlers=function(){Sys.UI.DomEvent._clearHandlers(this,true);var b=this._chainDispose,a=typeof b;if(a!=="undefined"){this.dispose=b;this._chainDispose=null;if(a==="function")this.dispose()}};var $removeHandler=Sys.UI.DomEvent.removeHandler=function(b,a,c){Sys.UI.DomEvent._removeHandler(b,a,c)};Sys.UI.DomEvent._removeHandler=function(a,e,f){var d=null,c=a._events[e];for(var b=0,g=c.length;b<g;b++)if(c[b].handler===f){d=c[b].browserHandler;break}if(a.removeEventListener)a.removeEventListener(e,d,false);else if(a.detachEvent)a.detachEvent("on"+e,d);c.splice(b,1)};Sys.UI.DomElement=function(){};Sys.UI.DomElement.registerClass("Sys.UI.DomElement");Sys.UI.DomElement.addCssClass=function(a,b){if(!Sys.UI.DomElement.containsCssClass(a,b))if(a.className==="")a.className=b;else a.className+=" "+b};Sys.UI.DomElement.containsCssClass=function(b,a){return Array.contains(b.className.split(" "),a)};Sys.UI.DomElement.getBounds=function(a){var b=Sys.UI.DomElement.getLocation(a);return new Sys.UI.Bounds(b.x,b.y,a.offsetWidth||0,a.offsetHeight||0)};var $get=Sys.UI.DomElement.getElementById=function(f,e){if(!e)return document.getElementById(f);if(e.getElementById)return e.getElementById(f);var c=[],d=e.childNodes;for(var b=0;b<d.length;b++){var a=d[b];if(a.nodeType==1)c[c.length]=a}while(c.length){a=c.shift();if(a.id==f)return a;d=a.childNodes;for(b=0;b<d.length;b++){a=d[b];if(a.nodeType==1)c[c.length]=a}}return null};if(document.documentElement.getBoundingClientRect)Sys.UI.DomElement.getLocation=function(b){if(b.self||b.nodeType===9)return new Sys.UI.Point(0,0);var f=b.getBoundingClientRect();if(!f)return new Sys.UI.Point(0,0);var i=b.ownerDocument.documentElement,c=Math.floor(f.left+.5)+i.scrollLeft,d=Math.floor(f.top+.5)+i.scrollTop;if(Sys.Browser.agent===Sys.Browser.InternetExplorer){try{var h=b.ownerDocument.parentWindow.frameElement||null;if(h){var k=h.frameBorder==="0"||h.frameBorder==="no"?2:0;c+=k;d+=k}}catch(l){}if(Sys.Browser.version<=7){var a,j,g,e=document.createElement("div");e.style.cssText="position:absolute !important;left:0px !important;right:0px !important;height:0px !important;width:1px !important;display:hidden !important";try{j=document.body.childNodes[0];document.body.insertBefore(e,j);g=e.getBoundingClientRect();document.body.removeChild(e);a=g.right-g.left}catch(l){}if(a&&a!==1){c=Math.floor(c/a);d=Math.floor(d/a)}}if((document.documentMode||0)<8){c-=2;d-=2}}return new Sys.UI.Point(c,d)};else if(Sys.Browser.agent===Sys.Browser.Safari)Sys.UI.DomElement.getLocation=function(c){if(c.window&&c.window===c||c.nodeType===9)return new Sys.UI.Point(0,0);var d=0,e=0,a,j=null,g=null,b;for(a=c;a;j=a,(g=b,a=a.offsetParent)){b=Sys.UI.DomElement._getCurrentStyle(a);var f=a.tagName?a.tagName.toUpperCase():null;if((a.offsetLeft||a.offsetTop)&&(f!=="BODY"||(!g||g.position!=="absolute"))){d+=a.offsetLeft;e+=a.offsetTop}if(j&&Sys.Browser.version>=3){d+=parseInt(b.borderLeftWidth);e+=parseInt(b.borderTopWidth)}}b=Sys.UI.DomElement._getCurrentStyle(c);var h=b?b.position:null;if(!h||h!=="absolute")for(a=c.parentNode;a;a=a.parentNode){f=a.tagName?a.tagName.toUpperCase():null;if(f!=="BODY"&&f!=="HTML"&&(a.scrollLeft||a.scrollTop)){d-=a.scrollLeft||0;e-=a.scrollTop||0}b=Sys.UI.DomElement._getCurrentStyle(a);var i=b?b.position:null;if(i&&i==="absolute")break}return new Sys.UI.Point(d,e)};else Sys.UI.DomElement.getLocation=function(d){if(d.window&&d.window===d||d.nodeType===9)return new Sys.UI.Point(0,0);var e=0,f=0,a,i=null,g=null,b=null;for(a=d;a;i=a,(g=b,a=a.offsetParent)){var c=a.tagName?a.tagName.toUpperCase():null;b=Sys.UI.DomElement._getCurrentStyle(a);if((a.offsetLeft||a.offsetTop)&&!(c==="BODY"&&(!g||g.position!=="absolute"))){e+=a.offsetLeft;f+=a.offsetTop}if(i!==null&&b){if(c!=="TABLE"&&c!=="TD"&&c!=="HTML"){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}if(c==="TABLE"&&(b.position==="relative"||b.position==="absolute")){e+=parseInt(b.marginLeft)||0;f+=parseInt(b.marginTop)||0}}}b=Sys.UI.DomElement._getCurrentStyle(d);var h=b?b.position:null;if(!h||h!=="absolute")for(a=d.parentNode;a;a=a.parentNode){c=a.tagName?a.tagName.toUpperCase():null;if(c!=="BODY"&&c!=="HTML"&&(a.scrollLeft||a.scrollTop)){e-=a.scrollLeft||0;f-=a.scrollTop||0;b=Sys.UI.DomElement._getCurrentStyle(a);if(b){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}}}return new Sys.UI.Point(e,f)};Sys.UI.DomElement.isDomElement=function(a){return Sys._isDomElement(a)};Sys.UI.DomElement.removeCssClass=function(d,c){var a=" "+d.className+" ",b=a.indexOf(" "+c+" ");if(b>=0)d.className=(a.substr(0,b)+" "+a.substring(b+c.length+1,a.length)).trim()};Sys.UI.DomElement.resolveElement=function(b,c){var a=b;if(!a)return null;if(typeof a==="string")a=Sys.UI.DomElement.getElementById(a,c);return a};Sys.UI.DomElement.raiseBubbleEvent=function(c,d){var b=c;while(b){var a=b.control;if(a&&a.onBubbleEvent&&a.raiseBubbleEvent){Sys.UI.DomElement._raiseBubbleEventFromControl(a,c,d);return}b=b.parentNode}};Sys.UI.DomElement._raiseBubbleEventFromControl=function(a,b,c){if(!a.onBubbleEvent(b,c))a._raiseBubbleEvent(b,c)};Sys.UI.DomElement.setLocation=function(b,c,d){var a=b.style;a.position="absolute";a.left=c+"px";a.top=d+"px"};Sys.UI.DomElement.toggleCssClass=function(b,a){if(Sys.UI.DomElement.containsCssClass(b,a))Sys.UI.DomElement.removeCssClass(b,a);else Sys.UI.DomElement.addCssClass(b,a)};Sys.UI.DomElement.getVisibilityMode=function(a){return a._visibilityMode===Sys.UI.VisibilityMode.hide?Sys.UI.VisibilityMode.hide:Sys.UI.VisibilityMode.collapse};Sys.UI.DomElement.setVisibilityMode=function(a,b){Sys.UI.DomElement._ensureOldDisplayMode(a);if(a._visibilityMode!==b){a._visibilityMode=b;if(Sys.UI.DomElement.getVisible(a)===false)if(a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display="none";a._visibilityMode=b}};Sys.UI.DomElement.getVisible=function(b){var a=b.currentStyle||Sys.UI.DomElement._getCurrentStyle(b);if(!a)return true;return a.visibility!=="hidden"&&a.display!=="none"};Sys.UI.DomElement.setVisible=function(a,b){if(b!==Sys.UI.DomElement.getVisible(a)){Sys.UI.DomElement._ensureOldDisplayMode(a);a.style.visibility=b?"visible":"hidden";if(b||a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display="none"}};Sys.UI.DomElement._ensureOldDisplayMode=function(a){if(!a._oldDisplayMode){var b=a.currentStyle||Sys.UI.DomElement._getCurrentStyle(a);a._oldDisplayMode=b?b.display:null;if(!a._oldDisplayMode||a._oldDisplayMode==="none")switch(a.tagName.toUpperCase()){case "DIV":case "P":case "ADDRESS":case "BLOCKQUOTE":case "BODY":case "COL":case "COLGROUP":case "DD":case "DL":case "DT":case "FIELDSET":case "FORM":case "H1":case "H2":case "H3":case "H4":case "H5":case "H6":case "HR":case "IFRAME":case "LEGEND":case "OL":case "PRE":case "TABLE":case "TD":case "TH":case "TR":case "UL":a._oldDisplayMode="block";break;case "LI":a._oldDisplayMode="list-item";break;default:a._oldDisplayMode="inline"}}};Sys.UI.DomElement._getWindow=function(a){var b=a.ownerDocument||a.document||a;return b.defaultView||b.parentWindow};Sys.UI.DomElement._getCurrentStyle=function(a){if(a.nodeType===3)return null;var c=Sys.UI.DomElement._getWindow(a);if(a.documentElement)a=a.documentElement;var b=c&&a!==c&&c.getComputedStyle?c.getComputedStyle(a,null):a.currentStyle||a.style;if(!b&&Sys.Browser.agent===Sys.Browser.Safari&&a.style){var g=a.style.display,f=a.style.position;a.style.position="absolute";a.style.display="block";var e=c.getComputedStyle(a,null);a.style.display=g;a.style.position=f;b={};for(var d in e)b[d]=e[d];b.display="none"}return b};Sys.IContainer=function(){};Sys.IContainer.prototype={};Sys.IContainer.registerInterface("Sys.IContainer");Sys.ApplicationLoadEventArgs=function(b,a){Sys.ApplicationLoadEventArgs.initializeBase(this);this._components=b;this._isPartialLoad=a};Sys.ApplicationLoadEventArgs.prototype={get_components:function(){return this._components},get_isPartialLoad:function(){return this._isPartialLoad}};Sys.ApplicationLoadEventArgs.registerClass("Sys.ApplicationLoadEventArgs",Sys.EventArgs);Sys._Application=function(){Sys._Application.initializeBase(this);this._disposableObjects=[];this._components={};this._createdComponents=[];this._secondPassComponents=[];this._unloadHandlerDelegate=Function.createDelegate(this,this._unloadHandler);Sys.UI.DomEvent.addHandler(window,"unload",this._unloadHandlerDelegate);this._domReady()};Sys._Application.prototype={_creatingComponents:false,_disposing:false,_deleteCount:0,get_isCreatingComponents:function(){return this._creatingComponents},get_isDisposing:function(){return this._disposing},add_init:function(a){if(this._initialized)a(this,Sys.EventArgs.Empty);else this.get_events().addHandler("init",a)},remove_init:function(a){this.get_events().removeHandler("init",a)},add_load:function(a){this.get_events().addHandler("load",a)},remove_load:function(a){this.get_events().removeHandler("load",a)},add_unload:function(a){this.get_events().addHandler("unload",a)},remove_unload:function(a){this.get_events().removeHandler("unload",a)},addComponent:function(a){this._components[a.get_id()]=a},beginCreateComponents:function(){this._creatingComponents=true},dispose:function(){if(!this._disposing){this._disposing=true;if(this._timerCookie){window.clearTimeout(this._timerCookie);delete this._timerCookie}if(this._endRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this._endRequestHandler);delete this._endRequestHandler}if(this._beginRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(this._beginRequestHandler);delete this._beginRequestHandler}if(window.pageUnload)window.pageUnload(this,Sys.EventArgs.Empty);var c=this.get_events().getHandler("unload");if(c)c(this,Sys.EventArgs.Empty);var b=Array.clone(this._disposableObjects);for(var a=0,f=b.length;a<f;a++){var d=b[a];if(typeof d!=="undefined")d.dispose()}Array.clear(this._disposableObjects);Sys.UI.DomEvent.removeHandler(window,"unload",this._unloadHandlerDelegate);if(Sys._ScriptLoader){var e=Sys._ScriptLoader.getInstance();if(e)e.dispose()}Sys._Application.callBaseMethod(this,"dispose")}},disposeElement:function(a,d){if(a.nodeType===1){var c=a.getElementsByTagName("*");for(var b=c.length-1;b>=0;b--)this._disposeElementInternal(c[b]);if(!d)this._disposeElementInternal(a)}},endCreateComponents:function(){var b=this._secondPassComponents;for(var a=0,d=b.length;a<d;a++){var c=b[a].component;Sys$Component$_setReferences(c,b[a].references);c.endUpdate()}this._secondPassComponents=[];this._creatingComponents=false},findComponent:function(b,a){return a?Sys.IContainer.isInstanceOfType(a)?a.findComponent(b):a[b]||null:Sys.Application._components[b]||null},getComponents:function(){var a=[],b=this._components;for(var c in b)a[a.length]=b[c];return a},initialize:function(){if(!this.get_isInitialized()&&!this._disposing){Sys._Application.callBaseMethod(this,"initialize");this._raiseInit();if(this.get_stateString){if(Sys.WebForms&&Sys.WebForms.PageRequestManager){this._beginRequestHandler=Function.createDelegate(this,this._onPageRequestManagerBeginRequest);Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(this._beginRequestHandler);this._endRequestHandler=Function.createDelegate(this,this._onPageRequestManagerEndRequest);Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._endRequestHandler)}var a=this.get_stateString();if(a!==this._currentEntry)this._navigate(a);else this._ensureHistory()}this.raiseLoad()}},notifyScriptLoaded:function(){},registerDisposableObject:function(b){if(!this._disposing){var a=this._disposableObjects,c=a.length;a[c]=b;b.__msdisposeindex=c}},raiseLoad:function(){var b=this.get_events().getHandler("load"),a=new Sys.ApplicationLoadEventArgs(Array.clone(this._createdComponents),!!this._loaded);this._loaded=true;if(b)b(this,a);if(window.pageLoad)window.pageLoad(this,a);this._createdComponents=[]},removeComponent:function(b){var a=b.get_id();if(a)delete this._components[a]},unregisterDisposableObject:function(a){if(!this._disposing){var e=a.__msdisposeindex;if(typeof e==="number"){var b=this._disposableObjects;delete b[e];delete a.__msdisposeindex;if(++this._deleteCount>1000){var c=[];for(var d=0,f=b.length;d<f;d++){a=b[d];if(typeof a!=="undefined"){a.__msdisposeindex=c.length;c.push(a)}}this._disposableObjects=c;this._deleteCount=0}}}},_addComponentToSecondPass:function(b,a){this._secondPassComponents[this._secondPassComponents.length]={component:b,references:a}},_disposeComponents:function(a){if(a)for(var b=a.length-1;b>=0;b--){var c=a[b];if(typeof c.dispose==="function")c.dispose()}},_disposeElementInternal:function(a){var d=a.dispose;if(d&&typeof d==="function")a.dispose();else{var c=a.control;if(c&&typeof c.dispose==="function")c.dispose()}var b=a._behaviors;if(b)this._disposeComponents(b);b=a._components;if(b){this._disposeComponents(b);a._components=null}},_domReady:function(){var a,g,f=this;function b(){f.initialize()}var c=function(){Sys.UI.DomEvent.removeHandler(window,"load",c);b()};Sys.UI.DomEvent.addHandler(window,"load",c);if(document.addEventListener)try{document.addEventListener("DOMContentLoaded",a=function(){document.removeEventListener("DOMContentLoaded",a,false);b()},false)}catch(h){}else if(document.attachEvent)if(window==window.top&&document.documentElement.doScroll){var e,d=document.createElement("div");a=function(){try{d.doScroll("left")}catch(c){e=window.setTimeout(a,0);return}d=null;b()};a()}else document.attachEvent("onreadystatechange",a=function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",a);b()}})},_raiseInit:function(){var a=this.get_events().getHandler("init");if(a){this.beginCreateComponents();a(this,Sys.EventArgs.Empty);this.endCreateComponents()}},_unloadHandler:function(){this.dispose()}};Sys._Application.registerClass("Sys._Application",Sys.Component,Sys.IContainer);Sys.Application=new Sys._Application;var $find=Sys.Application.findComponent;Sys.UI.Behavior=function(b){Sys.UI.Behavior.initializeBase(this);this._element=b;var a=b._behaviors;if(!a)b._behaviors=[this];else a[a.length]=this};Sys.UI.Behavior.prototype={_name:null,get_element:function(){return this._element},get_id:function(){var a=Sys.UI.Behavior.callBaseMethod(this,"get_id");if(a)return a;if(!this._element||!this._element.id)return "";return this._element.id+"$"+this.get_name()},get_name:function(){if(this._name)return this._name;var a=Object.getTypeName(this),b=a.lastIndexOf(".");if(b!==-1)a=a.substr(b+1);if(!this.get_isInitialized())this._name=a;return a},set_name:function(a){this._name=a},initialize:function(){Sys.UI.Behavior.callBaseMethod(this,"initialize");var a=this.get_name();if(a)this._element[a]=this},dispose:function(){Sys.UI.Behavior.callBaseMethod(this,"dispose");var a=this._element;if(a){var c=this.get_name();if(c)a[c]=null;var b=a._behaviors;Array.remove(b,this);if(b.length===0)a._behaviors=null;delete this._element}}};Sys.UI.Behavior.registerClass("Sys.UI.Behavior",Sys.Component);Sys.UI.Behavior.getBehaviorByName=function(b,c){var a=b[c];return a&&Sys.UI.Behavior.isInstanceOfType(a)?a:null};Sys.UI.Behavior.getBehaviors=function(a){if(!a._behaviors)return [];return Array.clone(a._behaviors)};Sys.UI.Behavior.getBehaviorsByType=function(d,e){var a=d._behaviors,c=[];if(a)for(var b=0,f=a.length;b<f;b++)if(e.isInstanceOfType(a[b]))c[c.length]=a[b];return c};Sys.UI.VisibilityMode=function(){throw Error.notImplemented()};Sys.UI.VisibilityMode.prototype={hide:0,collapse:1};Sys.UI.VisibilityMode.registerEnum("Sys.UI.VisibilityMode");Sys.UI.Control=function(a){Sys.UI.Control.initializeBase(this);this._element=a;a.control=this;var b=this.get_role();if(b)a.setAttribute("role",b)};Sys.UI.Control.prototype={_parent:null,_visibilityMode:Sys.UI.VisibilityMode.hide,get_element:function(){return this._element},get_id:function(){if(!this._element)return "";return this._element.id},set_id:function(){throw Error.invalidOperation(Sys.Res.cantSetId)},get_parent:function(){if(this._parent)return this._parent;if(!this._element)return null;var a=this._element.parentNode;while(a){if(a.control)return a.control;a=a.parentNode}return null},set_parent:function(a){this._parent=a},get_role:function(){return null},get_visibilityMode:function(){return Sys.UI.DomElement.getVisibilityMode(this._element)},set_visibilityMode:function(a){Sys.UI.DomElement.setVisibilityMode(this._element,a)},get_visible:function(){return Sys.UI.DomElement.getVisible(this._element)},set_visible:function(a){Sys.UI.DomElement.setVisible(this._element,a)},addCssClass:function(a){Sys.UI.DomElement.addCssClass(this._element,a)},dispose:function(){Sys.UI.Control.callBaseMethod(this,"dispose");if(this._element){this._element.control=null;delete this._element}if(this._parent)delete this._parent},onBubbleEvent:function(){return false},raiseBubbleEvent:function(a,b){this._raiseBubbleEvent(a,b)},_raiseBubbleEvent:function(b,c){var a=this.get_parent();while(a){if(a.onBubbleEvent(b,c))return;a=a.get_parent()}},removeCssClass:function(a){Sys.UI.DomElement.removeCssClass(this._element,a)},toggleCssClass:function(a){Sys.UI.DomElement.toggleCssClass(this._element,a)}};Sys.UI.Control.registerClass("Sys.UI.Control",Sys.Component);Sys.HistoryEventArgs=function(a){Sys.HistoryEventArgs.initializeBase(this);this._state=a};Sys.HistoryEventArgs.prototype={get_state:function(){return this._state}};Sys.HistoryEventArgs.registerClass("Sys.HistoryEventArgs",Sys.EventArgs);Sys.Application._appLoadHandler=null;Sys.Application._beginRequestHandler=null;Sys.Application._clientId=null;Sys.Application._currentEntry="";Sys.Application._endRequestHandler=null;Sys.Application._history=null;Sys.Application._enableHistory=false;Sys.Application._historyFrame=null;Sys.Application._historyInitialized=false;Sys.Application._historyPointIsNew=false;Sys.Application._ignoreTimer=false;Sys.Application._initialState=null;Sys.Application._state={};Sys.Application._timerCookie=0;Sys.Application._timerHandler=null;Sys.Application._uniqueId=null;Sys._Application.prototype.get_stateString=function(){var a=null;if(Sys.Browser.agent===Sys.Browser.Firefox){var c=window.location.href,b=c.indexOf("#");if(b!==-1)a=c.substring(b+1);else a="";return a}else a=window.location.hash;if(a.length>0&&a.charAt(0)==="#")a=a.substring(1);return a};Sys._Application.prototype.get_enableHistory=function(){return this._enableHistory};Sys._Application.prototype.set_enableHistory=function(a){this._enableHistory=a};Sys._Application.prototype.add_navigate=function(a){this.get_events().addHandler("navigate",a)};Sys._Application.prototype.remove_navigate=function(a){this.get_events().removeHandler("navigate",a)};Sys._Application.prototype.addHistoryPoint=function(c,f){this._ensureHistory();var b=this._state;for(var a in c){var d=c[a];if(d===null){if(typeof b[a]!=="undefined")delete b[a]}else b[a]=d}var e=this._serializeState(b);this._historyPointIsNew=true;this._setState(e,f);this._raiseNavigate()};Sys._Application.prototype.setServerId=function(a,b){this._clientId=a;this._uniqueId=b};Sys._Application.prototype.setServerState=function(a){this._ensureHistory();this._state.__s=a;this._updateHiddenField(a)};Sys._Application.prototype._deserializeState=function(a){var e={};a=a||"";var b=a.indexOf("&&");if(b!==-1&&b+2<a.length){e.__s=a.substr(b+2);a=a.substr(0,b)}var g=a.split("&");for(var f=0,j=g.length;f<j;f++){var d=g[f],c=d.indexOf("=");if(c!==-1&&c+1<d.length){var i=d.substr(0,c),h=d.substr(c+1);e[i]=decodeURIComponent(h)}}return e};Sys._Application.prototype._enableHistoryInScriptManager=function(){this._enableHistory=true};Sys._Application.prototype._ensureHistory=function(){if(!this._historyInitialized&&this._enableHistory){if(Sys.Browser.agent===Sys.Browser.InternetExplorer&&Sys.Browser.documentMode<8){this._historyFrame=document.getElementById("__historyFrame");this._ignoreIFrame=true}this._timerHandler=Function.createDelegate(this,this._onIdle);this._timerCookie=window.setTimeout(this._timerHandler,100);try{this._initialState=this._deserializeState(this.get_stateString())}catch(a){}this._historyInitialized=true}};Sys._Application.prototype._navigate=function(c){this._ensureHistory();var b=this._deserializeState(c);if(this._uniqueId){var d=this._state.__s||"",a=b.__s||"";if(a!==d){this._updateHiddenField(a);__doPostBack(this._uniqueId,a);this._state=b;return}}this._setState(c);this._state=b;this._raiseNavigate()};Sys._Application.prototype._onIdle=function(){delete this._timerCookie;var a=this.get_stateString();if(a!==this._currentEntry){if(!this._ignoreTimer){this._historyPointIsNew=false;this._navigate(a)}}else this._ignoreTimer=false;this._timerCookie=window.setTimeout(this._timerHandler,100)};Sys._Application.prototype._onIFrameLoad=function(a){this._ensureHistory();if(!this._ignoreIFrame){this._historyPointIsNew=false;this._navigate(a)}this._ignoreIFrame=false};Sys._Application.prototype._onPageRequestManagerBeginRequest=function(){this._ignoreTimer=true};Sys._Application.prototype._onPageRequestManagerEndRequest=function(e,d){var b=d.get_dataItems()[this._clientId],a=document.getElementById("__EVENTTARGET");if(a&&a.value===this._uniqueId)a.value="";if(typeof b!=="undefined"){this.setServerState(b);this._historyPointIsNew=true}else this._ignoreTimer=false;var c=this._serializeState(this._state);if(c!==this._currentEntry){this._ignoreTimer=true;this._setState(c);this._raiseNavigate()}};Sys._Application.prototype._raiseNavigate=function(){var c=this.get_events().getHandler("navigate"),b={};for(var a in this._state)if(a!=="__s")b[a]=this._state[a];var d=new Sys.HistoryEventArgs(b);if(c)c(this,d);var e;try{if(Sys.Browser.agent===Sys.Browser.Firefox&&window.location.hash&&(!window.frameElement||window.top.location.hash))window.history.go(0)}catch(f){}};Sys._Application.prototype._serializeState=function(d){var b=[];for(var a in d){var e=d[a];if(a==="__s")var c=e;else b[b.length]=a+"="+encodeURIComponent(e)}return b.join("&")+(c?"&&"+c:"")};Sys._Application.prototype._setState=function(a,b){if(this._enableHistory){a=a||"";if(a!==this._currentEntry){if(window.theForm){var d=window.theForm.action,e=d.indexOf("#");window.theForm.action=(e!==-1?d.substring(0,e):d)+"#"+a}if(this._historyFrame&&this._historyPointIsNew){this._ignoreIFrame=true;var c=this._historyFrame.contentWindow.document;c.open("javascript:'<html></html>'");c.write("<html><head><title>"+(b||document.title)+"</title><scri"+'pt type="text/javascript">parent.Sys.Application._onIFrameLoad('+Sys.Serialization.JavaScriptSerializer.serialize(a)+");</scri"+"pt></head><body></body></html>");c.close()}this._ignoreTimer=false;this._currentEntry=a;if(this._historyFrame||this._historyPointIsNew){var f=this.get_stateString();if(a!==f){window.location.hash=a;this._currentEntry=this.get_stateString();if(typeof b!=="undefined"&&b!==null)document.title=b}}this._historyPointIsNew=false}}};Sys._Application.prototype._updateHiddenField=function(b){if(this._clientId){var a=document.getElementById(this._clientId);if(a)a.value=b}};if(!window.XMLHttpRequest)window.XMLHttpRequest=function(){var b=["Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP"];for(var a=0,c=b.length;a<c;a++)try{return new ActiveXObject(b[a])}catch(d){}return null};Type.registerNamespace("Sys.Net");Sys.Net.WebRequestExecutor=function(){this._webRequest=null;this._resultObject=null};Sys.Net.WebRequestExecutor.prototype={get_webRequest:function(){return this._webRequest},_set_webRequest:function(a){this._webRequest=a},get_started:function(){throw Error.notImplemented()},get_responseAvailable:function(){throw Error.notImplemented()},get_timedOut:function(){throw Error.notImplemented()},get_aborted:function(){throw Error.notImplemented()},get_responseData:function(){throw Error.notImplemented()},get_statusCode:function(){throw Error.notImplemented()},get_statusText:function(){throw Error.notImplemented()},get_xml:function(){throw Error.notImplemented()},get_object:function(){if(!this._resultObject)this._resultObject=Sys.Serialization.JavaScriptSerializer.deserialize(this.get_responseData());return this._resultObject},executeRequest:function(){throw Error.notImplemented()},abort:function(){throw Error.notImplemented()},getResponseHeader:function(){throw Error.notImplemented()},getAllResponseHeaders:function(){throw Error.notImplemented()}};Sys.Net.WebRequestExecutor.registerClass("Sys.Net.WebRequestExecutor");Sys.Net.XMLDOM=function(d){if(!window.DOMParser){var c=["Msxml2.DOMDocument.3.0","Msxml2.DOMDocument"];for(var b=0,f=c.length;b<f;b++)try{var a=new ActiveXObject(c[b]);a.async=false;a.loadXML(d);a.setProperty("SelectionLanguage","XPath");return a}catch(g){}}else try{var e=new window.DOMParser;return e.parseFromString(d,"text/xml")}catch(g){}return null};Sys.Net.XMLHttpExecutor=function(){Sys.Net.XMLHttpExecutor.initializeBase(this);var a=this;this._xmlHttpRequest=null;this._webRequest=null;this._responseAvailable=false;this._timedOut=false;this._timer=null;this._aborted=false;this._started=false;this._onReadyStateChange=function(){if(a._xmlHttpRequest.readyState===4){try{if(typeof a._xmlHttpRequest.status==="undefined")return}catch(b){return}a._clearTimer();a._responseAvailable=true;try{a._webRequest.completed(Sys.EventArgs.Empty)}finally{if(a._xmlHttpRequest!=null){a._xmlHttpRequest.onreadystatechange=Function.emptyMethod;a._xmlHttpRequest=null}}}};this._clearTimer=function(){if(a._timer!=null){window.clearTimeout(a._timer);a._timer=null}};this._onTimeout=function(){if(!a._responseAvailable){a._clearTimer();a._timedOut=true;a._xmlHttpRequest.onreadystatechange=Function.emptyMethod;a._xmlHttpRequest.abort();a._webRequest.completed(Sys.EventArgs.Empty);a._xmlHttpRequest=null}}};Sys.Net.XMLHttpExecutor.prototype={get_timedOut:function(){return this._timedOut},get_started:function(){return this._started},get_responseAvailable:function(){return this._responseAvailable},get_aborted:function(){return this._aborted},executeRequest:function(){this._webRequest=this.get_webRequest();var c=this._webRequest.get_body(),a=this._webRequest.get_headers();this._xmlHttpRequest=new XMLHttpRequest;this._xmlHttpRequest.onreadystatechange=this._onReadyStateChange;var e=this._webRequest.get_httpVerb();this._xmlHttpRequest.open(e,this._webRequest.getResolvedUrl(),true);this._xmlHttpRequest.setRequestHeader("X-Requested-With","XMLHttpRequest");if(a)for(var b in a){var f=a[b];if(typeof f!=="function")this._xmlHttpRequest.setRequestHeader(b,f)}if(e.toLowerCase()==="post"){if(a===null||!a["Content-Type"])this._xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");if(!c)c=""}var d=this._webRequest.get_timeout();if(d>0)this._timer=window.setTimeout(Function.createDelegate(this,this._onTimeout),d);this._xmlHttpRequest.send(c);this._started=true},getResponseHeader:function(b){var a;try{a=this._xmlHttpRequest.getResponseHeader(b)}catch(c){}if(!a)a="";return a},getAllResponseHeaders:function(){return this._xmlHttpRequest.getAllResponseHeaders()},get_responseData:function(){return this._xmlHttpRequest.responseText},get_statusCode:function(){var a=0;try{a=this._xmlHttpRequest.status}catch(b){}return a},get_statusText:function(){return this._xmlHttpRequest.statusText},get_xml:function(){var a=this._xmlHttpRequest.responseXML;if(!a||!a.documentElement){a=Sys.Net.XMLDOM(this._xmlHttpRequest.responseText);if(!a||!a.documentElement)return null}else if(navigator.userAgent.indexOf("MSIE")!==-1)a.setProperty("SelectionLanguage","XPath");if(a.documentElement.namespaceURI==="http://www.mozilla.org/newlayout/xml/parsererror.xml"&&a.documentElement.tagName==="parsererror")return null;if(a.documentElement.firstChild&&a.documentElement.firstChild.tagName==="parsererror")return null;return a},abort:function(){if(this._aborted||this._responseAvailable||this._timedOut)return;this._aborted=true;this._clearTimer();if(this._xmlHttpRequest&&!this._responseAvailable){this._xmlHttpRequest.onreadystatechange=Function.emptyMethod;this._xmlHttpRequest.abort();this._xmlHttpRequest=null;this._webRequest.completed(Sys.EventArgs.Empty)}}};Sys.Net.XMLHttpExecutor.registerClass("Sys.Net.XMLHttpExecutor",Sys.Net.WebRequestExecutor);Sys.Net._WebRequestManager=function(){this._defaultTimeout=0;this._defaultExecutorType="Sys.Net.XMLHttpExecutor"};Sys.Net._WebRequestManager.prototype={add_invokingRequest:function(a){this._get_eventHandlerList().addHandler("invokingRequest",a)},remove_invokingRequest:function(a){this._get_eventHandlerList().removeHandler("invokingRequest",a)},add_completedRequest:function(a){this._get_eventHandlerList().addHandler("completedRequest",a)},remove_completedRequest:function(a){this._get_eventHandlerList().removeHandler("completedRequest",a)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_defaultTimeout:function(){return this._defaultTimeout},set_defaultTimeout:function(a){this._defaultTimeout=a},get_defaultExecutorType:function(){return this._defaultExecutorType},set_defaultExecutorType:function(a){this._defaultExecutorType=a},executeRequest:function(webRequest){var executor=webRequest.get_executor();if(!executor){var failed=false;try{var executorType=eval(this._defaultExecutorType);executor=new executorType}catch(a){failed=true}webRequest.set_executor(executor)}if(executor.get_aborted())return;var evArgs=new Sys.Net.NetworkRequestEventArgs(webRequest),handler=this._get_eventHandlerList().getHandler("invokingRequest");if(handler)handler(this,evArgs);if(!evArgs.get_cancel())executor.executeRequest()}};Sys.Net._WebRequestManager.registerClass("Sys.Net._WebRequestManager");Sys.Net.WebRequestManager=new Sys.Net._WebRequestManager;Sys.Net.NetworkRequestEventArgs=function(a){Sys.Net.NetworkRequestEventArgs.initializeBase(this);this._webRequest=a};Sys.Net.NetworkRequestEventArgs.prototype={get_webRequest:function(){return this._webRequest}};Sys.Net.NetworkRequestEventArgs.registerClass("Sys.Net.NetworkRequestEventArgs",Sys.CancelEventArgs);Sys.Net.WebRequest=function(){this._url="";this._headers={};this._body=null;this._userContext=null;this._httpVerb=null;this._executor=null;this._invokeCalled=false;this._timeout=0};Sys.Net.WebRequest.prototype={add_completed:function(a){this._get_eventHandlerList().addHandler("completed",a)},remove_completed:function(a){this._get_eventHandlerList().removeHandler("completed",a)},completed:function(b){var a=Sys.Net.WebRequestManager._get_eventHandlerList().getHandler("completedRequest");if(a)a(this._executor,b);a=this._get_eventHandlerList().getHandler("completed");if(a)a(this._executor,b)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_url:function(){return this._url},set_url:function(a){this._url=a},get_headers:function(){return this._headers},get_httpVerb:function(){if(this._httpVerb===null){if(this._body===null)return "GET";return "POST"}return this._httpVerb},set_httpVerb:function(a){this._httpVerb=a},get_body:function(){return this._body},set_body:function(a){this._body=a},get_userContext:function(){return this._userContext},set_userContext:function(a){this._userContext=a},get_executor:function(){return this._executor},set_executor:function(a){this._executor=a;this._executor._set_webRequest(this)},get_timeout:function(){if(this._timeout===0)return Sys.Net.WebRequestManager.get_defaultTimeout();return this._timeout},set_timeout:function(a){this._timeout=a},getResolvedUrl:function(){return Sys.Net.WebRequest._resolveUrl(this._url)},invoke:function(){Sys.Net.WebRequestManager.executeRequest(this);this._invokeCalled=true}};Sys.Net.WebRequest._resolveUrl=function(b,a){if(b&&b.indexOf("://")!==-1)return b;if(!a||a.length===0){var d=document.getElementsByTagName("base")[0];if(d&&d.href&&d.href.length>0)a=d.href;else a=document.URL}var c=a.indexOf("?");if(c!==-1)a=a.substr(0,c);c=a.indexOf("#");if(c!==-1)a=a.substr(0,c);a=a.substr(0,a.lastIndexOf("/")+1);if(!b||b.length===0)return a;if(b.charAt(0)==="/"){var e=a.indexOf("://"),g=a.indexOf("/",e+3);return a.substr(0,g)+b}else{var f=a.lastIndexOf("/");return a.substr(0,f+1)+b}};Sys.Net.WebRequest._createQueryString=function(c,b,f){b=b||encodeURIComponent;var h=0,e,g,d,a=new Sys.StringBuilder;if(c)for(d in c){e=c[d];if(typeof e==="function")continue;g=Sys.Serialization.JavaScriptSerializer.serialize(e);if(h++)a.append("&");a.append(d);a.append("=");a.append(b(g))}if(f){if(h)a.append("&");a.append(f)}return a.toString()};Sys.Net.WebRequest._createUrl=function(a,b,c){if(!b&&!c)return a;var d=Sys.Net.WebRequest._createQueryString(b,null,c);return d.length?a+(a&&a.indexOf("?")>=0?"&":"?")+d:a};Sys.Net.WebRequest.registerClass("Sys.Net.WebRequest");Sys._ScriptLoaderTask=function(b,a){this._scriptElement=b;this._completedCallback=a};Sys._ScriptLoaderTask.prototype={get_scriptElement:function(){return this._scriptElement},dispose:function(){if(this._disposed)return;this._disposed=true;this._removeScriptElementHandlers();Sys._ScriptLoaderTask._clearScript(this._scriptElement);this._scriptElement=null},execute:function(){this._addScriptElementHandlers();document.getElementsByTagName("head")[0].appendChild(this._scriptElement)},_addScriptElementHandlers:function(){this._scriptLoadDelegate=Function.createDelegate(this,this._scriptLoadHandler);if(Sys.Browser.agent!==Sys.Browser.InternetExplorer){this._scriptElement.readyState="loaded";$addHandler(this._scriptElement,"load",this._scriptLoadDelegate)}else $addHandler(this._scriptElement,"readystatechange",this._scriptLoadDelegate);if(this._scriptElement.addEventListener){this._scriptErrorDelegate=Function.createDelegate(this,this._scriptErrorHandler);this._scriptElement.addEventListener("error",this._scriptErrorDelegate,false)}},_removeScriptElementHandlers:function(){if(this._scriptLoadDelegate){var a=this.get_scriptElement();if(Sys.Browser.agent!==Sys.Browser.InternetExplorer)$removeHandler(a,"load",this._scriptLoadDelegate);else $removeHandler(a,"readystatechange",this._scriptLoadDelegate);if(this._scriptErrorDelegate){this._scriptElement.removeEventListener("error",this._scriptErrorDelegate,false);this._scriptErrorDelegate=null}this._scriptLoadDelegate=null}},_scriptErrorHandler:function(){if(this._disposed)return;this._completedCallback(this.get_scriptElement(),false)},_scriptLoadHandler:function(){if(this._disposed)return;var a=this.get_scriptElement();if(a.readyState!=="loaded"&&a.readyState!=="complete")return;this._completedCallback(a,true)}};Sys._ScriptLoaderTask.registerClass("Sys._ScriptLoaderTask",null,Sys.IDisposable);Sys._ScriptLoaderTask._clearScript=function(a){if(!Sys.Debug.isDebug)a.parentNode.removeChild(a)};Type.registerNamespace("Sys.Net");Sys.Net.WebServiceProxy=function(){};Sys.Net.WebServiceProxy.prototype={get_timeout:function(){return this._timeout||0},set_timeout:function(a){if(a<0)throw Error.argumentOutOfRange("value",a,Sys.Res.invalidTimeout);this._timeout=a},get_defaultUserContext:function(){return typeof this._userContext==="undefined"?null:this._userContext},set_defaultUserContext:function(a){this._userContext=a},get_defaultSucceededCallback:function(){return this._succeeded||null},set_defaultSucceededCallback:function(a){this._succeeded=a},get_defaultFailedCallback:function(){return this._failed||null},set_defaultFailedCallback:function(a){this._failed=a},get_enableJsonp:function(){return !!this._jsonp},set_enableJsonp:function(a){this._jsonp=a},get_path:function(){return this._path||null},set_path:function(a){this._path=a},get_jsonpCallbackParameter:function(){return this._callbackParameter||"callback"},set_jsonpCallbackParameter:function(a){this._callbackParameter=a},_invoke:function(d,e,g,f,c,b,a){c=c||this.get_defaultSucceededCallback();b=b||this.get_defaultFailedCallback();if(a===null||typeof a==="undefined")a=this.get_defaultUserContext();return Sys.Net.WebServiceProxy.invoke(d,e,g,f,c,b,a,this.get_timeout(),this.get_enableJsonp(),this.get_jsonpCallbackParameter())}};Sys.Net.WebServiceProxy.registerClass("Sys.Net.WebServiceProxy");Sys.Net.WebServiceProxy.invoke=function(q,a,m,l,j,b,g,e,w,p){var i=w!==false?Sys.Net.WebServiceProxy._xdomain.exec(q):null,c,n=i&&i.length===3&&(i[1]!==location.protocol||i[2]!==location.host);m=n||m;if(n){p=p||"callback";c="_jsonp"+Sys._jsonp++}if(!l)l={};var r=l;if(!m||!r)r={};var s,h,f=null,k,o=null,u=Sys.Net.WebRequest._createUrl(a?q+"/"+encodeURIComponent(a):q,r,n?p+"=Sys."+c:null);if(n){s=document.createElement("script");s.src=u;k=new Sys._ScriptLoaderTask(s,function(d,b){if(!b||c)t({Message:String.format(Sys.Res.webServiceFailedNoMsg,a)},-1)});function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(true,String.format(Sys.Res.webServiceTimedOut,a));k.dispose();delete Sys[c];if(b)b(h,g,a)}function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();delete Sys[c];c=null;if(typeof e!=="undefined"&&e!==200){if(b){h=new Sys.Net.WebServiceError(false,d.Message||String.format(Sys.Res.webServiceFailedNoMsg,a),d.StackTrace||null,d.ExceptionType||null,d);h._statusCode=e;b(h,g,a)}}else if(j)j(d,g,a)}Sys[c]=t;e=e||Sys.Net.WebRequestManager.get_defaultTimeout();if(e>0)f=window.setTimeout(v,e);k.execute();return null}var d=new Sys.Net.WebRequest;d.set_url(u);d.get_headers()["Content-Type"]="application/json; charset=utf-8";if(!m){o=Sys.Serialization.JavaScriptSerializer.serialize(l);if(o==="{}")o=""}d.set_body(o);d.add_completed(x);if(e&&e>0)d.set_timeout(e);d.invoke();function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=null;try{var e=d.getResponseHeader("Content-Type");if(e.startsWith("application/json"))c=d.get_object();else if(e.startsWith("text/xml"))c=d.get_xml();else c=d.get_responseData()}catch(m){}var k=d.getResponseHeader("jsonerror"),h=k==="true";if(h){if(c)c=new Sys.Net.WebServiceError(false,c.Message,c.StackTrace,c.ExceptionType,c)}else if(e.startsWith("application/json"))c=!c||typeof c.d==="undefined"?c:c.d;if(f<200||f>=300||h){if(b){if(!c||!h)c=new Sys.Net.WebServiceError(false,String.format(Sys.Res.webServiceFailedNoMsg,a));c._statusCode=f;b(c,g,a)}}else if(j)j(c,g,a)}else{var i;if(d.get_timedOut())i=String.format(Sys.Res.webServiceTimedOut,a);else i=String.format(Sys.Res.webServiceFailedNoMsg,a);if(b)b(new Sys.Net.WebServiceError(d.get_timedOut(),i,"",""),g,a)}}return d};Sys.Net.WebServiceProxy._generateTypedConstructor=function(a){return function(b){if(b)for(var c in b)this[c]=b[c];this.__type=a}};Sys._jsonp=0;Sys.Net.WebServiceProxy._xdomain=/^\s*([a-zA-Z0-9\+\-\.]+\:)\/\/([^?#\/]+)/;Sys.Net.WebServiceError=function(d,e,c,a,b){this._timedOut=d;this._message=e;this._stackTrace=c;this._exceptionType=a;this._errorObject=b;this._statusCode=-1};Sys.Net.WebServiceError.prototype={get_timedOut:function(){return this._timedOut},get_statusCode:function(){return this._statusCode},get_message:function(){return this._message},get_stackTrace:function(){return this._stackTrace||""},get_exceptionType:function(){return this._exceptionType||""},get_errorObject:function(){return this._errorObject||null}};Sys.Net.WebServiceError.registerClass("Sys.Net.WebServiceError");

+Type.registerNamespace('Sys');Sys.Res={'argumentInteger':'Value must be an integer.','invokeCalledTwice':'Cannot call invoke more than once.','webServiceFailed':'The server method \'{0}\' failed with the following error: {1}','argumentType':'Object cannot be converted to the required type.','argumentNull':'Value cannot be null.','scriptAlreadyLoaded':'The script \'{0}\' has been referenced multiple times. If referencing Microsoft AJAX scripts explicitly, set the MicrosoftAjaxMode property of the ScriptManager to Explicit.','scriptDependencyNotFound':'The script \'{0}\' failed to load because it is dependent on script \'{1}\'.','formatBadFormatSpecifier':'Format specifier was invalid.','requiredScriptReferenceNotIncluded':'\'{0}\' requires that you have included a script reference to \'{1}\'.','webServiceFailedNoMsg':'The server method \'{0}\' failed.','argumentDomElement':'Value must be a DOM element.','invalidExecutorType':'Could not create a valid Sys.Net.WebRequestExecutor from: {0}.','cannotCallBeforeResponse':'Cannot call {0} when responseAvailable is false.','actualValue':'Actual value was {0}.','enumInvalidValue':'\'{0}\' is not a valid value for enum {1}.','scriptLoadFailed':'The script \'{0}\' could not be loaded.','parameterCount':'Parameter count mismatch.','cannotDeserializeEmptyString':'Cannot deserialize empty string.','formatInvalidString':'Input string was not in a correct format.','invalidTimeout':'Value must be greater than or equal to zero.','cannotAbortBeforeStart':'Cannot abort when executor has not started.','argument':'Value does not fall within the expected range.','cannotDeserializeInvalidJson':'Cannot deserialize. The data does not correspond to valid JSON.','invalidHttpVerb':'httpVerb cannot be set to an empty or null string.','nullWebRequest':'Cannot call executeRequest with a null webRequest.','eventHandlerInvalid':'Handler was not added through the Sys.UI.DomEvent.addHandler method.','cannotSerializeNonFiniteNumbers':'Cannot serialize non finite numbers.','argumentUndefined':'Value cannot be undefined.','webServiceInvalidReturnType':'The server method \'{0}\' returned an invalid type. Expected type: {1}','servicePathNotSet':'The path to the web service has not been set.','argumentTypeWithTypes':'Object of type \'{0}\' cannot be converted to type \'{1}\'.','cannotCallOnceStarted':'Cannot call {0} once started.','badBaseUrl1':'Base URL does not contain ://.','badBaseUrl2':'Base URL does not contain another /.','badBaseUrl3':'Cannot find last / in base URL.','setExecutorAfterActive':'Cannot set executor after it has become active.','paramName':'Parameter name: {0}','nullReferenceInPath':'Null reference while evaluating data path: \'{0}\'.','cannotCallOutsideHandler':'Cannot call {0} outside of a completed event handler.','cannotSerializeObjectWithCycle':'Cannot serialize object with cyclic reference within child properties.','format':'One of the identified items was in an invalid format.','assertFailedCaller':'Assertion Failed: {0}\r\nat {1}','argumentOutOfRange':'Specified argument was out of the range of valid values.','webServiceTimedOut':'The server method \'{0}\' timed out.','notImplemented':'The method or operation is not implemented.','assertFailed':'Assertion Failed: {0}','invalidOperation':'Operation is not valid due to the current state of the object.','breakIntoDebugger':'{0}\r\n\r\nBreak into debugger?'};

diff --git a/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftMvcAjax.debug.js b/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftMvcAjax.debug.js
new file mode 100644
index 0000000..3a39062
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftMvcAjax.debug.js
@@ -0,0 +1,408 @@
+//!----------------------------------------------------------

+//! Copyright (C) Microsoft Corporation. All rights reserved.

+//!----------------------------------------------------------

+//! MicrosoftMvcAjax.js

+

+Type.registerNamespace('Sys.Mvc');

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.AjaxOptions

+

+Sys.Mvc.$create_AjaxOptions = function Sys_Mvc_AjaxOptions() { return {}; }

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.InsertionMode

+

+Sys.Mvc.InsertionMode = function() { 

+    /// <field name="replace" type="Number" integer="true" static="true">

+    /// </field>

+    /// <field name="insertBefore" type="Number" integer="true" static="true">

+    /// </field>

+    /// <field name="insertAfter" type="Number" integer="true" static="true">

+    /// </field>

+};

+Sys.Mvc.InsertionMode.prototype = {

+    replace: 0, 

+    insertBefore: 1, 

+    insertAfter: 2

+}

+Sys.Mvc.InsertionMode.registerEnum('Sys.Mvc.InsertionMode', false);

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.AjaxContext

+

+Sys.Mvc.AjaxContext = function Sys_Mvc_AjaxContext(request, updateTarget, loadingElement, insertionMode) {

+    /// <param name="request" type="Sys.Net.WebRequest">

+    /// </param>

+    /// <param name="updateTarget" type="Object" domElement="true">

+    /// </param>

+    /// <param name="loadingElement" type="Object" domElement="true">

+    /// </param>

+    /// <param name="insertionMode" type="Sys.Mvc.InsertionMode">

+    /// </param>

+    /// <field name="_insertionMode" type="Sys.Mvc.InsertionMode">

+    /// </field>

+    /// <field name="_loadingElement" type="Object" domElement="true">

+    /// </field>

+    /// <field name="_response" type="Sys.Net.WebRequestExecutor">

+    /// </field>

+    /// <field name="_request" type="Sys.Net.WebRequest">

+    /// </field>

+    /// <field name="_updateTarget" type="Object" domElement="true">

+    /// </field>

+    this._request = request;

+    this._updateTarget = updateTarget;

+    this._loadingElement = loadingElement;

+    this._insertionMode = insertionMode;

+}

+Sys.Mvc.AjaxContext.prototype = {

+    _insertionMode: 0,

+    _loadingElement: null,

+    _response: null,

+    _request: null,

+    _updateTarget: null,

+    

+    get_data: function Sys_Mvc_AjaxContext$get_data() {

+        /// <value type="String"></value>

+        if (this._response) {

+            return this._response.get_responseData();

+        }

+        else {

+            return null;

+        }

+    },

+    

+    get_insertionMode: function Sys_Mvc_AjaxContext$get_insertionMode() {

+        /// <value type="Sys.Mvc.InsertionMode"></value>

+        return this._insertionMode;

+    },

+    

+    get_loadingElement: function Sys_Mvc_AjaxContext$get_loadingElement() {

+        /// <value type="Object" domElement="true"></value>

+        return this._loadingElement;

+    },

+    

+    get_object: function Sys_Mvc_AjaxContext$get_object() {

+        /// <value type="Object"></value>

+        var executor = this.get_response();

+        return (executor) ? executor.get_object() : null;

+    },

+    

+    get_response: function Sys_Mvc_AjaxContext$get_response() {

+        /// <value type="Sys.Net.WebRequestExecutor"></value>

+        return this._response;

+    },

+    set_response: function Sys_Mvc_AjaxContext$set_response(value) {

+        /// <value type="Sys.Net.WebRequestExecutor"></value>

+        this._response = value;

+        return value;

+    },

+    

+    get_request: function Sys_Mvc_AjaxContext$get_request() {

+        /// <value type="Sys.Net.WebRequest"></value>

+        return this._request;

+    },

+    

+    get_updateTarget: function Sys_Mvc_AjaxContext$get_updateTarget() {

+        /// <value type="Object" domElement="true"></value>

+        return this._updateTarget;

+    }

+}

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.AsyncHyperlink

+

+Sys.Mvc.AsyncHyperlink = function Sys_Mvc_AsyncHyperlink() {

+}

+Sys.Mvc.AsyncHyperlink.handleClick = function Sys_Mvc_AsyncHyperlink$handleClick(anchor, evt, ajaxOptions) {

+    /// <param name="anchor" type="Object" domElement="true">

+    /// </param>

+    /// <param name="evt" type="Sys.UI.DomEvent">

+    /// </param>

+    /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions">

+    /// </param>

+    evt.preventDefault();

+    Sys.Mvc.MvcHelpers._asyncRequest(anchor.href, 'post', '', anchor, ajaxOptions);

+}

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.MvcHelpers

+

+Sys.Mvc.MvcHelpers = function Sys_Mvc_MvcHelpers() {

+}

+Sys.Mvc.MvcHelpers._serializeSubmitButton = function Sys_Mvc_MvcHelpers$_serializeSubmitButton(element, offsetX, offsetY) {

+    /// <param name="element" type="Object" domElement="true">

+    /// </param>

+    /// <param name="offsetX" type="Number" integer="true">

+    /// </param>

+    /// <param name="offsetY" type="Number" integer="true">

+    /// </param>

+    /// <returns type="String"></returns>

+    if (element.disabled) {

+        return null;

+    }

+    var name = element.name;

+    if (name) {

+        var tagName = element.tagName.toUpperCase();

+        var encodedName = encodeURIComponent(name);

+        var inputElement = element;

+        if (tagName === 'INPUT') {

+            var type = inputElement.type;

+            if (type === 'submit') {

+                return encodedName + '=' + encodeURIComponent(inputElement.value);

+            }

+            else if (type === 'image') {

+                return encodedName + '.x=' + offsetX + '&' + encodedName + '.y=' + offsetY;

+            }

+        }

+        else if ((tagName === 'BUTTON') && (name.length) && (inputElement.type === 'submit')) {

+            return encodedName + '=' + encodeURIComponent(inputElement.value);

+        }

+    }

+    return null;

+}

+Sys.Mvc.MvcHelpers._serializeForm = function Sys_Mvc_MvcHelpers$_serializeForm(form) {

+    /// <param name="form" type="Object" domElement="true">

+    /// </param>

+    /// <returns type="String"></returns>

+    var formElements = form.elements;

+    var formBody = new Sys.StringBuilder();

+    var count = formElements.length;

+    for (var i = 0; i < count; i++) {

+        var element = formElements[i];

+        var name = element.name;

+        if (!name || !name.length) {

+            continue;

+        }

+        var tagName = element.tagName.toUpperCase();

+        if (tagName === 'INPUT') {

+            var inputElement = element;

+            var type = inputElement.type;

+            if ((type === 'text') || (type === 'password') || (type === 'hidden') || (((type === 'checkbox') || (type === 'radio')) && element.checked)) {

+                formBody.append(encodeURIComponent(name));

+                formBody.append('=');

+                formBody.append(encodeURIComponent(inputElement.value));

+                formBody.append('&');

+            }

+        }

+        else if (tagName === 'SELECT') {

+            var selectElement = element;

+            var optionCount = selectElement.options.length;

+            for (var j = 0; j < optionCount; j++) {

+                var optionElement = selectElement.options[j];

+                if (optionElement.selected) {

+                    formBody.append(encodeURIComponent(name));

+                    formBody.append('=');

+                    formBody.append(encodeURIComponent(optionElement.value));

+                    formBody.append('&');

+                }

+            }

+        }

+        else if (tagName === 'TEXTAREA') {

+            formBody.append(encodeURIComponent(name));

+            formBody.append('=');

+            formBody.append(encodeURIComponent((element.value)));

+            formBody.append('&');

+        }

+    }

+    var additionalInput = form._additionalInput;

+    if (additionalInput) {

+        formBody.append(additionalInput);

+        formBody.append('&');

+    }

+    return formBody.toString();

+}

+Sys.Mvc.MvcHelpers._asyncRequest = function Sys_Mvc_MvcHelpers$_asyncRequest(url, verb, body, triggerElement, ajaxOptions) {

+    /// <param name="url" type="String">

+    /// </param>

+    /// <param name="verb" type="String">

+    /// </param>

+    /// <param name="body" type="String">

+    /// </param>

+    /// <param name="triggerElement" type="Object" domElement="true">

+    /// </param>

+    /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions">

+    /// </param>

+    if (ajaxOptions.confirm) {

+        if (!confirm(ajaxOptions.confirm)) {

+            return;

+        }

+    }

+    if (ajaxOptions.url) {

+        url = ajaxOptions.url;

+    }

+    if (ajaxOptions.httpMethod) {

+        verb = ajaxOptions.httpMethod;

+    }

+    if (body.length > 0 && !body.endsWith('&')) {

+        body += '&';

+    }

+    body += 'X-Requested-With=XMLHttpRequest';

+    var upperCaseVerb = verb.toUpperCase();

+    var isGetOrPost = (upperCaseVerb === 'GET' || upperCaseVerb === 'POST');

+    if (!isGetOrPost) {

+        body += '&';

+        body += 'X-HTTP-Method-Override=' + upperCaseVerb;

+    }

+    var requestBody = '';

+    if (upperCaseVerb === 'GET' || upperCaseVerb === 'DELETE') {

+        if (url.indexOf('?') > -1) {

+            if (!url.endsWith('&')) {

+                url += '&';

+            }

+            url += body;

+        }

+        else {

+            url += '?';

+            url += body;

+        }

+    }

+    else {

+        requestBody = body;

+    }

+    var request = new Sys.Net.WebRequest();

+    request.set_url(url);

+    if (isGetOrPost) {

+        request.set_httpVerb(verb);

+    }

+    else {

+        request.set_httpVerb('POST');

+        request.get_headers()['X-HTTP-Method-Override'] = upperCaseVerb;

+    }

+    request.set_body(requestBody);

+    if (verb.toUpperCase() === 'PUT') {

+        request.get_headers()['Content-Type'] = 'application/x-www-form-urlencoded;';

+    }

+    request.get_headers()['X-Requested-With'] = 'XMLHttpRequest';

+    var updateElement = null;

+    if (ajaxOptions.updateTargetId) {

+        updateElement = $get(ajaxOptions.updateTargetId);

+    }

+    var loadingElement = null;

+    if (ajaxOptions.loadingElementId) {

+        loadingElement = $get(ajaxOptions.loadingElementId);

+    }

+    var ajaxContext = new Sys.Mvc.AjaxContext(request, updateElement, loadingElement, ajaxOptions.insertionMode);

+    var continueRequest = true;

+    if (ajaxOptions.onBegin) {

+        continueRequest = ajaxOptions.onBegin(ajaxContext) !== false;

+    }

+    if (loadingElement) {

+        Sys.UI.DomElement.setVisible(ajaxContext.get_loadingElement(), true);

+    }

+    if (continueRequest) {

+        request.add_completed(Function.createDelegate(null, function(executor) {

+            Sys.Mvc.MvcHelpers._onComplete(request, ajaxOptions, ajaxContext);

+        }));

+        request.invoke();

+    }

+}

+Sys.Mvc.MvcHelpers._onComplete = function Sys_Mvc_MvcHelpers$_onComplete(request, ajaxOptions, ajaxContext) {

+    /// <param name="request" type="Sys.Net.WebRequest">

+    /// </param>

+    /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions">

+    /// </param>

+    /// <param name="ajaxContext" type="Sys.Mvc.AjaxContext">

+    /// </param>

+    ajaxContext.set_response(request.get_executor());

+    if (ajaxOptions.onComplete && ajaxOptions.onComplete(ajaxContext) === false) {

+        return;

+    }

+    var statusCode = ajaxContext.get_response().get_statusCode();

+    if ((statusCode >= 200 && statusCode < 300) || statusCode === 304 || statusCode === 1223) {

+        if (statusCode !== 204 && statusCode !== 304 && statusCode !== 1223) {

+            var contentType = ajaxContext.get_response().getResponseHeader('Content-Type');

+            if ((contentType) && (contentType.indexOf('application/x-javascript') !== -1)) {

+                eval(ajaxContext.get_data());

+            }

+            else {

+                Sys.Mvc.MvcHelpers.updateDomElement(ajaxContext.get_updateTarget(), ajaxContext.get_insertionMode(), ajaxContext.get_data());

+            }

+        }

+        if (ajaxOptions.onSuccess) {

+            ajaxOptions.onSuccess(ajaxContext);

+        }

+    }

+    else {

+        if (ajaxOptions.onFailure) {

+            ajaxOptions.onFailure(ajaxContext);

+        }

+    }

+    if (ajaxContext.get_loadingElement()) {

+        Sys.UI.DomElement.setVisible(ajaxContext.get_loadingElement(), false);

+    }

+}

+Sys.Mvc.MvcHelpers.updateDomElement = function Sys_Mvc_MvcHelpers$updateDomElement(target, insertionMode, content) {

+    /// <param name="target" type="Object" domElement="true">

+    /// </param>

+    /// <param name="insertionMode" type="Sys.Mvc.InsertionMode">

+    /// </param>

+    /// <param name="content" type="String">

+    /// </param>

+    if (target) {

+        switch (insertionMode) {

+            case Sys.Mvc.InsertionMode.replace:

+                target.innerHTML = content;

+                break;

+            case Sys.Mvc.InsertionMode.insertBefore:

+                if (content && content.length > 0) {

+                    target.innerHTML = content + target.innerHTML.trimStart();

+                }

+                break;

+            case Sys.Mvc.InsertionMode.insertAfter:

+                if (content && content.length > 0) {

+                    target.innerHTML = target.innerHTML.trimEnd() + content;

+                }

+                break;

+        }

+    }

+}

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.AsyncForm

+

+Sys.Mvc.AsyncForm = function Sys_Mvc_AsyncForm() {

+}

+Sys.Mvc.AsyncForm.handleClick = function Sys_Mvc_AsyncForm$handleClick(form, evt) {

+    /// <param name="form" type="Object" domElement="true">

+    /// </param>

+    /// <param name="evt" type="Sys.UI.DomEvent">

+    /// </param>

+    var additionalInput = Sys.Mvc.MvcHelpers._serializeSubmitButton(evt.target, evt.offsetX, evt.offsetY);

+    form._additionalInput = additionalInput;

+}

+Sys.Mvc.AsyncForm.handleSubmit = function Sys_Mvc_AsyncForm$handleSubmit(form, evt, ajaxOptions) {

+    /// <param name="form" type="Object" domElement="true">

+    /// </param>

+    /// <param name="evt" type="Sys.UI.DomEvent">

+    /// </param>

+    /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions">

+    /// </param>

+    evt.preventDefault();

+    var validationCallbacks = form.validationCallbacks;

+    if (validationCallbacks) {

+        for (var i = 0; i < validationCallbacks.length; i++) {

+            var callback = validationCallbacks[i];

+            if (!callback()) {

+                return;

+            }

+        }

+    }

+    var body = Sys.Mvc.MvcHelpers._serializeForm(form);

+    Sys.Mvc.MvcHelpers._asyncRequest(form.action, form.method || 'post', body, form, ajaxOptions);

+}

+

+

+Sys.Mvc.AjaxContext.registerClass('Sys.Mvc.AjaxContext');

+Sys.Mvc.AsyncHyperlink.registerClass('Sys.Mvc.AsyncHyperlink');

+Sys.Mvc.MvcHelpers.registerClass('Sys.Mvc.MvcHelpers');

+Sys.Mvc.AsyncForm.registerClass('Sys.Mvc.AsyncForm');

+

+// ---- Do not remove this footer ----

+// Generated using Script# v0.5.0.0 (http://projects.nikhilk.net)

+// -----------------------------------

diff --git a/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftMvcAjax.js b/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftMvcAjax.js
new file mode 100644
index 0000000..275103c
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftMvcAjax.js
@@ -0,0 +1,25 @@
+//----------------------------------------------------------
+// Copyright (C) Microsoft Corporation. All rights reserved.
+//----------------------------------------------------------
+// MicrosoftMvcAjax.js
+

+Type.registerNamespace('Sys.Mvc');Sys.Mvc.$create_AjaxOptions=function(){return {};}
+Sys.Mvc.InsertionMode=function(){};Sys.Mvc.InsertionMode.prototype = {replace:0,insertBefore:1,insertAfter:2}
+Sys.Mvc.InsertionMode.registerEnum('Sys.Mvc.InsertionMode',false);Sys.Mvc.AjaxContext=function(request,updateTarget,loadingElement,insertionMode){this.$3=request;this.$4=updateTarget;this.$1=loadingElement;this.$0=insertionMode;}
+Sys.Mvc.AjaxContext.prototype={$0:0,$1:null,$2:null,$3:null,$4:null,get_data:function(){if(this.$2){return this.$2.get_responseData();}else{return null;}},get_insertionMode:function(){return this.$0;},get_loadingElement:function(){return this.$1;},get_object:function(){var $0=this.get_response();return ($0)?$0.get_object():null;},get_response:function(){return this.$2;},set_response:function(value){this.$2=value;return value;},get_request:function(){return this.$3;},get_updateTarget:function(){return this.$4;}}
+Sys.Mvc.AsyncHyperlink=function(){}
+Sys.Mvc.AsyncHyperlink.handleClick=function(anchor,evt,ajaxOptions){evt.preventDefault();Sys.Mvc.MvcHelpers.$2(anchor.href,'post','',anchor,ajaxOptions);}
+Sys.Mvc.MvcHelpers=function(){}
+Sys.Mvc.MvcHelpers.$0=function($p0,$p1,$p2){if($p0.disabled){return null;}var $0=$p0.name;if($0){var $1=$p0.tagName.toUpperCase();var $2=encodeURIComponent($0);var $3=$p0;if($1==='INPUT'){var $4=$3.type;if($4==='submit'){return $2+'='+encodeURIComponent($3.value);}else if($4==='image'){return $2+'.x='+$p1+'&'+$2+'.y='+$p2;}}else if(($1==='BUTTON')&&($0.length)&&($3.type==='submit')){return $2+'='+encodeURIComponent($3.value);}}return null;}
+Sys.Mvc.MvcHelpers.$1=function($p0){var $0=$p0.elements;var $1=new Sys.StringBuilder();var $2=$0.length;for(var $4=0;$4<$2;$4++){var $5=$0[$4];var $6=$5.name;if(!$6||!$6.length){continue;}var $7=$5.tagName.toUpperCase();if($7==='INPUT'){var $8=$5;var $9=$8.type;if(($9==='text')||($9==='password')||($9==='hidden')||((($9==='checkbox')||($9==='radio'))&&$5.checked)){$1.append(encodeURIComponent($6));$1.append('=');$1.append(encodeURIComponent($8.value));$1.append('&');}}else if($7==='SELECT'){var $A=$5;var $B=$A.options.length;for(var $C=0;$C<$B;$C++){var $D=$A.options[$C];if($D.selected){$1.append(encodeURIComponent($6));$1.append('=');$1.append(encodeURIComponent($D.value));$1.append('&');}}}else if($7==='TEXTAREA'){$1.append(encodeURIComponent($6));$1.append('=');$1.append(encodeURIComponent(($5.value)));$1.append('&');}}var $3=$p0._additionalInput;if($3){$1.append($3);$1.append('&');}return $1.toString();}
+Sys.Mvc.MvcHelpers.$2=function($p0,$p1,$p2,$p3,$p4){if($p4.confirm){if(!confirm($p4.confirm)){return;}}if($p4.url){$p0=$p4.url;}if($p4.httpMethod){$p1=$p4.httpMethod;}if($p2.length>0&&!$p2.endsWith('&')){$p2+='&';}$p2+='X-Requested-With=XMLHttpRequest';var $0=$p1.toUpperCase();var $1=($0==='GET'||$0==='POST');if(!$1){$p2+='&';$p2+='X-HTTP-Method-Override='+$0;}var $2='';if($0==='GET'||$0==='DELETE'){if($p0.indexOf('?')>-1){if(!$p0.endsWith('&')){$p0+='&';}$p0+=$p2;}else{$p0+='?';$p0+=$p2;}}else{$2=$p2;}var $3=new Sys.Net.WebRequest();$3.set_url($p0);if($1){$3.set_httpVerb($p1);}else{$3.set_httpVerb('POST');$3.get_headers()['X-HTTP-Method-Override']=$0;}$3.set_body($2);if($p1.toUpperCase()==='PUT'){$3.get_headers()['Content-Type']='application/x-www-form-urlencoded;';}$3.get_headers()['X-Requested-With']='XMLHttpRequest';var $4=null;if($p4.updateTargetId){$4=$get($p4.updateTargetId);}var $5=null;if($p4.loadingElementId){$5=$get($p4.loadingElementId);}var $6=new Sys.Mvc.AjaxContext($3,$4,$5,$p4.insertionMode);var $7=true;if($p4.onBegin){$7=$p4.onBegin($6)!==false;}if($5){Sys.UI.DomElement.setVisible($6.get_loadingElement(),true);}if($7){$3.add_completed(Function.createDelegate(null,function($p1_0){
+Sys.Mvc.MvcHelpers.$3($3,$p4,$6);}));$3.invoke();}}
+Sys.Mvc.MvcHelpers.$3=function($p0,$p1,$p2){$p2.set_response($p0.get_executor());if($p1.onComplete&&$p1.onComplete($p2)===false){return;}var $0=$p2.get_response().get_statusCode();if(($0>=200&&$0<300)||$0===304||$0===1223){if($0!==204&&$0!==304&&$0!==1223){var $1=$p2.get_response().getResponseHeader('Content-Type');if(($1)&&($1.indexOf('application/x-javascript')!==-1)){eval($p2.get_data());}else{Sys.Mvc.MvcHelpers.updateDomElement($p2.get_updateTarget(),$p2.get_insertionMode(),$p2.get_data());}}if($p1.onSuccess){$p1.onSuccess($p2);}}else{if($p1.onFailure){$p1.onFailure($p2);}}if($p2.get_loadingElement()){Sys.UI.DomElement.setVisible($p2.get_loadingElement(),false);}}
+Sys.Mvc.MvcHelpers.updateDomElement=function(target,insertionMode,content){if(target){switch(insertionMode){case 0:target.innerHTML=content;break;case 1:if(content&&content.length>0){target.innerHTML=content+target.innerHTML.trimStart();}break;case 2:if(content&&content.length>0){target.innerHTML=target.innerHTML.trimEnd()+content;}break;}}}
+Sys.Mvc.AsyncForm=function(){}
+Sys.Mvc.AsyncForm.handleClick=function(form,evt){var $0=Sys.Mvc.MvcHelpers.$0(evt.target,evt.offsetX,evt.offsetY);form._additionalInput = $0;}
+Sys.Mvc.AsyncForm.handleSubmit=function(form,evt,ajaxOptions){evt.preventDefault();var $0=form.validationCallbacks;if($0){for(var $2=0;$2<$0.length;$2++){var $3=$0[$2];if(!$3()){return;}}}var $1=Sys.Mvc.MvcHelpers.$1(form);Sys.Mvc.MvcHelpers.$2(form.action,form.method||'post',$1,form,ajaxOptions);}
+Sys.Mvc.AjaxContext.registerClass('Sys.Mvc.AjaxContext');Sys.Mvc.AsyncHyperlink.registerClass('Sys.Mvc.AsyncHyperlink');Sys.Mvc.MvcHelpers.registerClass('Sys.Mvc.MvcHelpers');Sys.Mvc.AsyncForm.registerClass('Sys.Mvc.AsyncForm');
+// ---- Do not remove this footer ----
+// Generated using Script# v0.5.0.0 (http://projects.nikhilk.net)
+// -----------------------------------
diff --git a/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftMvcValidation.debug.js b/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftMvcValidation.debug.js
new file mode 100644
index 0000000..872f80b
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftMvcValidation.debug.js
@@ -0,0 +1,881 @@
+//!----------------------------------------------------------

+//! Copyright (C) Microsoft Corporation. All rights reserved.

+//!----------------------------------------------------------

+//! MicrosoftMvcValidation.js

+

+

+Type.registerNamespace('Sys.Mvc');

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.Validation

+

+Sys.Mvc.$create_Validation = function Sys_Mvc_Validation() { return {}; }

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.JsonValidationField

+

+Sys.Mvc.$create_JsonValidationField = function Sys_Mvc_JsonValidationField() { return {}; }

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.JsonValidationOptions

+

+Sys.Mvc.$create_JsonValidationOptions = function Sys_Mvc_JsonValidationOptions() { return {}; }

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.JsonValidationRule

+

+Sys.Mvc.$create_JsonValidationRule = function Sys_Mvc_JsonValidationRule() { return {}; }

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.ValidationContext

+

+Sys.Mvc.$create_ValidationContext = function Sys_Mvc_ValidationContext() { return {}; }

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.NumberValidator

+

+Sys.Mvc.NumberValidator = function Sys_Mvc_NumberValidator() {

+}

+Sys.Mvc.NumberValidator.create = function Sys_Mvc_NumberValidator$create(rule) {

+    /// <param name="rule" type="Sys.Mvc.JsonValidationRule">

+    /// </param>

+    /// <returns type="Sys.Mvc.Validator"></returns>

+    return Function.createDelegate(new Sys.Mvc.NumberValidator(), new Sys.Mvc.NumberValidator().validate);

+}

+Sys.Mvc.NumberValidator.prototype = {

+    

+    validate: function Sys_Mvc_NumberValidator$validate(value, context) {

+        /// <param name="value" type="String">

+        /// </param>

+        /// <param name="context" type="Sys.Mvc.ValidationContext">

+        /// </param>

+        /// <returns type="Object"></returns>

+        if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) {

+            return true;

+        }

+        var n = Number.parseLocale(value);

+        return (!isNaN(n));

+    }

+}

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.FormContext

+

+Sys.Mvc.FormContext = function Sys_Mvc_FormContext(formElement, validationSummaryElement) {

+    /// <param name="formElement" type="Object" domElement="true">

+    /// </param>

+    /// <param name="validationSummaryElement" type="Object" domElement="true">

+    /// </param>

+    /// <field name="_validationSummaryErrorCss" type="String" static="true">

+    /// </field>

+    /// <field name="_validationSummaryValidCss" type="String" static="true">

+    /// </field>

+    /// <field name="_formValidationTag" type="String" static="true">

+    /// </field>

+    /// <field name="_onClickHandler" type="Sys.UI.DomEventHandler">

+    /// </field>

+    /// <field name="_onSubmitHandler" type="Sys.UI.DomEventHandler">

+    /// </field>

+    /// <field name="_errors" type="Array">

+    /// </field>

+    /// <field name="_submitButtonClicked" type="Object" domElement="true">

+    /// </field>

+    /// <field name="_validationSummaryElement" type="Object" domElement="true">

+    /// </field>

+    /// <field name="_validationSummaryULElement" type="Object" domElement="true">

+    /// </field>

+    /// <field name="fields" type="Array" elementType="FieldContext">

+    /// </field>

+    /// <field name="_formElement" type="Object" domElement="true">

+    /// </field>

+    /// <field name="replaceValidationSummary" type="Boolean">

+    /// </field>

+    this._errors = [];

+    this.fields = new Array(0);

+    this._formElement = formElement;

+    this._validationSummaryElement = validationSummaryElement;

+    formElement[Sys.Mvc.FormContext._formValidationTag] = this;

+    if (validationSummaryElement) {

+        var ulElements = validationSummaryElement.getElementsByTagName('ul');

+        if (ulElements.length > 0) {

+            this._validationSummaryULElement = ulElements[0];

+        }

+    }

+    this._onClickHandler = Function.createDelegate(this, this._form_OnClick);

+    this._onSubmitHandler = Function.createDelegate(this, this._form_OnSubmit);

+}

+Sys.Mvc.FormContext._Application_Load = function Sys_Mvc_FormContext$_Application_Load() {

+    var allFormOptions = window.mvcClientValidationMetadata;

+    if (allFormOptions) {

+        while (allFormOptions.length > 0) {

+            var thisFormOptions = allFormOptions.pop();

+            Sys.Mvc.FormContext._parseJsonOptions(thisFormOptions);

+        }

+    }

+}

+Sys.Mvc.FormContext._getFormElementsWithName = function Sys_Mvc_FormContext$_getFormElementsWithName(formElement, name) {

+    /// <param name="formElement" type="Object" domElement="true">

+    /// </param>

+    /// <param name="name" type="String">

+    /// </param>

+    /// <returns type="Array" elementType="Object" elementDomElement="true"></returns>

+    var allElementsWithNameInForm = [];

+    var allElementsWithName = document.getElementsByName(name);

+    for (var i = 0; i < allElementsWithName.length; i++) {

+        var thisElement = allElementsWithName[i];

+        if (Sys.Mvc.FormContext._isElementInHierarchy(formElement, thisElement)) {

+            Array.add(allElementsWithNameInForm, thisElement);

+        }

+    }

+    return allElementsWithNameInForm;

+}

+Sys.Mvc.FormContext.getValidationForForm = function Sys_Mvc_FormContext$getValidationForForm(formElement) {

+    /// <param name="formElement" type="Object" domElement="true">

+    /// </param>

+    /// <returns type="Sys.Mvc.FormContext"></returns>

+    return formElement[Sys.Mvc.FormContext._formValidationTag];

+}

+Sys.Mvc.FormContext._isElementInHierarchy = function Sys_Mvc_FormContext$_isElementInHierarchy(parent, child) {

+    /// <param name="parent" type="Object" domElement="true">

+    /// </param>

+    /// <param name="child" type="Object" domElement="true">

+    /// </param>

+    /// <returns type="Boolean"></returns>

+    while (child) {

+        if (parent === child) {

+            return true;

+        }

+        child = child.parentNode;

+    }

+    return false;

+}

+Sys.Mvc.FormContext._parseJsonOptions = function Sys_Mvc_FormContext$_parseJsonOptions(options) {

+    /// <param name="options" type="Sys.Mvc.JsonValidationOptions">

+    /// </param>

+    /// <returns type="Sys.Mvc.FormContext"></returns>

+    var formElement = $get(options.FormId);

+    var validationSummaryElement = (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(options.ValidationSummaryId)) ? $get(options.ValidationSummaryId) : null;

+    var formContext = new Sys.Mvc.FormContext(formElement, validationSummaryElement);

+    formContext.enableDynamicValidation();

+    formContext.replaceValidationSummary = options.ReplaceValidationSummary;

+    for (var i = 0; i < options.Fields.length; i++) {

+        var field = options.Fields[i];

+        var fieldElements = Sys.Mvc.FormContext._getFormElementsWithName(formElement, field.FieldName);

+        var validationMessageElement = (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(field.ValidationMessageId)) ? $get(field.ValidationMessageId) : null;

+        var fieldContext = new Sys.Mvc.FieldContext(formContext);

+        Array.addRange(fieldContext.elements, fieldElements);

+        fieldContext.validationMessageElement = validationMessageElement;

+        fieldContext.replaceValidationMessageContents = field.ReplaceValidationMessageContents;

+        for (var j = 0; j < field.ValidationRules.length; j++) {

+            var rule = field.ValidationRules[j];

+            var validator = Sys.Mvc.ValidatorRegistry.getValidator(rule);

+            if (validator) {

+                var validation = Sys.Mvc.$create_Validation();

+                validation.fieldErrorMessage = rule.ErrorMessage;

+                validation.validator = validator;

+                Array.add(fieldContext.validations, validation);

+            }

+        }

+        fieldContext.enableDynamicValidation();

+        Array.add(formContext.fields, fieldContext);

+    }

+    var registeredValidatorCallbacks = formElement.validationCallbacks;

+    if (!registeredValidatorCallbacks) {

+        registeredValidatorCallbacks = [];

+        formElement.validationCallbacks = registeredValidatorCallbacks;

+    }

+    registeredValidatorCallbacks.push(Function.createDelegate(null, function() {

+        return Sys.Mvc._validationUtil.arrayIsNullOrEmpty(formContext.validate('submit'));

+    }));

+    return formContext;

+}

+Sys.Mvc.FormContext.prototype = {

+    _onClickHandler: null,

+    _onSubmitHandler: null,

+    _submitButtonClicked: null,

+    _validationSummaryElement: null,

+    _validationSummaryULElement: null,

+    _formElement: null,

+    replaceValidationSummary: false,

+    

+    addError: function Sys_Mvc_FormContext$addError(message) {

+        /// <param name="message" type="String">

+        /// </param>

+        this.addErrors([ message ]);

+    },

+    

+    addErrors: function Sys_Mvc_FormContext$addErrors(messages) {

+        /// <param name="messages" type="Array" elementType="String">

+        /// </param>

+        if (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(messages)) {

+            Array.addRange(this._errors, messages);

+            this._onErrorCountChanged();

+        }

+    },

+    

+    clearErrors: function Sys_Mvc_FormContext$clearErrors() {

+        Array.clear(this._errors);

+        this._onErrorCountChanged();

+    },

+    

+    _displayError: function Sys_Mvc_FormContext$_displayError() {

+        if (this._validationSummaryElement) {

+            if (this._validationSummaryULElement) {

+                Sys.Mvc._validationUtil.removeAllChildren(this._validationSummaryULElement);

+                for (var i = 0; i < this._errors.length; i++) {

+                    var liElement = document.createElement('li');

+                    Sys.Mvc._validationUtil.setInnerText(liElement, this._errors[i]);

+                    this._validationSummaryULElement.appendChild(liElement);

+                }

+            }

+            Sys.UI.DomElement.removeCssClass(this._validationSummaryElement, Sys.Mvc.FormContext._validationSummaryValidCss);

+            Sys.UI.DomElement.addCssClass(this._validationSummaryElement, Sys.Mvc.FormContext._validationSummaryErrorCss);

+        }

+    },

+    

+    _displaySuccess: function Sys_Mvc_FormContext$_displaySuccess() {

+        var validationSummaryElement = this._validationSummaryElement;

+        if (validationSummaryElement) {

+            var validationSummaryULElement = this._validationSummaryULElement;

+            if (validationSummaryULElement) {

+                validationSummaryULElement.innerHTML = '';

+            }

+            Sys.UI.DomElement.removeCssClass(validationSummaryElement, Sys.Mvc.FormContext._validationSummaryErrorCss);

+            Sys.UI.DomElement.addCssClass(validationSummaryElement, Sys.Mvc.FormContext._validationSummaryValidCss);

+        }

+    },

+    

+    enableDynamicValidation: function Sys_Mvc_FormContext$enableDynamicValidation() {

+        Sys.UI.DomEvent.addHandler(this._formElement, 'click', this._onClickHandler);

+        Sys.UI.DomEvent.addHandler(this._formElement, 'submit', this._onSubmitHandler);

+    },

+    

+    _findSubmitButton: function Sys_Mvc_FormContext$_findSubmitButton(element) {

+        /// <param name="element" type="Object" domElement="true">

+        /// </param>

+        /// <returns type="Object" domElement="true"></returns>

+        if (element.disabled) {

+            return null;

+        }

+        var tagName = element.tagName.toUpperCase();

+        var inputElement = element;

+        if (tagName === 'INPUT') {

+            var type = inputElement.type;

+            if (type === 'submit' || type === 'image') {

+                return inputElement;

+            }

+        }

+        else if ((tagName === 'BUTTON') && (inputElement.type === 'submit')) {

+            return inputElement;

+        }

+        return null;

+    },

+    

+    _form_OnClick: function Sys_Mvc_FormContext$_form_OnClick(e) {

+        /// <param name="e" type="Sys.UI.DomEvent">

+        /// </param>

+        this._submitButtonClicked = this._findSubmitButton(e.target);

+    },

+    

+    _form_OnSubmit: function Sys_Mvc_FormContext$_form_OnSubmit(e) {

+        /// <param name="e" type="Sys.UI.DomEvent">

+        /// </param>

+        var form = e.target;

+        var submitButton = this._submitButtonClicked;

+        if (submitButton && submitButton.disableValidation) {

+            return;

+        }

+        var errorMessages = this.validate('submit');

+        if (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(errorMessages)) {

+            e.preventDefault();

+        }

+    },

+    

+    _onErrorCountChanged: function Sys_Mvc_FormContext$_onErrorCountChanged() {

+        if (!this._errors.length) {

+            this._displaySuccess();

+        }

+        else {

+            this._displayError();

+        }

+    },

+    

+    validate: function Sys_Mvc_FormContext$validate(eventName) {

+        /// <param name="eventName" type="String">

+        /// </param>

+        /// <returns type="Array" elementType="String"></returns>

+        var fields = this.fields;

+        var errors = [];

+        for (var i = 0; i < fields.length; i++) {

+            var field = fields[i];

+            var thisErrors = field.validate(eventName);

+            if (thisErrors) {

+                Array.addRange(errors, thisErrors);

+            }

+        }

+        if (this.replaceValidationSummary) {

+            this.clearErrors();

+            this.addErrors(errors);

+        }

+        return errors;

+    }

+}

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.FieldContext

+

+Sys.Mvc.FieldContext = function Sys_Mvc_FieldContext(formContext) {

+    /// <param name="formContext" type="Sys.Mvc.FormContext">

+    /// </param>

+    /// <field name="_hasTextChangedTag" type="String" static="true">

+    /// </field>

+    /// <field name="_hasValidationFiredTag" type="String" static="true">

+    /// </field>

+    /// <field name="_inputElementErrorCss" type="String" static="true">

+    /// </field>

+    /// <field name="_inputElementValidCss" type="String" static="true">

+    /// </field>

+    /// <field name="_validationMessageErrorCss" type="String" static="true">

+    /// </field>

+    /// <field name="_validationMessageValidCss" type="String" static="true">

+    /// </field>

+    /// <field name="_onBlurHandler" type="Sys.UI.DomEventHandler">

+    /// </field>

+    /// <field name="_onChangeHandler" type="Sys.UI.DomEventHandler">

+    /// </field>

+    /// <field name="_onInputHandler" type="Sys.UI.DomEventHandler">

+    /// </field>

+    /// <field name="_onPropertyChangeHandler" type="Sys.UI.DomEventHandler">

+    /// </field>

+    /// <field name="_errors" type="Array">

+    /// </field>

+    /// <field name="defaultErrorMessage" type="String">

+    /// </field>

+    /// <field name="elements" type="Array" elementType="Object" elementDomElement="true">

+    /// </field>

+    /// <field name="formContext" type="Sys.Mvc.FormContext">

+    /// </field>

+    /// <field name="replaceValidationMessageContents" type="Boolean">

+    /// </field>

+    /// <field name="validationMessageElement" type="Object" domElement="true">

+    /// </field>

+    /// <field name="validations" type="Array" elementType="Validation">

+    /// </field>

+    this._errors = [];

+    this.elements = new Array(0);

+    this.validations = new Array(0);

+    this.formContext = formContext;

+    this._onBlurHandler = Function.createDelegate(this, this._element_OnBlur);

+    this._onChangeHandler = Function.createDelegate(this, this._element_OnChange);

+    this._onInputHandler = Function.createDelegate(this, this._element_OnInput);

+    this._onPropertyChangeHandler = Function.createDelegate(this, this._element_OnPropertyChange);

+}

+Sys.Mvc.FieldContext.prototype = {

+    _onBlurHandler: null,

+    _onChangeHandler: null,

+    _onInputHandler: null,

+    _onPropertyChangeHandler: null,

+    defaultErrorMessage: null,

+    formContext: null,

+    replaceValidationMessageContents: false,

+    validationMessageElement: null,

+    

+    addError: function Sys_Mvc_FieldContext$addError(message) {

+        /// <param name="message" type="String">

+        /// </param>

+        this.addErrors([ message ]);

+    },

+    

+    addErrors: function Sys_Mvc_FieldContext$addErrors(messages) {

+        /// <param name="messages" type="Array" elementType="String">

+        /// </param>

+        if (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(messages)) {

+            Array.addRange(this._errors, messages);

+            this._onErrorCountChanged();

+        }

+    },

+    

+    clearErrors: function Sys_Mvc_FieldContext$clearErrors() {

+        Array.clear(this._errors);

+        this._onErrorCountChanged();

+    },

+    

+    _displayError: function Sys_Mvc_FieldContext$_displayError() {

+        var validationMessageElement = this.validationMessageElement;

+        if (validationMessageElement) {

+            if (this.replaceValidationMessageContents) {

+                Sys.Mvc._validationUtil.setInnerText(validationMessageElement, this._errors[0]);

+            }

+            Sys.UI.DomElement.removeCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageValidCss);

+            Sys.UI.DomElement.addCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageErrorCss);

+        }

+        var elements = this.elements;

+        for (var i = 0; i < elements.length; i++) {

+            var element = elements[i];

+            Sys.UI.DomElement.removeCssClass(element, Sys.Mvc.FieldContext._inputElementValidCss);

+            Sys.UI.DomElement.addCssClass(element, Sys.Mvc.FieldContext._inputElementErrorCss);

+        }

+    },

+    

+    _displaySuccess: function Sys_Mvc_FieldContext$_displaySuccess() {

+        var validationMessageElement = this.validationMessageElement;

+        if (validationMessageElement) {

+            if (this.replaceValidationMessageContents) {

+                Sys.Mvc._validationUtil.setInnerText(validationMessageElement, '');

+            }

+            Sys.UI.DomElement.removeCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageErrorCss);

+            Sys.UI.DomElement.addCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageValidCss);

+        }

+        var elements = this.elements;

+        for (var i = 0; i < elements.length; i++) {

+            var element = elements[i];

+            Sys.UI.DomElement.removeCssClass(element, Sys.Mvc.FieldContext._inputElementErrorCss);

+            Sys.UI.DomElement.addCssClass(element, Sys.Mvc.FieldContext._inputElementValidCss);

+        }

+    },

+    

+    _element_OnBlur: function Sys_Mvc_FieldContext$_element_OnBlur(e) {

+        /// <param name="e" type="Sys.UI.DomEvent">

+        /// </param>

+        if (e.target[Sys.Mvc.FieldContext._hasTextChangedTag] || e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]) {

+            this.validate('blur');

+        }

+    },

+    

+    _element_OnChange: function Sys_Mvc_FieldContext$_element_OnChange(e) {

+        /// <param name="e" type="Sys.UI.DomEvent">

+        /// </param>

+        e.target[Sys.Mvc.FieldContext._hasTextChangedTag] = true;

+    },

+    

+    _element_OnInput: function Sys_Mvc_FieldContext$_element_OnInput(e) {

+        /// <param name="e" type="Sys.UI.DomEvent">

+        /// </param>

+        e.target[Sys.Mvc.FieldContext._hasTextChangedTag] = true;

+        if (e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]) {

+            this.validate('input');

+        }

+    },

+    

+    _element_OnPropertyChange: function Sys_Mvc_FieldContext$_element_OnPropertyChange(e) {

+        /// <param name="e" type="Sys.UI.DomEvent">

+        /// </param>

+        if (e.rawEvent.propertyName === 'value') {

+            e.target[Sys.Mvc.FieldContext._hasTextChangedTag] = true;

+            if (e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]) {

+                this.validate('input');

+            }

+        }

+    },

+    

+    enableDynamicValidation: function Sys_Mvc_FieldContext$enableDynamicValidation() {

+        var elements = this.elements;

+        for (var i = 0; i < elements.length; i++) {

+            var element = elements[i];

+            if (Sys.Mvc._validationUtil.elementSupportsEvent(element, 'onpropertychange')) {

+                var compatMode = document.documentMode;

+                if (compatMode && compatMode >= 8) {

+                    Sys.UI.DomEvent.addHandler(element, 'propertychange', this._onPropertyChangeHandler);

+                }

+            }

+            else {

+                Sys.UI.DomEvent.addHandler(element, 'input', this._onInputHandler);

+            }

+            Sys.UI.DomEvent.addHandler(element, 'change', this._onChangeHandler);

+            Sys.UI.DomEvent.addHandler(element, 'blur', this._onBlurHandler);

+        }

+    },

+    

+    _getErrorString: function Sys_Mvc_FieldContext$_getErrorString(validatorReturnValue, fieldErrorMessage) {

+        /// <param name="validatorReturnValue" type="Object">

+        /// </param>

+        /// <param name="fieldErrorMessage" type="String">

+        /// </param>

+        /// <returns type="String"></returns>

+        var fallbackErrorMessage = fieldErrorMessage || this.defaultErrorMessage;

+        if (Boolean.isInstanceOfType(validatorReturnValue)) {

+            return (validatorReturnValue) ? null : fallbackErrorMessage;

+        }

+        if (String.isInstanceOfType(validatorReturnValue)) {

+            return ((validatorReturnValue).length) ? validatorReturnValue : fallbackErrorMessage;

+        }

+        return null;

+    },

+    

+    _getStringValue: function Sys_Mvc_FieldContext$_getStringValue() {

+        /// <returns type="String"></returns>

+        var elements = this.elements;

+        return (elements.length > 0) ? elements[0].value : null;

+    },

+    

+    _markValidationFired: function Sys_Mvc_FieldContext$_markValidationFired() {

+        var elements = this.elements;

+        for (var i = 0; i < elements.length; i++) {

+            var element = elements[i];

+            element[Sys.Mvc.FieldContext._hasValidationFiredTag] = true;

+        }

+    },

+    

+    _onErrorCountChanged: function Sys_Mvc_FieldContext$_onErrorCountChanged() {

+        if (!this._errors.length) {

+            this._displaySuccess();

+        }

+        else {

+            this._displayError();

+        }

+    },

+    

+    validate: function Sys_Mvc_FieldContext$validate(eventName) {

+        /// <param name="eventName" type="String">

+        /// </param>

+        /// <returns type="Array" elementType="String"></returns>

+        var validations = this.validations;

+        var errors = [];

+        var value = this._getStringValue();

+        for (var i = 0; i < validations.length; i++) {

+            var validation = validations[i];

+            var context = Sys.Mvc.$create_ValidationContext();

+            context.eventName = eventName;

+            context.fieldContext = this;

+            context.validation = validation;

+            var retVal = validation.validator(value, context);

+            var errorMessage = this._getErrorString(retVal, validation.fieldErrorMessage);

+            if (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(errorMessage)) {

+                Array.add(errors, errorMessage);

+            }

+        }

+        this._markValidationFired();

+        this.clearErrors();

+        this.addErrors(errors);

+        return errors;

+    }

+}

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.RangeValidator

+

+Sys.Mvc.RangeValidator = function Sys_Mvc_RangeValidator(minimum, maximum) {

+    /// <param name="minimum" type="Number">

+    /// </param>

+    /// <param name="maximum" type="Number">

+    /// </param>

+    /// <field name="_minimum" type="Number">

+    /// </field>

+    /// <field name="_maximum" type="Number">

+    /// </field>

+    this._minimum = minimum;

+    this._maximum = maximum;

+}

+Sys.Mvc.RangeValidator.create = function Sys_Mvc_RangeValidator$create(rule) {

+    /// <param name="rule" type="Sys.Mvc.JsonValidationRule">

+    /// </param>

+    /// <returns type="Sys.Mvc.Validator"></returns>

+    var min = rule.ValidationParameters['minimum'];

+    var max = rule.ValidationParameters['maximum'];

+    return Function.createDelegate(new Sys.Mvc.RangeValidator(min, max), new Sys.Mvc.RangeValidator(min, max).validate);

+}

+Sys.Mvc.RangeValidator.prototype = {

+    _minimum: null,

+    _maximum: null,

+    

+    validate: function Sys_Mvc_RangeValidator$validate(value, context) {

+        /// <param name="value" type="String">

+        /// </param>

+        /// <param name="context" type="Sys.Mvc.ValidationContext">

+        /// </param>

+        /// <returns type="Object"></returns>

+        if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) {

+            return true;

+        }

+        var n = Number.parseLocale(value);

+        return (!isNaN(n) && this._minimum <= n && n <= this._maximum);

+    }

+}

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.RegularExpressionValidator

+

+Sys.Mvc.RegularExpressionValidator = function Sys_Mvc_RegularExpressionValidator(pattern) {

+    /// <param name="pattern" type="String">

+    /// </param>

+    /// <field name="_pattern" type="String">

+    /// </field>

+    this._pattern = pattern;

+}

+Sys.Mvc.RegularExpressionValidator.create = function Sys_Mvc_RegularExpressionValidator$create(rule) {

+    /// <param name="rule" type="Sys.Mvc.JsonValidationRule">

+    /// </param>

+    /// <returns type="Sys.Mvc.Validator"></returns>

+    var pattern = rule.ValidationParameters['pattern'];

+    return Function.createDelegate(new Sys.Mvc.RegularExpressionValidator(pattern), new Sys.Mvc.RegularExpressionValidator(pattern).validate);

+}

+Sys.Mvc.RegularExpressionValidator.prototype = {

+    _pattern: null,

+    

+    validate: function Sys_Mvc_RegularExpressionValidator$validate(value, context) {

+        /// <param name="value" type="String">

+        /// </param>

+        /// <param name="context" type="Sys.Mvc.ValidationContext">

+        /// </param>

+        /// <returns type="Object"></returns>

+        if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) {

+            return true;

+        }

+        var regExp = new RegExp(this._pattern);

+        var matches = regExp.exec(value);

+        return (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(matches) && matches[0].length === value.length);

+    }

+}

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.RequiredValidator

+

+Sys.Mvc.RequiredValidator = function Sys_Mvc_RequiredValidator() {

+}

+Sys.Mvc.RequiredValidator.create = function Sys_Mvc_RequiredValidator$create(rule) {

+    /// <param name="rule" type="Sys.Mvc.JsonValidationRule">

+    /// </param>

+    /// <returns type="Sys.Mvc.Validator"></returns>

+    return Function.createDelegate(new Sys.Mvc.RequiredValidator(), new Sys.Mvc.RequiredValidator().validate);

+}

+Sys.Mvc.RequiredValidator._isRadioInputElement = function Sys_Mvc_RequiredValidator$_isRadioInputElement(element) {

+    /// <param name="element" type="Object" domElement="true">

+    /// </param>

+    /// <returns type="Boolean"></returns>

+    if (element.tagName.toUpperCase() === 'INPUT') {

+        var inputType = (element.type).toUpperCase();

+        if (inputType === 'RADIO') {

+            return true;

+        }

+    }

+    return false;

+}

+Sys.Mvc.RequiredValidator._isSelectInputElement = function Sys_Mvc_RequiredValidator$_isSelectInputElement(element) {

+    /// <param name="element" type="Object" domElement="true">

+    /// </param>

+    /// <returns type="Boolean"></returns>

+    if (element.tagName.toUpperCase() === 'SELECT') {

+        return true;

+    }

+    return false;

+}

+Sys.Mvc.RequiredValidator._isTextualInputElement = function Sys_Mvc_RequiredValidator$_isTextualInputElement(element) {

+    /// <param name="element" type="Object" domElement="true">

+    /// </param>

+    /// <returns type="Boolean"></returns>

+    if (element.tagName.toUpperCase() === 'INPUT') {

+        var inputType = (element.type).toUpperCase();

+        switch (inputType) {

+            case 'TEXT':

+            case 'PASSWORD':

+            case 'FILE':

+                return true;

+        }

+    }

+    if (element.tagName.toUpperCase() === 'TEXTAREA') {

+        return true;

+    }

+    return false;

+}

+Sys.Mvc.RequiredValidator._validateRadioInput = function Sys_Mvc_RequiredValidator$_validateRadioInput(elements) {

+    /// <param name="elements" type="Array" elementType="Object" elementDomElement="true">

+    /// </param>

+    /// <returns type="Object"></returns>

+    for (var i = 0; i < elements.length; i++) {

+        var element = elements[i];

+        if (element.checked) {

+            return true;

+        }

+    }

+    return false;

+}

+Sys.Mvc.RequiredValidator._validateSelectInput = function Sys_Mvc_RequiredValidator$_validateSelectInput(optionElements) {

+    /// <param name="optionElements" type="DOMElementCollection">

+    /// </param>

+    /// <returns type="Object"></returns>

+    for (var i = 0; i < optionElements.length; i++) {

+        var element = optionElements[i];

+        if (element.selected) {

+            if (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(element.value)) {

+                return true;

+            }

+        }

+    }

+    return false;

+}

+Sys.Mvc.RequiredValidator._validateTextualInput = function Sys_Mvc_RequiredValidator$_validateTextualInput(element) {

+    /// <param name="element" type="Object" domElement="true">

+    /// </param>

+    /// <returns type="Object"></returns>

+    return (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(element.value));

+}

+Sys.Mvc.RequiredValidator.prototype = {

+    

+    validate: function Sys_Mvc_RequiredValidator$validate(value, context) {

+        /// <param name="value" type="String">

+        /// </param>

+        /// <param name="context" type="Sys.Mvc.ValidationContext">

+        /// </param>

+        /// <returns type="Object"></returns>

+        var elements = context.fieldContext.elements;

+        if (!elements.length) {

+            return true;

+        }

+        var sampleElement = elements[0];

+        if (Sys.Mvc.RequiredValidator._isTextualInputElement(sampleElement)) {

+            return Sys.Mvc.RequiredValidator._validateTextualInput(sampleElement);

+        }

+        if (Sys.Mvc.RequiredValidator._isRadioInputElement(sampleElement)) {

+            return Sys.Mvc.RequiredValidator._validateRadioInput(elements);

+        }

+        if (Sys.Mvc.RequiredValidator._isSelectInputElement(sampleElement)) {

+            return Sys.Mvc.RequiredValidator._validateSelectInput((sampleElement).options);

+        }

+        return true;

+    }

+}

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.StringLengthValidator

+

+Sys.Mvc.StringLengthValidator = function Sys_Mvc_StringLengthValidator(minLength, maxLength) {

+    /// <param name="minLength" type="Number" integer="true">

+    /// </param>

+    /// <param name="maxLength" type="Number" integer="true">

+    /// </param>

+    /// <field name="_maxLength" type="Number" integer="true">

+    /// </field>

+    /// <field name="_minLength" type="Number" integer="true">

+    /// </field>

+    this._minLength = minLength;

+    this._maxLength = maxLength;

+}

+Sys.Mvc.StringLengthValidator.create = function Sys_Mvc_StringLengthValidator$create(rule) {

+    /// <param name="rule" type="Sys.Mvc.JsonValidationRule">

+    /// </param>

+    /// <returns type="Sys.Mvc.Validator"></returns>

+    var minLength = rule.ValidationParameters['minimumLength'];

+    var maxLength = rule.ValidationParameters['maximumLength'];

+    return Function.createDelegate(new Sys.Mvc.StringLengthValidator(minLength, maxLength), new Sys.Mvc.StringLengthValidator(minLength, maxLength).validate);

+}

+Sys.Mvc.StringLengthValidator.prototype = {

+    _maxLength: 0,

+    _minLength: 0,

+    

+    validate: function Sys_Mvc_StringLengthValidator$validate(value, context) {

+        /// <param name="value" type="String">

+        /// </param>

+        /// <param name="context" type="Sys.Mvc.ValidationContext">

+        /// </param>

+        /// <returns type="Object"></returns>

+        if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) {

+            return true;

+        }

+        return (this._minLength <= value.length && value.length <= this._maxLength);

+    }

+}

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc._validationUtil

+

+Sys.Mvc._validationUtil = function Sys_Mvc__validationUtil() {

+}

+Sys.Mvc._validationUtil.arrayIsNullOrEmpty = function Sys_Mvc__validationUtil$arrayIsNullOrEmpty(array) {

+    /// <param name="array" type="Array" elementType="Object">

+    /// </param>

+    /// <returns type="Boolean"></returns>

+    return (!array || !array.length);

+}

+Sys.Mvc._validationUtil.stringIsNullOrEmpty = function Sys_Mvc__validationUtil$stringIsNullOrEmpty(value) {

+    /// <param name="value" type="String">

+    /// </param>

+    /// <returns type="Boolean"></returns>

+    return (!value || !value.length);

+}

+Sys.Mvc._validationUtil.elementSupportsEvent = function Sys_Mvc__validationUtil$elementSupportsEvent(element, eventAttributeName) {

+    /// <param name="element" type="Object" domElement="true">

+    /// </param>

+    /// <param name="eventAttributeName" type="String">

+    /// </param>

+    /// <returns type="Boolean"></returns>

+    return (eventAttributeName in element);

+}

+Sys.Mvc._validationUtil.removeAllChildren = function Sys_Mvc__validationUtil$removeAllChildren(element) {

+    /// <param name="element" type="Object" domElement="true">

+    /// </param>

+    while (element.firstChild) {

+        element.removeChild(element.firstChild);

+    }

+}

+Sys.Mvc._validationUtil.setInnerText = function Sys_Mvc__validationUtil$setInnerText(element, innerText) {

+    /// <param name="element" type="Object" domElement="true">

+    /// </param>

+    /// <param name="innerText" type="String">

+    /// </param>

+    var textNode = document.createTextNode(innerText);

+    Sys.Mvc._validationUtil.removeAllChildren(element);

+    element.appendChild(textNode);

+}

+

+

+////////////////////////////////////////////////////////////////////////////////

+// Sys.Mvc.ValidatorRegistry

+

+Sys.Mvc.ValidatorRegistry = function Sys_Mvc_ValidatorRegistry() {

+    /// <field name="validators" type="Object" static="true">

+    /// </field>

+}

+Sys.Mvc.ValidatorRegistry.getValidator = function Sys_Mvc_ValidatorRegistry$getValidator(rule) {

+    /// <param name="rule" type="Sys.Mvc.JsonValidationRule">

+    /// </param>

+    /// <returns type="Sys.Mvc.Validator"></returns>

+    var creator = Sys.Mvc.ValidatorRegistry.validators[rule.ValidationType];

+    return (creator) ? creator(rule) : null;

+}

+Sys.Mvc.ValidatorRegistry._getDefaultValidators = function Sys_Mvc_ValidatorRegistry$_getDefaultValidators() {

+    /// <returns type="Object"></returns>

+    return { required: Function.createDelegate(null, Sys.Mvc.RequiredValidator.create), stringLength: Function.createDelegate(null, Sys.Mvc.StringLengthValidator.create), regularExpression: Function.createDelegate(null, Sys.Mvc.RegularExpressionValidator.create), range: Function.createDelegate(null, Sys.Mvc.RangeValidator.create), number: Function.createDelegate(null, Sys.Mvc.NumberValidator.create) };

+}

+

+

+Sys.Mvc.NumberValidator.registerClass('Sys.Mvc.NumberValidator');

+Sys.Mvc.FormContext.registerClass('Sys.Mvc.FormContext');

+Sys.Mvc.FieldContext.registerClass('Sys.Mvc.FieldContext');

+Sys.Mvc.RangeValidator.registerClass('Sys.Mvc.RangeValidator');

+Sys.Mvc.RegularExpressionValidator.registerClass('Sys.Mvc.RegularExpressionValidator');

+Sys.Mvc.RequiredValidator.registerClass('Sys.Mvc.RequiredValidator');

+Sys.Mvc.StringLengthValidator.registerClass('Sys.Mvc.StringLengthValidator');

+Sys.Mvc._validationUtil.registerClass('Sys.Mvc._validationUtil');

+Sys.Mvc.ValidatorRegistry.registerClass('Sys.Mvc.ValidatorRegistry');

+Sys.Mvc.FormContext._validationSummaryErrorCss = 'validation-summary-errors';

+Sys.Mvc.FormContext._validationSummaryValidCss = 'validation-summary-valid';

+Sys.Mvc.FormContext._formValidationTag = '__MVC_FormValidation';

+Sys.Mvc.FieldContext._hasTextChangedTag = '__MVC_HasTextChanged';

+Sys.Mvc.FieldContext._hasValidationFiredTag = '__MVC_HasValidationFired';

+Sys.Mvc.FieldContext._inputElementErrorCss = 'input-validation-error';

+Sys.Mvc.FieldContext._inputElementValidCss = 'input-validation-valid';

+Sys.Mvc.FieldContext._validationMessageErrorCss = 'field-validation-error';

+Sys.Mvc.FieldContext._validationMessageValidCss = 'field-validation-valid';

+Sys.Mvc.ValidatorRegistry.validators = Sys.Mvc.ValidatorRegistry._getDefaultValidators();

+

+// ---- Do not remove this footer ----

+// Generated using Script# v0.5.0.0 (http://projects.nikhilk.net)

+// -----------------------------------

+

+// register validation

+Sys.Application.add_load(function() {

+  Sys.Application.remove_load(arguments.callee);

+  Sys.Mvc.FormContext._Application_Load();

+});

diff --git a/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftMvcValidation.js b/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftMvcValidation.js
new file mode 100644
index 0000000..9040973
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Scripts/MicrosoftMvcValidation.js
@@ -0,0 +1,55 @@
+//----------------------------------------------------------
+// Copyright (C) Microsoft Corporation. All rights reserved.
+//----------------------------------------------------------
+// MicrosoftMvcValidation.js
+

+Type.registerNamespace('Sys.Mvc');Sys.Mvc.$create_Validation=function(){return {};}
+Sys.Mvc.$create_JsonValidationField=function(){return {};}
+Sys.Mvc.$create_JsonValidationOptions=function(){return {};}
+Sys.Mvc.$create_JsonValidationRule=function(){return {};}
+Sys.Mvc.$create_ValidationContext=function(){return {};}
+Sys.Mvc.NumberValidator=function(){}
+Sys.Mvc.NumberValidator.create=function(rule){return Function.createDelegate(new Sys.Mvc.NumberValidator(),new Sys.Mvc.NumberValidator().validate);}
+Sys.Mvc.NumberValidator.prototype={validate:function(value,context){if(Sys.Mvc._ValidationUtil.$1(value)){return true;}var $0=Number.parseLocale(value);return (!isNaN($0));}}
+Sys.Mvc.FormContext=function(formElement,validationSummaryElement){this.$5=[];this.fields=new Array(0);this.$9=formElement;this.$7=validationSummaryElement;formElement['__MVC_FormValidation'] = this;if(validationSummaryElement){var $0=validationSummaryElement.getElementsByTagName('ul');if($0.length>0){this.$8=$0[0];}}this.$3=Function.createDelegate(this,this.$D);this.$4=Function.createDelegate(this,this.$E);}
+Sys.Mvc.FormContext._Application_Load=function(){var $0=window.mvcClientValidationMetadata;if($0){while($0.length>0){var $1=$0.pop();Sys.Mvc.FormContext.$12($1);}}}
+Sys.Mvc.FormContext.$F=function($p0,$p1){var $0=[];var $1=document.getElementsByName($p1);for(var $2=0;$2<$1.length;$2++){var $3=$1[$2];if(Sys.Mvc.FormContext.$10($p0,$3)){Array.add($0,$3);}}return $0;}
+Sys.Mvc.FormContext.getValidationForForm=function(formElement){return formElement['__MVC_FormValidation'];}
+Sys.Mvc.FormContext.$10=function($p0,$p1){while($p1){if($p0===$p1){return true;}$p1=$p1.parentNode;}return false;}
+Sys.Mvc.FormContext.$12=function($p0){var $0=$get($p0.FormId);var $1=(!Sys.Mvc._ValidationUtil.$1($p0.ValidationSummaryId))?$get($p0.ValidationSummaryId):null;var $2=new Sys.Mvc.FormContext($0,$1);$2.enableDynamicValidation();$2.replaceValidationSummary=$p0.ReplaceValidationSummary;for(var $4=0;$4<$p0.Fields.length;$4++){var $5=$p0.Fields[$4];var $6=Sys.Mvc.FormContext.$F($0,$5.FieldName);var $7=(!Sys.Mvc._ValidationUtil.$1($5.ValidationMessageId))?$get($5.ValidationMessageId):null;var $8=new Sys.Mvc.FieldContext($2);Array.addRange($8.elements,$6);$8.validationMessageElement=$7;$8.replaceValidationMessageContents=$5.ReplaceValidationMessageContents;for(var $9=0;$9<$5.ValidationRules.length;$9++){var $A=$5.ValidationRules[$9];var $B=Sys.Mvc.ValidatorRegistry.getValidator($A);if($B){var $C=Sys.Mvc.$create_Validation();$C.fieldErrorMessage=$A.ErrorMessage;$C.validator=$B;Array.add($8.validations,$C);}}$8.enableDynamicValidation();Array.add($2.fields,$8);}var $3=$0.validationCallbacks;if(!$3){$3=[];$0.validationCallbacks = $3;}$3.push(Function.createDelegate(null,function(){
+return Sys.Mvc._ValidationUtil.$0($2.validate('submit'));}));return $2;}
+Sys.Mvc.FormContext.prototype={$3:null,$4:null,$6:null,$7:null,$8:null,$9:null,replaceValidationSummary:false,addError:function(message){this.addErrors([message]);},addErrors:function(messages){if(!Sys.Mvc._ValidationUtil.$0(messages)){Array.addRange(this.$5,messages);this.$11();}},clearErrors:function(){Array.clear(this.$5);this.$11();},$A:function(){if(this.$7){if(this.$8){Sys.Mvc._ValidationUtil.$3(this.$8);for(var $0=0;$0<this.$5.length;$0++){var $1=document.createElement('li');Sys.Mvc._ValidationUtil.$4($1,this.$5[$0]);this.$8.appendChild($1);}}Sys.UI.DomElement.removeCssClass(this.$7,'validation-summary-valid');Sys.UI.DomElement.addCssClass(this.$7,'validation-summary-errors');}},$B:function(){var $0=this.$7;if($0){var $1=this.$8;if($1){$1.innerHTML='';}Sys.UI.DomElement.removeCssClass($0,'validation-summary-errors');Sys.UI.DomElement.addCssClass($0,'validation-summary-valid');}},enableDynamicValidation:function(){Sys.UI.DomEvent.addHandler(this.$9,'click',this.$3);Sys.UI.DomEvent.addHandler(this.$9,'submit',this.$4);},$C:function($p0){if($p0.disabled){return null;}var $0=$p0.tagName.toUpperCase();var $1=$p0;if($0==='INPUT'){var $2=$1.type;if($2==='submit'||$2==='image'){return $1;}}else if(($0==='BUTTON')&&($1.type==='submit')){return $1;}return null;},$D:function($p0){this.$6=this.$C($p0.target);},$E:function($p0){var $0=$p0.target;var $1=this.$6;if($1&&$1.disableValidation){return;}var $2=this.validate('submit');if(!Sys.Mvc._ValidationUtil.$0($2)){$p0.preventDefault();}},$11:function(){if(!this.$5.length){this.$B();}else{this.$A();}},validate:function(eventName){var $0=this.fields;var $1=[];for(var $2=0;$2<$0.length;$2++){var $3=$0[$2];var $4=$3.validate(eventName);if($4){Array.addRange($1,$4);}}if(this.replaceValidationSummary){this.clearErrors();this.addErrors($1);}return $1;}}
+Sys.Mvc.FieldContext=function(formContext){this.$A=[];this.elements=new Array(0);this.validations=new Array(0);this.formContext=formContext;this.$6=Function.createDelegate(this,this.$D);this.$7=Function.createDelegate(this,this.$E);this.$8=Function.createDelegate(this,this.$F);this.$9=Function.createDelegate(this,this.$10);}
+Sys.Mvc.FieldContext.prototype={$6:null,$7:null,$8:null,$9:null,defaultErrorMessage:null,formContext:null,replaceValidationMessageContents:false,validationMessageElement:null,addError:function(message){this.addErrors([message]);},addErrors:function(messages){if(!Sys.Mvc._ValidationUtil.$0(messages)){Array.addRange(this.$A,messages);this.$14();}},clearErrors:function(){Array.clear(this.$A);this.$14();},$B:function(){var $0=this.validationMessageElement;if($0){if(this.replaceValidationMessageContents){Sys.Mvc._ValidationUtil.$4($0,this.$A[0]);}Sys.UI.DomElement.removeCssClass($0,'field-validation-valid');Sys.UI.DomElement.addCssClass($0,'field-validation-error');}var $1=this.elements;for(var $2=0;$2<$1.length;$2++){var $3=$1[$2];Sys.UI.DomElement.removeCssClass($3,'input-validation-valid');Sys.UI.DomElement.addCssClass($3,'input-validation-error');}},$C:function(){var $0=this.validationMessageElement;if($0){if(this.replaceValidationMessageContents){Sys.Mvc._ValidationUtil.$4($0,'');}Sys.UI.DomElement.removeCssClass($0,'field-validation-error');Sys.UI.DomElement.addCssClass($0,'field-validation-valid');}var $1=this.elements;for(var $2=0;$2<$1.length;$2++){var $3=$1[$2];Sys.UI.DomElement.removeCssClass($3,'input-validation-error');Sys.UI.DomElement.addCssClass($3,'input-validation-valid');}},$D:function($p0){if($p0.target['__MVC_HasTextChanged']||$p0.target['__MVC_HasValidationFired']){this.validate('blur');}},$E:function($p0){$p0.target['__MVC_HasTextChanged'] = true;},$F:function($p0){$p0.target['__MVC_HasTextChanged'] = true;if($p0.target['__MVC_HasValidationFired']){this.validate('input');}},$10:function($p0){if($p0.rawEvent.propertyName==='value'){$p0.target['__MVC_HasTextChanged'] = true;if($p0.target['__MVC_HasValidationFired']){this.validate('input');}}},enableDynamicValidation:function(){var $0=this.elements;for(var $1=0;$1<$0.length;$1++){var $2=$0[$1];if(Sys.Mvc._ValidationUtil.$2($2,'onpropertychange')){var $3=document.documentMode;if($3&&$3>=8){Sys.UI.DomEvent.addHandler($2,'propertychange',this.$9);}}else{Sys.UI.DomEvent.addHandler($2,'input',this.$8);}Sys.UI.DomEvent.addHandler($2,'change',this.$7);Sys.UI.DomEvent.addHandler($2,'blur',this.$6);}},$11:function($p0,$p1){var $0=$p1||this.defaultErrorMessage;if(Boolean.isInstanceOfType($p0)){return ($p0)?null:$0;}if(String.isInstanceOfType($p0)){return (($p0).length)?$p0:$0;}return null;},$12:function(){var $0=this.elements;return ($0.length>0)?$0[0].value:null;},$13:function(){var $0=this.elements;for(var $1=0;$1<$0.length;$1++){var $2=$0[$1];$2['__MVC_HasValidationFired'] = true;}},$14:function(){if(!this.$A.length){this.$C();}else{this.$B();}},validate:function(eventName){var $0=this.validations;var $1=[];var $2=this.$12();for(var $3=0;$3<$0.length;$3++){var $4=$0[$3];var $5=Sys.Mvc.$create_ValidationContext();$5.eventName=eventName;$5.fieldContext=this;$5.validation=$4;var $6=$4.validator($2,$5);var $7=this.$11($6,$4.fieldErrorMessage);if(!Sys.Mvc._ValidationUtil.$1($7)){Array.add($1,$7);}}this.$13();this.clearErrors();this.addErrors($1);return $1;}}
+Sys.Mvc.RangeValidator=function(minimum,maximum){this.$0=minimum;this.$1=maximum;}
+Sys.Mvc.RangeValidator.create=function(rule){var $0=rule.ValidationParameters['minimum'];var $1=rule.ValidationParameters['maximum'];return Function.createDelegate(new Sys.Mvc.RangeValidator($0,$1),new Sys.Mvc.RangeValidator($0,$1).validate);}
+Sys.Mvc.RangeValidator.prototype={$0:null,$1:null,validate:function(value,context){if(Sys.Mvc._ValidationUtil.$1(value)){return true;}var $0=Number.parseLocale(value);return (!isNaN($0)&&this.$0<=$0&&$0<=this.$1);}}
+Sys.Mvc.RegularExpressionValidator=function(pattern){this.$0=pattern;}
+Sys.Mvc.RegularExpressionValidator.create=function(rule){var $0=rule.ValidationParameters['pattern'];return Function.createDelegate(new Sys.Mvc.RegularExpressionValidator($0),new Sys.Mvc.RegularExpressionValidator($0).validate);}
+Sys.Mvc.RegularExpressionValidator.prototype={$0:null,validate:function(value,context){if(Sys.Mvc._ValidationUtil.$1(value)){return true;}var $0=new RegExp(this.$0);var $1=$0.exec(value);return (!Sys.Mvc._ValidationUtil.$0($1)&&$1[0].length===value.length);}}
+Sys.Mvc.RequiredValidator=function(){}
+Sys.Mvc.RequiredValidator.create=function(rule){return Function.createDelegate(new Sys.Mvc.RequiredValidator(),new Sys.Mvc.RequiredValidator().validate);}
+Sys.Mvc.RequiredValidator.$0=function($p0){if($p0.tagName.toUpperCase()==='INPUT'){var $0=($p0.type).toUpperCase();if($0==='RADIO'){return true;}}return false;}
+Sys.Mvc.RequiredValidator.$1=function($p0){if($p0.tagName.toUpperCase()==='SELECT'){return true;}return false;}
+Sys.Mvc.RequiredValidator.$2=function($p0){if($p0.tagName.toUpperCase()==='INPUT'){var $0=($p0.type).toUpperCase();switch($0){case 'TEXT':case 'PASSWORD':case 'FILE':return true;}}if($p0.tagName.toUpperCase()==='TEXTAREA'){return true;}return false;}
+Sys.Mvc.RequiredValidator.$3=function($p0){for(var $0=0;$0<$p0.length;$0++){var $1=$p0[$0];if($1.checked){return true;}}return false;}
+Sys.Mvc.RequiredValidator.$4=function($p0){for(var $0=0;$0<$p0.length;$0++){var $1=$p0[$0];if($1.selected){if(!Sys.Mvc._ValidationUtil.$1($1.value)){return true;}}}return false;}
+Sys.Mvc.RequiredValidator.$5=function($p0){return (!Sys.Mvc._ValidationUtil.$1($p0.value));}
+Sys.Mvc.RequiredValidator.prototype={validate:function(value,context){var $0=context.fieldContext.elements;if(!$0.length){return true;}var $1=$0[0];if(Sys.Mvc.RequiredValidator.$2($1)){return Sys.Mvc.RequiredValidator.$5($1);}if(Sys.Mvc.RequiredValidator.$0($1)){return Sys.Mvc.RequiredValidator.$3($0);}if(Sys.Mvc.RequiredValidator.$1($1)){return Sys.Mvc.RequiredValidator.$4(($1).options);}return true;}}
+Sys.Mvc.StringLengthValidator=function(minLength,maxLength){this.$1=minLength;this.$0=maxLength;}
+Sys.Mvc.StringLengthValidator.create=function(rule){var $0=rule.ValidationParameters['minimumLength'];var $1=rule.ValidationParameters['maximumLength'];return Function.createDelegate(new Sys.Mvc.StringLengthValidator($0,$1),new Sys.Mvc.StringLengthValidator($0,$1).validate);}
+Sys.Mvc.StringLengthValidator.prototype={$0:0,$1:0,validate:function(value,context){if(Sys.Mvc._ValidationUtil.$1(value)){return true;}return (this.$1<=value.length&&value.length<=this.$0);}}
+Sys.Mvc._ValidationUtil=function(){}
+Sys.Mvc._ValidationUtil.$0=function($p0){return (!$p0||!$p0.length);}
+Sys.Mvc._ValidationUtil.$1=function($p0){return (!$p0||!$p0.length);}
+Sys.Mvc._ValidationUtil.$2=function($p0,$p1){return ($p1 in $p0);}
+Sys.Mvc._ValidationUtil.$3=function($p0){while($p0.firstChild){$p0.removeChild($p0.firstChild);}}
+Sys.Mvc._ValidationUtil.$4=function($p0,$p1){var $0=document.createTextNode($p1);Sys.Mvc._ValidationUtil.$3($p0);$p0.appendChild($0);}
+Sys.Mvc.ValidatorRegistry=function(){}
+Sys.Mvc.ValidatorRegistry.getValidator=function(rule){var $0=Sys.Mvc.ValidatorRegistry.validators[rule.ValidationType];return ($0)?$0(rule):null;}
+Sys.Mvc.ValidatorRegistry.$0=function(){return {required:Function.createDelegate(null,Sys.Mvc.RequiredValidator.create),stringLength:Function.createDelegate(null,Sys.Mvc.StringLengthValidator.create),regularExpression:Function.createDelegate(null,Sys.Mvc.RegularExpressionValidator.create),range:Function.createDelegate(null,Sys.Mvc.RangeValidator.create),number:Function.createDelegate(null,Sys.Mvc.NumberValidator.create)};}
+Sys.Mvc.NumberValidator.registerClass('Sys.Mvc.NumberValidator');Sys.Mvc.FormContext.registerClass('Sys.Mvc.FormContext');Sys.Mvc.FieldContext.registerClass('Sys.Mvc.FieldContext');Sys.Mvc.RangeValidator.registerClass('Sys.Mvc.RangeValidator');Sys.Mvc.RegularExpressionValidator.registerClass('Sys.Mvc.RegularExpressionValidator');Sys.Mvc.RequiredValidator.registerClass('Sys.Mvc.RequiredValidator');Sys.Mvc.StringLengthValidator.registerClass('Sys.Mvc.StringLengthValidator');Sys.Mvc._ValidationUtil.registerClass('Sys.Mvc._ValidationUtil');Sys.Mvc.ValidatorRegistry.registerClass('Sys.Mvc.ValidatorRegistry');Sys.Mvc.ValidatorRegistry.validators=Sys.Mvc.ValidatorRegistry.$0();
+// ---- Do not remove this footer ----
+// Generated using Script# v0.5.0.0 (http://projects.nikhilk.net)
+// -----------------------------------
+Sys.Application.add_load(function(){Sys.Application.remove_load(arguments.callee);Sys.Mvc.FormContext._Application_Load();});
\ No newline at end of file
diff --git a/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery-1.4.1-vsdoc.js b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery-1.4.1-vsdoc.js
new file mode 100644
index 0000000..a6d00ce
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery-1.4.1-vsdoc.js
@@ -0,0 +1,8061 @@
+/*

+ * This file has been commented to support Visual Studio Intellisense.

+ * You should not use this file at runtime inside the browser--it is only

+ * intended to be used only for design-time IntelliSense.  Please use the

+ * standard jQuery library for all production use.

+ *

+ * Comment version: 1.4.1a

+ */

+

+/*!

+ * jQuery JavaScript Library v1.4.1

+ * http://jquery.com/

+ *

+ * Distributed in whole under the terms of the MIT

+ *

+ * Copyright 2010, John Resig

+ *

+ * Permission is hereby granted, free of charge, to any person obtaining

+ * a copy of this software and associated documentation files (the

+ * "Software"), to deal in the Software without restriction, including

+ * without limitation the rights to use, copy, modify, merge, publish,

+ * distribute, sublicense, and/or sell copies of the Software, and to

+ * permit persons to whom the Software is furnished to do so, subject to

+ * the following conditions:

+ *

+ * The above copyright notice and this permission notice shall be

+ * included in all copies or substantial portions of the Software.

+ *

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND

+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE

+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION

+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION

+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ *

+ * Includes Sizzle.js

+ * http://sizzlejs.com/

+ * Copyright 2010, The Dojo Foundation

+ * Released under the MIT, BSD, and GPL Licenses.

+ *

+ * Date: Mon Jan 25 19:43:33 2010 -0500

+ */

+

+(function( window, undefined ) {

+

+// Define a local copy of jQuery

+var jQuery = function( selector, context ) {

+		///	<summary>

+		///		1: $(expression, context) - This function accepts a string containing a CSS selector which is then used to match a set of elements.

+		///		2: $(html) - Create DOM elements on-the-fly from the provided String of raw HTML.

+		///		3: $(elements) - Wrap jQuery functionality around a single or multiple DOM Element(s).

+		///		4: $(callback) - A shorthand for $(document).ready().

+		///		5: $() - As of jQuery 1.4, if you pass no arguments in to the jQuery() method, an empty jQuery set will be returned.

+		///	</summary>

+		///	<param name="selector" type="String">

+		///		1: expression - An expression to search with.

+		///		2: html - A string of HTML to create on the fly.

+		///		3: elements - DOM element(s) to be encapsulated by a jQuery object.

+		///		4: callback - The function to execute when the DOM is ready.

+		///	</param>

+		///	<param name="context" type="jQuery">

+		///		1: context - A DOM Element, Document or jQuery to use as context.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		// The jQuery object is actually just the init constructor 'enhanced'

+		return new jQuery.fn.init( selector, context );

+	},

+

+	// Map over jQuery in case of overwrite

+	_jQuery = window.jQuery,

+

+	// Map over the $ in case of overwrite

+	_$ = window.$,

+

+	// Use the correct document accordingly with window argument (sandbox)

+	document = window.document,

+

+	// A central reference to the root jQuery(document)

+	rootjQuery,

+

+	// A simple way to check for HTML strings or ID strings

+	// (both of which we optimize for)

+	quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,

+

+	// Is it a simple selector

+	isSimple = /^.[^:#\[\.,]*$/,

+

+	// Check if a string has a non-whitespace character in it

+	rnotwhite = /\S/,

+

+	// Used for trimming whitespace

+	rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,

+

+	// Match a standalone tag

+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,

+

+	// Keep a UserAgent string for use with jQuery.browser

+	userAgent = navigator.userAgent,

+

+	// For matching the engine and version of the browser

+	browserMatch,

+	

+	// Has the ready events already been bound?

+	readyBound = false,

+	

+	// The functions to execute on DOM ready

+	readyList = [],

+

+	// The ready event handler

+	DOMContentLoaded,

+

+	// Save a reference to some core methods

+	toString = Object.prototype.toString,

+	hasOwnProperty = Object.prototype.hasOwnProperty,

+	push = Array.prototype.push,

+	slice = Array.prototype.slice,

+	indexOf = Array.prototype.indexOf;

+

+jQuery.fn = jQuery.prototype = {

+	init: function( selector, context ) {

+

+		var match, elem, ret, doc;

+

+		// Handle $(""), $(null), or $(undefined)

+		if ( !selector ) {

+			return this;

+		}

+

+		// Handle $(DOMElement)

+		if ( selector.nodeType ) {

+			this.context = this[0] = selector;

+			this.length = 1;

+			return this;

+		}

+

+		// Handle HTML strings

+		if ( typeof selector === "string" ) {

+			// Are we dealing with HTML string or an ID?

+			match = quickExpr.exec( selector );

+

+			// Verify a match, and that no context was specified for #id

+			if ( match && (match[1] || !context) ) {

+

+				// HANDLE: $(html) -> $(array)

+				if ( match[1] ) {

+					doc = (context ? context.ownerDocument || context : document);

+

+					// If a single string is passed in and it's a single tag

+					// just do a createElement and skip the rest

+					ret = rsingleTag.exec( selector );

+

+					if ( ret ) {

+						if ( jQuery.isPlainObject( context ) ) {

+							selector = [ document.createElement( ret[1] ) ];

+							jQuery.fn.attr.call( selector, context, true );

+

+						} else {

+							selector = [ doc.createElement( ret[1] ) ];

+						}

+

+					} else {

+						ret = buildFragment( [ match[1] ], [ doc ] );

+						selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;

+					}

+

+				// HANDLE: $("#id")

+				} else {

+					elem = document.getElementById( match[2] );

+

+					if ( elem ) {

+						// Handle the case where IE and Opera return items

+						// by name instead of ID

+						if ( elem.id !== match[2] ) {

+							return rootjQuery.find( selector );

+						}

+

+						// Otherwise, we inject the element directly into the jQuery object

+						this.length = 1;

+						this[0] = elem;

+					}

+

+					this.context = document;

+					this.selector = selector;

+					return this;

+				}

+

+			// HANDLE: $("TAG")

+			} else if ( !context && /^\w+$/.test( selector ) ) {

+				this.selector = selector;

+				this.context = document;

+				selector = document.getElementsByTagName( selector );

+

+			// HANDLE: $(expr, $(...))

+			} else if ( !context || context.jquery ) {

+				return (context || rootjQuery).find( selector );

+

+			// HANDLE: $(expr, context)

+			// (which is just equivalent to: $(context).find(expr)

+			} else {

+				return jQuery( context ).find( selector );

+			}

+

+		// HANDLE: $(function)

+		// Shortcut for document ready

+		} else if ( jQuery.isFunction( selector ) ) {

+			return rootjQuery.ready( selector );

+		}

+

+		if (selector.selector !== undefined) {

+			this.selector = selector.selector;

+			this.context = selector.context;

+		}

+

+		return jQuery.isArray( selector ) ?

+			this.setArray( selector ) :

+			jQuery.makeArray( selector, this );

+	},

+

+	// Start with an empty selector

+	selector: "",

+

+	// The current version of jQuery being used

+	jquery: "1.4.1",

+

+	// The default length of a jQuery object is 0

+	length: 0,

+

+	// The number of elements contained in the matched element set

+	size: function() {

+		///	<summary>

+		///		The number of elements currently matched.

+		///		Part of Core

+		///	</summary>

+		///	<returns type="Number" />

+

+		return this.length;

+	},

+

+	toArray: function() {

+		///	<summary>

+		///		Retrieve all the DOM elements contained in the jQuery set, as an array.

+		///	</summary>

+		///	<returns type="Array" />

+		return slice.call( this, 0 );

+	},

+

+	// Get the Nth element in the matched element set OR

+	// Get the whole matched element set as a clean array

+	get: function( num ) {

+		///	<summary>

+		///		Access a single matched element. num is used to access the

+		///		Nth element matched.

+		///		Part of Core

+		///	</summary>

+		///	<returns type="Element" />

+		///	<param name="num" type="Number">

+		///		Access the element in the Nth position.

+		///	</param>

+

+		return num == null ?

+

+			// Return a 'clean' array

+			this.toArray() :

+

+			// Return just the object

+			( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );

+	},

+

+	// Take an array of elements and push it onto the stack

+	// (returning the new matched element set)

+	pushStack: function( elems, name, selector ) {

+		///	<summary>

+		///		Set the jQuery object to an array of elements, while maintaining

+		///		the stack.

+		///		Part of Core

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="elems" type="Elements">

+		///		An array of elements

+		///	</param>

+

+		// Build a new jQuery matched element set

+		var ret = jQuery( elems || null );

+

+		// Add the old object onto the stack (as a reference)

+		ret.prevObject = this;

+

+		ret.context = this.context;

+

+		if ( name === "find" ) {

+			ret.selector = this.selector + (this.selector ? " " : "") + selector;

+		} else if ( name ) {

+			ret.selector = this.selector + "." + name + "(" + selector + ")";

+		}

+

+		// Return the newly-formed element set

+		return ret;

+	},

+

+	// Force the current matched set of elements to become

+	// the specified array of elements (destroying the stack in the process)

+	// You should use pushStack() in order to do this, but maintain the stack

+	setArray: function( elems ) {

+		///	<summary>

+		///		Set the jQuery object to an array of elements. This operation is

+		///		completely destructive - be sure to use .pushStack() if you wish to maintain

+		///		the jQuery stack.

+		///		Part of Core

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="elems" type="Elements">

+		///		An array of elements

+		///	</param>

+

+		// Resetting the length to 0, then using the native Array push

+		// is a super-fast way to populate an object with array-like properties

+		this.length = 0;

+		push.apply( this, elems );

+

+		return this;

+	},

+

+	// Execute a callback for every element in the matched set.

+	// (You can seed the arguments with an array of args, but this is

+	// only used internally.)

+	each: function( callback, args ) {

+		///	<summary>

+		///		Execute a function within the context of every matched element.

+		///		This means that every time the passed-in function is executed

+		///		(which is once for every element matched) the 'this' keyword

+		///		points to the specific element.

+		///		Additionally, the function, when executed, is passed a single

+		///		argument representing the position of the element in the matched

+		///		set.

+		///		Part of Core

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="callback" type="Function">

+		///		A function to execute

+		///	</param>

+

+		return jQuery.each( this, callback, args );

+	},

+	

+	ready: function( fn ) {

+		///	<summary>

+		///		Binds a function to be executed whenever the DOM is ready to be traversed and manipulated.

+		///	</summary>

+		///	<param name="fn" type="Function">The function to be executed when the DOM is ready.</param>

+

+		// Attach the listeners

+		jQuery.bindReady();

+

+		// If the DOM is already ready

+		if ( jQuery.isReady ) {

+			// Execute the function immediately

+			fn.call( document, jQuery );

+

+		// Otherwise, remember the function for later

+		} else if ( readyList ) {

+			// Add the function to the wait list

+			readyList.push( fn );

+		}

+

+		return this;

+	},

+	

+	eq: function( i ) {

+		///	<summary>

+		///		Reduce the set of matched elements to a single element.

+		///		The position of the element in the set of matched elements

+		///		starts at 0 and goes to length - 1.

+		///		Part of Core

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="num" type="Number">

+		///		pos The index of the element that you wish to limit to.

+		///	</param>

+

+		return i === -1 ?

+			this.slice( i ) :

+			this.slice( i, +i + 1 );

+	},

+

+	first: function() {

+		///	<summary>

+		///		Reduce the set of matched elements to the first in the set.

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		return this.eq( 0 );

+	},

+

+	last: function() {

+		///	<summary>

+		///		Reduce the set of matched elements to the final one in the set.

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		return this.eq( -1 );

+	},

+

+	slice: function() {

+		///	<summary>

+		///		Selects a subset of the matched elements.  Behaves exactly like the built-in Array slice method.

+		///	</summary>

+		///	<param name="start" type="Number" integer="true">Where to start the subset (0-based).</param>

+		///	<param name="end" optional="true" type="Number" integer="true">Where to end the subset (not including the end element itself).

+		///		If omitted, ends at the end of the selection</param>

+		///	<returns type="jQuery">The sliced elements</returns>

+

+		return this.pushStack( slice.apply( this, arguments ),

+			"slice", slice.call(arguments).join(",") );

+	},

+

+	map: function( callback ) {

+		///	<summary>

+		///		This member is internal.

+		///	</summary>

+		///	<private />

+		///	<returns type="jQuery" />

+

+		return this.pushStack( jQuery.map(this, function( elem, i ) {

+			return callback.call( elem, i, elem );

+		}));

+	},

+	

+	end: function() {

+		///	<summary>

+		///		End the most recent 'destructive' operation, reverting the list of matched elements

+		///		back to its previous state. After an end operation, the list of matched elements will

+		///		revert to the last state of matched elements.

+		///		If there was no destructive operation before, an empty set is returned.

+		///		Part of DOM/Traversing

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		return this.prevObject || jQuery(null);

+	},

+

+	// For internal use only.

+	// Behaves like an Array's method, not like a jQuery method.

+	push: push,

+	sort: [].sort,

+	splice: [].splice

+};

+

+// Give the init function the jQuery prototype for later instantiation

+jQuery.fn.init.prototype = jQuery.fn;

+

+jQuery.extend = jQuery.fn.extend = function() {

+	///	<summary>

+	///		Extend one object with one or more others, returning the original,

+	///		modified, object. This is a great utility for simple inheritance.

+	///		jQuery.extend(settings, options);

+	///		var settings = jQuery.extend({}, defaults, options);

+	///		Part of JavaScript

+	///	</summary>

+	///	<param name="target" type="Object">

+	///		 The object to extend

+	///	</param>

+	///	<param name="prop1" type="Object">

+	///		 The object that will be merged into the first.

+	///	</param>

+	///	<param name="propN" type="Object" optional="true" parameterArray="true">

+	///		 (optional) More objects to merge into the first

+	///	</param>

+	///	<returns type="Object" />

+

+	// copy reference to target object

+	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy;

+

+	// Handle a deep copy situation

+	if ( typeof target === "boolean" ) {

+		deep = target;

+		target = arguments[1] || {};

+		// skip the boolean and the target

+		i = 2;

+	}

+

+	// Handle case when target is a string or something (possible in deep copy)

+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {

+		target = {};

+	}

+

+	// extend jQuery itself if only one argument is passed

+	if ( length === i ) {

+		target = this;

+		--i;

+	}

+

+	for ( ; i < length; i++ ) {

+		// Only deal with non-null/undefined values

+		if ( (options = arguments[ i ]) != null ) {

+			// Extend the base object

+			for ( name in options ) {

+				src = target[ name ];

+				copy = options[ name ];

+

+				// Prevent never-ending loop

+				if ( target === copy ) {

+					continue;

+				}

+

+				// Recurse if we're merging object literal values or arrays

+				if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {

+					var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src

+						: jQuery.isArray(copy) ? [] : {};

+

+					// Never move original objects, clone them

+					target[ name ] = jQuery.extend( deep, clone, copy );

+

+				// Don't bring in undefined values

+				} else if ( copy !== undefined ) {

+					target[ name ] = copy;

+				}

+			}

+		}

+	}

+

+	// Return the modified object

+	return target;

+};

+

+jQuery.extend({

+	noConflict: function( deep ) {

+		///	<summary>

+		///		Run this function to give control of the $ variable back

+		///		to whichever library first implemented it. This helps to make 

+		///		sure that jQuery doesn't conflict with the $ object

+		///		of other libraries.

+		///		By using this function, you will only be able to access jQuery

+		///		using the 'jQuery' variable. For example, where you used to do

+		///		$(&quot;div p&quot;), you now must do jQuery(&quot;div p&quot;).

+		///		Part of Core 

+		///	</summary>

+		///	<returns type="undefined" />

+

+		window.$ = _$;

+

+		if ( deep ) {

+			window.jQuery = _jQuery;

+		}

+

+		return jQuery;

+	},

+	

+	// Is the DOM ready to be used? Set to true once it occurs.

+	isReady: false,

+	

+	// Handle when the DOM is ready

+	ready: function() {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		// Make sure that the DOM is not already loaded

+		if ( !jQuery.isReady ) {

+			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).

+			if ( !document.body ) {

+				return setTimeout( jQuery.ready, 13 );

+			}

+

+			// Remember that the DOM is ready

+			jQuery.isReady = true;

+

+			// If there are functions bound, to execute

+			if ( readyList ) {

+				// Execute all of them

+				var fn, i = 0;

+				while ( (fn = readyList[ i++ ]) ) {

+					fn.call( document, jQuery );

+				}

+

+				// Reset the list of functions

+				readyList = null;

+			}

+

+			// Trigger any bound ready events

+			if ( jQuery.fn.triggerHandler ) {

+				jQuery( document ).triggerHandler( "ready" );

+			}

+		}

+	},

+	

+	bindReady: function() {

+		if ( readyBound ) {

+			return;

+		}

+

+		readyBound = true;

+

+		// Catch cases where $(document).ready() is called after the

+		// browser event has already occurred.

+		if ( document.readyState === "complete" ) {

+			return jQuery.ready();

+		}

+

+		// Mozilla, Opera and webkit nightlies currently support this event

+		if ( document.addEventListener ) {

+			// Use the handy event callback

+			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );

+			

+			// A fallback to window.onload, that will always work

+			window.addEventListener( "load", jQuery.ready, false );

+

+		// If IE event model is used

+		} else if ( document.attachEvent ) {

+			// ensure firing before onload,

+			// maybe late but safe also for iframes

+			document.attachEvent("onreadystatechange", DOMContentLoaded);

+			

+			// A fallback to window.onload, that will always work

+			window.attachEvent( "onload", jQuery.ready );

+

+			// If IE and not a frame

+			// continually check to see if the document is ready

+			var toplevel = false;

+

+			try {

+				toplevel = window.frameElement == null;

+			} catch(e) {}

+

+			if ( document.documentElement.doScroll && toplevel ) {

+				doScrollCheck();

+			}

+		}

+	},

+

+	// See test/unit/core.js for details concerning isFunction.

+	// Since version 1.3, DOM methods and functions like alert

+	// aren't supported. They return false on IE (#2968).

+	isFunction: function( obj ) {

+		///	<summary>

+		///		Determines if the parameter passed is a function.

+		///	</summary>

+		///	<param name="obj" type="Object">The object to check</param>

+		///	<returns type="Boolean">True if the parameter is a function; otherwise false.</returns>

+

+		return toString.call(obj) === "[object Function]";

+	},

+

+	isArray: function( obj ) {

+		///	<summary>

+		///		Determine if the parameter passed is an array.

+		///	</summary>

+		///	<param name="obj" type="Object">Object to test whether or not it is an array.</param>

+		///	<returns type="Boolean">True if the parameter is a function; otherwise false.</returns>

+

+		return toString.call(obj) === "[object Array]";

+	},

+

+	isPlainObject: function( obj ) {

+		///	<summary>

+		///		Check to see if an object is a plain object (created using "{}" or "new Object").

+		///	</summary>

+		///	<param name="obj" type="Object">

+		///		The object that will be checked to see if it's a plain object.

+		///	</param>

+		///	<returns type="Boolean" />

+

+		// Must be an Object.

+		// Because of IE, we also have to check the presence of the constructor property.

+		// Make sure that DOM nodes and window objects don't pass through, as well

+		if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) {

+			return false;

+		}

+		

+		// Not own constructor property must be Object

+		if ( obj.constructor

+			&& !hasOwnProperty.call(obj, "constructor")

+			&& !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {

+			return false;

+		}

+		

+		// Own properties are enumerated firstly, so to speed up,

+		// if last one is own, then all properties are own.

+	

+		var key;

+		for ( key in obj ) {}

+		

+		return key === undefined || hasOwnProperty.call( obj, key );

+	},

+

+	isEmptyObject: function( obj ) {

+		///	<summary>

+		///		Check to see if an object is empty (contains no properties).

+		///	</summary>

+		///	<param name="obj" type="Object">

+		///		The object that will be checked to see if it's empty.

+		///	</param>

+		///	<returns type="Boolean" />

+

+		for ( var name in obj ) {

+			return false;

+		}

+		return true;

+	},

+	

+	error: function( msg ) {

+		throw msg;

+	},

+	

+	parseJSON: function( data ) {

+		if ( typeof data !== "string" || !data ) {

+			return null;

+		}

+		

+		// Make sure the incoming data is actual JSON

+		// Logic borrowed from http://json.org/json2.js

+		if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")

+			.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")

+			.replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {

+

+			// Try to use the native JSON parser first

+			return window.JSON && window.JSON.parse ?

+				window.JSON.parse( data ) :

+				(new Function("return " + data))();

+

+		} else {

+			jQuery.error( "Invalid JSON: " + data );

+		}

+	},

+

+	noop: function() {

+		///	<summary>

+		///		An empty function.

+		///	</summary>

+		///	<returns type="Function" />

+	},

+

+	// Evalulates a script in a global context

+	globalEval: function( data ) {

+		///	<summary>

+		///		Internally evaluates a script in a global context.

+		///	</summary>

+		///	<private />

+

+		if ( data && rnotwhite.test(data) ) {

+			// Inspired by code by Andrea Giammarchi

+			// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html

+			var head = document.getElementsByTagName("head")[0] || document.documentElement,

+				script = document.createElement("script");

+

+			script.type = "text/javascript";

+

+			if ( jQuery.support.scriptEval ) {

+				script.appendChild( document.createTextNode( data ) );

+			} else {

+				script.text = data;

+			}

+

+			// Use insertBefore instead of appendChild to circumvent an IE6 bug.

+			// This arises when a base node is used (#2709).

+			head.insertBefore( script, head.firstChild );

+			head.removeChild( script );

+		}

+	},

+

+	nodeName: function( elem, name ) {

+		///	<summary>

+		///		Checks whether the specified element has the specified DOM node name.

+		///	</summary>

+		///	<param name="elem" type="Element">The element to examine</param>

+		///	<param name="name" type="String">The node name to check</param>

+		///	<returns type="Boolean">True if the specified node name matches the node's DOM node name; otherwise false</returns>

+

+		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();

+	},

+

+	// args is for internal usage only

+	each: function( object, callback, args ) {

+		///	<summary>

+		///		A generic iterator function, which can be used to seemlessly

+		///		iterate over both objects and arrays. This function is not the same

+		///		as $().each() - which is used to iterate, exclusively, over a jQuery

+		///		object. This function can be used to iterate over anything.

+		///		The callback has two arguments:the key (objects) or index (arrays) as first

+		///		the first, and the value as the second.

+		///		Part of JavaScript

+		///	</summary>

+		///	<param name="obj" type="Object">

+		///		 The object, or array, to iterate over.

+		///	</param>

+		///	<param name="fn" type="Function">

+		///		 The function that will be executed on every object.

+		///	</param>

+		///	<returns type="Object" />

+

+		var name, i = 0,

+			length = object.length,

+			isObj = length === undefined || jQuery.isFunction(object);

+

+		if ( args ) {

+			if ( isObj ) {

+				for ( name in object ) {

+					if ( callback.apply( object[ name ], args ) === false ) {

+						break;

+					}

+				}

+			} else {

+				for ( ; i < length; ) {

+					if ( callback.apply( object[ i++ ], args ) === false ) {

+						break;

+					}

+				}

+			}

+

+		// A special, fast, case for the most common use of each

+		} else {

+			if ( isObj ) {

+				for ( name in object ) {

+					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {

+						break;

+					}

+				}

+			} else {

+				for ( var value = object[0];

+					i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}

+			}

+		}

+

+		return object;

+	},

+

+	trim: function( text ) {

+		///	<summary>

+		///		Remove the whitespace from the beginning and end of a string.

+		///		Part of JavaScript

+		///	</summary>

+		///	<returns type="String" />

+		///	<param name="text" type="String">

+		///		The string to trim.

+		///	</param>

+

+		return (text || "").replace( rtrim, "" );

+	},

+

+	// results is for internal usage only

+	makeArray: function( array, results ) {

+		///	<summary>

+		///		Turns anything into a true array.  This is an internal method.

+		///	</summary>

+		///	<param name="array" type="Object">Anything to turn into an actual Array</param>

+		///	<returns type="Array" />

+		///	<private />

+

+		var ret = results || [];

+

+		if ( array != null ) {

+			// The window, strings (and functions) also have 'length'

+			// The extra typeof function check is to prevent crashes

+			// in Safari 2 (See: #3039)

+			if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) {

+				push.call( ret, array );

+			} else {

+				jQuery.merge( ret, array );

+			}

+		}

+

+		return ret;

+	},

+

+	inArray: function( elem, array ) {

+		if ( array.indexOf ) {

+			return array.indexOf( elem );

+		}

+

+		for ( var i = 0, length = array.length; i < length; i++ ) {

+			if ( array[ i ] === elem ) {

+				return i;

+			}

+		}

+

+		return -1;

+	},

+

+	merge: function( first, second ) {

+		///	<summary>

+		///		Merge two arrays together, removing all duplicates.

+		///		The new array is: All the results from the first array, followed

+		///		by the unique results from the second array.

+		///		Part of JavaScript

+		///	</summary>

+		///	<returns type="Array" />

+		///	<param name="first" type="Array">

+		///		 The first array to merge.

+		///	</param>

+		///	<param name="second" type="Array">

+		///		 The second array to merge.

+		///	</param>

+

+		var i = first.length, j = 0;

+

+		if ( typeof second.length === "number" ) {

+			for ( var l = second.length; j < l; j++ ) {

+				first[ i++ ] = second[ j ];

+			}

+		} else {

+			while ( second[j] !== undefined ) {

+				first[ i++ ] = second[ j++ ];

+			}

+		}

+

+		first.length = i;

+

+		return first;

+	},

+

+	grep: function( elems, callback, inv ) {

+		///	<summary>

+		///		Filter items out of an array, by using a filter function.

+		///		The specified function will be passed two arguments: The

+		///		current array item and the index of the item in the array. The

+		///		function must return 'true' to keep the item in the array, 

+		///		false to remove it.

+		///		});

+		///		Part of JavaScript

+		///	</summary>

+		///	<returns type="Array" />

+		///	<param name="elems" type="Array">

+		///		array The Array to find items in.

+		///	</param>

+		///	<param name="fn" type="Function">

+		///		 The function to process each item against.

+		///	</param>

+		///	<param name="inv" type="Boolean">

+		///		 Invert the selection - select the opposite of the function.

+		///	</param>

+

+		var ret = [];

+

+		// Go through the array, only saving the items

+		// that pass the validator function

+		for ( var i = 0, length = elems.length; i < length; i++ ) {

+			if ( !inv !== !callback( elems[ i ], i ) ) {

+				ret.push( elems[ i ] );

+			}

+		}

+

+		return ret;

+	},

+

+	// arg is for internal usage only

+	map: function( elems, callback, arg ) {

+		///	<summary>

+		///		Translate all items in an array to another array of items.

+		///		The translation function that is provided to this method is 

+		///		called for each item in the array and is passed one argument: 

+		///		The item to be translated.

+		///		The function can then return the translated value, 'null'

+		///		(to remove the item), or  an array of values - which will

+		///		be flattened into the full array.

+		///		Part of JavaScript

+		///	</summary>

+		///	<returns type="Array" />

+		///	<param name="elems" type="Array">

+		///		array The Array to translate.

+		///	</param>

+		///	<param name="fn" type="Function">

+		///		 The function to process each item against.

+		///	</param>

+

+		var ret = [], value;

+

+		// Go through the array, translating each of the items to their

+		// new value (or values).

+		for ( var i = 0, length = elems.length; i < length; i++ ) {

+			value = callback( elems[ i ], i, arg );

+

+			if ( value != null ) {

+				ret[ ret.length ] = value;

+			}

+		}

+

+		return ret.concat.apply( [], ret );

+	},

+

+	// A global GUID counter for objects

+	guid: 1,

+

+	proxy: function( fn, proxy, thisObject ) {

+		///	<summary>

+		///		Takes a function and returns a new one that will always have a particular scope.

+		///	</summary>

+		///	<param name="fn" type="Function">

+		///		The function whose scope will be changed.

+		///	</param>

+		///	<param name="proxy" type="Object">

+		///		The object to which the scope of the function should be set.

+		///	</param>

+		///	<returns type="Function" />

+

+		if ( arguments.length === 2 ) {

+			if ( typeof proxy === "string" ) {

+				thisObject = fn;

+				fn = thisObject[ proxy ];

+				proxy = undefined;

+

+			} else if ( proxy && !jQuery.isFunction( proxy ) ) {

+				thisObject = proxy;

+				proxy = undefined;

+			}

+		}

+

+		if ( !proxy && fn ) {

+			proxy = function() {

+				return fn.apply( thisObject || this, arguments );

+			};

+		}

+

+		// Set the guid of unique handler to the same of original handler, so it can be removed

+		if ( fn ) {

+			proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;

+		}

+

+		// So proxy can be declared as an argument

+		return proxy;

+	},

+

+	// Use of jQuery.browser is frowned upon.

+	// More details: http://docs.jquery.com/Utilities/jQuery.browser

+	uaMatch: function( ua ) {

+		ua = ua.toLowerCase();

+

+		var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) ||

+			/(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) ||

+			/(msie) ([\w.]+)/.exec( ua ) ||

+			!/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) ||

+		  	[];

+

+		return { browser: match[1] || "", version: match[2] || "0" };

+	},

+

+	browser: {}

+});

+

+browserMatch = jQuery.uaMatch( userAgent );

+if ( browserMatch.browser ) {

+	jQuery.browser[ browserMatch.browser ] = true;

+	jQuery.browser.version = browserMatch.version;

+}

+

+// Deprecated, use jQuery.browser.webkit instead

+if ( jQuery.browser.webkit ) {

+	jQuery.browser.safari = true;

+}

+

+if ( indexOf ) {

+	jQuery.inArray = function( elem, array ) {

+		///	<summary>

+		///		Determines the index of the first parameter in the array.

+		///	</summary>

+		///	<param name="elem">The value to see if it exists in the array.</param>

+		///	<param name="array" type="Array">The array to look through for the value</param>

+		///	<returns type="Number" integer="true">The 0-based index of the item if it was found, otherwise -1.</returns>

+

+		return indexOf.call( array, elem );

+	};

+}

+

+// All jQuery objects should point back to these

+rootjQuery = jQuery(document);

+

+// Cleanup functions for the document ready method

+if ( document.addEventListener ) {

+	DOMContentLoaded = function() {

+		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );

+		jQuery.ready();

+	};

+

+} else if ( document.attachEvent ) {

+	DOMContentLoaded = function() {

+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).

+		if ( document.readyState === "complete" ) {

+			document.detachEvent( "onreadystatechange", DOMContentLoaded );

+			jQuery.ready();

+		}

+	};

+}

+

+// The DOM ready check for Internet Explorer

+function doScrollCheck() {

+	if ( jQuery.isReady ) {

+		return;

+	}

+

+	try {

+		// If IE is used, use the trick by Diego Perini

+		// http://javascript.nwbox.com/IEContentLoaded/

+		document.documentElement.doScroll("left");

+	} catch( error ) {

+		setTimeout( doScrollCheck, 1 );

+		return;

+	}

+

+	// and execute any waiting functions

+	jQuery.ready();

+}

+

+function evalScript( i, elem ) {

+	///	<summary>

+	///		This method is internal.

+	///	</summary>

+	/// <private />

+

+	if ( elem.src ) {

+		jQuery.ajax({

+			url: elem.src,

+			async: false,

+			dataType: "script"

+		});

+	} else {

+		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );

+	}

+

+	if ( elem.parentNode ) {

+		elem.parentNode.removeChild( elem );

+	}

+}

+

+// Mutifunctional method to get and set values to a collection

+// The value/s can be optionally by executed if its a function

+function access( elems, key, value, exec, fn, pass ) {

+	var length = elems.length;

+	

+	// Setting many attributes

+	if ( typeof key === "object" ) {

+		for ( var k in key ) {

+			access( elems, k, key[k], exec, fn, value );

+		}

+		return elems;

+	}

+	

+	// Setting one attribute

+	if ( value !== undefined ) {

+		// Optionally, function values get executed if exec is true

+		exec = !pass && exec && jQuery.isFunction(value);

+		

+		for ( var i = 0; i < length; i++ ) {

+			fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );

+		}

+		

+		return elems;

+	}

+	

+	// Getting an attribute

+	return length ? fn( elems[0], key ) : null;

+}

+

+function now() {

+	///	<summary>

+	///		Gets the current date.

+	///	</summary>

+	///	<returns type="Date">The current date.</returns>

+

+	return (new Date).getTime();

+}

+

+// [vsdoc] The following function has been modified for IntelliSense.

+// [vsdoc] Stubbing support properties to "false" for IntelliSense compat.

+(function() {

+

+	jQuery.support = {};

+

+	//	var root = document.documentElement,

+	//		script = document.createElement("script"),

+	//		div = document.createElement("div"),

+	//		id = "script" + now();

+

+	//	div.style.display = "none";

+	//	div.innerHTML = "   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";

+

+	//	var all = div.getElementsByTagName("*"),

+	//		a = div.getElementsByTagName("a")[0];

+

+	//	// Can't get basic test support

+	//	if ( !all || !all.length || !a ) {

+	//		return;

+	//	}

+

+	jQuery.support = {

+		// IE strips leading whitespace when .innerHTML is used

+		leadingWhitespace: false,

+

+		// Make sure that tbody elements aren't automatically inserted

+		// IE will insert them into empty tables

+		tbody: false,

+

+		// Make sure that link elements get serialized correctly by innerHTML

+		// This requires a wrapper element in IE

+		htmlSerialize: false,

+

+		// Get the style information from getAttribute

+		// (IE uses .cssText insted)

+		style: false,

+

+		// Make sure that URLs aren't manipulated

+		// (IE normalizes it by default)

+		hrefNormalized: false,

+

+		// Make sure that element opacity exists

+		// (IE uses filter instead)

+		// Use a regex to work around a WebKit issue. See #5145

+		opacity: false,

+

+		// Verify style float existence

+		// (IE uses styleFloat instead of cssFloat)

+		cssFloat: false,

+

+		// Make sure that if no value is specified for a checkbox

+		// that it defaults to "on".

+		// (WebKit defaults to "" instead)

+		checkOn: false,

+

+		// Make sure that a selected-by-default option has a working selected property.

+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)

+		optSelected: false,

+

+		// Will be defined later

+		checkClone: false,

+		scriptEval: false,

+		noCloneEvent: false,

+		boxModel: false

+	};

+

+	//	script.type = "text/javascript";

+	//	try {

+	//		script.appendChild( document.createTextNode( "window." + id + "=1;" ) );

+	//	} catch(e) {}

+

+	//	root.insertBefore( script, root.firstChild );

+

+	//	// Make sure that the execution of code works by injecting a script

+	//	// tag with appendChild/createTextNode

+	//	// (IE doesn't support this, fails, and uses .text instead)

+	//	if ( window[ id ] ) {

+	//		jQuery.support.scriptEval = true;

+	//		delete window[ id ];

+	//	}

+

+	//	root.removeChild( script );

+

+	//	if ( div.attachEvent && div.fireEvent ) {

+	//		div.attachEvent("onclick", function click() {

+	//			// Cloning a node shouldn't copy over any

+	//			// bound event handlers (IE does this)

+	//			jQuery.support.noCloneEvent = false;

+	//			div.detachEvent("onclick", click);

+	//		});

+	//		div.cloneNode(true).fireEvent("onclick");

+	//	}

+

+	//	div = document.createElement("div");

+	//	div.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>";

+

+	//	var fragment = document.createDocumentFragment();

+	//	fragment.appendChild( div.firstChild );

+

+	//	// WebKit doesn't clone checked state correctly in fragments

+	//	jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;

+

+	//	// Figure out if the W3C box model works as expected

+	//	// document.body must exist before we can do this

+	//	jQuery(function() {

+	//		var div = document.createElement("div");

+	//		div.style.width = div.style.paddingLeft = "1px";

+

+	//		document.body.appendChild( div );

+	//		jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;

+	//		document.body.removeChild( div ).style.display = 'none';

+	//		div = null;

+	//	});

+

+	//	// Technique from Juriy Zaytsev

+	//	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/

+	//	var eventSupported = function( eventName ) { 

+	//		var el = document.createElement("div"); 

+	//		eventName = "on" + eventName; 

+

+	//		var isSupported = (eventName in el); 

+	//		if ( !isSupported ) { 

+	//			el.setAttribute(eventName, "return;"); 

+	//			isSupported = typeof el[eventName] === "function"; 

+	//		} 

+	//		el = null; 

+

+	//		return isSupported; 

+	//	};

+	

+	jQuery.support.submitBubbles = false;

+	jQuery.support.changeBubbles = false;

+

+	//	// release memory in IE

+	//	root = script = div = all = a = null;

+})();

+

+jQuery.props = {

+	"for": "htmlFor",

+	"class": "className",

+	readonly: "readOnly",

+	maxlength: "maxLength",

+	cellspacing: "cellSpacing",

+	rowspan: "rowSpan",

+	colspan: "colSpan",

+	tabindex: "tabIndex",

+	usemap: "useMap",

+	frameborder: "frameBorder"

+};

+var expando = "jQuery" + now(), uuid = 0, windowData = {};

+var emptyObject = {};

+

+jQuery.extend({

+	cache: {},

+	

+	expando:expando,

+

+	// The following elements throw uncatchable exceptions if you

+	// attempt to add expando properties to them.

+	noData: {

+		"embed": true,

+		"object": true,

+		"applet": true

+	},

+

+	data: function( elem, name, data ) {

+		///	<summary>

+		///		Store arbitrary data associated with the specified element.

+		///	</summary>

+		///	<param name="elem" type="Element">

+		///		The DOM element to associate with the data.

+		///	</param>

+		///	<param name="name" type="String">

+		///		A string naming the piece of data to set.

+		///	</param>

+		///	<param name="value" type="Object">

+		///		The new data value.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {

+			return;

+		}

+

+		elem = elem == window ?

+			windowData :

+			elem;

+

+		var id = elem[ expando ], cache = jQuery.cache, thisCache;

+

+		// Handle the case where there's no name immediately

+		if ( !name && !id ) {

+			return null;

+		}

+

+		// Compute a unique ID for the element

+		if ( !id ) { 

+			id = ++uuid;

+		}

+

+		// Avoid generating a new cache unless none exists and we

+		// want to manipulate it.

+		if ( typeof name === "object" ) {

+			elem[ expando ] = id;

+			thisCache = cache[ id ] = jQuery.extend(true, {}, name);

+		} else if ( cache[ id ] ) {

+			thisCache = cache[ id ];

+		} else if ( typeof data === "undefined" ) {

+			thisCache = emptyObject;

+		} else {

+			thisCache = cache[ id ] = {};

+		}

+

+		// Prevent overriding the named cache with undefined values

+		if ( data !== undefined ) {

+			elem[ expando ] = id;

+			thisCache[ name ] = data;

+		}

+

+		return typeof name === "string" ? thisCache[ name ] : thisCache;

+	},

+

+	removeData: function( elem, name ) {

+		if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {

+			return;

+		}

+

+		elem = elem == window ?

+			windowData :

+			elem;

+

+		var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];

+

+		// If we want to remove a specific section of the element's data

+		if ( name ) {

+			if ( thisCache ) {

+				// Remove the section of cache data

+				delete thisCache[ name ];

+

+				// If we've removed all the data, remove the element's cache

+				if ( jQuery.isEmptyObject(thisCache) ) {

+					jQuery.removeData( elem );

+				}

+			}

+

+		// Otherwise, we want to remove all of the element's data

+		} else {

+			// Clean up the element expando

+			try {

+				delete elem[ expando ];

+			} catch( e ) {

+				// IE has trouble directly removing the expando

+				// but it's ok with using removeAttribute

+				if ( elem.removeAttribute ) {

+					elem.removeAttribute( expando );

+				}

+			}

+

+			// Completely remove the data cache

+			delete cache[ id ];

+		}

+	}

+});

+

+jQuery.fn.extend({

+	data: function( key, value ) {

+		///	<summary>

+		///		Store arbitrary data associated with the matched elements.

+		///	</summary>

+		///	<param name="key" type="String">

+		///		A string naming the piece of data to set.

+		///	</param>

+		///	<param name="value" type="Object">

+		///		The new data value.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		if ( typeof key === "undefined" && this.length ) {

+			return jQuery.data( this[0] );

+

+		} else if ( typeof key === "object" ) {

+			return this.each(function() {

+				jQuery.data( this, key );

+			});

+		}

+

+		var parts = key.split(".");

+		parts[1] = parts[1] ? "." + parts[1] : "";

+

+		if ( value === undefined ) {

+			var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);

+

+			if ( data === undefined && this.length ) {

+				data = jQuery.data( this[0], key );

+			}

+			return data === undefined && parts[1] ?

+				this.data( parts[0] ) :

+				data;

+		} else {

+			return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() {

+				jQuery.data( this, key, value );

+			});

+		}

+	},

+

+	removeData: function( key ) {

+		return this.each(function() {

+			jQuery.removeData( this, key );

+		});

+	}

+});

+jQuery.extend({

+	queue: function( elem, type, data ) {

+		if ( !elem ) {

+			return;

+		}

+

+		type = (type || "fx") + "queue";

+		var q = jQuery.data( elem, type );

+

+		// Speed up dequeue by getting out quickly if this is just a lookup

+		if ( !data ) {

+			return q || [];

+		}

+

+		if ( !q || jQuery.isArray(data) ) {

+			q = jQuery.data( elem, type, jQuery.makeArray(data) );

+

+		} else {

+			q.push( data );

+		}

+

+		return q;

+	},

+

+	dequeue: function( elem, type ) {

+		type = type || "fx";

+

+		var queue = jQuery.queue( elem, type ), fn = queue.shift();

+

+		// If the fx queue is dequeued, always remove the progress sentinel

+		if ( fn === "inprogress" ) {

+			fn = queue.shift();

+		}

+

+		if ( fn ) {

+			// Add a progress sentinel to prevent the fx queue from being

+			// automatically dequeued

+			if ( type === "fx" ) {

+				queue.unshift("inprogress");

+			}

+

+			fn.call(elem, function() {

+				jQuery.dequeue(elem, type);

+			});

+		}

+	}

+});

+

+jQuery.fn.extend({

+	queue: function( type, data ) {

+		///	<summary>

+		///		1: queue() - Returns a reference to the first element's queue (which is an array of functions).

+		///		2: queue(callback) - Adds a new function, to be executed, onto the end of the queue of all matched elements.

+		///		3: queue(queue) - Replaces the queue of all matched element with this new queue (the array of functions).

+		///	</summary>

+		///	<param name="type" type="Function">The function to add to the queue.</param>

+		///	<returns type="jQuery" />

+

+		if ( typeof type !== "string" ) {

+			data = type;

+			type = "fx";

+		}

+

+		if ( data === undefined ) {

+			return jQuery.queue( this[0], type );

+		}

+		return this.each(function( i, elem ) {

+			var queue = jQuery.queue( this, type, data );

+

+			if ( type === "fx" && queue[0] !== "inprogress" ) {

+				jQuery.dequeue( this, type );

+			}

+		});

+	},

+	dequeue: function( type ) {

+		///	<summary>

+		///		Removes a queued function from the front of the queue and executes it.

+		///	</summary>

+		///	<param name="type" type="String" optional="true">The type of queue to access.</param>

+		///	<returns type="jQuery" />

+

+		return this.each(function() {

+			jQuery.dequeue( this, type );

+		});

+	},

+

+	// Based off of the plugin by Clint Helfers, with permission.

+	// http://blindsignals.com/index.php/2009/07/jquery-delay/

+	delay: function( time, type ) {

+		///	<summary>

+		///		Set a timer to delay execution of subsequent items in the queue.

+		///	</summary>

+		///	<param name="time" type="Number">

+		///		An integer indicating the number of milliseconds to delay execution of the next item in the queue.

+		///	</param>

+		///	<param name="type" type="String">

+		///		A string containing the name of the queue. Defaults to fx, the standard effects queue.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;

+		type = type || "fx";

+

+		return this.queue( type, function() {

+			var elem = this;

+			setTimeout(function() {

+				jQuery.dequeue( elem, type );

+			}, time );

+		});

+	},

+

+	clearQueue: function( type ) {

+		///	<summary>

+		///		Remove from the queue all items that have not yet been run.

+		///	</summary>

+		///	<param name="type" type="String" optional="true">

+		///		A string containing the name of the queue. Defaults to fx, the standard effects queue.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		return this.queue( type || "fx", [] );

+	}

+});

+var rclass = /[\n\t]/g,

+	rspace = /\s+/,

+	rreturn = /\r/g,

+	rspecialurl = /href|src|style/,

+	rtype = /(button|input)/i,

+	rfocusable = /(button|input|object|select|textarea)/i,

+	rclickable = /^(a|area)$/i,

+	rradiocheck = /radio|checkbox/;

+

+jQuery.fn.extend({

+	attr: function( name, value ) {

+		///	<summary>

+		///		Set a single property to a computed value, on all matched elements.

+		///		Instead of a value, a function is provided, that computes the value.

+		///		Part of DOM/Attributes

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="name" type="String">

+		///		The name of the property to set.

+		///	</param>

+		///	<param name="value" type="Function">

+		///		A function returning the value to set.

+		///	</param>

+

+		return access( this, name, value, true, jQuery.attr );

+	},

+

+	removeAttr: function( name, fn ) {

+		///	<summary>

+		///		Remove an attribute from each of the matched elements.

+		///		Part of DOM/Attributes

+		///	</summary>

+		///	<param name="name" type="String">

+		///		An attribute to remove.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		return this.each(function(){

+			jQuery.attr( this, name, "" );

+			if ( this.nodeType === 1 ) {

+				this.removeAttribute( name );

+			}

+		});

+	},

+

+	addClass: function( value ) {

+		///	<summary>

+		///		Adds the specified class(es) to each of the set of matched elements.

+		///		Part of DOM/Attributes

+		///	</summary>

+		///	<param name="value" type="String">

+		///		One or more class names to be added to the class attribute of each matched element.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		if ( jQuery.isFunction(value) ) {

+			return this.each(function(i) {

+				var self = jQuery(this);

+				self.addClass( value.call(this, i, self.attr("class")) );

+			});

+		}

+

+		if ( value && typeof value === "string" ) {

+			var classNames = (value || "").split( rspace );

+

+			for ( var i = 0, l = this.length; i < l; i++ ) {

+				var elem = this[i];

+

+				if ( elem.nodeType === 1 ) {

+					if ( !elem.className ) {

+						elem.className = value;

+

+					} else {

+						var className = " " + elem.className + " ";

+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {

+							if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {

+								elem.className += " " + classNames[c];

+							}

+						}

+					}

+				}

+			}

+		}

+

+		return this;

+	},

+

+	removeClass: function( value ) {

+		///	<summary>

+		///		Removes all or the specified class(es) from the set of matched elements.

+		///		Part of DOM/Attributes

+		///	</summary>

+		///	<param name="value" type="String" optional="true">

+		///		(Optional) A class name to be removed from the class attribute of each matched element.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		if ( jQuery.isFunction(value) ) {

+			return this.each(function(i) {

+				var self = jQuery(this);

+				self.removeClass( value.call(this, i, self.attr("class")) );

+			});

+		}

+

+		if ( (value && typeof value === "string") || value === undefined ) {

+			var classNames = (value || "").split(rspace);

+

+			for ( var i = 0, l = this.length; i < l; i++ ) {

+				var elem = this[i];

+

+				if ( elem.nodeType === 1 && elem.className ) {

+					if ( value ) {

+						var className = (" " + elem.className + " ").replace(rclass, " ");

+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {

+							className = className.replace(" " + classNames[c] + " ", " ");

+						}

+						elem.className = className.substring(1, className.length - 1);

+

+					} else {

+						elem.className = "";

+					}

+				}

+			}

+		}

+

+		return this;

+	},

+

+	toggleClass: function( value, stateVal ) {

+		///	<summary>

+		///		Add or remove a class from each element in the set of matched elements, depending

+		///		on either the class's presence or the value of the switch argument.

+		///	</summary>

+		///	<param name="value" type="Object">

+		///		A class name to be toggled for each element in the matched set.

+		///	</param>

+		///	<param name="stateVal" type="Object">

+		///		A boolean value to determine whether the class should be added or removed.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		var type = typeof value, isBool = typeof stateVal === "boolean";

+

+		if ( jQuery.isFunction( value ) ) {

+			return this.each(function(i) {

+				var self = jQuery(this);

+				self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );

+			});

+		}

+

+		return this.each(function() {

+			if ( type === "string" ) {

+				// toggle individual class names

+				var className, i = 0, self = jQuery(this),

+					state = stateVal,

+					classNames = value.split( rspace );

+

+				while ( (className = classNames[ i++ ]) ) {

+					// check each className given, space seperated list

+					state = isBool ? state : !self.hasClass( className );

+					self[ state ? "addClass" : "removeClass" ]( className );

+				}

+

+			} else if ( type === "undefined" || type === "boolean" ) {

+				if ( this.className ) {

+					// store className if set

+					jQuery.data( this, "__className__", this.className );

+				}

+

+				// toggle whole className

+				this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";

+			}

+		});

+	},

+

+	hasClass: function( selector ) {

+		///	<summary>

+		///		Checks the current selection against a class and returns whether at least one selection has a given class.

+		///	</summary>

+		///	<param name="selector" type="String">The class to check against</param>

+		///	<returns type="Boolean">True if at least one element in the selection has the class, otherwise false.</returns>

+

+		var className = " " + selector + " ";

+		for ( var i = 0, l = this.length; i < l; i++ ) {

+			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {

+				return true;

+			}

+		}

+

+		return false;

+	},

+

+	val: function( value ) {

+		///	<summary>

+		///		Set the value of every matched element.

+		///		Part of DOM/Attributes

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="value" type="String">

+		///		A string of text or an array of strings to set as the value property of each

+		///		matched element.

+		///	</param>

+

+		if ( value === undefined ) {

+			var elem = this[0];

+

+			if ( elem ) {

+				if ( jQuery.nodeName( elem, "option" ) ) {

+					return (elem.attributes.value || {}).specified ? elem.value : elem.text;

+				}

+

+				// We need to handle select boxes special

+				if ( jQuery.nodeName( elem, "select" ) ) {

+					var index = elem.selectedIndex,

+						values = [],

+						options = elem.options,

+						one = elem.type === "select-one";

+

+					// Nothing was selected

+					if ( index < 0 ) {

+						return null;

+					}

+

+					// Loop through all the selected options

+					for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {

+						var option = options[ i ];

+

+						if ( option.selected ) {

+							// Get the specifc value for the option

+							value = jQuery(option).val();

+

+							// We don't need an array for one selects

+							if ( one ) {

+								return value;

+							}

+

+							// Multi-Selects return an array

+							values.push( value );

+						}

+					}

+

+					return values;

+				}

+

+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified

+				if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {

+					return elem.getAttribute("value") === null ? "on" : elem.value;

+				}

+				

+

+				// Everything else, we just grab the value

+				return (elem.value || "").replace(rreturn, "");

+

+			}

+

+			return undefined;

+		}

+

+		var isFunction = jQuery.isFunction(value);

+

+		return this.each(function(i) {

+			var self = jQuery(this), val = value;

+

+			if ( this.nodeType !== 1 ) {

+				return;

+			}

+

+			if ( isFunction ) {

+				val = value.call(this, i, self.val());

+			}

+

+			// Typecast each time if the value is a Function and the appended

+			// value is therefore different each time.

+			if ( typeof val === "number" ) {

+				val += "";

+			}

+

+			if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {

+				this.checked = jQuery.inArray( self.val(), val ) >= 0;

+

+			} else if ( jQuery.nodeName( this, "select" ) ) {

+				var values = jQuery.makeArray(val);

+

+				jQuery( "option", this ).each(function() {

+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;

+				});

+

+				if ( !values.length ) {

+					this.selectedIndex = -1;

+				}

+

+			} else {

+				this.value = val;

+			}

+		});

+	}

+});

+

+jQuery.extend({

+	attrFn: {

+		val: true,

+		css: true,

+		html: true,

+		text: true,

+		data: true,

+		width: true,

+		height: true,

+		offset: true

+	},

+		

+	attr: function( elem, name, value, pass ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		// don't set attributes on text and comment nodes

+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {

+			return undefined;

+		}

+

+		if ( pass && name in jQuery.attrFn ) {

+			return jQuery(elem)[name](value);

+		}

+

+		var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),

+			// Whether we are setting (or getting)

+			set = value !== undefined;

+

+		// Try to normalize/fix the name

+		name = notxml && jQuery.props[ name ] || name;

+

+		// Only do all the following if this is a node (faster for style)

+		if ( elem.nodeType === 1 ) {

+			// These attributes require special treatment

+			var special = rspecialurl.test( name );

+

+			// Safari mis-reports the default selected property of an option

+			// Accessing the parent's selectedIndex property fixes it

+			if ( name === "selected" && !jQuery.support.optSelected ) {

+				var parent = elem.parentNode;

+				if ( parent ) {

+					parent.selectedIndex;

+	

+					// Make sure that it also works with optgroups, see #5701

+					if ( parent.parentNode ) {

+						parent.parentNode.selectedIndex;

+					}

+				}

+			}

+

+			// If applicable, access the attribute via the DOM 0 way

+			if ( name in elem && notxml && !special ) {

+				if ( set ) {

+					// We can't allow the type property to be changed (since it causes problems in IE)

+					if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {

+						jQuery.error( "type property can't be changed" );

+					}

+

+					elem[ name ] = value;

+				}

+

+				// browsers index elements by id/name on forms, give priority to attributes.

+				if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {

+					return elem.getAttributeNode( name ).nodeValue;

+				}

+

+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set

+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/

+				if ( name === "tabIndex" ) {

+					var attributeNode = elem.getAttributeNode( "tabIndex" );

+

+					return attributeNode && attributeNode.specified ?

+						attributeNode.value :

+						rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?

+							0 :

+							undefined;

+				}

+

+				return elem[ name ];

+			}

+

+			if ( !jQuery.support.style && notxml && name === "style" ) {

+				if ( set ) {

+					elem.style.cssText = "" + value;

+				}

+

+				return elem.style.cssText;

+			}

+

+			if ( set ) {

+				// convert the value to a string (all browsers do this but IE) see #1070

+				elem.setAttribute( name, "" + value );

+			}

+

+			var attr = !jQuery.support.hrefNormalized && notxml && special ?

+					// Some attributes require a special call on IE

+					elem.getAttribute( name, 2 ) :

+					elem.getAttribute( name );

+

+			// Non-existent attributes return null, we normalize to undefined

+			return attr === null ? undefined : attr;

+		}

+

+		// elem is actually elem.style ... set the style

+		// Using attr for specific style information is now deprecated. Use style insead.

+		return jQuery.style( elem, name, value );

+	}

+});

+var fcleanup = function( nm ) {

+	return nm.replace(/[^\w\s\.\|`]/g, function( ch ) {

+		return "\\" + ch;

+	});

+};

+

+/*

+ * A number of helper functions used for managing events.

+ * Many of the ideas behind this code originated from

+ * Dean Edwards' addEvent library.

+ */

+jQuery.event = {

+

+	// Bind an event to an element

+	// Original by Dean Edwards

+	add: function( elem, types, handler, data ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {

+			return;

+		}

+

+		// For whatever reason, IE has trouble passing the window object

+		// around, causing it to be cloned in the process

+		if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) {

+			elem = window;

+		}

+

+		// Make sure that the function being executed has a unique ID

+		if ( !handler.guid ) {

+			handler.guid = jQuery.guid++;

+		}

+

+		// if data is passed, bind to handler

+		if ( data !== undefined ) {

+			// Create temporary function pointer to original handler

+			var fn = handler;

+

+			// Create unique handler function, wrapped around original handler

+			handler = jQuery.proxy( fn );

+

+			// Store data in unique handler

+			handler.data = data;

+		}

+

+		// Init the element's event structure

+		var events = jQuery.data( elem, "events" ) || jQuery.data( elem, "events", {} ),

+			handle = jQuery.data( elem, "handle" ), eventHandle;

+

+		if ( !handle ) {

+			eventHandle = function() {

+				// Handle the second event of a trigger and when

+				// an event is called after a page has unloaded

+				return typeof jQuery !== "undefined" && !jQuery.event.triggered ?

+					jQuery.event.handle.apply( eventHandle.elem, arguments ) :

+					undefined;

+			};

+

+			handle = jQuery.data( elem, "handle", eventHandle );

+		}

+

+		// If no handle is found then we must be trying to bind to one of the

+		// banned noData elements

+		if ( !handle ) {

+			return;

+		}

+

+		// Add elem as a property of the handle function

+		// This is to prevent a memory leak with non-native

+		// event in IE.

+		handle.elem = elem;

+

+		// Handle multiple events separated by a space

+		// jQuery(...).bind("mouseover mouseout", fn);

+		types = types.split( /\s+/ );

+

+		var type, i = 0;

+

+		while ( (type = types[ i++ ]) ) {

+			// Namespaced event handlers

+			var namespaces = type.split(".");

+			type = namespaces.shift();

+

+			if ( i > 1 ) {

+				handler = jQuery.proxy( handler );

+

+				if ( data !== undefined ) {

+					handler.data = data;

+				}

+			}

+

+			handler.type = namespaces.slice(0).sort().join(".");

+

+			// Get the current list of functions bound to this event

+			var handlers = events[ type ],

+				special = this.special[ type ] || {};

+

+			// Init the event handler queue

+			if ( !handlers ) {

+				handlers = events[ type ] = {};

+

+				// Check for a special event handler

+				// Only use addEventListener/attachEvent if the special

+				// events handler returns false

+				if ( !special.setup || special.setup.call( elem, data, namespaces, handler) === false ) {

+					// Bind the global event handler to the element

+					if ( elem.addEventListener ) {

+						elem.addEventListener( type, handle, false );

+					} else if ( elem.attachEvent ) {

+						elem.attachEvent( "on" + type, handle );

+					}

+				}

+			}

+			

+			if ( special.add ) { 

+				var modifiedHandler = special.add.call( elem, handler, data, namespaces, handlers ); 

+				if ( modifiedHandler && jQuery.isFunction( modifiedHandler ) ) { 

+					modifiedHandler.guid = modifiedHandler.guid || handler.guid; 

+					modifiedHandler.data = modifiedHandler.data || handler.data; 

+					modifiedHandler.type = modifiedHandler.type || handler.type; 

+					handler = modifiedHandler; 

+				} 

+			} 

+			

+			// Add the function to the element's handler list

+			handlers[ handler.guid ] = handler;

+

+			// Keep track of which events have been used, for global triggering

+			this.global[ type ] = true;

+		}

+

+		// Nullify elem to prevent memory leaks in IE

+		elem = null;

+	},

+

+	global: {},

+

+	// Detach an event or set of events from an element

+	remove: function( elem, types, handler ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		// don't do events on text and comment nodes

+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {

+			return;

+		}

+

+		var events = jQuery.data( elem, "events" ), ret, type, fn;

+

+		if ( events ) {

+			// Unbind all events for the element

+			if ( types === undefined || (typeof types === "string" && types.charAt(0) === ".") ) {

+				for ( type in events ) {

+					this.remove( elem, type + (types || "") );

+				}

+			} else {

+				// types is actually an event object here

+				if ( types.type ) {

+					handler = types.handler;

+					types = types.type;

+				}

+

+				// Handle multiple events separated by a space

+				// jQuery(...).unbind("mouseover mouseout", fn);

+				types = types.split(/\s+/);

+				var i = 0;

+				while ( (type = types[ i++ ]) ) {

+					// Namespaced event handlers

+					var namespaces = type.split(".");

+					type = namespaces.shift();

+					var all = !namespaces.length,

+						cleaned = jQuery.map( namespaces.slice(0).sort(), fcleanup ),

+						namespace = new RegExp("(^|\\.)" + cleaned.join("\\.(?:.*\\.)?") + "(\\.|$)"),

+						special = this.special[ type ] || {};

+

+					if ( events[ type ] ) {

+						// remove the given handler for the given type

+						if ( handler ) {

+							fn = events[ type ][ handler.guid ];

+							delete events[ type ][ handler.guid ];

+

+						// remove all handlers for the given type

+						} else {

+							for ( var handle in events[ type ] ) {

+								// Handle the removal of namespaced events

+								if ( all || namespace.test( events[ type ][ handle ].type ) ) {

+									delete events[ type ][ handle ];

+								}

+							}

+						}

+

+						if ( special.remove ) {

+							special.remove.call( elem, namespaces, fn);

+						}

+

+						// remove generic event handler if no more handlers exist

+						for ( ret in events[ type ] ) {

+							break;

+						}

+						if ( !ret ) {

+							if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {

+								if ( elem.removeEventListener ) {

+									elem.removeEventListener( type, jQuery.data( elem, "handle" ), false );

+								} else if ( elem.detachEvent ) {

+									elem.detachEvent( "on" + type, jQuery.data( elem, "handle" ) );

+								}

+							}

+							ret = null;

+							delete events[ type ];

+						}

+					}

+				}

+			}

+

+			// Remove the expando if it's no longer used

+			for ( ret in events ) {

+				break;

+			}

+			if ( !ret ) {

+				var handle = jQuery.data( elem, "handle" );

+				if ( handle ) {

+					handle.elem = null;

+				}

+				jQuery.removeData( elem, "events" );

+				jQuery.removeData( elem, "handle" );

+			}

+		}

+	},

+

+	// bubbling is internal

+	trigger: function( event, data, elem /*, bubbling */ ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		// Event object or event type

+		var type = event.type || event,

+			bubbling = arguments[3];

+

+		if ( !bubbling ) {

+			event = typeof event === "object" ?

+				// jQuery.Event object

+				event[expando] ? event :

+				// Object literal

+				jQuery.extend( jQuery.Event(type), event ) :

+				// Just the event type (string)

+				jQuery.Event(type);

+

+			if ( type.indexOf("!") >= 0 ) {

+				event.type = type = type.slice(0, -1);

+				event.exclusive = true;

+			}

+

+			// Handle a global trigger

+			if ( !elem ) {

+				// Don't bubble custom events when global (to avoid too much overhead)

+				event.stopPropagation();

+

+				// Only trigger if we've ever bound an event for it

+				if ( this.global[ type ] ) {

+					jQuery.each( jQuery.cache, function() {

+						if ( this.events && this.events[type] ) {

+							jQuery.event.trigger( event, data, this.handle.elem );

+						}

+					});

+				}

+			}

+

+			// Handle triggering a single element

+

+			// don't do events on text and comment nodes

+			if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {

+				return undefined;

+			}

+

+			// Clean up in case it is reused

+			event.result = undefined;

+			event.target = elem;

+

+			// Clone the incoming data, if any

+			data = jQuery.makeArray( data );

+			data.unshift( event );

+		}

+

+		event.currentTarget = elem;

+

+		// Trigger the event, it is assumed that "handle" is a function

+		var handle = jQuery.data( elem, "handle" );

+		if ( handle ) {

+			handle.apply( elem, data );

+		}

+

+		var parent = elem.parentNode || elem.ownerDocument;

+

+		// Trigger an inline bound script

+		try {

+			if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {

+				if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {

+					event.result = false;

+				}

+			}

+

+		// prevent IE from throwing an error for some elements with some event types, see #3533

+		} catch (e) {}

+

+		if ( !event.isPropagationStopped() && parent ) {

+			jQuery.event.trigger( event, data, parent, true );

+

+		} else if ( !event.isDefaultPrevented() ) {

+			var target = event.target, old,

+				isClick = jQuery.nodeName(target, "a") && type === "click";

+

+			if ( !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {

+				try {

+					if ( target[ type ] ) {

+						// Make sure that we don't accidentally re-trigger the onFOO events

+						old = target[ "on" + type ];

+

+						if ( old ) {

+							target[ "on" + type ] = null;

+						}

+

+						this.triggered = true;

+						target[ type ]();

+					}

+

+				// prevent IE from throwing an error for some elements with some event types, see #3533

+				} catch (e) {}

+

+				if ( old ) {

+					target[ "on" + type ] = old;

+				}

+

+				this.triggered = false;

+			}

+		}

+	},

+

+	handle: function( event ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		// returned undefined or false

+		var all, handlers;

+

+		event = arguments[0] = jQuery.event.fix( event || window.event );

+		event.currentTarget = this;

+

+		// Namespaced event handlers

+		var namespaces = event.type.split(".");

+		event.type = namespaces.shift();

+

+		// Cache this now, all = true means, any handler

+		all = !namespaces.length && !event.exclusive;

+

+		var namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");

+

+		handlers = ( jQuery.data(this, "events") || {} )[ event.type ];

+

+		for ( var j in handlers ) {

+			var handler = handlers[ j ];

+

+			// Filter the functions by class

+			if ( all || namespace.test(handler.type) ) {

+				// Pass in a reference to the handler function itself

+				// So that we can later remove it

+				event.handler = handler;

+				event.data = handler.data;

+

+				var ret = handler.apply( this, arguments );

+

+				if ( ret !== undefined ) {

+					event.result = ret;

+					if ( ret === false ) {

+						event.preventDefault();

+						event.stopPropagation();

+					}

+				}

+

+				if ( event.isImmediatePropagationStopped() ) {

+					break;

+				}

+

+			}

+		}

+

+		return event.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( event ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		if ( event[ expando ] ) {

+			return event;

+		}

+

+		// store a copy of the original event object

+		// and "clone" to set read-only properties

+		var originalEvent = event;

+		event = jQuery.Event( originalEvent );

+

+		for ( var i = this.props.length, prop; i; ) {

+			prop = this.props[ --i ];

+			event[ prop ] = originalEvent[ prop ];

+		}

+

+		// Fix target property, if necessary

+		if ( !event.target ) {

+			event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either

+		}

+

+		// check if target is a textnode (safari)

+		if ( event.target.nodeType === 3 ) {

+			event.target = event.target.parentNode;

+		}

+

+		// Add relatedTarget, if necessary

+		if ( !event.relatedTarget && event.fromElement ) {

+			event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;

+		}

+

+		// Calculate pageX/Y if missing and clientX/Y available

+		if ( event.pageX == null && event.clientX != null ) {

+			var doc = document.documentElement, body = document.body;

+			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);

+			event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);

+		}

+

+		// Add which for key events

+		if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {

+			event.which = event.charCode || event.keyCode;

+		}

+

+		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)

+		if ( !event.metaKey && event.ctrlKey ) {

+			event.metaKey = event.ctrlKey;

+		}

+

+		// Add which for click: 1 === left; 2 === middle; 3 === right

+		// Note: button is not normalized, so don't use it

+		if ( !event.which && event.button !== undefined ) {

+			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));

+		}

+

+		return event;

+	},

+

+	// Deprecated, use jQuery.guid instead

+	guid: 1E8,

+

+	// Deprecated, use jQuery.proxy instead

+	proxy: jQuery.proxy,

+

+	special: {

+		ready: {

+			// Make sure the ready event is setup

+			setup: jQuery.bindReady,

+			teardown: jQuery.noop

+		},

+

+		live: {

+			add: function( proxy, data, namespaces, live ) {

+				jQuery.extend( proxy, data || {} );

+

+				proxy.guid += data.selector + data.live; 

+				data.liveProxy = proxy;

+

+				jQuery.event.add( this, data.live, liveHandler, data ); 

+				

+			},

+

+			remove: function( namespaces ) {

+				if ( namespaces.length ) {

+					var remove = 0, name = new RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)");

+

+					jQuery.each( (jQuery.data(this, "events").live || {}), function() {

+						if ( name.test(this.type) ) {

+							remove++;

+						}

+					});

+

+					if ( remove < 1 ) {

+						jQuery.event.remove( this, namespaces[0], liveHandler );

+					}

+				}

+			},

+			special: {}

+		},

+		beforeunload: {

+			setup: function( data, namespaces, fn ) {

+				// We only want to do this special case on windows

+				if ( this.setInterval ) {

+					this.onbeforeunload = fn;

+				}

+

+				return false;

+			},

+			teardown: function( namespaces, fn ) {

+				if ( this.onbeforeunload === fn ) {

+					this.onbeforeunload = null;

+				}

+			}

+		}

+	}

+};

+

+jQuery.Event = function( src ) {

+	// Allow instantiation without the 'new' keyword

+	if ( !this.preventDefault ) {

+		return new jQuery.Event( src );

+	}

+

+	// Event object

+	if ( src && src.type ) {

+		this.originalEvent = src;

+		this.type = src.type;

+	// Event type

+	} else {

+		this.type = src;

+	}

+

+	// timeStamp is buggy for some events on Firefox(#3843)

+	// So we won't rely on the native value

+	this.timeStamp = now();

+

+	// Mark it as fixed

+	this[ expando ] = true;

+};

+

+function returnFalse() {

+	return false;

+}

+function returnTrue() {

+	return true;

+}

+

+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding

+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html

+jQuery.Event.prototype = {

+	preventDefault: function() {

+		this.isDefaultPrevented = returnTrue;

+

+		var e = this.originalEvent;

+		if ( !e ) {

+			return;

+		}

+		

+		// if preventDefault exists run it on the original event

+		if ( e.preventDefault ) {

+			e.preventDefault();

+		}

+		// otherwise set the returnValue property of the original event to false (IE)

+		e.returnValue = false;

+	},

+	stopPropagation: function() {

+		this.isPropagationStopped = returnTrue;

+

+		var e = this.originalEvent;

+		if ( !e ) {

+			return;

+		}

+		// if stopPropagation exists run it on the original event

+		if ( e.stopPropagation ) {

+			e.stopPropagation();

+		}

+		// otherwise set the cancelBubble property of the original event to true (IE)

+		e.cancelBubble = true;

+	},

+	stopImmediatePropagation: function() {

+		this.isImmediatePropagationStopped = returnTrue;

+		this.stopPropagation();

+	},

+	isDefaultPrevented: returnFalse,

+	isPropagationStopped: returnFalse,

+	isImmediatePropagationStopped: returnFalse

+};

+

+// Checks if an event happened on an element within another element

+// Used in jQuery.event.special.mouseenter and mouseleave handlers

+var withinElement = function( event ) {

+	// Check if mouse(over|out) are still within the same parent element

+	var parent = event.relatedTarget;

+

+	// Traverse up the tree

+	while ( parent && parent !== this ) {

+		// Firefox sometimes assigns relatedTarget a XUL element

+		// which we cannot access the parentNode property of

+		try {

+			parent = parent.parentNode;

+

+		// assuming we've left the element since we most likely mousedover a xul element

+		} catch(e) {

+			break;

+		}

+	}

+

+	if ( parent !== this ) {

+		// set the correct event type

+		event.type = event.data;

+

+		// handle event if we actually just moused on to a non sub-element

+		jQuery.event.handle.apply( this, arguments );

+	}

+

+},

+

+// In case of event delegation, we only need to rename the event.type,

+// liveHandler will take care of the rest.

+delegate = function( event ) {

+	event.type = event.data;

+	jQuery.event.handle.apply( this, arguments );

+};

+

+// Create mouseenter and mouseleave events

+jQuery.each({

+	mouseenter: "mouseover",

+	mouseleave: "mouseout"

+}, function( orig, fix ) {

+	jQuery.event.special[ orig ] = {

+		setup: function( data ) {

+			jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );

+		},

+		teardown: function( data ) {

+			jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );

+		}

+	};

+});

+

+// submit delegation

+if ( !jQuery.support.submitBubbles ) {

+

+jQuery.event.special.submit = {

+	setup: function( data, namespaces, fn ) {

+		if ( this.nodeName.toLowerCase() !== "form" ) {

+			jQuery.event.add(this, "click.specialSubmit." + fn.guid, function( e ) {

+				var elem = e.target, type = elem.type;

+

+				if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {

+					return trigger( "submit", this, arguments );

+				}

+			});

+	 

+			jQuery.event.add(this, "keypress.specialSubmit." + fn.guid, function( e ) {

+				var elem = e.target, type = elem.type;

+

+				if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {

+					return trigger( "submit", this, arguments );

+				}

+			});

+

+		} else {

+			return false;

+		}

+	},

+

+	remove: function( namespaces, fn ) {

+		jQuery.event.remove( this, "click.specialSubmit" + (fn ? "."+fn.guid : "") );

+		jQuery.event.remove( this, "keypress.specialSubmit" + (fn ? "."+fn.guid : "") );

+	}

+};

+

+}

+

+// change delegation, happens here so we have bind.

+if ( !jQuery.support.changeBubbles ) {

+

+var formElems = /textarea|input|select/i;

+

+function getVal( elem ) {

+	var type = elem.type, val = elem.value;

+

+	if ( type === "radio" || type === "checkbox" ) {

+		val = elem.checked;

+

+	} else if ( type === "select-multiple" ) {

+		val = elem.selectedIndex > -1 ?

+			jQuery.map( elem.options, function( elem ) {

+				return elem.selected;

+			}).join("-") :

+			"";

+

+	} else if ( elem.nodeName.toLowerCase() === "select" ) {

+		val = elem.selectedIndex;

+	}

+

+	return val;

+}

+

+function testChange( e ) {

+		var elem = e.target, data, val;

+

+		if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {

+			return;

+		}

+

+		data = jQuery.data( elem, "_change_data" );

+		val = getVal(elem);

+

+		// the current data will be also retrieved by beforeactivate

+		if ( e.type !== "focusout" || elem.type !== "radio" ) {

+			jQuery.data( elem, "_change_data", val );

+		}

+		

+		if ( data === undefined || val === data ) {

+			return;

+		}

+

+		if ( data != null || val ) {

+			e.type = "change";

+			return jQuery.event.trigger( e, arguments[1], elem );

+		}

+}

+

+jQuery.event.special.change = {

+	filters: {

+		focusout: testChange, 

+

+		click: function( e ) {

+			var elem = e.target, type = elem.type;

+

+			if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {

+				return testChange.call( this, e );

+			}

+		},

+

+		// Change has to be called before submit

+		// Keydown will be called before keypress, which is used in submit-event delegation

+		keydown: function( e ) {

+			var elem = e.target, type = elem.type;

+

+			if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||

+				(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||

+				type === "select-multiple" ) {

+				return testChange.call( this, e );

+			}

+		},

+

+		// Beforeactivate happens also before the previous element is blurred

+		// with this event you can't trigger a change event, but you can store

+		// information/focus[in] is not needed anymore

+		beforeactivate: function( e ) {

+			var elem = e.target;

+

+			if ( elem.nodeName.toLowerCase() === "input" && elem.type === "radio" ) {

+				jQuery.data( elem, "_change_data", getVal(elem) );

+			}

+		}

+	},

+	setup: function( data, namespaces, fn ) {

+		for ( var type in changeFilters ) {

+			jQuery.event.add( this, type + ".specialChange." + fn.guid, changeFilters[type] );

+		}

+

+		return formElems.test( this.nodeName );

+	},

+	remove: function( namespaces, fn ) {

+		for ( var type in changeFilters ) {

+			jQuery.event.remove( this, type + ".specialChange" + (fn ? "."+fn.guid : ""), changeFilters[type] );

+		}

+

+		return formElems.test( this.nodeName );

+	}

+};

+

+var changeFilters = jQuery.event.special.change.filters;

+

+}

+

+function trigger( type, elem, args ) {

+	args[0].type = type;

+	return jQuery.event.handle.apply( elem, args );

+}

+

+// Create "bubbling" focus and blur events

+if ( document.addEventListener ) {

+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {

+		jQuery.event.special[ fix ] = {

+			setup: function() {

+				///	<summary>

+				///		This method is internal.

+				///	</summary>

+				///	<private />

+

+				this.addEventListener( orig, handler, true );

+			}, 

+			teardown: function() { 

+				///	<summary>

+				///		This method is internal.

+				///	</summary>

+				///	<private />

+

+				this.removeEventListener( orig, handler, true );

+			}

+		};

+

+		function handler( e ) { 

+			e = jQuery.event.fix( e );

+			e.type = fix;

+			return jQuery.event.handle.call( this, e );

+		}

+	});

+}

+

+//	jQuery.each(["bind", "one"], function( i, name ) {

+//		jQuery.fn[ name ] = function( type, data, fn ) {

+//			// Handle object literals

+//			if ( typeof type === "object" ) {

+//				for ( var key in type ) {

+//					this[ name ](key, data, type[key], fn);

+//				}

+//				return this;

+//			}

+//			

+//			if ( jQuery.isFunction( data ) ) {

+//				fn = data;

+//				data = undefined;

+//			}

+//

+//			var handler = name === "one" ? jQuery.proxy( fn, function( event ) {

+//				jQuery( this ).unbind( event, handler );

+//				return fn.apply( this, arguments );

+//			}) : fn;

+//

+//			return type === "unload" && name !== "one" ?

+//				this.one( type, data, fn ) :

+//				this.each(function() {

+//					jQuery.event.add( this, type, handler, data );

+//				});

+//		};

+//	});

+

+jQuery.fn[ "bind" ] = function( type, data, fn ) {

+	///	<summary>

+	///		Binds a handler to one or more events for each matched element.  Can also bind custom events.

+	///	</summary>

+	///	<param name="type" type="String">One or more event types separated by a space.  Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error .</param>

+	///	<param name="data" optional="true" type="Object">Additional data passed to the event handler as event.data</param>

+	///	<param name="fn" type="Function">A function to bind to the event on each of the set of matched elements.  function callback(eventObject) such that this corresponds to the dom element.</param>

+

+	// Handle object literals

+	if ( typeof type === "object" ) {

+		for ( var key in type ) {

+			this[ "bind" ](key, data, type[key], fn);

+		}

+		return this;

+	}

+	

+	if ( jQuery.isFunction( data ) ) {

+		fn = data;

+		data = undefined;

+	}

+

+	var handler = "bind" === "one" ? jQuery.proxy( fn, function( event ) {

+		jQuery( this ).unbind( event, handler );

+		return fn.apply( this, arguments );

+	}) : fn;

+

+	return type === "unload" && "bind" !== "one" ?

+		this.one( type, data, fn ) :

+		this.each(function() {

+			jQuery.event.add( this, type, handler, data );

+		});

+};

+

+jQuery.fn[ "one" ] = function( type, data, fn ) {

+	///	<summary>

+	///		Binds a handler to one or more events to be executed exactly once for each matched element.

+	///	</summary>

+	///	<param name="type" type="String">One or more event types separated by a space.  Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error .</param>

+	///	<param name="data" optional="true" type="Object">Additional data passed to the event handler as event.data</param>

+	///	<param name="fn" type="Function">A function to bind to the event on each of the set of matched elements.  function callback(eventObject) such that this corresponds to the dom element.</param>

+

+	// Handle object literals

+	if ( typeof type === "object" ) {

+		for ( var key in type ) {

+			this[ "one" ](key, data, type[key], fn);

+		}

+		return this;

+	}

+	

+	if ( jQuery.isFunction( data ) ) {

+		fn = data;

+		data = undefined;

+	}

+

+	var handler = "one" === "one" ? jQuery.proxy( fn, function( event ) {

+		jQuery( this ).unbind( event, handler );

+		return fn.apply( this, arguments );

+	}) : fn;

+

+	return type === "unload" && "one" !== "one" ?

+		this.one( type, data, fn ) :

+		this.each(function() {

+			jQuery.event.add( this, type, handler, data );

+		});

+};

+

+jQuery.fn.extend({

+	unbind: function( type, fn ) {

+		///	<summary>

+		///		Unbinds a handler from one or more events for each matched element.

+		///	</summary>

+		///	<param name="type" type="String">One or more event types separated by a space.  Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error .</param>

+		///	<param name="fn" type="Function">A function to bind to the event on each of the set of matched elements.  function callback(eventObject) such that this corresponds to the dom element.</param>

+

+		// Handle object literals

+		if ( typeof type === "object" && !type.preventDefault ) {

+			for ( var key in type ) {

+				this.unbind(key, type[key]);

+			}

+			return this;

+		}

+

+		return this.each(function() {

+			jQuery.event.remove( this, type, fn );

+		});

+	},

+	trigger: function( type, data ) {

+		///	<summary>

+		///		Triggers a type of event on every matched element.

+		///	</summary>

+		///	<param name="type" type="String">One or more event types separated by a space.  Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error .</param>

+		///	<param name="data" optional="true" type="Array">Additional data passed to the event handler as additional arguments.</param>

+		///	<param name="fn" type="Function">This parameter is undocumented.</param>

+

+		return this.each(function() {

+			jQuery.event.trigger( type, data, this );

+		});

+	},

+

+	triggerHandler: function( type, data ) {

+		///	<summary>

+		///		Triggers all bound event handlers on an element for a specific event type without executing the browser's default actions.

+		///	</summary>

+		///	<param name="type" type="String">One or more event types separated by a space.  Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error .</param>

+		///	<param name="data" optional="true" type="Array">Additional data passed to the event handler as additional arguments.</param>

+		///	<param name="fn" type="Function">This parameter is undocumented.</param>

+

+		if ( this[0] ) {

+			var event = jQuery.Event( type );

+			event.preventDefault();

+			event.stopPropagation();

+			jQuery.event.trigger( event, data, this[0] );

+			return event.result;

+		}

+	},

+

+	toggle: function( fn ) {

+		///	<summary>

+		///		Toggles among two or more function calls every other click.

+		///	</summary>

+		///	<param name="fn" type="Function">The functions among which to toggle execution</param>

+

+		// Save reference to arguments for access in closure

+		var args = arguments, i = 1;

+

+		// link all the functions, so any of them can unbind this click handler

+		while ( i < args.length ) {

+			jQuery.proxy( fn, args[ i++ ] );

+		}

+

+		return this.click( jQuery.proxy( fn, function( event ) {

+			// Figure out which function to execute

+			var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;

+			jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );

+

+			// Make sure that clicks stop

+			event.preventDefault();

+

+			// and execute the function

+			return args[ lastToggle ].apply( this, arguments ) || false;

+		}));

+	},

+

+	hover: function( fnOver, fnOut ) {

+		///	<summary>

+		///		Simulates hovering (moving the mouse on or off of an object).

+		///	</summary>

+		///	<param name="fnOver" type="Function">The function to fire when the mouse is moved over a matched element.</param>

+		///	<param name="fnOut" type="Function">The function to fire when the mouse is moved off of a matched element.</param>

+

+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );

+	}

+});

+

+//	jQuery.each(["live", "die"], function( i, name ) {

+//		jQuery.fn[ name ] = function( types, data, fn ) {

+//			var type, i = 0;

+//

+//			if ( jQuery.isFunction( data ) ) {

+//				fn = data;

+//				data = undefined;

+//			}

+//

+//			types = (types || "").split( /\s+/ );

+//

+//			while ( (type = types[ i++ ]) != null ) {

+//				type = type === "focus" ? "focusin" : // focus --> focusin

+//						type === "blur" ? "focusout" : // blur --> focusout

+//						type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support

+//						type;

+//				

+//				if ( name === "live" ) {

+//					// bind live handler

+//					jQuery( this.context ).bind( liveConvert( type, this.selector ), {

+//						data: data, selector: this.selector, live: type

+//					}, fn );

+//

+//				} else {

+//					// unbind live handler

+//					jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null );

+//				}

+//			}

+//			

+//			return this;

+//		}

+//	});

+

+jQuery.fn[ "live" ] = function( types, data, fn ) {

+	///	<summary>

+	///		Attach a handler to the event for all elements which match the current selector, now or

+	///		in the future.

+	///	</summary>

+	///	<param name="types" type="String">

+	///		A string containing a JavaScript event type, such as "click" or "keydown".

+	///	</param>

+	///	<param name="data" type="Object">

+	///		A map of data that will be passed to the event handler.

+	///	</param>

+	///	<param name="fn" type="Function">

+	///		A function to execute at the time the event is triggered.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var type, i = 0;

+

+	if ( jQuery.isFunction( data ) ) {

+		fn = data;

+		data = undefined;

+	}

+

+	types = (types || "").split( /\s+/ );

+

+	while ( (type = types[ i++ ]) != null ) {

+		type = type === "focus" ? "focusin" : // focus --> focusin

+				type === "blur" ? "focusout" : // blur --> focusout

+				type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support

+				type;

+		

+		if ( "live" === "live" ) {

+			// bind live handler

+			jQuery( this.context ).bind( liveConvert( type, this.selector ), {

+				data: data, selector: this.selector, live: type

+			}, fn );

+

+		} else {

+			// unbind live handler

+			jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null );

+		}

+	}

+	

+	return this;

+}

+

+jQuery.fn[ "die" ] = function( types, data, fn ) {

+	///	<summary>

+	///		Remove all event handlers previously attached using .live() from the elements.

+	///	</summary>

+	///	<param name="types" type="String">

+	///		A string containing a JavaScript event type, such as click or keydown.

+	///	</param>

+	///	<param name="data" type="Object">

+	///		The function that is to be no longer executed.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var type, i = 0;

+

+	if ( jQuery.isFunction( data ) ) {

+		fn = data;

+		data = undefined;

+	}

+

+	types = (types || "").split( /\s+/ );

+

+	while ( (type = types[ i++ ]) != null ) {

+		type = type === "focus" ? "focusin" : // focus --> focusin

+				type === "blur" ? "focusout" : // blur --> focusout

+				type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support

+				type;

+		

+		if ( "die" === "live" ) {

+			// bind live handler

+			jQuery( this.context ).bind( liveConvert( type, this.selector ), {

+				data: data, selector: this.selector, live: type

+			}, fn );

+

+		} else {

+			// unbind live handler

+			jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null );

+		}

+	}

+	

+	return this;

+}

+

+function liveHandler( event ) {

+	var stop, elems = [], selectors = [], args = arguments,

+		related, match, fn, elem, j, i, l, data,

+		live = jQuery.extend({}, jQuery.data( this, "events" ).live);

+

+	// Make sure we avoid non-left-click bubbling in Firefox (#3861)

+	if ( event.button && event.type === "click" ) {

+		return;

+	}

+

+	for ( j in live ) {

+		fn = live[j];

+		if ( fn.live === event.type ||

+				fn.altLive && jQuery.inArray(event.type, fn.altLive) > -1 ) {

+

+			data = fn.data;

+			if ( !(data.beforeFilter && data.beforeFilter[event.type] && 

+					!data.beforeFilter[event.type](event)) ) {

+				selectors.push( fn.selector );

+			}

+		} else {

+			delete live[j];

+		}

+	}

+

+	match = jQuery( event.target ).closest( selectors, event.currentTarget );

+

+	for ( i = 0, l = match.length; i < l; i++ ) {

+		for ( j in live ) {

+			fn = live[j];

+			elem = match[i].elem;

+			related = null;

+

+			if ( match[i].selector === fn.selector ) {

+				// Those two events require additional checking

+				if ( fn.live === "mouseenter" || fn.live === "mouseleave" ) {

+					related = jQuery( event.relatedTarget ).closest( fn.selector )[0];

+				}

+

+				if ( !related || related !== elem ) {

+					elems.push({ elem: elem, fn: fn });

+				}

+			}

+		}

+	}

+

+	for ( i = 0, l = elems.length; i < l; i++ ) {

+		match = elems[i];

+		event.currentTarget = match.elem;

+		event.data = match.fn.data;

+		if ( match.fn.apply( match.elem, args ) === false ) {

+			stop = false;

+			break;

+		}

+	}

+

+	return stop;

+}

+

+function liveConvert( type, selector ) {

+	return "live." + (type ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");

+}

+

+//	jQuery.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( i, name ) {

+//

+//		// Handle event binding

+//		jQuery.fn[ name ] = function( fn ) {

+//			return fn ? this.bind( name, fn ) : this.trigger( name );

+//		};

+//

+//		if ( jQuery.attrFn ) {

+//			jQuery.attrFn[ name ] = true;

+//		}

+//	});

+

+jQuery.fn[ "blur" ] = function( fn ) {

+	///	<summary>

+	///		1: blur() - Triggers the blur event of each matched element.

+	///		2: blur(fn) - Binds a function to the blur event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "blur", fn ) : this.trigger( "blur" );

+};

+

+jQuery.fn[ "focus" ] = function( fn ) {

+	///	<summary>

+	///		1: focus() - Triggers the focus event of each matched element.

+	///		2: focus(fn) - Binds a function to the focus event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "focus", fn ) : this.trigger( "focus" );

+};

+

+jQuery.fn[ "focusin" ] = function( fn ) {

+		///	<summary>

+		///		Bind an event handler to the "focusin" JavaScript event.

+		///	</summary>

+		///	<param name="fn" type="Function">

+		///		A function to execute each time the event is triggered.

+		///	</param>

+		///	<returns type="jQuery" />

+

+	return fn ? this.bind( "focusin", fn ) : this.trigger( "focusin" );

+};

+

+jQuery.fn[ "focusout" ] = function( fn ) {

+		///	<summary>

+		///		Bind an event handler to the "focusout" JavaScript event.

+		///	</summary>

+		///	<param name="fn" type="Function">

+		///		A function to execute each time the event is triggered.

+		///	</param>

+		///	<returns type="jQuery" />

+

+	return fn ? this.bind( "focusout", fn ) : this.trigger( "focusout" );

+};

+

+jQuery.fn[ "load" ] = function( fn ) {

+	///	<summary>

+	///		1: load() - Triggers the load event of each matched element.

+	///		2: load(fn) - Binds a function to the load event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "load", fn ) : this.trigger( "load" );

+};

+

+jQuery.fn[ "resize" ] = function( fn ) {

+	///	<summary>

+	///		1: resize() - Triggers the resize event of each matched element.

+	///		2: resize(fn) - Binds a function to the resize event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "resize", fn ) : this.trigger( "resize" );

+};

+

+jQuery.fn[ "scroll" ] = function( fn ) {

+	///	<summary>

+	///		1: scroll() - Triggers the scroll event of each matched element.

+	///		2: scroll(fn) - Binds a function to the scroll event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "scroll", fn ) : this.trigger( "scroll" );

+};

+

+jQuery.fn[ "unload" ] = function( fn ) {

+	///	<summary>

+	///		1: unload() - Triggers the unload event of each matched element.

+	///		2: unload(fn) - Binds a function to the unload event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "unload", fn ) : this.trigger( "unload" );

+};

+

+jQuery.fn[ "click" ] = function( fn ) {

+	///	<summary>

+	///		1: click() - Triggers the click event of each matched element.

+	///		2: click(fn) - Binds a function to the click event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "click", fn ) : this.trigger( "click" );

+};

+

+jQuery.fn[ "dblclick" ] = function( fn ) {

+	///	<summary>

+	///		1: dblclick() - Triggers the dblclick event of each matched element.

+	///		2: dblclick(fn) - Binds a function to the dblclick event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "dblclick", fn ) : this.trigger( "dblclick" );

+};

+

+jQuery.fn[ "mousedown" ] = function( fn ) {

+	///	<summary>

+	///		Binds a function to the mousedown event of each matched element. 

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "mousedown", fn ) : this.trigger( "mousedown" );

+};

+

+jQuery.fn[ "mouseup" ] = function( fn ) {

+	///	<summary>

+	///		Bind a function to the mouseup event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "mouseup", fn ) : this.trigger( "mouseup" );

+};

+

+jQuery.fn[ "mousemove" ] = function( fn ) {

+	///	<summary>

+	///		Bind a function to the mousemove event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "mousemove", fn ) : this.trigger( "mousemove" );

+};

+

+jQuery.fn[ "mouseover" ] = function( fn ) {

+	///	<summary>

+	///		Bind a function to the mouseover event of each matched element. 

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "mouseover", fn ) : this.trigger( "mouseover" );

+};

+

+jQuery.fn[ "mouseout" ] = function( fn ) {

+	///	<summary>

+	///		Bind a function to the mouseout event of each matched element. 

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "mouseout", fn ) : this.trigger( "mouseout" );

+};

+

+jQuery.fn[ "mouseenter" ] = function( fn ) {

+	///	<summary>

+	///		Bind a function to the mouseenter event of each matched element. 

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "mouseenter", fn ) : this.trigger( "mouseenter" );

+};

+

+jQuery.fn[ "mouseleave" ] = function( fn ) {

+	///	<summary>

+	///		Bind a function to the mouseleave event of each matched element. 

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "mouseleave", fn ) : this.trigger( "mouseleave" );

+};

+

+jQuery.fn[ "change" ] = function( fn ) {

+	///	<summary>

+	///		1: change() - Triggers the change event of each matched element.

+	///		2: change(fn) - Binds a function to the change event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "change", fn ) : this.trigger( "change" );

+};

+

+jQuery.fn[ "select" ] = function( fn ) {

+	///	<summary>

+	///		1: select() - Triggers the select event of each matched element.

+	///		2: select(fn) - Binds a function to the select event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "select", fn ) : this.trigger( "select" );

+};

+

+jQuery.fn[ "submit" ] = function( fn ) {

+	///	<summary>

+	///		1: submit() - Triggers the submit event of each matched element.

+	///		2: submit(fn) - Binds a function to the submit event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "submit", fn ) : this.trigger( "submit" );

+};

+

+jQuery.fn[ "keydown" ] = function( fn ) {

+	///	<summary>

+	///		1: keydown() - Triggers the keydown event of each matched element.

+	///		2: keydown(fn) - Binds a function to the keydown event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "keydown", fn ) : this.trigger( "keydown" );

+};

+

+jQuery.fn[ "keypress" ] = function( fn ) {

+	///	<summary>

+	///		1: keypress() - Triggers the keypress event of each matched element.

+	///		2: keypress(fn) - Binds a function to the keypress event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "keypress", fn ) : this.trigger( "keypress" );

+};

+

+jQuery.fn[ "keyup" ] = function( fn ) {

+	///	<summary>

+	///		1: keyup() - Triggers the keyup event of each matched element.

+	///		2: keyup(fn) - Binds a function to the keyup event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "keyup", fn ) : this.trigger( "keyup" );

+};

+

+jQuery.fn[ "error" ] = function( fn ) {

+	///	<summary>

+	///		1: error() - Triggers the error event of each matched element.

+	///		2: error(fn) - Binds a function to the error event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "error", fn ) : this.trigger( "error" );

+};

+

+// Prevent memory leaks in IE

+// Window isn't included so as not to unbind existing unload events

+// More info:

+//  - http://isaacschlueter.com/2006/10/msie-memory-leaks/

+if ( window.attachEvent && !window.addEventListener ) {

+	window.attachEvent("onunload", function() {

+		for ( var id in jQuery.cache ) {

+			if ( jQuery.cache[ id ].handle ) {

+				// Try/Catch is to handle iframes being unloaded, see #4280

+				try {

+					jQuery.event.remove( jQuery.cache[ id ].handle.elem );

+				} catch(e) {}

+			}

+		}

+	});

+}

+/*!

+ * Sizzle CSS Selector Engine - v1.0

+ *  Copyright 2009, The Dojo Foundation

+ *  Released under the MIT, BSD, and GPL Licenses.

+ *  More information: http://sizzlejs.com/

+ */

+(function(){

+

+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,

+	done = 0,

+	toString = Object.prototype.toString,

+	hasDuplicate = false,

+	baseHasDuplicate = true;

+

+// Here we check if the JavaScript engine is using some sort of

+// optimization where it does not always call our comparision

+// function. If that is the case, discard the hasDuplicate value.

+//   Thus far that includes Google Chrome.

+[0, 0].sort(function(){

+	baseHasDuplicate = false;

+	return 0;

+});

+

+var Sizzle = function(selector, context, results, seed) {

+	results = results || [];

+	var origContext = context = context || document;

+

+	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {

+		return [];

+	}

+	

+	if ( !selector || typeof selector !== "string" ) {

+		return results;

+	}

+

+	var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context),

+		soFar = selector;

+	

+	// Reset the position of the chunker regexp (start from head)

+	while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {

+		soFar = m[3];

+		

+		parts.push( m[1] );

+		

+		if ( m[2] ) {

+			extra = m[3];

+			break;

+		}

+	}

+

+	if ( parts.length > 1 && origPOS.exec( selector ) ) {

+		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {

+			set = posProcess( parts[0] + parts[1], context );

+		} else {

+			set = Expr.relative[ parts[0] ] ?

+				[ context ] :

+				Sizzle( parts.shift(), context );

+

+			while ( parts.length ) {

+				selector = parts.shift();

+

+				if ( Expr.relative[ selector ] ) {

+					selector += parts.shift();

+				}

+				

+				set = posProcess( selector, set );

+			}

+		}

+	} else {

+		// Take a shortcut and set the context if the root selector is an ID

+		// (but not if it'll be faster if the inner selector is an ID)

+		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&

+				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {

+			var ret = Sizzle.find( parts.shift(), context, contextXML );

+			context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];

+		}

+

+		if ( context ) {

+			var ret = seed ?

+				{ expr: parts.pop(), set: makeArray(seed) } :

+				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );

+			set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;

+

+			if ( parts.length > 0 ) {

+				checkSet = makeArray(set);

+			} else {

+				prune = false;

+			}

+

+			while ( parts.length ) {

+				var cur = parts.pop(), pop = cur;

+

+				if ( !Expr.relative[ cur ] ) {

+					cur = "";

+				} else {

+					pop = parts.pop();

+				}

+

+				if ( pop == null ) {

+					pop = context;

+				}

+

+				Expr.relative[ cur ]( checkSet, pop, contextXML );

+			}

+		} else {

+			checkSet = parts = [];

+		}

+	}

+

+	if ( !checkSet ) {

+		checkSet = set;

+	}

+

+	if ( !checkSet ) {

+		Sizzle.error( cur || selector );

+	}

+

+	if ( toString.call(checkSet) === "[object Array]" ) {

+		if ( !prune ) {

+			results.push.apply( results, checkSet );

+		} else if ( context && context.nodeType === 1 ) {

+			for ( var i = 0; checkSet[i] != null; i++ ) {

+				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {

+					results.push( set[i] );

+				}

+			}

+		} else {

+			for ( var i = 0; checkSet[i] != null; i++ ) {

+				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {

+					results.push( set[i] );

+				}

+			}

+		}

+	} else {

+		makeArray( checkSet, results );

+	}

+

+	if ( extra ) {

+		Sizzle( extra, origContext, results, seed );

+		Sizzle.uniqueSort( results );

+	}

+

+	return results;

+};

+

+Sizzle.uniqueSort = function(results){

+	///	<summary>

+	///		Removes all duplicate elements from an array of elements.

+	///	</summary>

+	///	<param name="array" type="Array&lt;Element&gt;">The array to translate</param>

+	///	<returns type="Array&lt;Element&gt;">The array after translation.</returns>

+

+	if ( sortOrder ) {

+		hasDuplicate = baseHasDuplicate;

+		results.sort(sortOrder);

+

+		if ( hasDuplicate ) {

+			for ( var i = 1; i < results.length; i++ ) {

+				if ( results[i] === results[i-1] ) {

+					results.splice(i--, 1);

+				}

+			}

+		}

+	}

+

+	return results;

+};

+

+Sizzle.matches = function(expr, set){

+	return Sizzle(expr, null, null, set);

+};

+

+Sizzle.find = function(expr, context, isXML){

+	var set, match;

+

+	if ( !expr ) {

+		return [];

+	}

+

+	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {

+		var type = Expr.order[i], match;

+		

+		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {

+			var left = match[1];

+			match.splice(1,1);

+

+			if ( left.substr( left.length - 1 ) !== "\\" ) {

+				match[1] = (match[1] || "").replace(/\\/g, "");

+				set = Expr.find[ type ]( match, context, isXML );

+				if ( set != null ) {

+					expr = expr.replace( Expr.match[ type ], "" );

+					break;

+				}

+			}

+		}

+	}

+

+	if ( !set ) {

+		set = context.getElementsByTagName("*");

+	}

+

+	return {set: set, expr: expr};

+};

+

+Sizzle.filter = function(expr, set, inplace, not){

+	var old = expr, result = [], curLoop = set, match, anyFound,

+		isXMLFilter = set && set[0] && isXML(set[0]);

+

+	while ( expr && set.length ) {

+		for ( var type in Expr.filter ) {

+			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {

+				var filter = Expr.filter[ type ], found, item, left = match[1];

+				anyFound = false;

+

+				match.splice(1,1);

+

+				if ( left.substr( left.length - 1 ) === "\\" ) {

+					continue;

+				}

+

+				if ( curLoop === result ) {

+					result = [];

+				}

+

+				if ( Expr.preFilter[ type ] ) {

+					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );

+

+					if ( !match ) {

+						anyFound = found = true;

+					} else if ( match === true ) {

+						continue;

+					}

+				}

+

+				if ( match ) {

+					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {

+						if ( item ) {

+							found = filter( item, match, i, curLoop );

+							var pass = not ^ !!found;

+

+							if ( inplace && found != null ) {

+								if ( pass ) {

+									anyFound = true;

+								} else {

+									curLoop[i] = false;

+								}

+							} else if ( pass ) {

+								result.push( item );

+								anyFound = true;

+							}

+						}

+					}

+				}

+

+				if ( found !== undefined ) {

+					if ( !inplace ) {

+						curLoop = result;

+					}

+

+					expr = expr.replace( Expr.match[ type ], "" );

+

+					if ( !anyFound ) {

+						return [];

+					}

+

+					break;

+				}

+			}

+		}

+

+		// Improper expression

+		if ( expr === old ) {

+			if ( anyFound == null ) {

+				Sizzle.error( expr );

+			} else {

+				break;

+			}

+		}

+

+		old = expr;

+	}

+

+	return curLoop;

+};

+

+Sizzle.error = function( msg ) {

+	throw "Syntax error, unrecognized expression: " + msg;

+};

+

+var Expr = Sizzle.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(elem){

+			return elem.getAttribute("href");

+		}

+	},

+	relative: {

+		"+": function(checkSet, part){

+			var isPartStr = typeof part === "string",

+				isTag = isPartStr && !/\W/.test(part),

+				isPartStrNotTag = isPartStr && !isTag;

+

+			if ( isTag ) {

+				part = part.toLowerCase();

+			}

+

+			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {

+				if ( (elem = checkSet[i]) ) {

+					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}

+

+					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?

+						elem || false :

+						elem === part;

+				}

+			}

+

+			if ( isPartStrNotTag ) {

+				Sizzle.filter( part, checkSet, true );

+			}

+		},

+		">": function(checkSet, part){

+			var isPartStr = typeof part === "string";

+

+			if ( isPartStr && !/\W/.test(part) ) {

+				part = part.toLowerCase();

+

+				for ( var i = 0, l = checkSet.length; i < l; i++ ) {

+					var elem = checkSet[i];

+					if ( elem ) {

+						var parent = elem.parentNode;

+						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;

+					}

+				}

+			} else {

+				for ( var i = 0, l = checkSet.length; i < l; i++ ) {

+					var elem = checkSet[i];

+					if ( elem ) {

+						checkSet[i] = isPartStr ?

+							elem.parentNode :

+							elem.parentNode === part;

+					}

+				}

+

+				if ( isPartStr ) {

+					Sizzle.filter( part, checkSet, true );

+				}

+			}

+		},

+		"": function(checkSet, part, isXML){

+			var doneName = done++, checkFn = dirCheck;

+

+			if ( typeof part === "string" && !/\W/.test(part) ) {

+				var nodeCheck = part = part.toLowerCase();

+				checkFn = dirNodeCheck;

+			}

+

+			checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);

+		},

+		"~": function(checkSet, part, isXML){

+			var doneName = done++, checkFn = dirCheck;

+

+			if ( typeof part === "string" && !/\W/.test(part) ) {

+				var nodeCheck = part = part.toLowerCase();

+				checkFn = dirNodeCheck;

+			}

+

+			checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);

+		}

+	},

+	find: {

+		ID: function(match, context, isXML){

+			if ( typeof context.getElementById !== "undefined" && !isXML ) {

+				var m = context.getElementById(match[1]);

+				return m ? [m] : [];

+			}

+		},

+		NAME: function(match, context){

+			if ( typeof context.getElementsByName !== "undefined" ) {

+				var ret = [], results = context.getElementsByName(match[1]);

+

+				for ( var i = 0, l = results.length; i < l; i++ ) {

+					if ( results[i].getAttribute("name") === match[1] ) {

+						ret.push( results[i] );

+					}

+				}

+

+				return ret.length === 0 ? null : ret;

+			}

+		},

+		TAG: function(match, context){

+			return context.getElementsByTagName(match[1]);

+		}

+	},

+	preFilter: {

+		CLASS: function(match, curLoop, inplace, result, not, isXML){

+			match = " " + match[1].replace(/\\/g, "") + " ";

+

+			if ( isXML ) {

+				return match;

+			}

+

+			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {

+				if ( elem ) {

+					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {

+						if ( !inplace ) {

+							result.push( elem );

+						}

+					} else if ( inplace ) {

+						curLoop[i] = false;

+					}

+				}

+			}

+

+			return false;

+		},

+		ID: function(match){

+			return match[1].replace(/\\/g, "");

+		},

+		TAG: function(match, curLoop){

+			return match[1].toLowerCase();

+		},

+		CHILD: function(match){

+			if ( match[1] === "nth" ) {

+				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'

+				var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(

+					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||

+					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);

+

+				// calculate the numbers (first)n+(last) including if they are negative

+				match[2] = (test[1] + (test[2] || 1)) - 0;

+				match[3] = test[3] - 0;

+			}

+

+			// TODO: Move to normal caching system

+			match[0] = done++;

+

+			return match;

+		},

+		ATTR: function(match, curLoop, inplace, result, not, isXML){

+			var name = match[1].replace(/\\/g, "");

+			

+			if ( !isXML && Expr.attrMap[name] ) {

+				match[1] = Expr.attrMap[name];

+			}

+

+			if ( match[2] === "~=" ) {

+				match[4] = " " + match[4] + " ";

+			}

+

+			return match;

+		},

+		PSEUDO: function(match, curLoop, inplace, result, not){

+			if ( match[1] === "not" ) {

+				// If we're dealing with a complex expression, or a simple one

+				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {

+					match[3] = Sizzle(match[3], null, null, curLoop);

+				} else {

+					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);

+					if ( !inplace ) {

+						result.push.apply( result, ret );

+					}

+					return false;

+				}

+			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {

+				return true;

+			}

+			

+			return match;

+		},

+		POS: function(match){

+			match.unshift( true );

+			return match;

+		}

+	},

+	filters: {

+		enabled: function(elem){

+			return elem.disabled === false && elem.type !== "hidden";

+		},

+		disabled: function(elem){

+			return elem.disabled === true;

+		},

+		checked: function(elem){

+			return elem.checked === true;

+		},

+		selected: function(elem){

+			// Accessing this property makes selected-by-default

+			// options in Safari work properly

+			elem.parentNode.selectedIndex;

+			return elem.selected === true;

+		},

+		parent: function(elem){

+			return !!elem.firstChild;

+		},

+		empty: function(elem){

+			return !elem.firstChild;

+		},

+		has: function(elem, i, match){

+			///	<summary>

+			///		Internal use only; use hasClass('class')

+			///	</summary>

+			///	<private />

+

+			return !!Sizzle( match[3], elem ).length;

+		},

+		header: function(elem){

+			return /h\d/i.test( elem.nodeName );

+		},

+		text: function(elem){

+			return "text" === elem.type;

+		},

+		radio: function(elem){

+			return "radio" === elem.type;

+		},

+		checkbox: function(elem){

+			return "checkbox" === elem.type;

+		},

+		file: function(elem){

+			return "file" === elem.type;

+		},

+		password: function(elem){

+			return "password" === elem.type;

+		},

+		submit: function(elem){

+			return "submit" === elem.type;

+		},

+		image: function(elem){

+			return "image" === elem.type;

+		},

+		reset: function(elem){

+			return "reset" === elem.type;

+		},

+		button: function(elem){

+			return "button" === elem.type || elem.nodeName.toLowerCase() === "button";

+		},

+		input: function(elem){

+			return /input|select|textarea|button/i.test(elem.nodeName);

+		}

+	},

+	setFilters: {

+		first: function(elem, i){

+			return i === 0;

+		},

+		last: function(elem, i, match, array){

+			return i === array.length - 1;

+		},

+		even: function(elem, i){

+			return i % 2 === 0;

+		},

+		odd: function(elem, i){

+			return i % 2 === 1;

+		},

+		lt: function(elem, i, match){

+			return i < match[3] - 0;

+		},

+		gt: function(elem, i, match){

+			return i > match[3] - 0;

+		},

+		nth: function(elem, i, match){

+			return match[3] - 0 === i;

+		},

+		eq: function(elem, i, match){

+			return match[3] - 0 === i;

+		}

+	},

+	filter: {

+		PSEUDO: function(elem, match, i, array){

+			var name = match[1], filter = Expr.filters[ name ];

+

+			if ( filter ) {

+				return filter( elem, i, match, array );

+			} else if ( name === "contains" ) {

+				return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;

+			} else if ( name === "not" ) {

+				var not = match[3];

+

+				for ( var i = 0, l = not.length; i < l; i++ ) {

+					if ( not[i] === elem ) {

+						return false;

+					}

+				}

+

+				return true;

+			} else {

+				Sizzle.error( "Syntax error, unrecognized expression: " + name );

+			}

+		},

+		CHILD: function(elem, match){

+			var type = match[1], node = elem;

+			switch (type) {

+				case 'only':

+				case 'first':

+					while ( (node = node.previousSibling) )	 {

+						if ( node.nodeType === 1 ) { 

+							return false; 

+						}

+					}

+					if ( type === "first" ) { 

+						return true; 

+					}

+					node = elem;

+				case 'last':

+					while ( (node = node.nextSibling) )	 {

+						if ( node.nodeType === 1 ) { 

+							return false; 

+						}

+					}

+					return true;

+				case 'nth':

+					var first = match[2], last = match[3];

+

+					if ( first === 1 && last === 0 ) {

+						return true;

+					}

+					

+					var doneName = match[0],

+						parent = elem.parentNode;

+	

+					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {

+						var count = 0;

+						for ( node = parent.firstChild; node; node = node.nextSibling ) {

+							if ( node.nodeType === 1 ) {

+								node.nodeIndex = ++count;

+							}

+						} 

+						parent.sizcache = doneName;

+					}

+					

+					var diff = elem.nodeIndex - last;

+					if ( first === 0 ) {

+						return diff === 0;

+					} else {

+						return ( diff % first === 0 && diff / first >= 0 );

+					}

+			}

+		},

+		ID: function(elem, match){

+			return elem.nodeType === 1 && elem.getAttribute("id") === match;

+		},

+		TAG: function(elem, match){

+			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;

+		},

+		CLASS: function(elem, match){

+			return (" " + (elem.className || elem.getAttribute("class")) + " ")

+				.indexOf( match ) > -1;

+		},

+		ATTR: function(elem, match){

+			var name = match[1],

+				result = Expr.attrHandle[ name ] ?

+					Expr.attrHandle[ name ]( elem ) :

+					elem[ name ] != null ?

+						elem[ name ] :

+						elem.getAttribute( name ),

+				value = result + "",

+				type = match[2],

+				check = match[4];

+

+			return result == null ?

+				type === "!=" :

+				type === "=" ?

+				value === check :

+				type === "*=" ?

+				value.indexOf(check) >= 0 :

+				type === "~=" ?

+				(" " + value + " ").indexOf(check) >= 0 :

+				!check ?

+				value && result !== false :

+				type === "!=" ?

+				value !== check :

+				type === "^=" ?

+				value.indexOf(check) === 0 :

+				type === "$=" ?

+				value.substr(value.length - check.length) === check :

+				type === "|=" ?

+				value === check || value.substr(0, check.length + 1) === check + "-" :

+				false;

+		},

+		POS: function(elem, match, i, array){

+			var name = match[2], filter = Expr.setFilters[ name ];

+

+			if ( filter ) {

+				return filter( elem, i, match, array );

+			}

+		}

+	}

+};

+

+var origPOS = Expr.match.POS;

+

+for ( var type in Expr.match ) {

+	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );

+	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){

+		return "\\" + (num - 0 + 1);

+	}));

+}

+

+var makeArray = function(array, results) {

+	array = Array.prototype.slice.call( array, 0 );

+

+	if ( results ) {

+		results.push.apply( results, array );

+		return results;

+	}

+	

+	return array;

+};

+

+// Perform a simple check to determine if the browser is capable of

+// converting a NodeList to an array using builtin methods.

+try {

+	Array.prototype.slice.call( document.documentElement.childNodes, 0 );

+

+// Provide a fallback method if it does not work

+} catch(e){

+	makeArray = function(array, results) {

+		var ret = results || [];

+

+		if ( toString.call(array) === "[object Array]" ) {

+			Array.prototype.push.apply( ret, array );

+		} else {

+			if ( typeof array.length === "number" ) {

+				for ( var i = 0, l = array.length; i < l; i++ ) {

+					ret.push( array[i] );

+				}

+			} else {

+				for ( var i = 0; array[i]; i++ ) {

+					ret.push( array[i] );

+				}

+			}

+		}

+

+		return ret;

+	};

+}

+

+var sortOrder;

+

+if ( document.documentElement.compareDocumentPosition ) {

+	sortOrder = function( a, b ) {

+		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {

+			if ( a == b ) {

+				hasDuplicate = true;

+			}

+			return a.compareDocumentPosition ? -1 : 1;

+		}

+

+		var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;

+		if ( ret === 0 ) {

+			hasDuplicate = true;

+		}

+		return ret;

+	};

+} else if ( "sourceIndex" in document.documentElement ) {

+	sortOrder = function( a, b ) {

+		if ( !a.sourceIndex || !b.sourceIndex ) {

+			if ( a == b ) {

+				hasDuplicate = true;

+			}

+			return a.sourceIndex ? -1 : 1;

+		}

+

+		var ret = a.sourceIndex - b.sourceIndex;

+		if ( ret === 0 ) {

+			hasDuplicate = true;

+		}

+		return ret;

+	};

+} else if ( document.createRange ) {

+	sortOrder = function( a, b ) {

+		if ( !a.ownerDocument || !b.ownerDocument ) {

+			if ( a == b ) {

+				hasDuplicate = true;

+			}

+			return a.ownerDocument ? -1 : 1;

+		}

+

+		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();

+		aRange.setStart(a, 0);

+		aRange.setEnd(a, 0);

+		bRange.setStart(b, 0);

+		bRange.setEnd(b, 0);

+		var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);

+		if ( ret === 0 ) {

+			hasDuplicate = true;

+		}

+		return ret;

+	};

+}

+

+// Utility function for retreiving the text value of an array of DOM nodes

+function getText( elems ) {

+	var ret = "", elem;

+

+	for ( var i = 0; elems[i]; i++ ) {

+		elem = elems[i];

+

+		// Get the text from text nodes and CDATA nodes

+		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {

+			ret += elem.nodeValue;

+

+		// Traverse everything else, except comment nodes

+		} else if ( elem.nodeType !== 8 ) {

+			ret += getText( elem.childNodes );

+		}

+	}

+

+	return ret;

+}

+

+// [vsdoc] The following function has been modified for IntelliSense.

+// Check to see if the browser returns elements by name when

+// querying by getElementById (and provide a workaround)

+(function(){

+	// We're going to inject a fake input element with a specified name

+	//	var form = document.createElement("div"),

+	//		id = "script" + (new Date).getTime();

+	//	form.innerHTML = "<a name='" + id + "'/>";

+

+	//	// Inject it into the root element, check its status, and remove it quickly

+	//	var root = document.documentElement;

+	//	root.insertBefore( form, root.firstChild );

+

+	// The workaround has to do additional checks after a getElementById

+	// Which slows things down for other browsers (hence the branching)

+	//	if ( document.getElementById( id ) ) {

+		Expr.find.ID = function(match, context, isXML){

+			if ( typeof context.getElementById !== "undefined" && !isXML ) {

+				var m = context.getElementById(match[1]);

+				return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];

+			}

+		};

+

+		Expr.filter.ID = function(elem, match){

+			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");

+			return elem.nodeType === 1 && node && node.nodeValue === match;

+		};

+	//	}

+

+	//	root.removeChild( form );

+	root = form = null; // release memory in IE

+})();

+

+// [vsdoc] The following function has been modified for IntelliSense.

+(function(){

+	// Check to see if the browser returns only elements

+	// when doing getElementsByTagName("*")

+

+	// Create a fake element

+	//	var div = document.createElement("div");

+	//	div.appendChild( document.createComment("") );

+

+	// Make sure no comments are found

+	//	if ( div.getElementsByTagName("*").length > 0 ) {

+		Expr.find.TAG = function(match, context){

+			var results = context.getElementsByTagName(match[1]);

+

+			// Filter out possible comments

+			if ( match[1] === "*" ) {

+				var tmp = [];

+

+				for ( var i = 0; results[i]; i++ ) {

+					if ( results[i].nodeType === 1 ) {

+						tmp.push( results[i] );

+					}

+				}

+

+				results = tmp;

+			}

+

+			return results;

+		};

+	//	}

+

+	// Check to see if an attribute returns normalized href attributes

+	//	div.innerHTML = "<a href='#'></a>";

+	//	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&

+	//			div.firstChild.getAttribute("href") !== "#" ) {

+		Expr.attrHandle.href = function(elem){

+			return elem.getAttribute("href", 2);

+		};

+	//	}

+

+	div = null; // release memory in IE

+})();

+

+if ( document.querySelectorAll ) {

+	(function(){

+		var oldSizzle = Sizzle, div = document.createElement("div");

+		div.innerHTML = "<p class='TEST'></p>";

+

+		// Safari can't handle uppercase or unicode characters when

+		// in quirks mode.

+		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {

+			return;

+		}

+	

+		Sizzle = function(query, context, extra, seed){

+			context = context || document;

+

+			// Only use querySelectorAll on non-XML documents

+			// (ID selectors don't work in non-HTML documents)

+			if ( !seed && context.nodeType === 9 && !isXML(context) ) {

+				try {

+					return makeArray( context.querySelectorAll(query), extra );

+				} catch(e){}

+			}

+		

+			return oldSizzle(query, context, extra, seed);

+		};

+

+		for ( var prop in oldSizzle ) {

+			Sizzle[ prop ] = oldSizzle[ prop ];

+		}

+

+		div = null; // release memory in IE

+	})();

+}

+

+(function(){

+	var div = document.createElement("div");

+

+	div.innerHTML = "<div class='test e'></div><div class='test'></div>";

+

+	// Opera can't find a second classname (in 9.6)

+	// Also, make sure that getElementsByClassName actually exists

+	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {

+		return;

+	}

+

+	// Safari caches class attributes, doesn't catch changes (in 3.2)

+	div.lastChild.className = "e";

+

+	if ( div.getElementsByClassName("e").length === 1 ) {

+		return;

+	}

+	

+	Expr.order.splice(1, 0, "CLASS");

+	Expr.find.CLASS = function(match, context, isXML) {

+		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {

+			return context.getElementsByClassName(match[1]);

+		}

+	};

+

+	div = null; // release memory in IE

+})();

+

+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {

+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {

+		var elem = checkSet[i];

+		if ( elem ) {

+			elem = elem[dir];

+			var match = false;

+

+			while ( elem ) {

+				if ( elem.sizcache === doneName ) {

+					match = checkSet[elem.sizset];

+					break;

+				}

+

+				if ( elem.nodeType === 1 && !isXML ){

+					elem.sizcache = doneName;

+					elem.sizset = i;

+				}

+

+				if ( elem.nodeName.toLowerCase() === cur ) {

+					match = elem;

+					break;

+				}

+

+				elem = elem[dir];

+			}

+

+			checkSet[i] = match;

+		}

+	}

+}

+

+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {

+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {

+		var elem = checkSet[i];

+		if ( elem ) {

+			elem = elem[dir];

+			var match = false;

+

+			while ( elem ) {

+				if ( elem.sizcache === doneName ) {

+					match = checkSet[elem.sizset];

+					break;

+				}

+

+				if ( elem.nodeType === 1 ) {

+					if ( !isXML ) {

+						elem.sizcache = doneName;

+						elem.sizset = i;

+					}

+					if ( typeof cur !== "string" ) {

+						if ( elem === cur ) {

+							match = true;

+							break;

+						}

+

+					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {

+						match = elem;

+						break;

+					}

+				}

+

+				elem = elem[dir];

+			}

+

+			checkSet[i] = match;

+		}

+	}

+}

+

+var contains = document.compareDocumentPosition ? function(a, b){

+	///	<summary>

+	///		Check to see if a DOM node is within another DOM node.

+	///	</summary>

+	///	<param name="a" type="Object">

+	///		The DOM element that may contain the other element.

+	///	</param>

+	///	<param name="b" type="Object">

+	///		The DOM node that may be contained by the other element.

+	///	</param>

+	///	<returns type="Boolean" />

+

+	return a.compareDocumentPosition(b) & 16;

+} : function(a, b){

+	///	<summary>

+	///		Check to see if a DOM node is within another DOM node.

+	///	</summary>

+	///	<param name="a" type="Object">

+	///		The DOM element that may contain the other element.

+	///	</param>

+	///	<param name="b" type="Object">

+	///		The DOM node that may be contained by the other element.

+	///	</param>

+	///	<returns type="Boolean" />

+

+	return a !== b && (a.contains ? a.contains(b) : true);

+};

+

+var isXML = function(elem){

+	///	<summary>

+	///		Determines if the parameter passed is an XML document.

+	///	</summary>

+	///	<param name="elem" type="Object">The object to test</param>

+	///	<returns type="Boolean">True if the parameter is an XML document; otherwise false.</returns>

+

+	// documentElement is verified for cases where it doesn't yet exist

+	// (such as loading iframes in IE - #4833) 

+	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;

+	return documentElement ? documentElement.nodeName !== "HTML" : false;

+};

+

+var posProcess = function(selector, context){

+	var tmpSet = [], later = "", match,

+		root = context.nodeType ? [context] : context;

+

+	// Position selectors must be done after the filter

+	// And so must :not(positional) so we move all PSEUDOs to the end

+	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {

+		later += match[0];

+		selector = selector.replace( Expr.match.PSEUDO, "" );

+	}

+

+	selector = Expr.relative[selector] ? selector + "*" : selector;

+

+	for ( var i = 0, l = root.length; i < l; i++ ) {

+		Sizzle( selector, root[i], tmpSet );

+	}

+

+	return Sizzle.filter( later, tmpSet );

+};

+

+// EXPOSE

+jQuery.find = Sizzle;

+jQuery.expr = Sizzle.selectors;

+jQuery.expr[":"] = jQuery.expr.filters;

+jQuery.unique = Sizzle.uniqueSort;

+jQuery.getText = getText;

+jQuery.isXMLDoc = isXML;

+jQuery.contains = contains;

+

+return;

+

+window.Sizzle = Sizzle;

+

+})();

+var runtil = /Until$/,

+	rparentsprev = /^(?:parents|prevUntil|prevAll)/,

+	// Note: This RegExp should be improved, or likely pulled from Sizzle

+	rmultiselector = /,/,

+	slice = Array.prototype.slice;

+

+// Implement the identical functionality for filter and not

+var winnow = function( elements, qualifier, keep ) {

+	if ( jQuery.isFunction( qualifier ) ) {

+		return jQuery.grep(elements, function( elem, i ) {

+			return !!qualifier.call( elem, i, elem ) === keep;

+		});

+

+	} else if ( qualifier.nodeType ) {

+		return jQuery.grep(elements, function( elem, i ) {

+			return (elem === qualifier) === keep;

+		});

+

+	} else if ( typeof qualifier === "string" ) {

+		var filtered = jQuery.grep(elements, function( elem ) {

+			return elem.nodeType === 1;

+		});

+

+		if ( isSimple.test( qualifier ) ) {

+			return jQuery.filter(qualifier, filtered, !keep);

+		} else {

+			qualifier = jQuery.filter( qualifier, filtered );

+		}

+	}

+

+	return jQuery.grep(elements, function( elem, i ) {

+		return (jQuery.inArray( elem, qualifier ) >= 0) === keep;

+	});

+};

+

+jQuery.fn.extend({

+	find: function( selector ) {

+		///	<summary>

+		///		Searches for all elements that match the specified expression.

+		///		This method is a good way to find additional descendant

+		///		elements with which to process.

+		///		All searching is done using a jQuery expression. The expression can be

+		///		written using CSS 1-3 Selector syntax, or basic XPath.

+		///		Part of DOM/Traversing

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="selector" type="String">

+		///		An expression to search with.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		var ret = this.pushStack( "", "find", selector ), length = 0;

+

+		for ( var i = 0, l = this.length; i < l; i++ ) {

+			length = ret.length;

+			jQuery.find( selector, this[i], ret );

+

+			if ( i > 0 ) {

+				// Make sure that the results are unique

+				for ( var n = length; n < ret.length; n++ ) {

+					for ( var r = 0; r < length; r++ ) {

+						if ( ret[r] === ret[n] ) {

+							ret.splice(n--, 1);

+							break;

+						}

+					}

+				}

+			}

+		}

+

+		return ret;

+	},

+

+	has: function( target ) {

+		///	<summary>

+		///		Reduce the set of matched elements to those that have a descendant that matches the

+		///		selector or DOM element.

+		///	</summary>

+		///	<param name="target" type="String">

+		///		A string containing a selector expression to match elements against.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		var targets = jQuery( target );

+		return this.filter(function() {

+			for ( var i = 0, l = targets.length; i < l; i++ ) {

+				if ( jQuery.contains( this, targets[i] ) ) {

+					return true;

+				}

+			}

+		});

+	},

+

+	not: function( selector ) {

+		///	<summary>

+		///		Removes any elements inside the array of elements from the set

+		///		of matched elements. This method is used to remove one or more

+		///		elements from a jQuery object.

+		///		Part of DOM/Traversing

+		///	</summary>

+		///	<param name="selector" type="jQuery">

+		///		A set of elements to remove from the jQuery set of matched elements.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		return this.pushStack( winnow(this, selector, false), "not", selector);

+	},

+

+	filter: function( selector ) {

+		///	<summary>

+		///		Removes all elements from the set of matched elements that do not

+		///		pass the specified filter. This method is used to narrow down

+		///		the results of a search.

+		///		})

+		///		Part of DOM/Traversing

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="selector" type="Function">

+		///		A function to use for filtering

+		///	</param>

+		///	<returns type="jQuery" />

+

+		return this.pushStack( winnow(this, selector, true), "filter", selector );

+	},

+	

+	is: function( selector ) {

+		///	<summary>

+		///		Checks the current selection against an expression and returns true,

+		///		if at least one element of the selection fits the given expression.

+		///		Does return false, if no element fits or the expression is not valid.

+		///		filter(String) is used internally, therefore all rules that apply there

+		///		apply here, too.

+		///		Part of DOM/Traversing

+		///	</summary>

+		///	<returns type="Boolean" />

+		///	<param name="expr" type="String">

+		///		 The expression with which to filter

+		///	</param>

+

+		return !!selector && jQuery.filter( selector, this ).length > 0;

+	},

+

+	closest: function( selectors, context ) {

+		///	<summary>

+		///		Get a set of elements containing the closest parent element that matches the specified selector, the starting element included.

+		///	</summary>

+		///	<param name="selectors" type="String">

+		///		A string containing a selector expression to match elements against.

+		///	</param>

+		///	<param name="context" type="Element">

+		///		A DOM element within which a matching element may be found. If no context is passed

+		///		in then the context of the jQuery set will be used instead.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		if ( jQuery.isArray( selectors ) ) {

+			var ret = [], cur = this[0], match, matches = {}, selector;

+

+			if ( cur && selectors.length ) {

+				for ( var i = 0, l = selectors.length; i < l; i++ ) {

+					selector = selectors[i];

+

+					if ( !matches[selector] ) {

+						matches[selector] = jQuery.expr.match.POS.test( selector ) ? 

+							jQuery( selector, context || this.context ) :

+							selector;

+					}

+				}

+

+				while ( cur && cur.ownerDocument && cur !== context ) {

+					for ( selector in matches ) {

+						match = matches[selector];

+

+						if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {

+							ret.push({ selector: selector, elem: cur });

+							delete matches[selector];

+						}

+					}

+					cur = cur.parentNode;

+				}

+			}

+

+			return ret;

+		}

+

+		var pos = jQuery.expr.match.POS.test( selectors ) ? 

+			jQuery( selectors, context || this.context ) : null;

+

+		return this.map(function( i, cur ) {

+			while ( cur && cur.ownerDocument && cur !== context ) {

+				if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) {

+					return cur;

+				}

+				cur = cur.parentNode;

+			}

+			return null;

+		});

+	},

+	

+	// Determine the position of an element within

+	// the matched set of elements

+	index: function( elem ) {

+		///	<summary>

+		///		Searches every matched element for the object and returns

+		///		the index of the element, if found, starting with zero. 

+		///		Returns -1 if the object wasn't found.

+		///		Part of Core

+		///	</summary>

+		///	<returns type="Number" />

+		///	<param name="elem" type="Element">

+		///		Object to search for

+		///	</param>

+

+		if ( !elem || typeof elem === "string" ) {

+			return jQuery.inArray( this[0],

+				// If it receives a string, the selector is used

+				// If it receives nothing, the siblings are used

+				elem ? jQuery( elem ) : this.parent().children() );

+		}

+		// Locate the position of the desired element

+		return jQuery.inArray(

+			// If it receives a jQuery object, the first element is used

+			elem.jquery ? elem[0] : elem, this );

+	},

+

+	add: function( selector, context ) {

+		///	<summary>

+		///		Adds one or more Elements to the set of matched elements.

+		///		Part of DOM/Traversing

+		///	</summary>

+		///	<param name="selector" type="String">

+		///		A string containing a selector expression to match additional elements against.

+		///	</param>

+		///	<param name="context" type="Element">

+		///		Add some elements rooted against the specified context.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		var set = typeof selector === "string" ?

+				jQuery( selector, context || this.context ) :

+				jQuery.makeArray( selector ),

+			all = jQuery.merge( this.get(), set );

+

+		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?

+			all :

+			jQuery.unique( all ) );

+	},

+

+	andSelf: function() {

+		///	<summary>

+		///		Adds the previous selection to the current selection.

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		return this.add( this.prevObject );

+	}

+});

+

+// A painfully simple check to see if an element is disconnected

+// from a document (should be improved, where feasible).

+function isDisconnected( node ) {

+	return !node || !node.parentNode || node.parentNode.nodeType === 11;

+}

+

+jQuery.each({

+	parent: function( elem ) {

+		var parent = elem.parentNode;

+		return parent && parent.nodeType !== 11 ? parent : null;

+	},

+	parents: function( elem ) {

+		return jQuery.dir( elem, "parentNode" );

+	},

+	next: function( elem ) {

+		return jQuery.nth( elem, 2, "nextSibling" );

+	},

+	prev: function( elem ) {

+		return jQuery.nth( elem, 2, "previousSibling" );

+	},

+	nextAll: function( elem ) {

+		return jQuery.dir( elem, "nextSibling" );

+	},

+	prevAll: function( elem ) {

+		return jQuery.dir( elem, "previousSibling" );

+	},

+	siblings: function( elem ) {

+		return jQuery.sibling( elem.parentNode.firstChild, elem );

+	},

+	children: function( elem ) {

+		return jQuery.sibling( elem.firstChild );

+	},

+	contents: function( elem ) {

+		return jQuery.nodeName( elem, "iframe" ) ?

+			elem.contentDocument || elem.contentWindow.document :

+			jQuery.makeArray( elem.childNodes );

+	}

+}, function( name, fn ) {

+	jQuery.fn[ name ] = function( until, selector ) {

+		var ret = jQuery.map( this, fn, until );

+		

+		if ( !runtil.test( name ) ) {

+			selector = until;

+		}

+

+		if ( selector && typeof selector === "string" ) {

+			ret = jQuery.filter( selector, ret );

+		}

+

+		ret = this.length > 1 ? jQuery.unique( ret ) : ret;

+

+		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {

+			ret = ret.reverse();

+		}

+

+		return this.pushStack( ret, name, slice.call(arguments).join(",") );

+	};

+});

+

+jQuery.fn[ "parentsUntil" ] = function( until, selector ) {

+	///	<summary>

+	///		Get the ancestors of each element in the current set of matched elements, up to but not

+	///		including the element matched by the selector.

+	///	</summary>

+	///	<param name="until" type="String">

+	///		A string containing a selector expression to indicate where to stop matching ancestor

+	///		elements.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var fn = function( elem, i, until ) {

+		return jQuery.dir( elem, "parentNode", until );

+	}

+

+	var ret = jQuery.map( this, fn, until );

+	

+	if ( !runtil.test( "parentsUntil" ) ) {

+		selector = until;

+	}

+

+	if ( selector && typeof selector === "string" ) {

+		ret = jQuery.filter( selector, ret );

+	}

+

+	ret = this.length > 1 ? jQuery.unique( ret ) : ret;

+

+	if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( "parentsUntil" ) ) {

+		ret = ret.reverse();

+	}

+

+	return this.pushStack( ret, "parentsUntil", slice.call(arguments).join(",") );

+};

+

+jQuery.fn[ "nextUntil" ] = function( until, selector ) {

+	///	<summary>

+	///		Get all following siblings of each element up to but not including the element matched

+	///		by the selector.

+	///	</summary>

+	///	<param name="until" type="String">

+	///		A string containing a selector expression to indicate where to stop matching following

+	///		sibling elements.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var fn = function( elem, i, until ) {

+		return jQuery.dir( elem, "nextSibling", until );

+	}

+

+	var ret = jQuery.map( this, fn, until );

+	

+	if ( !runtil.test( "nextUntil" ) ) {

+		selector = until;

+	}

+

+	if ( selector && typeof selector === "string" ) {

+		ret = jQuery.filter( selector, ret );

+	}

+

+	ret = this.length > 1 ? jQuery.unique( ret ) : ret;

+

+	if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( "nextUntil" ) ) {

+		ret = ret.reverse();

+	}

+

+	return this.pushStack( ret, "nextUntil", slice.call(arguments).join(",") );

+};

+

+jQuery.fn[ "prevUntil" ] = function( until, selector ) {

+	///	<summary>

+	///		Get all preceding siblings of each element up to but not including the element matched

+	///		by the selector.

+	///	</summary>

+	///	<param name="until" type="String">

+	///		A string containing a selector expression to indicate where to stop matching preceding

+	///		sibling elements.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var fn = function( elem, i, until ) {

+		return jQuery.dir( elem, "previousSibling", until );

+	}

+

+	var ret = jQuery.map( this, fn, until );

+	

+	if ( !runtil.test( "prevUntil" ) ) {

+		selector = until;

+	}

+

+	if ( selector && typeof selector === "string" ) {

+		ret = jQuery.filter( selector, ret );

+	}

+

+	ret = this.length > 1 ? jQuery.unique( ret ) : ret;

+

+	if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( "prevUntil" ) ) {

+		ret = ret.reverse();

+	}

+

+	return this.pushStack( ret, "prevUntil", slice.call(arguments).join(",") );

+};

+

+jQuery.extend({

+	filter: function( expr, elems, not ) {

+		if ( not ) {

+			expr = ":not(" + expr + ")";

+		}

+

+		return jQuery.find.matches(expr, elems);

+	},

+	

+	dir: function( elem, dir, until ) {

+		///	<summary>

+		///		This member is internal only.

+		///	</summary>

+		///	<private />

+

+		var matched = [], cur = elem[dir];

+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {

+			if ( cur.nodeType === 1 ) {

+				matched.push( cur );

+			}

+			cur = cur[dir];

+		}

+		return matched;

+	},

+

+	nth: function( cur, result, dir, elem ) {

+		///	<summary>

+		///		This member is internal only.

+		///	</summary>

+		///	<private />

+

+		result = result || 1;

+		var num = 0;

+

+		for ( ; cur; cur = cur[dir] ) {

+			if ( cur.nodeType === 1 && ++num === result ) {

+				break;

+			}

+		}

+

+		return cur;

+	},

+

+	sibling: function( n, elem ) {

+		///	<summary>

+		///		This member is internal only.

+		///	</summary>

+		///	<private />

+

+		var r = [];

+

+		for ( ; n; n = n.nextSibling ) {

+			if ( n.nodeType === 1 && n !== elem ) {

+				r.push( n );

+			}

+		}

+

+		return r;

+	}

+});

+var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,

+	rleadingWhitespace = /^\s+/,

+	rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g,

+	rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,

+	rtagName = /<([\w:]+)/,

+	rtbody = /<tbody/i,

+	rhtml = /<|&\w+;/,

+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,  // checked="checked" or checked (html5)

+	fcloseTag = function( all, front, tag ) {

+		return rselfClosing.test( tag ) ?

+			all :

+			front + "></" + tag + ">";

+	},

+	wrapMap = {

+		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, "", "" ]

+	};

+

+wrapMap.optgroup = wrapMap.option;

+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;

+wrapMap.th = wrapMap.td;

+

+// IE can't serialize <link> and <script> tags normally

+if ( !jQuery.support.htmlSerialize ) {

+	wrapMap._default = [ 1, "div<div>", "</div>" ];

+}

+

+jQuery.fn.extend({

+	text: function( text ) {

+		///	<summary>

+		///		Set the text contents of all matched elements.

+		///		Similar to html(), but escapes HTML (replace &quot;&lt;&quot; and &quot;&gt;&quot; with their

+		///		HTML entities).

+		///		Part of DOM/Attributes

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="text" type="String">

+		///		The text value to set the contents of the element to.

+		///	</param>

+

+		if ( jQuery.isFunction(text) ) {

+			return this.each(function(i) {

+				var self = jQuery(this);

+				self.text( text.call(this, i, self.text()) );

+			});

+		}

+

+		if ( typeof text !== "object" && text !== undefined ) {

+			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );

+		}

+

+		return jQuery.getText( this );

+	},

+

+	wrapAll: function( html ) {

+		///	<summary>

+		///		Wrap all matched elements with a structure of other elements.

+		///		This wrapping process is most useful for injecting additional

+		///		stucture into a document, without ruining the original semantic

+		///		qualities of a document.

+		///		This works by going through the first element

+		///		provided and finding the deepest ancestor element within its

+		///		structure - it is that element that will en-wrap everything else.

+		///		This does not work with elements that contain text. Any necessary text

+		///		must be added after the wrapping is done.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="html" type="Element">

+		///		A DOM element that will be wrapped around the target.

+		///	</param>

+

+		if ( jQuery.isFunction( html ) ) {

+			return this.each(function(i) {

+				jQuery(this).wrapAll( html.call(this, i) );

+			});

+		}

+

+		if ( this[0] ) {

+			// The elements to wrap the target around

+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);

+

+			if ( this[0].parentNode ) {

+				wrap.insertBefore( this[0] );

+			}

+

+			wrap.map(function() {

+				var elem = this;

+

+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {

+					elem = elem.firstChild;

+				}

+

+				return elem;

+			}).append(this);

+		}

+

+		return this;

+	},

+

+	wrapInner: function( html ) {

+		///	<summary>

+		///		Wraps the inner child contents of each matched elemenht (including text nodes) with an HTML structure.

+		///	</summary>

+		///	<param name="html" type="String">

+		///		A string of HTML or a DOM element that will be wrapped around the target contents.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		if ( jQuery.isFunction( html ) ) {

+			return this.each(function(i) {

+				jQuery(this).wrapInner( html.call(this, i) );

+			});

+		}

+

+		return this.each(function() {

+			var self = jQuery( this ), contents = self.contents();

+

+			if ( contents.length ) {

+				contents.wrapAll( html );

+

+			} else {

+				self.append( html );

+			}

+		});

+	},

+

+	wrap: function( html ) {

+		///	<summary>

+		///		Wrap all matched elements with a structure of other elements.

+		///		This wrapping process is most useful for injecting additional

+		///		stucture into a document, without ruining the original semantic

+		///		qualities of a document.

+		///		This works by going through the first element

+		///		provided and finding the deepest ancestor element within its

+		///		structure - it is that element that will en-wrap everything else.

+		///		This does not work with elements that contain text. Any necessary text

+		///		must be added after the wrapping is done.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="html" type="Element">

+		///		A DOM element that will be wrapped around the target.

+		///	</param>

+

+		return this.each(function() {

+			jQuery( this ).wrapAll( html );

+		});

+	},

+

+	unwrap: function() {

+		///	<summary>

+		///		Remove the parents of the set of matched elements from the DOM, leaving the matched

+		///		elements in their place.

+		///	</summary>

+		///	<returns type="jQuery" />

+		return this.parent().each(function() {

+			if ( !jQuery.nodeName( this, "body" ) ) {

+				jQuery( this ).replaceWith( this.childNodes );

+			}

+		}).end();

+	},

+

+	append: function() {

+		///	<summary>

+		///		Append content to the inside of every matched element.

+		///		This operation is similar to doing an appendChild to all the

+		///		specified elements, adding them into the document.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		return this.domManip(arguments, true, function( elem ) {

+			if ( this.nodeType === 1 ) {

+				this.appendChild( elem );

+			}

+		});

+	},

+

+	prepend: function() {

+		///	<summary>

+		///		Prepend content to the inside of every matched element.

+		///		This operation is the best way to insert elements

+		///		inside, at the beginning, of all matched elements.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		return this.domManip(arguments, true, function( elem ) {

+			if ( this.nodeType === 1 ) {

+				this.insertBefore( elem, this.firstChild );

+			}

+		});

+	},

+

+	before: function() {

+		///	<summary>

+		///		Insert content before each of the matched elements.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		if ( this[0] && this[0].parentNode ) {

+			return this.domManip(arguments, false, function( elem ) {

+				this.parentNode.insertBefore( elem, this );

+			});

+		} else if ( arguments.length ) {

+			var set = jQuery(arguments[0]);

+			set.push.apply( set, this.toArray() );

+			return this.pushStack( set, "before", arguments );

+		}

+	},

+

+	after: function() {

+		///	<summary>

+		///		Insert content after each of the matched elements.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		if ( this[0] && this[0].parentNode ) {

+			return this.domManip(arguments, false, function( elem ) {

+				this.parentNode.insertBefore( elem, this.nextSibling );

+			});

+		} else if ( arguments.length ) {

+			var set = this.pushStack( this, "after", arguments );

+			set.push.apply( set, jQuery(arguments[0]).toArray() );

+			return set;

+		}

+	},

+

+	clone: function( events ) {

+		///	<summary>

+		///		Clone matched DOM Elements and select the clones. 

+		///		This is useful for moving copies of the elements to another

+		///		location in the DOM.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="deep" type="Boolean" optional="true">

+		///		(Optional) Set to false if you don't want to clone all descendant nodes, in addition to the element itself.

+		///	</param>

+

+		// Do the clone

+		var ret = this.map(function() {

+			if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {

+				// IE copies events bound via attachEvent when

+				// using cloneNode. Calling detachEvent on the

+				// clone will also remove the events from the orignal

+				// In order to get around this, we use innerHTML.

+				// Unfortunately, this means some modifications to

+				// attributes in IE that are actually only stored

+				// as properties will not be copied (such as the

+				// the name attribute on an input).

+				var html = this.outerHTML, ownerDocument = this.ownerDocument;

+				if ( !html ) {

+					var div = ownerDocument.createElement("div");

+					div.appendChild( this.cloneNode(true) );

+					html = div.innerHTML;

+				}

+

+				return jQuery.clean([html.replace(rinlinejQuery, "")

+					.replace(rleadingWhitespace, "")], ownerDocument)[0];

+			} else {

+				return this.cloneNode(true);

+			}

+		});

+

+		// Copy the events from the original to the clone

+		if ( events === true ) {

+			cloneCopyEvent( this, ret );

+			cloneCopyEvent( this.find("*"), ret.find("*") );

+		}

+

+		// Return the cloned set

+		return ret;

+	},

+

+	html: function( value ) {

+		///	<summary>

+		///		Set the html contents of every matched element.

+		///		This property is not available on XML documents.

+		///		Part of DOM/Attributes

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="value" type="String">

+		///		A string of HTML to set as the content of each matched element.

+		///	</param>

+

+		if ( value === undefined ) {

+			return this[0] && this[0].nodeType === 1 ?

+				this[0].innerHTML.replace(rinlinejQuery, "") :

+				null;

+

+		// See if we can take a shortcut and just use innerHTML

+		} else if ( typeof value === "string" && !/<script/i.test( value ) &&

+			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&

+			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {

+

+			value = value.replace(rxhtmlTag, fcloseTag);

+

+			try {

+				for ( var i = 0, l = this.length; i < l; i++ ) {

+					// Remove element nodes and prevent memory leaks

+					if ( this[i].nodeType === 1 ) {

+						jQuery.cleanData( this[i].getElementsByTagName("*") );

+						this[i].innerHTML = value;

+					}

+				}

+

+			// If using innerHTML throws an exception, use the fallback method

+			} catch(e) {

+				this.empty().append( value );

+			}

+

+		} else if ( jQuery.isFunction( value ) ) {

+			this.each(function(i){

+				var self = jQuery(this), old = self.html();

+				self.empty().append(function(){

+					return value.call( this, i, old );

+				});

+			});

+

+		} else {

+			this.empty().append( value );

+		}

+

+		return this;

+	},

+

+	replaceWith: function( value ) {

+		///	<summary>

+		///		Replaces all matched element with the specified HTML or DOM elements.

+		///	</summary>

+		///	<param name="value" type="Object">

+		///		The content to insert. May be an HTML string, DOM element, or jQuery object.

+		///	</param>

+		///	<returns type="jQuery">The element that was just replaced.</returns>

+

+		if ( this[0] && this[0].parentNode ) {

+			// Make sure that the elements are removed from the DOM before they are inserted

+			// this can help fix replacing a parent with child elements

+			if ( !jQuery.isFunction( value ) ) {

+				value = jQuery( value ).detach();

+

+			} else {

+				return this.each(function(i) {

+					var self = jQuery(this), old = self.html();

+					self.replaceWith( value.call( this, i, old ) );

+				});

+			}

+

+			return this.each(function() {

+				var next = this.nextSibling, parent = this.parentNode;

+

+				jQuery(this).remove();

+

+				if ( next ) {

+					jQuery(next).before( value );

+				} else {

+					jQuery(parent).append( value );

+				}

+			});

+		} else {

+			return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );

+		}

+	},

+

+	detach: function( selector ) {

+		///	<summary>

+		///		Remove the set of matched elements from the DOM.

+		///	</summary>

+		///	<param name="selector" type="String">

+		///		A selector expression that filters the set of matched elements to be removed.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		return this.remove( selector, true );

+	},

+

+	domManip: function( args, table, callback ) {

+		///	<param name="args" type="Array">

+		///		 Args

+		///	</param>

+		///	<param name="table" type="Boolean">

+		///		 Insert TBODY in TABLEs if one is not found.

+		///	</param>

+		///	<param name="dir" type="Number">

+		///		 If dir&lt;0, process args in reverse order.

+		///	</param>

+		///	<param name="fn" type="Function">

+		///		 The function doing the DOM manipulation.

+		///	</param>

+		///	<returns type="jQuery" />

+		///	<summary>

+		///		Part of Core

+		///	</summary>

+

+		var results, first, value = args[0], scripts = [];

+

+		// We can't cloneNode fragments that contain checked, in WebKit

+		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {

+			return this.each(function() {

+				jQuery(this).domManip( args, table, callback, true );

+			});

+		}

+

+		if ( jQuery.isFunction(value) ) {

+			return this.each(function(i) {

+				var self = jQuery(this);

+				args[0] = value.call(this, i, table ? self.html() : undefined);

+				self.domManip( args, table, callback );

+			});

+		}

+

+		if ( this[0] ) {

+			// If we're in a fragment, just use that instead of building a new one

+			if ( args[0] && args[0].parentNode && args[0].parentNode.nodeType === 11 ) {

+				results = { fragment: args[0].parentNode };

+			} else {

+				results = buildFragment( args, this, scripts );

+			}

+

+			first = results.fragment.firstChild;

+

+			if ( first ) {

+				table = table && jQuery.nodeName( first, "tr" );

+

+				for ( var i = 0, l = this.length; i < l; i++ ) {

+					callback.call(

+						table ?

+							root(this[i], first) :

+							this[i],

+						results.cacheable || this.length > 1 || i > 0 ?

+							results.fragment.cloneNode(true) :

+							results.fragment

+					);

+				}

+			}

+

+			if ( scripts ) {

+				jQuery.each( scripts, evalScript );

+			}

+		}

+

+		return this;

+

+		function root( elem, cur ) {

+			return jQuery.nodeName(elem, "table") ?

+				(elem.getElementsByTagName("tbody")[0] ||

+				elem.appendChild(elem.ownerDocument.createElement("tbody"))) :

+				elem;

+		}

+	}

+});

+

+function cloneCopyEvent(orig, ret) {

+	var i = 0;

+

+	ret.each(function() {

+		if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {

+			return;

+		}

+

+		var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events;

+

+		if ( events ) {

+			delete curData.handle;

+			curData.events = {};

+

+			for ( var type in events ) {

+				for ( var handler in events[ type ] ) {

+					jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );

+				}

+			}

+		}

+	});

+}

+

+function buildFragment( args, nodes, scripts ) {

+	var fragment, cacheable, cacheresults, doc;

+

+	// webkit does not clone 'checked' attribute of radio inputs on cloneNode, so don't cache if string has a checked

+	if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && args[0].indexOf("<option") < 0 && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {

+		cacheable = true;

+		cacheresults = jQuery.fragments[ args[0] ];

+		if ( cacheresults ) {

+			if ( cacheresults !== 1 ) {

+				fragment = cacheresults;

+			}

+		}

+	}

+

+	if ( !fragment ) {

+		doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);

+		fragment = doc.createDocumentFragment();

+		jQuery.clean( args, doc, fragment, scripts );

+	}

+

+	if ( cacheable ) {

+		jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;

+	}

+

+	return { fragment: fragment, cacheable: cacheable };

+}

+

+jQuery.fragments = {};

+

+//	jQuery.each({

+//		appendTo: "append",

+//		prependTo: "prepend",

+//		insertBefore: "before",

+//		insertAfter: "after",

+//		replaceAll: "replaceWith"

+//	}, function( name, original ) {

+//		jQuery.fn[ name ] = function( selector ) {

+//			var ret = [], insert = jQuery( selector );

+

+//			for ( var i = 0, l = insert.length; i < l; i++ ) {

+//				var elems = (i > 0 ? this.clone(true) : this).get();

+//				jQuery.fn[ original ].apply( jQuery(insert[i]), elems );

+//				ret = ret.concat( elems );

+//			}

+//			return this.pushStack( ret, name, insert.selector );

+//		};

+//	});

+

+jQuery.fn[ "appendTo" ] = function( selector ) {

+	///	<summary>

+	///		Append all of the matched elements to another, specified, set of elements.

+	///		As of jQuery 1.3.2, returns all of the inserted elements.

+	///		This operation is, essentially, the reverse of doing a regular

+	///		$(A).append(B), in that instead of appending B to A, you're appending

+	///		A to B.

+	///	</summary>

+	///	<param name="selector" type="Selector">

+	///		 target to which the content will be appended.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var ret = [], insert = jQuery( selector );

+

+	for ( var i = 0, l = insert.length; i < l; i++ ) {

+		var elems = (i > 0 ? this.clone(true) : this).get();

+		jQuery.fn[ "append" ].apply( jQuery(insert[i]), elems );

+		ret = ret.concat( elems );

+	}

+	return this.pushStack( ret, "appendTo", insert.selector );

+};

+

+jQuery.fn[ "prependTo" ] = function( selector ) {

+	///	<summary>

+	///		Prepend all of the matched elements to another, specified, set of elements.

+	///		As of jQuery 1.3.2, returns all of the inserted elements.

+	///		This operation is, essentially, the reverse of doing a regular

+	///		$(A).prepend(B), in that instead of prepending B to A, you're prepending

+	///		A to B.

+	///	</summary>

+	///	<param name="selector" type="Selector">

+	///		 target to which the content will be appended.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var ret = [], insert = jQuery( selector );

+

+	for ( var i = 0, l = insert.length; i < l; i++ ) {

+		var elems = (i > 0 ? this.clone(true) : this).get();

+		jQuery.fn[ "prepend" ].apply( jQuery(insert[i]), elems );

+		ret = ret.concat( elems );

+	}

+	return this.pushStack( ret, "prependTo", insert.selector );

+};

+

+jQuery.fn[ "insertBefore" ] = function( selector ) {

+	///	<summary>

+	///		Insert all of the matched elements before another, specified, set of elements.

+	///		As of jQuery 1.3.2, returns all of the inserted elements.

+	///		This operation is, essentially, the reverse of doing a regular

+	///		$(A).before(B), in that instead of inserting B before A, you're inserting

+	///		A before B.

+	///	</summary>

+	///	<param name="content" type="String">

+	///		 Content after which the selected element(s) is inserted.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var ret = [], insert = jQuery( selector );

+

+	for ( var i = 0, l = insert.length; i < l; i++ ) {

+		var elems = (i > 0 ? this.clone(true) : this).get();

+		jQuery.fn[ "before" ].apply( jQuery(insert[i]), elems );

+		ret = ret.concat( elems );

+	}

+	return this.pushStack( ret, "insertBefore", insert.selector );

+};

+

+jQuery.fn[ "insertAfter" ] = function( selector ) {

+	///	<summary>

+	///		Insert all of the matched elements after another, specified, set of elements.

+	///		As of jQuery 1.3.2, returns all of the inserted elements.

+	///		This operation is, essentially, the reverse of doing a regular

+	///		$(A).after(B), in that instead of inserting B after A, you're inserting

+	///		A after B.

+	///	</summary>

+	///	<param name="content" type="String">

+	///		 Content after which the selected element(s) is inserted.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var ret = [], insert = jQuery( selector );

+

+	for ( var i = 0, l = insert.length; i < l; i++ ) {

+		var elems = (i > 0 ? this.clone(true) : this).get();

+		jQuery.fn[ "after" ].apply( jQuery(insert[i]), elems );

+		ret = ret.concat( elems );

+	}

+	return this.pushStack( ret, "insertAfter", insert.selector );

+};

+

+jQuery.fn[ "replaceAll" ] = function( selector ) {

+	///	<summary>

+	///		Replaces the elements matched by the specified selector with the matched elements.

+	///		As of jQuery 1.3.2, returns all of the inserted elements.

+	///	</summary>

+	///	<param name="selector" type="Selector">The elements to find and replace the matched elements with.</param>

+	///	<returns type="jQuery" />

+

+	var ret = [], insert = jQuery( selector );

+

+	for ( var i = 0, l = insert.length; i < l; i++ ) {

+		var elems = (i > 0 ? this.clone(true) : this).get();

+		jQuery.fn[ "replaceWith" ].apply( jQuery(insert[i]), elems );

+		ret = ret.concat( elems );

+	}

+	return this.pushStack( ret, "replaceAll", insert.selector );

+};

+

+jQuery.each({

+	// keepData is for internal use only--do not document

+	remove: function( selector, keepData ) {

+		if ( !selector || jQuery.filter( selector, [ this ] ).length ) {

+			if ( !keepData && this.nodeType === 1 ) {

+				jQuery.cleanData( this.getElementsByTagName("*") );

+				jQuery.cleanData( [ this ] );

+			}

+

+			if ( this.parentNode ) {

+				 this.parentNode.removeChild( this );

+			}

+		}

+	},

+

+	empty: function() {

+		///	<summary>

+		///		Removes all child nodes from the set of matched elements.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		// Remove element nodes and prevent memory leaks

+		if ( this.nodeType === 1 ) {

+			jQuery.cleanData( this.getElementsByTagName("*") );

+		}

+

+		// Remove any remaining nodes

+		while ( this.firstChild ) {

+			this.removeChild( this.firstChild );

+		}

+	}

+}, function( name, fn ) {

+	jQuery.fn[ name ] = function() {

+		return this.each( fn, arguments );

+	};

+});

+

+jQuery.extend({

+	clean: function( elems, context, fragment, scripts ) {

+		///	<summary>

+		///		This method is internal only.

+		///	</summary>

+		///	<private />

+

+		context = context || document;

+

+		// !context.createElement fails in IE with an error but returns typeof 'object'

+		if ( typeof context.createElement === "undefined" ) {

+			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;

+		}

+

+		var ret = [];

+

+		jQuery.each(elems, function( i, elem ) {

+			if ( typeof elem === "number" ) {

+				elem += "";

+			}

+

+			if ( !elem ) {

+				return;

+			}

+

+			// Convert html string into DOM nodes

+			if ( typeof elem === "string" && !rhtml.test( elem ) ) {

+				elem = context.createTextNode( elem );

+

+			} else if ( typeof elem === "string" ) {

+				// Fix "XHTML"-style tags in all browsers

+				elem = elem.replace(rxhtmlTag, fcloseTag);

+

+				// Trim whitespace, otherwise indexOf won't work as expected

+				var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),

+					wrap = wrapMap[ tag ] || wrapMap._default,

+					depth = wrap[0],

+					div = context.createElement("div");

+

+				// Go to html and back, then peel off extra wrappers

+				div.innerHTML = wrap[1] + elem + wrap[2];

+

+				// Move to the right depth

+				while ( depth-- ) {

+					div = div.lastChild;

+				}

+

+				// Remove IE's autoinserted <tbody> from table fragments

+				if ( !jQuery.support.tbody ) {

+

+					// String was a <table>, *may* have spurious <tbody>

+					var hasBody = rtbody.test(elem),

+						tbody = tag === "table" && !hasBody ?

+							div.firstChild && div.firstChild.childNodes :

+

+							// String was a bare <thead> or <tfoot>

+							wrap[1] === "<table>" && !hasBody ?

+								div.childNodes :

+								[];

+

+					for ( var j = tbody.length - 1; j >= 0 ; --j ) {

+						if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {

+							tbody[ j ].parentNode.removeChild( tbody[ j ] );

+						}

+					}

+

+				}

+

+				// IE completely kills leading whitespace when innerHTML is used

+				if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {

+					div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );

+				}

+

+				elem = jQuery.makeArray( div.childNodes );

+			}

+

+			if ( elem.nodeType ) {

+				ret.push( elem );

+			} else {

+				ret = jQuery.merge( ret, elem );

+			}

+

+		});

+

+		if ( fragment ) {

+			for ( var i = 0; ret[i]; i++ ) {

+				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {

+					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );

+				} else {

+					if ( ret[i].nodeType === 1 ) {

+						ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );

+					}

+					fragment.appendChild( ret[i] );

+				}

+			}

+		}

+

+		return ret;

+	},

+	

+	cleanData: function( elems ) {

+		for ( var i = 0, elem, id; (elem = elems[i]) != null; i++ ) {

+			jQuery.event.remove( elem );

+			jQuery.removeData( elem );

+		}

+	}

+});

+// exclude the following css properties to add px

+var rexclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,

+	ralpha = /alpha\([^)]*\)/,

+	ropacity = /opacity=([^)]*)/,

+	rfloat = /float/i,

+	rdashAlpha = /-([a-z])/ig,

+	rupper = /([A-Z])/g,

+	rnumpx = /^-?\d+(?:px)?$/i,

+	rnum = /^-?\d/,

+

+	cssShow = { position: "absolute", visibility: "hidden", display:"block" },

+	cssWidth = [ "Left", "Right" ],

+	cssHeight = [ "Top", "Bottom" ],

+

+	// cache check for defaultView.getComputedStyle

+	getComputedStyle = document.defaultView && document.defaultView.getComputedStyle,

+	// normalize float css property

+	styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat",

+	fcamelCase = function( all, letter ) {

+		return letter.toUpperCase();

+	};

+

+jQuery.fn.css = function( name, value ) {

+	///	<summary>

+	///		Set a single style property to a value, on all matched elements.

+	///		If a number is provided, it is automatically converted into a pixel value.

+	///		Part of CSS

+	///	</summary>

+	///	<returns type="jQuery" />

+	///	<param name="name" type="String">

+	///		A CSS property name.

+	///	</param>

+	///	<param name="value" type="String">

+	///		A value to set for the property.

+	///	</param>

+

+	return access( this, name, value, true, function( elem, name, value ) {

+		if ( value === undefined ) {

+			return jQuery.curCSS( elem, name );

+		}

+		

+		if ( typeof value === "number" && !rexclude.test(name) ) {

+			value += "px";

+		}

+

+		jQuery.style( elem, name, value );

+	});

+};

+

+jQuery.extend({

+	style: function( elem, name, value ) {

+		// don't set styles on text and comment nodes

+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {

+			return undefined;

+		}

+

+		// ignore negative width and height values #1599

+		if ( (name === "width" || name === "height") && parseFloat(value) < 0 ) {

+			value = undefined;

+		}

+

+		var style = elem.style || elem, set = value !== undefined;

+

+		// IE uses filters for opacity

+		if ( !jQuery.support.opacity && name === "opacity" ) {

+			if ( set ) {

+				// IE has trouble with opacity if it does not have layout

+				// Force it by setting the zoom level

+				style.zoom = 1;

+

+				// Set the alpha filter to set the opacity

+				var opacity = parseInt( value, 10 ) + "" === "NaN" ? "" : "alpha(opacity=" + value * 100 + ")";

+				var filter = style.filter || jQuery.curCSS( elem, "filter" ) || "";

+				style.filter = ralpha.test(filter) ? filter.replace(ralpha, opacity) : opacity;

+			}

+

+			return style.filter && style.filter.indexOf("opacity=") >= 0 ?

+				(parseFloat( ropacity.exec(style.filter)[1] ) / 100) + "":

+				"";

+		}

+

+		// Make sure we're using the right name for getting the float value

+		if ( rfloat.test( name ) ) {

+			name = styleFloat;

+		}

+

+		name = name.replace(rdashAlpha, fcamelCase);

+

+		if ( set ) {

+			style[ name ] = value;

+		}

+

+		return style[ name ];

+	},

+

+	css: function( elem, name, force, extra ) {

+		///	<summary>

+		///		This method is internal only.

+		///	</summary>

+		///	<private />

+

+		if ( name === "width" || name === "height" ) {

+			var val, props = cssShow, which = name === "width" ? cssWidth : cssHeight;

+

+			function getWH() {

+				val = name === "width" ? elem.offsetWidth : elem.offsetHeight;

+

+				if ( extra === "border" ) {

+					return;

+				}

+

+				jQuery.each( which, function() {

+					if ( !extra ) {

+						val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;

+					}

+

+					if ( extra === "margin" ) {

+						val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;

+					} else {

+						val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;

+					}

+				});

+			}

+

+			if ( elem.offsetWidth !== 0 ) {

+				getWH();

+			} else {

+				jQuery.swap( elem, props, getWH );

+			}

+

+			return Math.max(0, Math.round(val));

+		}

+

+		return jQuery.curCSS( elem, name, force );

+	},

+

+	curCSS: function( elem, name, force ) {

+		///	<summary>

+		///		This method is internal only.

+		///	</summary>

+		///	<private />

+

+		var ret, style = elem.style, filter;

+

+		// IE uses filters for opacity

+		if ( !jQuery.support.opacity && name === "opacity" && elem.currentStyle ) {

+			ret = ropacity.test(elem.currentStyle.filter || "") ?

+				(parseFloat(RegExp.$1) / 100) + "" :

+				"";

+

+			return ret === "" ?

+				"1" :

+				ret;

+		}

+

+		// Make sure we're using the right name for getting the float value

+		if ( rfloat.test( name ) ) {

+			name = styleFloat;

+		}

+

+		if ( !force && style && style[ name ] ) {

+			ret = style[ name ];

+

+		} else if ( getComputedStyle ) {

+

+			// Only "float" is needed here

+			if ( rfloat.test( name ) ) {

+				name = "float";

+			}

+

+			name = name.replace( rupper, "-$1" ).toLowerCase();

+

+			var defaultView = elem.ownerDocument.defaultView;

+

+			if ( !defaultView ) {

+				return null;

+			}

+

+			var computedStyle = defaultView.getComputedStyle( elem, null );

+

+			if ( computedStyle ) {

+				ret = computedStyle.getPropertyValue( name );

+			}

+

+			// We should always get a number back from opacity

+			if ( name === "opacity" && ret === "" ) {

+				ret = "1";

+			}

+

+		} else if ( elem.currentStyle ) {

+			var camelCase = name.replace(rdashAlpha, fcamelCase);

+

+			ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];

+

+			// From the awesome hack by Dean Edwards

+			// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291

+

+			// If we're not dealing with a regular pixel number

+			// but a number that has a weird ending, we need to convert it to pixels

+			if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {

+				// Remember the original values

+				var left = style.left, rsLeft = elem.runtimeStyle.left;

+

+				// Put in the new values to get a computed value out

+				elem.runtimeStyle.left = elem.currentStyle.left;

+				style.left = camelCase === "fontSize" ? "1em" : (ret || 0);

+				ret = style.pixelLeft + "px";

+

+				// Revert the changed values

+				style.left = left;

+				elem.runtimeStyle.left = rsLeft;

+			}

+		}

+

+		return ret;

+	},

+

+	// A method for quickly swapping in/out CSS properties to get correct calculations

+	swap: function( elem, options, callback ) {

+		///	<summary>

+		///		Swap in/out style options.

+		///	</summary>

+

+		var old = {};

+

+		// Remember the old values, and insert the new ones

+		for ( var name in options ) {

+			old[ name ] = elem.style[ name ];

+			elem.style[ name ] = options[ name ];

+		}

+

+		callback.call( elem );

+

+		// Revert the old values

+		for ( var name in options ) {

+			elem.style[ name ] = old[ name ];

+		}

+	}

+});

+

+if ( jQuery.expr && jQuery.expr.filters ) {

+	jQuery.expr.filters.hidden = function( elem ) {

+		var width = elem.offsetWidth, height = elem.offsetHeight,

+			skip = elem.nodeName.toLowerCase() === "tr";

+

+		return width === 0 && height === 0 && !skip ?

+			true :

+			width > 0 && height > 0 && !skip ?

+				false :

+				jQuery.curCSS(elem, "display") === "none";

+	};

+

+	jQuery.expr.filters.visible = function( elem ) {

+		return !jQuery.expr.filters.hidden( elem );

+	};

+}

+var jsc = now(),

+	rscript = /<script(.|\s)*?\/script>/gi,

+	rselectTextarea = /select|textarea/i,

+	rinput = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,

+	jsre = /=\?(&|$)/,

+	rquery = /\?/,

+	rts = /(\?|&)_=.*?(&|$)/,

+	rurl = /^(\w+:)?\/\/([^\/?#]+)/,

+	r20 = /%20/g;

+

+jQuery.fn.extend({

+	// Keep a copy of the old load

+	_load: jQuery.fn.load,

+

+	load: function( url, params, callback ) {

+		///	<summary>

+		///		Loads HTML from a remote file and injects it into the DOM.  By default performs a GET request, but if parameters are included

+		///		then a POST will be performed.

+		///	</summary>

+		///	<param name="url" type="String">The URL of the HTML page to load.</param>

+		///	<param name="data" optional="true" type="Map">Key/value pairs that will be sent to the server.</param>

+		///	<param name="callback" optional="true" type="Function">The function called when the AJAX request is complete.  It should map function(responseText, textStatus, XMLHttpRequest) such that this maps the injected DOM element.</param>

+		///	<returns type="jQuery" />

+

+		if ( typeof url !== "string" ) {

+			return this._load( url );

+

+		// Don't do a request if no elements are being requested

+		} else if ( !this.length ) {

+			return this;

+		}

+

+		var off = url.indexOf(" ");

+		if ( off >= 0 ) {

+			var selector = url.slice(off, url.length);

+			url = url.slice(0, off);

+		}

+

+		// Default to a GET request

+		var type = "GET";

+

+		// If the second parameter was provided

+		if ( params ) {

+			// If it's a function

+			if ( jQuery.isFunction( params ) ) {

+				// We assume that it's the callback

+				callback = params;

+				params = null;

+

+			// Otherwise, build a param string

+			} else if ( typeof params === "object" ) {

+				params = jQuery.param( params, jQuery.ajaxSettings.traditional );

+				type = "POST";

+			}

+		}

+

+		var self = this;

+

+		// Request the remote document

+		jQuery.ajax({

+			url: url,

+			type: type,

+			dataType: "html",

+			data: params,

+			complete: function( res, status ) {

+				// If successful, inject the HTML into all the matched elements

+				if ( status === "success" || status === "notmodified" ) {

+					// See if a selector was specified

+					self.html( selector ?

+						// Create a dummy div to hold the results

+						jQuery("<div />")

+							// inject the contents of the document in, removing the scripts

+							// to avoid any 'Permission Denied' errors in IE

+							.append(res.responseText.replace(rscript, ""))

+

+							// Locate the specified elements

+							.find(selector) :

+

+						// If not, just inject the full result

+						res.responseText );

+				}

+

+				if ( callback ) {

+					self.each( callback, [res.responseText, status, res] );

+				}

+			}

+		});

+

+		return this;

+	},

+

+	serialize: function() {

+		///	<summary>

+		///		Serializes a set of input elements into a string of data.

+		///	</summary>

+		///	<returns type="String">The serialized result</returns>

+

+		return jQuery.param(this.serializeArray());

+	},

+	serializeArray: function() {

+		///	<summary>

+		///		Serializes all forms and form elements but returns a JSON data structure.

+		///	</summary>

+		///	<returns type="String">A JSON data structure representing the serialized items.</returns>

+

+		return this.map(function() {

+			return this.elements ? jQuery.makeArray(this.elements) : this;

+		})

+		.filter(function() {

+			return this.name && !this.disabled &&

+				(this.checked || rselectTextarea.test(this.nodeName) ||

+					rinput.test(this.type));

+		})

+		.map(function( i, elem ) {

+			var val = jQuery(this).val();

+

+			return val == null ?

+				null :

+				jQuery.isArray(val) ?

+					jQuery.map( val, function( val, i ) {

+						return { name: elem.name, value: val };

+					}) :

+					{ name: elem.name, value: val };

+		}).get();

+	}

+});

+

+// Attach a bunch of functions for handling common AJAX events

+//	jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o ) {

+//		jQuery.fn[o] = function( f ) {

+//			return this.bind(o, f);

+//		};

+//	});

+

+jQuery.fn["ajaxStart"] = function( f ) {

+	///	<summary>

+	///		Attach a function to be executed whenever an AJAX request begins and there is none already active. This is an Ajax Event.

+	///	</summary>

+	///	<param name="f" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return this.bind("ajaxStart", f);

+};

+

+jQuery.fn["ajaxStop"] = function( f ) {

+	///	<summary>

+	///		Attach a function to be executed whenever all AJAX requests have ended. This is an Ajax Event.

+	///	</summary>

+	///	<param name="f" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return this.bind("ajaxStop", f);

+};

+

+jQuery.fn["ajaxComplete"] = function( f ) {

+	///	<summary>

+	///		Attach a function to be executed whenever an AJAX request completes. This is an Ajax Event.

+	///	</summary>

+	///	<param name="f" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return this.bind("ajaxComplete", f);

+};

+

+jQuery.fn["ajaxError"] = function( f ) {

+	///	<summary>

+	///		Attach a function to be executed whenever an AJAX request fails. This is an Ajax Event.

+	///	</summary>

+	///	<param name="f" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return this.bind("ajaxError", f);

+};

+

+jQuery.fn["ajaxSuccess"] = function( f ) {

+	///	<summary>

+	///		Attach a function to be executed whenever an AJAX request completes successfully. This is an Ajax Event.

+	///	</summary>

+	///	<param name="f" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return this.bind("ajaxSuccess", f);

+};

+

+jQuery.fn["ajaxSend"] = function( f ) {

+	///	<summary>

+	///		Attach a function to be executed before an AJAX request is sent. This is an Ajax Event.

+	///	</summary>

+	///	<param name="f" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return this.bind("ajaxSend", f);

+};

+

+jQuery.extend({

+

+	get: function( url, data, callback, type ) {

+		///	<summary>

+		///		Loads a remote page using an HTTP GET request.

+		///	</summary>

+		///	<param name="url" type="String">The URL of the HTML page to load.</param>

+		///	<param name="data" optional="true" type="Map">Key/value pairs that will be sent to the server.</param>

+		///	<param name="callback" optional="true" type="Function">The function called when the AJAX request is complete.  It should map function(responseText, textStatus) such that this maps the options for this AJAX request.</param>

+		///	<param name="type" optional="true" type="String">Type of data to be returned to callback function.  Valid valiues are xml, html, script, json, text, _default.</param>

+		///	<returns type="XMLHttpRequest" />

+

+		// shift arguments if data argument was omited

+		if ( jQuery.isFunction( data ) ) {

+			type = type || callback;

+			callback = data;

+			data = null;

+		}

+

+		return jQuery.ajax({

+			type: "GET",

+			url: url,

+			data: data,

+			success: callback,

+			dataType: type

+		});

+	},

+

+	getScript: function( url, callback ) {

+		///	<summary>

+		///		Loads and executes a local JavaScript file using an HTTP GET request.

+		///	</summary>

+		///	<param name="url" type="String">The URL of the script to load.</param>

+		///	<param name="callback" optional="true" type="Function">The function called when the AJAX request is complete.  It should map function(data, textStatus) such that this maps the options for the AJAX request.</param>

+		///	<returns type="XMLHttpRequest" />

+

+		return jQuery.get(url, null, callback, "script");

+	},

+

+	getJSON: function( url, data, callback ) {

+		///	<summary>

+		///		Loads JSON data using an HTTP GET request.

+		///	</summary>

+		///	<param name="url" type="String">The URL of the JSON data to load.</param>

+		///	<param name="data" optional="true" type="Map">Key/value pairs that will be sent to the server.</param>

+		///	<param name="callback" optional="true" type="Function">The function called when the AJAX request is complete if the data is loaded successfully.  It should map function(data, textStatus) such that this maps the options for this AJAX request.</param>

+		///	<returns type="XMLHttpRequest" />

+

+		return jQuery.get(url, data, callback, "json");

+	},

+

+	post: function( url, data, callback, type ) {

+		///	<summary>

+		///		Loads a remote page using an HTTP POST request.

+		///	</summary>

+		///	<param name="url" type="String">The URL of the HTML page to load.</param>

+		///	<param name="data" optional="true" type="Map">Key/value pairs that will be sent to the server.</param>

+		///	<param name="callback" optional="true" type="Function">The function called when the AJAX request is complete.  It should map function(responseText, textStatus) such that this maps the options for this AJAX request.</param>

+		///	<param name="type" optional="true" type="String">Type of data to be returned to callback function.  Valid valiues are xml, html, script, json, text, _default.</param>

+		///	<returns type="XMLHttpRequest" />

+

+		// shift arguments if data argument was omited

+		if ( jQuery.isFunction( data ) ) {

+			type = type || callback;

+			callback = data;

+			data = {};

+		}

+

+		return jQuery.ajax({

+			type: "POST",

+			url: url,

+			data: data,

+			success: callback,

+			dataType: type

+		});

+	},

+

+	ajaxSetup: function( settings ) {

+		///	<summary>

+		///		Sets up global settings for AJAX requests.

+		///	</summary>

+		///	<param name="settings" type="Options">A set of key/value pairs that configure the default Ajax request.</param>

+

+		jQuery.extend( jQuery.ajaxSettings, settings );

+	},

+

+	ajaxSettings: {

+		url: location.href,

+		global: true,

+		type: "GET",

+		contentType: "application/x-www-form-urlencoded",

+		processData: true,

+		async: true,

+		/*

+		timeout: 0,

+		data: null,

+		username: null,

+		password: null,

+		traditional: false,

+		*/

+		// Create the request object; Microsoft failed to properly

+		// implement the XMLHttpRequest in IE7 (can't request local files),

+		// so we use the ActiveXObject when it is available

+		// This function can be overriden by calling jQuery.ajaxSetup

+		xhr: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ?

+			function() {

+				return new window.XMLHttpRequest();

+			} :

+			function() {

+				try {

+					return new window.ActiveXObject("Microsoft.XMLHTTP");

+				} catch(e) {}

+			},

+		accepts: {

+			xml: "application/xml, text/xml",

+			html: "text/html",

+			script: "text/javascript, application/javascript",

+			json: "application/json, text/javascript",

+			text: "text/plain",

+			_default: "*/*"

+		}

+	},

+

+	// Last-Modified header cache for next request

+	lastModified: {},

+	etag: {},

+

+	ajax: function( origSettings ) {

+		///	<summary>

+		///		Load a remote page using an HTTP request.

+		///	</summary>

+		///	<private />

+

+		var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings);

+		

+		var jsonp, status, data,

+			callbackContext = origSettings && origSettings.context || s,

+			type = s.type.toUpperCase();

+

+		// convert data if not already a string

+		if ( s.data && s.processData && typeof s.data !== "string" ) {

+			s.data = jQuery.param( s.data, s.traditional );

+		}

+

+		// Handle JSONP Parameter Callbacks

+		if ( s.dataType === "jsonp" ) {

+			if ( type === "GET" ) {

+				if ( !jsre.test( s.url ) ) {

+					s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?";

+				}

+			} else if ( !s.data || !jsre.test(s.data) ) {

+				s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";

+			}

+			s.dataType = "json";

+		}

+

+		// Build temporary JSONP function

+		if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) {

+			jsonp = s.jsonpCallback || ("jsonp" + jsc++);

+

+			// Replace the =? sequence both in the query string and the data

+			if ( s.data ) {

+				s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");

+			}

+

+			s.url = s.url.replace(jsre, "=" + jsonp + "$1");

+

+			// We need to make sure

+			// that a JSONP style response is executed properly

+			s.dataType = "script";

+

+			// Handle JSONP-style loading

+			window[ jsonp ] = window[ jsonp ] || function( tmp ) {

+				data = tmp;

+				success();

+				complete();

+				// Garbage collect

+				window[ jsonp ] = undefined;

+

+				try {

+					delete window[ jsonp ];

+				} catch(e) {}

+

+				if ( head ) {

+					head.removeChild( script );

+				}

+			};

+		}

+

+		if ( s.dataType === "script" && s.cache === null ) {

+			s.cache = false;

+		}

+

+		if ( s.cache === false && type === "GET" ) {

+			var ts = now();

+

+			// try replacing _= if it is there

+			var ret = s.url.replace(rts, "$1_=" + ts + "$2");

+

+			// if nothing was replaced, add timestamp to the end

+			s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");

+		}

+

+		// If data is available, append data to url for get requests

+		if ( s.data && type === "GET" ) {

+			s.url += (rquery.test(s.url) ? "&" : "?") + s.data;

+		}

+

+		// Watch for a new set of requests

+		if ( s.global && ! jQuery.active++ ) {

+			jQuery.event.trigger( "ajaxStart" );

+		}

+

+		// Matches an absolute URL, and saves the domain

+		var parts = rurl.exec( s.url ),

+			remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);

+

+		// If we're requesting a remote document

+		// and trying to load JSON or Script with a GET

+		if ( s.dataType === "script" && type === "GET" && remote ) {

+			var head = document.getElementsByTagName("head")[0] || document.documentElement;

+			var script = document.createElement("script");

+			script.src = s.url;

+			if ( s.scriptCharset ) {

+				script.charset = s.scriptCharset;

+			}

+

+			// Handle Script loading

+			if ( !jsonp ) {

+				var done = false;

+

+				// Attach handlers for all browsers

+				script.onload = script.onreadystatechange = function() {

+					if ( !done && (!this.readyState ||

+							this.readyState === "loaded" || this.readyState === "complete") ) {

+						done = true;

+						success();

+						complete();

+

+						// Handle memory leak in IE

+						script.onload = script.onreadystatechange = null;

+						if ( head && script.parentNode ) {

+							head.removeChild( script );

+						}

+					}

+				};

+			}

+

+			// Use insertBefore instead of appendChild  to circumvent an IE6 bug.

+			// This arises when a base node is used (#2709 and #4378).

+			head.insertBefore( script, head.firstChild );

+

+			// We handle everything using the script element injection

+			return undefined;

+		}

+

+		var requestDone = false;

+

+		// Create the request object

+		var xhr = s.xhr();

+

+		if ( !xhr ) {

+			return;

+		}

+

+		// Open the socket

+		// Passing null username, generates a login popup on Opera (#2865)

+		if ( s.username ) {

+			xhr.open(type, s.url, s.async, s.username, s.password);

+		} else {

+			xhr.open(type, s.url, s.async);

+		}

+

+		// Need an extra try/catch for cross domain requests in Firefox 3

+		try {

+			// Set the correct header, if data is being sent

+			if ( s.data || origSettings && origSettings.contentType ) {

+				xhr.setRequestHeader("Content-Type", s.contentType);

+			}

+

+			// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.

+			if ( s.ifModified ) {

+				if ( jQuery.lastModified[s.url] ) {

+					xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);

+				}

+

+				if ( jQuery.etag[s.url] ) {

+					xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);

+				}

+			}

+

+			// Set header so the called script knows that it's an XMLHttpRequest

+			// Only send the header if it's not a remote XHR

+			if ( !remote ) {

+				xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");

+			}

+

+			// Set the Accepts header for the server, depending on the dataType

+			xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?

+				s.accepts[ s.dataType ] + ", */*" :

+				s.accepts._default );

+		} catch(e) {}

+

+		// Allow custom headers/mimetypes and early abort

+		if ( s.beforeSend && s.beforeSend.call(callbackContext, xhr, s) === false ) {

+			// Handle the global AJAX counter

+			if ( s.global && ! --jQuery.active ) {

+				jQuery.event.trigger( "ajaxStop" );

+			}

+

+			// close opended socket

+			xhr.abort();

+			return false;

+		}

+

+		if ( s.global ) {

+			trigger("ajaxSend", [xhr, s]);

+		}

+

+		// Wait for a response to come back

+		var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) {

+			// The request was aborted

+			if ( !xhr || xhr.readyState === 0 || isTimeout === "abort" ) {

+				// Opera doesn't call onreadystatechange before this point

+				// so we simulate the call

+				if ( !requestDone ) {

+					complete();

+				}

+

+				requestDone = true;

+				if ( xhr ) {

+					xhr.onreadystatechange = jQuery.noop;

+				}

+

+			// The transfer is complete and the data is available, or the request timed out

+			} else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {

+				requestDone = true;

+				xhr.onreadystatechange = jQuery.noop;

+

+				status = isTimeout === "timeout" ?

+					"timeout" :

+					!jQuery.httpSuccess( xhr ) ?

+						"error" :

+						s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?

+							"notmodified" :

+							"success";

+

+				var errMsg;

+

+				if ( status === "success" ) {

+					// Watch for, and catch, XML document parse errors

+					try {

+						// process the data (runs the xml through httpData regardless of callback)

+						data = jQuery.httpData( xhr, s.dataType, s );

+					} catch(err) {

+						status = "parsererror";

+						errMsg = err;

+					}

+				}

+

+				// Make sure that the request was successful or notmodified

+				if ( status === "success" || status === "notmodified" ) {

+					// JSONP handles its own success callback

+					if ( !jsonp ) {

+						success();

+					}

+				} else {

+					jQuery.handleError(s, xhr, status, errMsg);

+				}

+

+				// Fire the complete handlers

+				complete();

+

+				if ( isTimeout === "timeout" ) {

+					xhr.abort();

+				}

+

+				// Stop memory leaks

+				if ( s.async ) {

+					xhr = null;

+				}

+			}

+		};

+

+		// Override the abort handler, if we can (IE doesn't allow it, but that's OK)

+		// Opera doesn't fire onreadystatechange at all on abort

+		try {

+			var oldAbort = xhr.abort;

+			xhr.abort = function() {

+				if ( xhr ) {

+					oldAbort.call( xhr );

+				}

+

+				onreadystatechange( "abort" );

+			};

+		} catch(e) { }

+

+		// Timeout checker

+		if ( s.async && s.timeout > 0 ) {

+			setTimeout(function() {

+				// Check to see if the request is still happening

+				if ( xhr && !requestDone ) {

+					onreadystatechange( "timeout" );

+				}

+			}, s.timeout);

+		}

+

+		// Send the data

+		try {

+			xhr.send( type === "POST" || type === "PUT" || type === "DELETE" ? s.data : null );

+		} catch(e) {

+			jQuery.handleError(s, xhr, null, e);

+			// Fire the complete handlers

+			complete();

+		}

+

+		// firefox 1.5 doesn't fire statechange for sync requests

+		if ( !s.async ) {

+			onreadystatechange();

+		}

+

+		function success() {

+			// If a local callback was specified, fire it and pass it the data

+			if ( s.success ) {

+				s.success.call( callbackContext, data, status, xhr );

+			}

+

+			// Fire the global callback

+			if ( s.global ) {

+				trigger( "ajaxSuccess", [xhr, s] );

+			}

+		}

+

+		function complete() {

+			// Process result

+			if ( s.complete ) {

+				s.complete.call( callbackContext, xhr, status);

+			}

+

+			// The request was completed

+			if ( s.global ) {

+				trigger( "ajaxComplete", [xhr, s] );

+			}

+

+			// Handle the global AJAX counter

+			if ( s.global && ! --jQuery.active ) {

+				jQuery.event.trigger( "ajaxStop" );

+			}

+		}

+		

+		function trigger(type, args) {

+			(s.context ? jQuery(s.context) : jQuery.event).trigger(type, args);

+		}

+

+		// return XMLHttpRequest to allow aborting the request etc.

+		return xhr;

+	},

+

+	handleError: function( s, xhr, status, e ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		// If a local callback was specified, fire it

+		if ( s.error ) {

+			s.error.call( s.context || s, xhr, status, e );

+		}

+

+		// Fire the global callback

+		if ( s.global ) {

+			(s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );

+		}

+	},

+

+	// Counter for holding the number of active queries

+	active: 0,

+

+	// Determines if an XMLHttpRequest was successful or not

+	httpSuccess: function( xhr ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		try {

+			// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450

+			return !xhr.status && location.protocol === "file:" ||

+				// Opera returns 0 when status is 304

+				( xhr.status >= 200 && xhr.status < 300 ) ||

+				xhr.status === 304 || xhr.status === 1223 || xhr.status === 0;

+		} catch(e) {}

+

+		return false;

+	},

+

+	// Determines if an XMLHttpRequest returns NotModified

+	httpNotModified: function( xhr, url ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		var lastModified = xhr.getResponseHeader("Last-Modified"),

+			etag = xhr.getResponseHeader("Etag");

+

+		if ( lastModified ) {

+			jQuery.lastModified[url] = lastModified;

+		}

+

+		if ( etag ) {

+			jQuery.etag[url] = etag;

+		}

+

+		// Opera returns 0 when status is 304

+		return xhr.status === 304 || xhr.status === 0;

+	},

+

+	httpData: function( xhr, type, s ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		var ct = xhr.getResponseHeader("content-type") || "",

+			xml = type === "xml" || !type && ct.indexOf("xml") >= 0,

+			data = xml ? xhr.responseXML : xhr.responseText;

+

+		if ( xml && data.documentElement.nodeName === "parsererror" ) {

+			jQuery.error( "parsererror" );

+		}

+

+		// Allow a pre-filtering function to sanitize the response

+		// s is checked to keep backwards compatibility

+		if ( s && s.dataFilter ) {

+			data = s.dataFilter( data, type );

+		}

+

+		// The filter can actually parse the response

+		if ( typeof data === "string" ) {

+			// Get the JavaScript object, if JSON is used.

+			if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {

+				data = jQuery.parseJSON( data );

+

+			// If the type is "script", eval it in global context

+			} else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) {

+				jQuery.globalEval( data );

+			}

+		}

+

+		return data;

+	},

+

+	// Serialize an array of form elements or a set of

+	// key/values into a query string

+	param: function( a, traditional ) {

+		///	<summary>

+		///		Create a serialized representation of an array or object, suitable for use in a URL

+		///		query string or Ajax request.

+		///	</summary>

+		///	<param name="a" type="Object">

+		///		An array or object to serialize.

+		///	</param>

+		///	<param name="traditional" type="Boolean">

+		///		A Boolean indicating whether to perform a traditional "shallow" serialization.

+		///	</param>

+		///	<returns type="String" />

+

+		var s = [];

+		

+		// Set traditional to true for jQuery <= 1.3.2 behavior.

+		if ( traditional === undefined ) {

+			traditional = jQuery.ajaxSettings.traditional;

+		}

+		

+		// If an array was passed in, assume that it is an array of form elements.

+		if ( jQuery.isArray(a) || a.jquery ) {

+			// Serialize the form elements

+			jQuery.each( a, function() {

+				add( this.name, this.value );

+			});

+			

+		} else {

+			// If traditional, encode the "old" way (the way 1.3.2 or older

+			// did it), otherwise encode params recursively.

+			for ( var prefix in a ) {

+				buildParams( prefix, a[prefix] );

+			}

+		}

+

+		// Return the resulting serialization

+		return s.join("&").replace(r20, "+");

+

+		function buildParams( prefix, obj ) {

+			if ( jQuery.isArray(obj) ) {

+				// Serialize array item.

+				jQuery.each( obj, function( i, v ) {

+					if ( traditional ) {

+						// Treat each array item as a scalar.

+						add( prefix, v );

+					} else {

+						// If array item is non-scalar (array or object), encode its

+						// numeric index to resolve deserialization ambiguity issues.

+						// Note that rack (as of 1.0.0) can't currently deserialize

+						// nested arrays properly, and attempting to do so may cause

+						// a server error. Possible fixes are to modify rack's

+						// deserialization algorithm or to provide an option or flag

+						// to force array serialization to be shallow.

+						buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v );

+					}

+				});

+					

+			} else if ( !traditional && obj != null && typeof obj === "object" ) {

+				// Serialize object item.

+				jQuery.each( obj, function( k, v ) {

+					buildParams( prefix + "[" + k + "]", v );

+				});

+					

+			} else {

+				// Serialize scalar item.

+				add( prefix, obj );

+			}

+		}

+

+		function add( key, value ) {

+			// If value is a function, invoke it and return its value

+			value = jQuery.isFunction(value) ? value() : value;

+			s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);

+		}

+	}

+});

+var elemdisplay = {},

+	rfxtypes = /toggle|show|hide/,

+	rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/,

+	timerId,

+	fxAttrs = [

+		// height animations

+		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],

+		// width animations

+		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],

+		// opacity animations

+		[ "opacity" ]

+	];

+

+jQuery.fn.extend({

+	show: function( speed, callback ) {

+		///	<summary>

+		///		Show all matched elements using a graceful animation and firing an optional callback after completion.

+		///	</summary>

+		///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+		///		the number of milliseconds to run the animation</param>

+		///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+		///	<returns type="jQuery" />

+

+		if ( speed || speed === 0) {

+			return this.animate( genFx("show", 3), speed, callback);

+

+		} else {

+			for ( var i = 0, l = this.length; i < l; i++ ) {

+				var old = jQuery.data(this[i], "olddisplay");

+

+				this[i].style.display = old || "";

+

+				if ( jQuery.css(this[i], "display") === "none" ) {

+					var nodeName = this[i].nodeName, display;

+

+					if ( elemdisplay[ nodeName ] ) {

+						display = elemdisplay[ nodeName ];

+

+					} else {

+						var elem = jQuery("<" + nodeName + " />").appendTo("body");

+

+						display = elem.css("display");

+

+						if ( display === "none" ) {

+							display = "block";

+						}

+

+						elem.remove();

+

+						elemdisplay[ nodeName ] = display;

+					}

+

+					jQuery.data(this[i], "olddisplay", display);

+				}

+			}

+

+			// Set the display of the elements in a second loop

+			// to avoid the constant reflow

+			for ( var j = 0, k = this.length; j < k; j++ ) {

+				this[j].style.display = jQuery.data(this[j], "olddisplay") || "";

+			}

+

+			return this;

+		}

+	},

+

+	hide: function( speed, callback ) {

+		///	<summary>

+		///		Hides all matched elements using a graceful animation and firing an optional callback after completion.

+		///	</summary>

+		///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+		///		the number of milliseconds to run the animation</param>

+		///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+		///	<returns type="jQuery" />

+

+		if ( speed || speed === 0 ) {

+			return this.animate( genFx("hide", 3), speed, callback);

+

+		} else {

+			for ( var i = 0, l = this.length; i < l; i++ ) {

+				var old = jQuery.data(this[i], "olddisplay");

+				if ( !old && old !== "none" ) {

+					jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));

+				}

+			}

+

+			// Set the display of the elements in a second loop

+			// to avoid the constant reflow

+			for ( var j = 0, k = this.length; j < k; j++ ) {

+				this[j].style.display = "none";

+			}

+

+			return this;

+		}

+	},

+

+	// Save the old toggle function

+	_toggle: jQuery.fn.toggle,

+

+	toggle: function( fn, fn2 ) {

+		///	<summary>

+		///		Toggles displaying each of the set of matched elements.

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		var bool = typeof fn === "boolean";

+

+		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {

+			this._toggle.apply( this, arguments );

+

+		} else if ( fn == null || bool ) {

+			this.each(function() {

+				var state = bool ? fn : jQuery(this).is(":hidden");

+				jQuery(this)[ state ? "show" : "hide" ]();

+			});

+

+		} else {

+			this.animate(genFx("toggle", 3), fn, fn2);

+		}

+

+		return this;

+	},

+

+	fadeTo: function( speed, to, callback ) {

+		///	<summary>

+		///		Fades the opacity of all matched elements to a specified opacity.

+		///	</summary>

+		///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+		///		the number of milliseconds to run the animation</param>

+		///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+		///	<returns type="jQuery" />

+

+		return this.filter(":hidden").css("opacity", 0).show().end()

+					.animate({opacity: to}, speed, callback);

+	},

+

+	animate: function( prop, speed, easing, callback ) {

+		///	<summary>

+		///		A function for making custom animations.

+		///	</summary>

+		///	<param name="prop" type="Options">A set of style attributes that you wish to animate and to what end.</param>

+		///	<param name="speed" optional="true" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+		///		the number of milliseconds to run the animation</param>

+		///	<param name="easing" optional="true" type="String">The name of the easing effect that you want to use.  There are two built-in values, 'linear' and 'swing'.</param>

+		///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+		///	<returns type="jQuery" />

+

+		var optall = jQuery.speed(speed, easing, callback);

+

+		if ( jQuery.isEmptyObject( prop ) ) {

+			return this.each( optall.complete );

+		}

+

+		return this[ optall.queue === false ? "each" : "queue" ](function() {

+			var opt = jQuery.extend({}, optall), p,

+				hidden = this.nodeType === 1 && jQuery(this).is(":hidden"),

+				self = this;

+

+			for ( p in prop ) {

+				var name = p.replace(rdashAlpha, fcamelCase);

+

+				if ( p !== name ) {

+					prop[ name ] = prop[ p ];

+					delete prop[ p ];

+					p = name;

+				}

+

+				if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {

+					return opt.complete.call(this);

+				}

+

+				if ( ( p === "height" || p === "width" ) && this.style ) {

+					// Store display property

+					opt.display = jQuery.css(this, "display");

+

+					// Make sure that nothing sneaks out

+					opt.overflow = this.style.overflow;

+				}

+

+				if ( jQuery.isArray( prop[p] ) ) {

+					// Create (if needed) and add to specialEasing

+					(opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1];

+					prop[p] = prop[p][0];

+				}

+			}

+

+			if ( opt.overflow != null ) {

+				this.style.overflow = "hidden";

+			}

+

+			opt.curAnim = jQuery.extend({}, prop);

+

+			jQuery.each( prop, function( name, val ) {

+				var e = new jQuery.fx( self, opt, name );

+

+				if ( rfxtypes.test(val) ) {

+					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop );

+

+				} else {

+					var parts = rfxnum.exec(val),

+						start = e.cur(true) || 0;

+

+					if ( parts ) {

+						var end = parseFloat( parts[2] ),

+							unit = parts[3] || "px";

+

+						// We need to compute starting value

+						if ( unit !== "px" ) {

+							self.style[ name ] = (end || 1) + unit;

+							start = ((end || 1) / e.cur(true)) * start;

+							self.style[ name ] = start + unit;

+						}

+

+						// If a +=/-= token was provided, we're doing a relative animation

+						if ( parts[1] ) {

+							end = ((parts[1] === "-=" ? -1 : 1) * end) + start;

+						}

+

+						e.custom( start, end, unit );

+

+					} else {

+						e.custom( start, val, "" );

+					}

+				}

+			});

+

+			// For JS strict compliance

+			return true;

+		});

+	},

+

+	stop: function( clearQueue, gotoEnd ) {

+		///	<summary>

+		///		Stops all currently animations on the specified elements.

+		///	</summary>

+		///	<param name="clearQueue" optional="true" type="Boolean">True to clear animations that are queued to run.</param>

+		///	<param name="gotoEnd" optional="true" type="Boolean">True to move the element value to the end of its animation target.</param>

+		///	<returns type="jQuery" />

+

+		var timers = jQuery.timers;

+

+		if ( clearQueue ) {

+			this.queue([]);

+		}

+

+		this.each(function() {

+			// go in reverse order so anything added to the queue during the loop is ignored

+			for ( var i = timers.length - 1; i >= 0; i-- ) {

+				if ( timers[i].elem === this ) {

+					if (gotoEnd) {

+						// force the next step to be the last

+						timers[i](true);

+					}

+

+					timers.splice(i, 1);

+				}

+			}

+		});

+

+		// start the next in the queue if the last step wasn't forced

+		if ( !gotoEnd ) {

+			this.dequeue();

+		}

+

+		return this;

+	}

+

+});

+

+// Generate shortcuts for custom animations

+//	jQuery.each({

+//		slideDown: genFx("show", 1),

+//		slideUp: genFx("hide", 1),

+//		slideToggle: genFx("toggle", 1),

+//		fadeIn: { opacity: "show" },

+//		fadeOut: { opacity: "hide" }

+//	}, function( name, props ) {

+//		jQuery.fn[ name ] = function( speed, callback ) {

+//			return this.animate( props, speed, callback );

+//		};

+//	});

+

+jQuery.fn[ "slideDown" ] = function( speed, callback ) {

+	///	<summary>

+	///		Reveal all matched elements by adjusting their height.

+	///	</summary>

+	///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+	///		the number of milliseconds to run the animation</param>

+	///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+	///	<returns type="jQuery" />

+

+	return this.animate( genFx("show", 1), speed, callback );

+};

+

+jQuery.fn[ "slideUp" ] = function( speed, callback ) {

+	///	<summary>

+	///		Hiding all matched elements by adjusting their height.

+	///	</summary>

+	///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+	///		the number of milliseconds to run the animation</param>

+	///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+	///	<returns type="jQuery" />

+

+	return this.animate( genFx("hide", 1), speed, callback );

+};

+

+jQuery.fn[ "slideToggle" ] = function( speed, callback ) {

+	///	<summary>

+	///		Toggles the visibility of all matched elements by adjusting their height.

+	///	</summary>

+	///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+	///		the number of milliseconds to run the animation</param>

+	///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+	///	<returns type="jQuery" />

+

+	return this.animate( genFx("toggle", 1), speed, callback );

+};

+

+jQuery.fn[ "fadeIn" ] = function( speed, callback ) {

+	///	<summary>

+	///		Fades in all matched elements by adjusting their opacity.

+	///	</summary>

+	///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+	///		the number of milliseconds to run the animation</param>

+	///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+	///	<returns type="jQuery" />

+

+	return this.animate( { opacity: "show" }, speed, callback );

+};

+

+jQuery.fn[ "fadeOut" ] = function( speed, callback ) {

+	///	<summary>

+	///		Fades the opacity of all matched elements to a specified opacity.

+	///	</summary>

+	///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+	///		the number of milliseconds to run the animation</param>

+	///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+	///	<returns type="jQuery" />

+

+	return this.animate( { opacity: "hide" }, speed, callback );

+};

+

+jQuery.extend({

+	speed: function( speed, easing, fn ) {

+		///	<summary>

+		///		This member is internal.

+		///	</summary>

+		///	<private />

+

+		var opt = speed && typeof speed === "object" ? speed : {

+			complete: fn || !fn && easing ||

+				jQuery.isFunction( speed ) && speed,

+			duration: speed,

+			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing

+		};

+

+		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :

+			jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;

+

+		// Queueing

+		opt.old = opt.complete;

+		opt.complete = function() {

+			if ( opt.queue !== false ) {

+				jQuery(this).dequeue();

+			}

+			if ( jQuery.isFunction( opt.old ) ) {

+				opt.old.call( this );

+			}

+		};

+

+		return opt;

+	},

+

+	easing: {

+		linear: function( p, n, firstNum, diff ) {

+			///	<summary>

+			///		This member is internal.

+			///	</summary>

+			///	<private />

+

+			return firstNum + diff * p;

+		},

+		swing: function( p, n, firstNum, diff ) {

+			///	<summary>

+			///		This member is internal.

+			///	</summary>

+			///	<private />

+

+			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;

+		}

+	},

+

+	timers: [],

+

+	fx: function( elem, options, prop ) {

+		///	<summary>

+		///		This member is internal.

+		///	</summary>

+		///	<private />

+

+		this.options = options;

+		this.elem = elem;

+		this.prop = prop;

+

+		if ( !options.orig ) {

+			options.orig = {};

+		}

+	}

+

+});

+

+jQuery.fx.prototype = {

+	// Simple function for setting a style value

+	update: function() {

+		///	<summary>

+		///		This member is internal.

+		///	</summary>

+		///	<private />

+

+		if ( this.options.step ) {

+			this.options.step.call( this.elem, this.now, this );

+		}

+

+		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );

+

+		// Set display property to block for height/width animations

+		if ( ( this.prop === "height" || this.prop === "width" ) && this.elem.style ) {

+			this.elem.style.display = "block";

+		}

+	},

+

+	// Get the current size

+	cur: function( force ) {

+		///	<summary>

+		///		This member is internal.

+		///	</summary>

+		///	<private />

+

+		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {

+			return this.elem[ this.prop ];

+		}

+

+		var r = parseFloat(jQuery.css(this.elem, this.prop, force));

+		return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;

+	},

+

+	// Start an animation from one number to another

+	custom: function( from, to, unit ) {

+		this.startTime = now();

+		this.start = from;

+		this.end = to;

+		this.unit = unit || this.unit || "px";

+		this.now = this.start;

+		this.pos = this.state = 0;

+

+		var self = this;

+		function t( gotoEnd ) {

+			return self.step(gotoEnd);

+		}

+

+		t.elem = this.elem;

+

+		if ( t() && jQuery.timers.push(t) && !timerId ) {

+			timerId = setInterval(jQuery.fx.tick, 13);

+		}

+	},

+

+	// Simple 'show' function

+	show: function() {

+		///	<summary>

+		///		Displays each of the set of matched elements if they are hidden.

+		///	</summary>

+

+		// Remember where we started, so that we can go back to it later

+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );

+		this.options.show = true;

+

+		// Begin the animation

+		// Make sure that we start at a small width/height to avoid any

+		// flash of content

+		this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());

+

+		// Start by showing the element

+		jQuery( this.elem ).show();

+	},

+

+	// Simple 'hide' function

+	hide: function() {

+		///	<summary>

+		///		Hides each of the set of matched elements if they are shown.

+		///	</summary>

+

+		// Remember where we started, so that we can go back to it later

+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );

+		this.options.hide = true;

+

+		// Begin the animation

+		this.custom(this.cur(), 0);

+	},

+

+	// Each step of an animation

+	step: function( gotoEnd ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		var t = now(), done = true;

+

+		if ( gotoEnd || t >= this.options.duration + this.startTime ) {

+			this.now = this.end;

+			this.pos = this.state = 1;

+			this.update();

+

+			this.options.curAnim[ this.prop ] = true;

+

+			for ( var i in this.options.curAnim ) {

+				if ( this.options.curAnim[i] !== true ) {

+					done = false;

+				}

+			}

+

+			if ( done ) {

+				if ( this.options.display != null ) {

+					// Reset the overflow

+					this.elem.style.overflow = this.options.overflow;

+

+					// Reset the display

+					var old = jQuery.data(this.elem, "olddisplay");

+					this.elem.style.display = old ? old : this.options.display;

+

+					if ( jQuery.css(this.elem, "display") === "none" ) {

+						this.elem.style.display = "block";

+					}

+				}

+

+				// Hide the element if the "hide" operation was done

+				if ( this.options.hide ) {

+					jQuery(this.elem).hide();

+				}

+

+				// Reset the properties, if the item has been hidden or shown

+				if ( this.options.hide || this.options.show ) {

+					for ( var p in this.options.curAnim ) {

+						jQuery.style(this.elem, p, this.options.orig[p]);

+					}

+				}

+

+				// Execute the complete function

+				this.options.complete.call( this.elem );

+			}

+

+			return false;

+

+		} else {

+			var n = t - this.startTime;

+			this.state = n / this.options.duration;

+

+			// Perform the easing function, defaults to swing

+			var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop];

+			var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear");

+			this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);

+			this.now = this.start + ((this.end - this.start) * this.pos);

+

+			// Perform the next step of the animation

+			this.update();

+		}

+

+		return true;

+	}

+};

+

+jQuery.extend( jQuery.fx, {

+	tick: function() {

+		var timers = jQuery.timers;

+

+		for ( var i = 0; i < timers.length; i++ ) {

+			if ( !timers[i]() ) {

+				timers.splice(i--, 1);

+			}

+		}

+

+		if ( !timers.length ) {

+			jQuery.fx.stop();

+		}

+	},

+		

+	stop: function() {

+		clearInterval( timerId );

+		timerId = null;

+	},

+	

+	speeds: {

+		slow: 600,

+ 		fast: 200,

+ 		// Default speed

+ 		_default: 400

+	},

+

+	step: {

+		opacity: function( fx ) {

+			jQuery.style(fx.elem, "opacity", fx.now);

+		},

+

+		_default: function( fx ) {

+			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {

+				fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;

+			} else {

+				fx.elem[ fx.prop ] = fx.now;

+			}

+		}

+	}

+});

+

+if ( jQuery.expr && jQuery.expr.filters ) {

+	jQuery.expr.filters.animated = function( elem ) {

+		return jQuery.grep(jQuery.timers, function( fn ) {

+			return elem === fn.elem;

+		}).length;

+	};

+}

+

+function genFx( type, num ) {

+	var obj = {};

+

+	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {

+		obj[ this ] = type;

+	});

+

+	return obj;

+}

+if ( "getBoundingClientRect" in document.documentElement ) {

+	jQuery.fn.offset = function( options ) {

+		///	<summary>

+		///		Set the current coordinates of every element in the set of matched elements,

+		///		relative to the document.

+		///	</summary>

+		///	<param name="options" type="Object">

+		///		An object containing the properties top and left, which are integers indicating the

+		///		new top and left coordinates for the elements.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		var elem = this[0];

+

+		if ( options ) { 

+			return this.each(function( i ) {

+				jQuery.offset.setOffset( this, options, i );

+			});

+		}

+

+		if ( !elem || !elem.ownerDocument ) {

+			return null;

+		}

+

+		if ( elem === elem.ownerDocument.body ) {

+			return jQuery.offset.bodyOffset( elem );

+		}

+

+		var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement,

+			clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,

+			top  = box.top  + (self.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop ) - clientTop,

+			left = box.left + (self.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;

+

+		return { top: top, left: left };

+	};

+

+} else {

+	jQuery.fn.offset = function( options ) {

+		///	<summary>

+		///		Set the current coordinates of every element in the set of matched elements,

+		///		relative to the document.

+		///	</summary>

+		///	<param name="options" type="Object">

+		///		An object containing the properties top and left, which are integers indicating the

+		///		new top and left coordinates for the elements.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		var elem = this[0];

+

+		if ( options ) { 

+			return this.each(function( i ) {

+				jQuery.offset.setOffset( this, options, i );

+			});

+		}

+

+		if ( !elem || !elem.ownerDocument ) {

+			return null;

+		}

+

+		if ( elem === elem.ownerDocument.body ) {

+			return jQuery.offset.bodyOffset( elem );

+		}

+

+		jQuery.offset.initialize();

+

+		var offsetParent = elem.offsetParent, prevOffsetParent = elem,

+			doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,

+			body = doc.body, defaultView = doc.defaultView,

+			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,

+			top = elem.offsetTop, left = elem.offsetLeft;

+

+		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {

+			if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {

+				break;

+			}

+

+			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;

+			top  -= elem.scrollTop;

+			left -= elem.scrollLeft;

+

+			if ( elem === offsetParent ) {

+				top  += elem.offsetTop;

+				left += elem.offsetLeft;

+

+				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.nodeName)) ) {

+					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;

+					left += parseFloat( computedStyle.borderLeftWidth ) || 0;

+				}

+

+				prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;

+			}

+

+			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {

+				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;

+				left += parseFloat( computedStyle.borderLeftWidth ) || 0;

+			}

+

+			prevComputedStyle = computedStyle;

+		}

+

+		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {

+			top  += body.offsetTop;

+			left += body.offsetLeft;

+		}

+

+		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {

+			top  += Math.max( docElem.scrollTop, body.scrollTop );

+			left += Math.max( docElem.scrollLeft, body.scrollLeft );

+		}

+

+		return { top: top, left: left };

+	};

+}

+

+jQuery.offset = {

+	initialize: function() {

+		var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0,

+			html = "<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>";

+

+		jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );

+

+		container.innerHTML = html;

+		body.insertBefore( container, body.firstChild );

+		innerDiv = container.firstChild;

+		checkDiv = innerDiv.firstChild;

+		td = innerDiv.nextSibling.firstChild.firstChild;

+

+		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);

+		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);

+

+		checkDiv.style.position = "fixed", checkDiv.style.top = "20px";

+		// safari subtracts parent border width here which is 5px

+		this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);

+		checkDiv.style.position = checkDiv.style.top = "";

+

+		innerDiv.style.overflow = "hidden", innerDiv.style.position = "relative";

+		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);

+

+		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);

+

+		body.removeChild( container );

+		body = container = innerDiv = checkDiv = table = td = null;

+		jQuery.offset.initialize = jQuery.noop;

+	},

+

+	bodyOffset: function( body ) {

+		var top = body.offsetTop, left = body.offsetLeft;

+

+		jQuery.offset.initialize();

+

+		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {

+			top  += parseFloat( jQuery.curCSS(body, "marginTop",  true) ) || 0;

+			left += parseFloat( jQuery.curCSS(body, "marginLeft", true) ) || 0;

+		}

+

+		return { top: top, left: left };

+	},

+	

+	setOffset: function( elem, options, i ) {

+		// set position first, in-case top/left are set even on static elem

+		if ( /static/.test( jQuery.curCSS( elem, "position" ) ) ) {

+			elem.style.position = "relative";

+		}

+		var curElem   = jQuery( elem ),

+			curOffset = curElem.offset(),

+			curTop    = parseInt( jQuery.curCSS( elem, "top",  true ), 10 ) || 0,

+			curLeft   = parseInt( jQuery.curCSS( elem, "left", true ), 10 ) || 0;

+

+		if ( jQuery.isFunction( options ) ) {

+			options = options.call( elem, i, curOffset );

+		}

+

+		var props = {

+			top:  (options.top  - curOffset.top)  + curTop,

+			left: (options.left - curOffset.left) + curLeft

+		};

+		

+		if ( "using" in options ) {

+			options.using.call( elem, props );

+		} else {

+			curElem.css( props );

+		}

+	}

+};

+

+

+jQuery.fn.extend({

+	position: function() {

+		///	<summary>

+		///		Gets the top and left positions of an element relative to its offset parent.

+		///	</summary>

+		///	<returns type="Object">An object with two integer properties, 'top' and 'left'.</returns>

+

+		if ( !this[0] ) {

+			return null;

+		}

+

+		var elem = this[0],

+

+		// Get *real* offsetParent

+		offsetParent = this.offsetParent(),

+

+		// Get correct offsets

+		offset       = this.offset(),

+		parentOffset = /^body|html$/i.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();

+

+		// Subtract element margins

+		// note: when an element has margin: auto the offsetLeft and marginLeft

+		// are the same in Safari causing offset.left to incorrectly be 0

+		offset.top  -= parseFloat( jQuery.curCSS(elem, "marginTop",  true) ) || 0;

+		offset.left -= parseFloat( jQuery.curCSS(elem, "marginLeft", true) ) || 0;

+

+		// Add offsetParent borders

+		parentOffset.top  += parseFloat( jQuery.curCSS(offsetParent[0], "borderTopWidth",  true) ) || 0;

+		parentOffset.left += parseFloat( jQuery.curCSS(offsetParent[0], "borderLeftWidth", true) ) || 0;

+

+		// Subtract the two offsets

+		return {

+			top:  offset.top  - parentOffset.top,

+			left: offset.left - parentOffset.left

+		};

+	},

+

+	offsetParent: function() {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		return this.map(function() {

+			var offsetParent = this.offsetParent || document.body;

+			while ( offsetParent && (!/^body|html$/i.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {

+				offsetParent = offsetParent.offsetParent;

+			}

+			return offsetParent;

+		});

+	}

+});

+

+

+// Create scrollLeft and scrollTop methods

+jQuery.each( ["Left", "Top"], function( i, name ) {

+	var method = "scroll" + name;

+

+	jQuery.fn[ method ] = function(val) {

+		///	<summary>

+		///		Gets and optionally sets the scroll left offset of the first matched element.

+		///	</summary>

+		///	<param name="val" type="Number" integer="true" optional="true">A positive number representing the desired scroll left offset.</param>

+		///	<returns type="Number" integer="true">The scroll left offset of the first matched element.</returns>

+

+		var elem = this[0], win;

+		

+		if ( !elem ) {

+			return null;

+		}

+

+		if ( val !== undefined ) {

+			// Set the scroll offset

+			return this.each(function() {

+				win = getWindow( this );

+

+				if ( win ) {

+					win.scrollTo(

+						!i ? val : jQuery(win).scrollLeft(),

+						 i ? val : jQuery(win).scrollTop()

+					);

+

+				} else {

+					this[ method ] = val;

+				}

+			});

+		} else {

+			win = getWindow( elem );

+

+			// Return the scroll offset

+			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :

+				jQuery.support.boxModel && win.document.documentElement[ method ] ||

+					win.document.body[ method ] :

+				elem[ method ];

+		}

+	};

+});

+

+// Create scrollLeft and scrollTop methods

+jQuery.each( ["Left", "Top"], function( i, name ) {

+	var method = "scroll" + name;

+

+	jQuery.fn[ method ] = function(val) {

+		///	<summary>

+		///		Gets and optionally sets the scroll top offset of the first matched element.

+		///	</summary>

+		///	<param name="val" type="Number" integer="true" optional="true">A positive number representing the desired scroll top offset.</param>

+		///	<returns type="Number" integer="true">The scroll top offset of the first matched element.</returns>

+

+		var elem = this[0], win;

+		

+		if ( !elem ) {

+			return null;

+		}

+

+		if ( val !== undefined ) {

+			// Set the scroll offset

+			return this.each(function() {

+				win = getWindow( this );

+

+				if ( win ) {

+					win.scrollTo(

+						!i ? val : jQuery(win).scrollLeft(),

+						 i ? val : jQuery(win).scrollTop()

+					);

+

+				} else {

+					this[ method ] = val;

+				}

+			});

+		} else {

+			win = getWindow( elem );

+

+			// Return the scroll offset

+			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :

+				jQuery.support.boxModel && win.document.documentElement[ method ] ||

+					win.document.body[ method ] :

+				elem[ method ];

+		}

+	};

+});

+

+function getWindow( elem ) {

+	return ("scrollTo" in elem && elem.document) ?

+		elem :

+		elem.nodeType === 9 ?

+			elem.defaultView || elem.parentWindow :

+			false;

+}

+

+// Create innerHeight, innerWidth, outerHeight and outerWidth methods

+jQuery.each([ "Height" ], function( i, name ) {

+

+	var type = name.toLowerCase();

+

+	// innerHeight and innerWidth

+	jQuery.fn["inner" + name] = function() {

+		///	<summary>

+		///		Gets the inner height of the first matched element, excluding border but including padding.

+		///	</summary>

+		///	<returns type="Number" integer="true">The outer height of the first matched element.</returns>

+

+		return this[0] ?

+			jQuery.css( this[0], type, false, "padding" ) :

+			null;

+	};

+

+	// outerHeight and outerWidth

+	jQuery.fn["outer" + name] = function( margin ) {

+		///	<summary>

+		///		Gets the outer height of the first matched element, including border and padding by default.

+		///	</summary>

+		///	<param name="margins" type="Map">A set of key/value pairs that specify the options for the method.</param>

+		///	<returns type="Number" integer="true">The outer height of the first matched element.</returns>

+

+		return this[0] ?

+			jQuery.css( this[0], type, false, margin ? "margin" : "border" ) :

+			null;

+	};

+

+	jQuery.fn[ type ] = function( size ) {

+		///	<summary>

+		///		Set the CSS height of every matched element. If no explicit unit

+		///		was specified (like 'em' or '%') then &quot;px&quot; is added to the width.  If no parameter is specified, it gets

+		///		the current computed pixel height of the first matched element.

+		///		Part of CSS

+		///	</summary>

+		///	<returns type="jQuery" type="jQuery" />

+		///	<param name="cssProperty" type="String">

+		///		Set the CSS property to the specified value. Omit to get the value of the first matched element.

+		///	</param>

+

+		// Get window width or height

+		var elem = this[0];

+		if ( !elem ) {

+			return size == null ? null : this;

+		}

+		

+		if ( jQuery.isFunction( size ) ) {

+			return this.each(function( i ) {

+				var self = jQuery( this );

+				self[ type ]( size.call( this, i, self[ type ]() ) );

+			});

+		}

+

+		return ("scrollTo" in elem && elem.document) ? // does it walk and quack like a window?

+			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode

+			elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||

+			elem.document.body[ "client" + name ] :

+

+			// Get document width or height

+			(elem.nodeType === 9) ? // is it a document

+				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater

+				Math.max(

+					elem.documentElement["client" + name],

+					elem.body["scroll" + name], elem.documentElement["scroll" + name],

+					elem.body["offset" + name], elem.documentElement["offset" + name]

+				) :

+

+				// Get or set width or height on the element

+				size === undefined ?

+					// Get width or height on the element

+					jQuery.css( elem, type ) :

+

+					// Set the width or height on the element (default to pixels if value is unitless)

+					this.css( type, typeof size === "string" ? size : size + "px" );

+	};

+

+});

+

+// Create innerHeight, innerWidth, outerHeight and outerWidth methods

+jQuery.each([ "Width" ], function( i, name ) {

+

+	var type = name.toLowerCase();

+

+	// innerHeight and innerWidth

+	jQuery.fn["inner" + name] = function() {

+		///	<summary>

+		///		Gets the inner width of the first matched element, excluding border but including padding.

+		///	</summary>

+		///	<returns type="Number" integer="true">The outer width of the first matched element.</returns>

+

+		return this[0] ?

+			jQuery.css( this[0], type, false, "padding" ) :

+			null;

+	};

+

+	// outerHeight and outerWidth

+	jQuery.fn["outer" + name] = function( margin ) {

+		///	<summary>

+		///		Gets the outer width of the first matched element, including border and padding by default.

+		///	</summary>

+		///	<param name="margin" type="Map">A set of key/value pairs that specify the options for the method.</param>

+		///	<returns type="Number" integer="true">The outer width of the first matched element.</returns>

+

+		return this[0] ?

+			jQuery.css( this[0], type, false, margin ? "margin" : "border" ) :

+			null;

+	};

+

+	jQuery.fn[ type ] = function( size ) {

+		///	<summary>

+		///		Set the CSS width of every matched element. If no explicit unit

+		///		was specified (like 'em' or '%') then &quot;px&quot; is added to the width.  If no parameter is specified, it gets

+		///		the current computed pixel width of the first matched element.

+		///		Part of CSS

+		///	</summary>

+		///	<returns type="jQuery" type="jQuery" />

+		///	<param name="cssProperty" type="String">

+		///		Set the CSS property to the specified value. Omit to get the value of the first matched element.

+		///	</param>

+

+		// Get window width or height

+		var elem = this[0];

+		if ( !elem ) {

+			return size == null ? null : this;

+		}

+		

+		if ( jQuery.isFunction( size ) ) {

+			return this.each(function( i ) {

+				var self = jQuery( this );

+				self[ type ]( size.call( this, i, self[ type ]() ) );

+			});

+		}

+

+		return ("scrollTo" in elem && elem.document) ? // does it walk and quack like a window?

+			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode

+			elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||

+			elem.document.body[ "client" + name ] :

+

+			// Get document width or height

+			(elem.nodeType === 9) ? // is it a document

+				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater

+				Math.max(

+					elem.documentElement["client" + name],

+					elem.body["scroll" + name], elem.documentElement["scroll" + name],

+					elem.body["offset" + name], elem.documentElement["offset" + name]

+				) :

+

+				// Get or set width or height on the element

+				size === undefined ?

+					// Get width or height on the element

+					jQuery.css( elem, type ) :

+

+					// Set the width or height on the element (default to pixels if value is unitless)

+					this.css( type, typeof size === "string" ? size : size + "px" );

+	};

+

+});

+

+// Expose jQuery to the global object

+window.jQuery = window.$ = jQuery;

+

+})(window);

diff --git a/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery-1.4.1.js b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery-1.4.1.js
new file mode 100644
index 0000000..2e12830
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery-1.4.1.js
@@ -0,0 +1,6111 @@
+/*!

+ * jQuery JavaScript Library v1.4.1

+ * http://jquery.com/

+ *

+ * Copyright 2010, John Resig

+ *

+ * Includes Sizzle.js

+ * http://sizzlejs.com/

+ * Copyright 2010, The Dojo Foundation

+ *

+ * Permission is hereby granted, free of charge, to any person obtaining

+ * a copy of this software and associated documentation files (the

+ * "Software"), to deal in the Software without restriction, including

+ * without limitation the rights to use, copy, modify, merge, publish,

+ * distribute, sublicense, and/or sell copies of the Software, and to

+ * permit persons to whom the Software is furnished to do so, subject to

+ * the following conditions:

+ * 

+ * The above copyright notice and this permission notice shall be

+ * included in all copies or substantial portions of the Software.

+ * 

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND

+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE

+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION

+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION

+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ * Date: Mon Jan 25 19:43:33 2010 -0500

+ */

+(function( window, undefined ) {

+

+// Define a local copy of jQuery

+var jQuery = function( selector, context ) {

+		// The jQuery object is actually just the init constructor 'enhanced'

+		return new jQuery.fn.init( selector, context );

+	},

+

+	// Map over jQuery in case of overwrite

+	_jQuery = window.jQuery,

+

+	// Map over the $ in case of overwrite

+	_$ = window.$,

+

+	// Use the correct document accordingly with window argument (sandbox)

+	document = window.document,

+

+	// A central reference to the root jQuery(document)

+	rootjQuery,

+

+	// A simple way to check for HTML strings or ID strings

+	// (both of which we optimize for)

+	quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,

+

+	// Is it a simple selector

+	isSimple = /^.[^:#\[\.,]*$/,

+

+	// Check if a string has a non-whitespace character in it

+	rnotwhite = /\S/,

+

+	// Used for trimming whitespace

+	rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,

+

+	// Match a standalone tag

+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,

+

+	// Keep a UserAgent string for use with jQuery.browser

+	userAgent = navigator.userAgent,

+

+	// For matching the engine and version of the browser

+	browserMatch,

+	

+	// Has the ready events already been bound?

+	readyBound = false,

+	

+	// The functions to execute on DOM ready

+	readyList = [],

+

+	// The ready event handler

+	DOMContentLoaded,

+

+	// Save a reference to some core methods

+	toString = Object.prototype.toString,

+	hasOwnProperty = Object.prototype.hasOwnProperty,

+	push = Array.prototype.push,

+	slice = Array.prototype.slice,

+	indexOf = Array.prototype.indexOf;

+

+jQuery.fn = jQuery.prototype = {

+	init: function( selector, context ) {

+		var match, elem, ret, doc;

+

+		// Handle $(""), $(null), or $(undefined)

+		if ( !selector ) {

+			return this;

+		}

+

+		// Handle $(DOMElement)

+		if ( selector.nodeType ) {

+			this.context = this[0] = selector;

+			this.length = 1;

+			return this;

+		}

+

+		// Handle HTML strings

+		if ( typeof selector === "string" ) {

+			// Are we dealing with HTML string or an ID?

+			match = quickExpr.exec( selector );

+

+			// Verify a match, and that no context was specified for #id

+			if ( match && (match[1] || !context) ) {

+

+				// HANDLE: $(html) -> $(array)

+				if ( match[1] ) {

+					doc = (context ? context.ownerDocument || context : document);

+

+					// If a single string is passed in and it's a single tag

+					// just do a createElement and skip the rest

+					ret = rsingleTag.exec( selector );

+

+					if ( ret ) {

+						if ( jQuery.isPlainObject( context ) ) {

+							selector = [ document.createElement( ret[1] ) ];

+							jQuery.fn.attr.call( selector, context, true );

+

+						} else {

+							selector = [ doc.createElement( ret[1] ) ];

+						}

+

+					} else {

+						ret = buildFragment( [ match[1] ], [ doc ] );

+						selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;

+					}

+

+				// HANDLE: $("#id")

+				} else {

+					elem = document.getElementById( match[2] );

+

+					if ( elem ) {

+						// Handle the case where IE and Opera return items

+						// by name instead of ID

+						if ( elem.id !== match[2] ) {

+							return rootjQuery.find( selector );

+						}

+

+						// Otherwise, we inject the element directly into the jQuery object

+						this.length = 1;

+						this[0] = elem;

+					}

+

+					this.context = document;

+					this.selector = selector;

+					return this;

+				}

+

+			// HANDLE: $("TAG")

+			} else if ( !context && /^\w+$/.test( selector ) ) {

+				this.selector = selector;

+				this.context = document;

+				selector = document.getElementsByTagName( selector );

+

+			// HANDLE: $(expr, $(...))

+			} else if ( !context || context.jquery ) {

+				return (context || rootjQuery).find( selector );

+

+			// HANDLE: $(expr, context)

+			// (which is just equivalent to: $(context).find(expr)

+			} else {

+				return jQuery( context ).find( selector );

+			}

+

+		// HANDLE: $(function)

+		// Shortcut for document ready

+		} else if ( jQuery.isFunction( selector ) ) {

+			return rootjQuery.ready( selector );

+		}

+

+		if (selector.selector !== undefined) {

+			this.selector = selector.selector;

+			this.context = selector.context;

+		}

+

+		return jQuery.isArray( selector ) ?

+			this.setArray( selector ) :

+			jQuery.makeArray( selector, this );

+	},

+

+	// Start with an empty selector

+	selector: "",

+

+	// The current version of jQuery being used

+	jquery: "1.4.1",

+

+	// The default length of a jQuery object is 0

+	length: 0,

+

+	// The number of elements contained in the matched element set

+	size: function() {

+		return this.length;

+	},

+

+	toArray: function() {

+		return slice.call( this, 0 );

+	},

+

+	// Get the Nth element in the matched element set OR

+	// Get the whole matched element set as a clean array

+	get: function( num ) {

+		return num == null ?

+

+			// Return a 'clean' array

+			this.toArray() :

+

+			// Return just the object

+			( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );

+	},

+

+	// Take an array of elements and push it onto the stack

+	// (returning the new matched element set)

+	pushStack: function( elems, name, selector ) {

+		// Build a new jQuery matched element set

+		var ret = jQuery( elems || null );

+

+		// Add the old object onto the stack (as a reference)

+		ret.prevObject = this;

+

+		ret.context = this.context;

+

+		if ( name === "find" ) {

+			ret.selector = this.selector + (this.selector ? " " : "") + selector;

+		} else if ( name ) {

+			ret.selector = this.selector + "." + name + "(" + selector + ")";

+		}

+

+		// Return the newly-formed element set

+		return ret;

+	},

+

+	// Force the current matched set of elements to become

+	// the specified array of elements (destroying the stack in the process)

+	// You should use pushStack() in order to do this, but maintain the stack

+	setArray: function( elems ) {

+		// Resetting the length to 0, then using the native Array push

+		// is a super-fast way to populate an object with array-like properties

+		this.length = 0;

+		push.apply( this, elems );

+

+		return this;

+	},

+

+	// Execute a callback for every element in the matched set.

+	// (You can seed the arguments with an array of args, but this is

+	// only used internally.)

+	each: function( callback, args ) {

+		return jQuery.each( this, callback, args );

+	},

+	

+	ready: function( fn ) {

+		// Attach the listeners

+		jQuery.bindReady();

+

+		// If the DOM is already ready

+		if ( jQuery.isReady ) {

+			// Execute the function immediately

+			fn.call( document, jQuery );

+

+		// Otherwise, remember the function for later

+		} else if ( readyList ) {

+			// Add the function to the wait list

+			readyList.push( fn );

+		}

+

+		return this;

+	},

+	

+	eq: function( i ) {

+		return i === -1 ?

+			this.slice( i ) :

+			this.slice( i, +i + 1 );

+	},

+

+	first: function() {

+		return this.eq( 0 );

+	},

+

+	last: function() {

+		return this.eq( -1 );

+	},

+

+	slice: function() {

+		return this.pushStack( slice.apply( this, arguments ),

+			"slice", slice.call(arguments).join(",") );

+	},

+

+	map: function( callback ) {

+		return this.pushStack( jQuery.map(this, function( elem, i ) {

+			return callback.call( elem, i, elem );

+		}));

+	},

+	

+	end: function() {

+		return this.prevObject || jQuery(null);

+	},

+

+	// For internal use only.

+	// Behaves like an Array's method, not like a jQuery method.

+	push: push,

+	sort: [].sort,

+	splice: [].splice

+};

+

+// Give the init function the jQuery prototype for later instantiation

+jQuery.fn.init.prototype = jQuery.fn;

+

+jQuery.extend = jQuery.fn.extend = function() {

+	// copy reference to target object

+	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy;

+

+	// Handle a deep copy situation

+	if ( typeof target === "boolean" ) {

+		deep = target;

+		target = arguments[1] || {};

+		// skip the boolean and the target

+		i = 2;

+	}

+

+	// Handle case when target is a string or something (possible in deep copy)

+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {

+		target = {};

+	}

+

+	// extend jQuery itself if only one argument is passed

+	if ( length === i ) {

+		target = this;

+		--i;

+	}

+

+	for ( ; i < length; i++ ) {

+		// Only deal with non-null/undefined values

+		if ( (options = arguments[ i ]) != null ) {

+			// Extend the base object

+			for ( name in options ) {

+				src = target[ name ];

+				copy = options[ name ];

+

+				// Prevent never-ending loop

+				if ( target === copy ) {

+					continue;

+				}

+

+				// Recurse if we're merging object literal values or arrays

+				if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {

+					var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src

+						: jQuery.isArray(copy) ? [] : {};

+

+					// Never move original objects, clone them

+					target[ name ] = jQuery.extend( deep, clone, copy );

+

+				// Don't bring in undefined values

+				} else if ( copy !== undefined ) {

+					target[ name ] = copy;

+				}

+			}

+		}

+	}

+

+	// Return the modified object

+	return target;

+};

+

+jQuery.extend({

+	noConflict: function( deep ) {

+		window.$ = _$;

+

+		if ( deep ) {

+			window.jQuery = _jQuery;

+		}

+

+		return jQuery;

+	},

+	

+	// Is the DOM ready to be used? Set to true once it occurs.

+	isReady: false,

+	

+	// Handle when the DOM is ready

+	ready: function() {

+		// Make sure that the DOM is not already loaded

+		if ( !jQuery.isReady ) {

+			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).

+			if ( !document.body ) {

+				return setTimeout( jQuery.ready, 13 );

+			}

+

+			// Remember that the DOM is ready

+			jQuery.isReady = true;

+

+			// If there are functions bound, to execute

+			if ( readyList ) {

+				// Execute all of them

+				var fn, i = 0;

+				while ( (fn = readyList[ i++ ]) ) {

+					fn.call( document, jQuery );

+				}

+

+				// Reset the list of functions

+				readyList = null;

+			}

+

+			// Trigger any bound ready events

+			if ( jQuery.fn.triggerHandler ) {

+				jQuery( document ).triggerHandler( "ready" );

+			}

+		}

+	},

+	

+	bindReady: function() {

+		if ( readyBound ) {

+			return;

+		}

+

+		readyBound = true;

+

+		// Catch cases where $(document).ready() is called after the

+		// browser event has already occurred.

+		if ( document.readyState === "complete" ) {

+			return jQuery.ready();

+		}

+

+		// Mozilla, Opera and webkit nightlies currently support this event

+		if ( document.addEventListener ) {

+			// Use the handy event callback

+			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );

+			

+			// A fallback to window.onload, that will always work

+			window.addEventListener( "load", jQuery.ready, false );

+

+		// If IE event model is used

+		} else if ( document.attachEvent ) {

+			// ensure firing before onload,

+			// maybe late but safe also for iframes

+			document.attachEvent("onreadystatechange", DOMContentLoaded);

+			

+			// A fallback to window.onload, that will always work

+			window.attachEvent( "onload", jQuery.ready );

+

+			// If IE and not a frame

+			// continually check to see if the document is ready

+			var toplevel = false;

+

+			try {

+				toplevel = window.frameElement == null;

+			} catch(e) {}

+

+			if ( document.documentElement.doScroll && toplevel ) {

+				doScrollCheck();

+			}

+		}

+	},

+

+	// See test/unit/core.js for details concerning isFunction.

+	// Since version 1.3, DOM methods and functions like alert

+	// aren't supported. They return false on IE (#2968).

+	isFunction: function( obj ) {

+		return toString.call(obj) === "[object Function]";

+	},

+

+	isArray: function( obj ) {

+		return toString.call(obj) === "[object Array]";

+	},

+

+	isPlainObject: function( obj ) {

+		// Must be an Object.

+		// Because of IE, we also have to check the presence of the constructor property.

+		// Make sure that DOM nodes and window objects don't pass through, as well

+		if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) {

+			return false;

+		}

+		

+		// Not own constructor property must be Object

+		if ( obj.constructor

+			&& !hasOwnProperty.call(obj, "constructor")

+			&& !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {

+			return false;

+		}

+		

+		// Own properties are enumerated firstly, so to speed up,

+		// if last one is own, then all properties are own.

+	

+		var key;

+		for ( key in obj ) {}

+		

+		return key === undefined || hasOwnProperty.call( obj, key );

+	},

+

+	isEmptyObject: function( obj ) {

+		for ( var name in obj ) {

+			return false;

+		}

+		return true;

+	},

+	

+	error: function( msg ) {

+		throw msg;

+	},

+	

+	parseJSON: function( data ) {

+		if ( typeof data !== "string" || !data ) {

+			return null;

+		}

+		

+		// Make sure the incoming data is actual JSON

+		// Logic borrowed from http://json.org/json2.js

+		if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")

+			.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")

+			.replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {

+

+			// Try to use the native JSON parser first

+			return window.JSON && window.JSON.parse ?

+				window.JSON.parse( data ) :

+				(new Function("return " + data))();

+

+		} else {

+			jQuery.error( "Invalid JSON: " + data );

+		}

+	},

+

+	noop: function() {},

+

+	// Evalulates a script in a global context

+	globalEval: function( data ) {

+		if ( data && rnotwhite.test(data) ) {

+			// Inspired by code by Andrea Giammarchi

+			// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html

+			var head = document.getElementsByTagName("head")[0] || document.documentElement,

+				script = document.createElement("script");

+

+			script.type = "text/javascript";

+

+			if ( jQuery.support.scriptEval ) {

+				script.appendChild( document.createTextNode( data ) );

+			} else {

+				script.text = data;

+			}

+

+			// Use insertBefore instead of appendChild to circumvent an IE6 bug.

+			// This arises when a base node is used (#2709).

+			head.insertBefore( script, head.firstChild );

+			head.removeChild( script );

+		}

+	},

+

+	nodeName: function( elem, name ) {

+		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();

+	},

+

+	// args is for internal usage only

+	each: function( object, callback, args ) {

+		var name, i = 0,

+			length = object.length,

+			isObj = length === undefined || jQuery.isFunction(object);

+

+		if ( args ) {

+			if ( isObj ) {

+				for ( name in object ) {

+					if ( callback.apply( object[ name ], args ) === false ) {

+						break;

+					}

+				}

+			} else {

+				for ( ; i < length; ) {

+					if ( callback.apply( object[ i++ ], args ) === false ) {

+						break;

+					}

+				}

+			}

+

+		// A special, fast, case for the most common use of each

+		} else {

+			if ( isObj ) {

+				for ( name in object ) {

+					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {

+						break;

+					}

+				}

+			} else {

+				for ( var value = object[0];

+					i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}

+			}

+		}

+

+		return object;

+	},

+

+	trim: function( text ) {

+		return (text || "").replace( rtrim, "" );

+	},

+

+	// results is for internal usage only

+	makeArray: function( array, results ) {

+		var ret = results || [];

+

+		if ( array != null ) {

+			// The window, strings (and functions) also have 'length'

+			// The extra typeof function check is to prevent crashes

+			// in Safari 2 (See: #3039)

+			if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) {

+				push.call( ret, array );

+			} else {

+				jQuery.merge( ret, array );

+			}

+		}

+

+		return ret;

+	},

+

+	inArray: function( elem, array ) {

+		if ( array.indexOf ) {

+			return array.indexOf( elem );

+		}

+

+		for ( var i = 0, length = array.length; i < length; i++ ) {

+			if ( array[ i ] === elem ) {

+				return i;

+			}

+		}

+

+		return -1;

+	},

+

+	merge: function( first, second ) {

+		var i = first.length, j = 0;

+

+		if ( typeof second.length === "number" ) {

+			for ( var l = second.length; j < l; j++ ) {

+				first[ i++ ] = second[ j ];

+			}

+		} else {

+			while ( second[j] !== undefined ) {

+				first[ i++ ] = second[ j++ ];

+			}

+		}

+

+		first.length = i;

+

+		return first;

+	},

+

+	grep: function( elems, callback, inv ) {

+		var ret = [];

+

+		// Go through the array, only saving the items

+		// that pass the validator function

+		for ( var i = 0, length = elems.length; i < length; i++ ) {

+			if ( !inv !== !callback( elems[ i ], i ) ) {

+				ret.push( elems[ i ] );

+			}

+		}

+

+		return ret;

+	},

+

+	// arg is for internal usage only

+	map: function( elems, callback, arg ) {

+		var ret = [], value;

+

+		// Go through the array, translating each of the items to their

+		// new value (or values).

+		for ( var i = 0, length = elems.length; i < length; i++ ) {

+			value = callback( elems[ i ], i, arg );

+

+			if ( value != null ) {

+				ret[ ret.length ] = value;

+			}

+		}

+

+		return ret.concat.apply( [], ret );

+	},

+

+	// A global GUID counter for objects

+	guid: 1,

+

+	proxy: function( fn, proxy, thisObject ) {

+		if ( arguments.length === 2 ) {

+			if ( typeof proxy === "string" ) {

+				thisObject = fn;

+				fn = thisObject[ proxy ];

+				proxy = undefined;

+

+			} else if ( proxy && !jQuery.isFunction( proxy ) ) {

+				thisObject = proxy;

+				proxy = undefined;

+			}

+		}

+

+		if ( !proxy && fn ) {

+			proxy = function() {

+				return fn.apply( thisObject || this, arguments );

+			};

+		}

+

+		// Set the guid of unique handler to the same of original handler, so it can be removed

+		if ( fn ) {

+			proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;

+		}

+

+		// So proxy can be declared as an argument

+		return proxy;

+	},

+

+	// Use of jQuery.browser is frowned upon.

+	// More details: http://docs.jquery.com/Utilities/jQuery.browser

+	uaMatch: function( ua ) {

+		ua = ua.toLowerCase();

+

+		var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) ||

+			/(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) ||

+			/(msie) ([\w.]+)/.exec( ua ) ||

+			!/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) ||

+		  	[];

+

+		return { browser: match[1] || "", version: match[2] || "0" };

+	},

+

+	browser: {}

+});

+

+browserMatch = jQuery.uaMatch( userAgent );

+if ( browserMatch.browser ) {

+	jQuery.browser[ browserMatch.browser ] = true;

+	jQuery.browser.version = browserMatch.version;

+}

+

+// Deprecated, use jQuery.browser.webkit instead

+if ( jQuery.browser.webkit ) {

+	jQuery.browser.safari = true;

+}

+

+if ( indexOf ) {

+	jQuery.inArray = function( elem, array ) {

+		return indexOf.call( array, elem );

+	};

+}

+

+// All jQuery objects should point back to these

+rootjQuery = jQuery(document);

+

+// Cleanup functions for the document ready method

+if ( document.addEventListener ) {

+	DOMContentLoaded = function() {

+		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );

+		jQuery.ready();

+	};

+

+} else if ( document.attachEvent ) {

+	DOMContentLoaded = function() {

+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).

+		if ( document.readyState === "complete" ) {

+			document.detachEvent( "onreadystatechange", DOMContentLoaded );

+			jQuery.ready();

+		}

+	};

+}

+

+// The DOM ready check for Internet Explorer

+function doScrollCheck() {

+	if ( jQuery.isReady ) {

+		return;

+	}

+

+	try {

+		// If IE is used, use the trick by Diego Perini

+		// http://javascript.nwbox.com/IEContentLoaded/

+		document.documentElement.doScroll("left");

+	} catch( error ) {

+		setTimeout( doScrollCheck, 1 );

+		return;

+	}

+

+	// and execute any waiting functions

+	jQuery.ready();

+}

+

+function evalScript( i, elem ) {

+	if ( elem.src ) {

+		jQuery.ajax({

+			url: elem.src,

+			async: false,

+			dataType: "script"

+		});

+	} else {

+		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );

+	}

+

+	if ( elem.parentNode ) {

+		elem.parentNode.removeChild( elem );

+	}

+}

+

+// Mutifunctional method to get and set values to a collection

+// The value/s can be optionally by executed if its a function

+function access( elems, key, value, exec, fn, pass ) {

+	var length = elems.length;

+	

+	// Setting many attributes

+	if ( typeof key === "object" ) {

+		for ( var k in key ) {

+			access( elems, k, key[k], exec, fn, value );

+		}

+		return elems;

+	}

+	

+	// Setting one attribute

+	if ( value !== undefined ) {

+		// Optionally, function values get executed if exec is true

+		exec = !pass && exec && jQuery.isFunction(value);

+		

+		for ( var i = 0; i < length; i++ ) {

+			fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );

+		}

+		

+		return elems;

+	}

+	

+	// Getting an attribute

+	return length ? fn( elems[0], key ) : null;

+}

+

+function now() {

+	return (new Date).getTime();

+}

+(function() {

+

+	jQuery.support = {};

+

+	var root = document.documentElement,

+		script = document.createElement("script"),

+		div = document.createElement("div"),

+		id = "script" + now();

+

+	div.style.display = "none";

+	div.innerHTML = "   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";

+

+	var all = div.getElementsByTagName("*"),

+		a = div.getElementsByTagName("a")[0];

+

+	// Can't get basic test support

+	if ( !all || !all.length || !a ) {

+		return;

+	}

+

+	jQuery.support = {

+		// IE strips leading whitespace when .innerHTML is used

+		leadingWhitespace: div.firstChild.nodeType === 3,

+

+		// Make sure that tbody elements aren't automatically inserted

+		// IE will insert them into empty tables

+		tbody: !div.getElementsByTagName("tbody").length,

+

+		// Make sure that link elements get serialized correctly by innerHTML

+		// This requires a wrapper element in IE

+		htmlSerialize: !!div.getElementsByTagName("link").length,

+

+		// Get the style information from getAttribute

+		// (IE uses .cssText insted)

+		style: /red/.test( a.getAttribute("style") ),

+

+		// Make sure that URLs aren't manipulated

+		// (IE normalizes it by default)

+		hrefNormalized: a.getAttribute("href") === "/a",

+

+		// Make sure that element opacity exists

+		// (IE uses filter instead)

+		// Use a regex to work around a WebKit issue. See #5145

+		opacity: /^0.55$/.test( a.style.opacity ),

+

+		// Verify style float existence

+		// (IE uses styleFloat instead of cssFloat)

+		cssFloat: !!a.style.cssFloat,

+

+		// Make sure that if no value is specified for a checkbox

+		// that it defaults to "on".

+		// (WebKit defaults to "" instead)

+		checkOn: div.getElementsByTagName("input")[0].value === "on",

+

+		// Make sure that a selected-by-default option has a working selected property.

+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)

+		optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected,

+

+		// Will be defined later

+		checkClone: false,

+		scriptEval: false,

+		noCloneEvent: true,

+		boxModel: null

+	};

+

+	script.type = "text/javascript";

+	try {

+		script.appendChild( document.createTextNode( "window." + id + "=1;" ) );

+	} catch(e) {}

+

+	root.insertBefore( script, root.firstChild );

+

+	// Make sure that the execution of code works by injecting a script

+	// tag with appendChild/createTextNode

+	// (IE doesn't support this, fails, and uses .text instead)

+	if ( window[ id ] ) {

+		jQuery.support.scriptEval = true;

+		delete window[ id ];

+	}

+

+	root.removeChild( script );

+

+	if ( div.attachEvent && div.fireEvent ) {

+		div.attachEvent("onclick", function click() {

+			// Cloning a node shouldn't copy over any

+			// bound event handlers (IE does this)

+			jQuery.support.noCloneEvent = false;

+			div.detachEvent("onclick", click);

+		});

+		div.cloneNode(true).fireEvent("onclick");

+	}

+

+	div = document.createElement("div");

+	div.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>";

+

+	var fragment = document.createDocumentFragment();

+	fragment.appendChild( div.firstChild );

+

+	// WebKit doesn't clone checked state correctly in fragments

+	jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;

+

+	// Figure out if the W3C box model works as expected

+	// document.body must exist before we can do this

+	jQuery(function() {

+		var div = document.createElement("div");

+		div.style.width = div.style.paddingLeft = "1px";

+

+		document.body.appendChild( div );

+		jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;

+		document.body.removeChild( div ).style.display = 'none';

+		div = null;

+	});

+

+	// Technique from Juriy Zaytsev

+	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/

+	var eventSupported = function( eventName ) { 

+		var el = document.createElement("div"); 

+		eventName = "on" + eventName; 

+

+		var isSupported = (eventName in el); 

+		if ( !isSupported ) { 

+			el.setAttribute(eventName, "return;"); 

+			isSupported = typeof el[eventName] === "function"; 

+		} 

+		el = null; 

+

+		return isSupported; 

+	};

+	

+	jQuery.support.submitBubbles = eventSupported("submit");

+	jQuery.support.changeBubbles = eventSupported("change");

+

+	// release memory in IE

+	root = script = div = all = a = null;

+})();

+

+jQuery.props = {

+	"for": "htmlFor",

+	"class": "className",

+	readonly: "readOnly",

+	maxlength: "maxLength",

+	cellspacing: "cellSpacing",

+	rowspan: "rowSpan",

+	colspan: "colSpan",

+	tabindex: "tabIndex",

+	usemap: "useMap",

+	frameborder: "frameBorder"

+};

+var expando = "jQuery" + now(), uuid = 0, windowData = {};

+var emptyObject = {};

+

+jQuery.extend({

+	cache: {},

+	

+	expando:expando,

+

+	// The following elements throw uncatchable exceptions if you

+	// attempt to add expando properties to them.

+	noData: {

+		"embed": true,

+		"object": true,

+		"applet": true

+	},

+

+	data: function( elem, name, data ) {

+		if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {

+			return;

+		}

+

+		elem = elem == window ?

+			windowData :

+			elem;

+

+		var id = elem[ expando ], cache = jQuery.cache, thisCache;

+

+		// Handle the case where there's no name immediately

+		if ( !name && !id ) {

+			return null;

+		}

+

+		// Compute a unique ID for the element

+		if ( !id ) { 

+			id = ++uuid;

+		}

+

+		// Avoid generating a new cache unless none exists and we

+		// want to manipulate it.

+		if ( typeof name === "object" ) {

+			elem[ expando ] = id;

+			thisCache = cache[ id ] = jQuery.extend(true, {}, name);

+		} else if ( cache[ id ] ) {

+			thisCache = cache[ id ];

+		} else if ( typeof data === "undefined" ) {

+			thisCache = emptyObject;

+		} else {

+			thisCache = cache[ id ] = {};

+		}

+

+		// Prevent overriding the named cache with undefined values

+		if ( data !== undefined ) {

+			elem[ expando ] = id;

+			thisCache[ name ] = data;

+		}

+

+		return typeof name === "string" ? thisCache[ name ] : thisCache;

+	},

+

+	removeData: function( elem, name ) {

+		if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {

+			return;

+		}

+

+		elem = elem == window ?

+			windowData :

+			elem;

+

+		var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];

+

+		// If we want to remove a specific section of the element's data

+		if ( name ) {

+			if ( thisCache ) {

+				// Remove the section of cache data

+				delete thisCache[ name ];

+

+				// If we've removed all the data, remove the element's cache

+				if ( jQuery.isEmptyObject(thisCache) ) {

+					jQuery.removeData( elem );

+				}

+			}

+

+		// Otherwise, we want to remove all of the element's data

+		} else {

+			// Clean up the element expando

+			try {

+				delete elem[ expando ];

+			} catch( e ) {

+				// IE has trouble directly removing the expando

+				// but it's ok with using removeAttribute

+				if ( elem.removeAttribute ) {

+					elem.removeAttribute( expando );

+				}

+			}

+

+			// Completely remove the data cache

+			delete cache[ id ];

+		}

+	}

+});

+

+jQuery.fn.extend({

+	data: function( key, value ) {

+		if ( typeof key === "undefined" && this.length ) {

+			return jQuery.data( this[0] );

+

+		} else if ( typeof key === "object" ) {

+			return this.each(function() {

+				jQuery.data( this, key );

+			});

+		}

+

+		var parts = key.split(".");

+		parts[1] = parts[1] ? "." + parts[1] : "";

+

+		if ( value === undefined ) {

+			var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);

+

+			if ( data === undefined && this.length ) {

+				data = jQuery.data( this[0], key );

+			}

+			return data === undefined && parts[1] ?

+				this.data( parts[0] ) :

+				data;

+		} else {

+			return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() {

+				jQuery.data( this, key, value );

+			});

+		}

+	},

+

+	removeData: function( key ) {

+		return this.each(function() {

+			jQuery.removeData( this, key );

+		});

+	}

+});

+jQuery.extend({

+	queue: function( elem, type, data ) {

+		if ( !elem ) {

+			return;

+		}

+

+		type = (type || "fx") + "queue";

+		var q = jQuery.data( elem, type );

+

+		// Speed up dequeue by getting out quickly if this is just a lookup

+		if ( !data ) {

+			return q || [];

+		}

+

+		if ( !q || jQuery.isArray(data) ) {

+			q = jQuery.data( elem, type, jQuery.makeArray(data) );

+

+		} else {

+			q.push( data );

+		}

+

+		return q;

+	},

+

+	dequeue: function( elem, type ) {

+		type = type || "fx";

+

+		var queue = jQuery.queue( elem, type ), fn = queue.shift();

+

+		// If the fx queue is dequeued, always remove the progress sentinel

+		if ( fn === "inprogress" ) {

+			fn = queue.shift();

+		}

+

+		if ( fn ) {

+			// Add a progress sentinel to prevent the fx queue from being

+			// automatically dequeued

+			if ( type === "fx" ) {

+				queue.unshift("inprogress");

+			}

+

+			fn.call(elem, function() {

+				jQuery.dequeue(elem, type);

+			});

+		}

+	}

+});

+

+jQuery.fn.extend({

+	queue: function( type, data ) {

+		if ( typeof type !== "string" ) {

+			data = type;

+			type = "fx";

+		}

+

+		if ( data === undefined ) {

+			return jQuery.queue( this[0], type );

+		}

+		return this.each(function( i, elem ) {

+			var queue = jQuery.queue( this, type, data );

+

+			if ( type === "fx" && queue[0] !== "inprogress" ) {

+				jQuery.dequeue( this, type );

+			}

+		});

+	},

+	dequeue: function( type ) {

+		return this.each(function() {

+			jQuery.dequeue( this, type );

+		});

+	},

+

+	// Based off of the plugin by Clint Helfers, with permission.

+	// http://blindsignals.com/index.php/2009/07/jquery-delay/

+	delay: function( time, type ) {

+		time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;

+		type = type || "fx";

+

+		return this.queue( type, function() {

+			var elem = this;

+			setTimeout(function() {

+				jQuery.dequeue( elem, type );

+			}, time );

+		});

+	},

+

+	clearQueue: function( type ) {

+		return this.queue( type || "fx", [] );

+	}

+});

+var rclass = /[\n\t]/g,

+	rspace = /\s+/,

+	rreturn = /\r/g,

+	rspecialurl = /href|src|style/,

+	rtype = /(button|input)/i,

+	rfocusable = /(button|input|object|select|textarea)/i,

+	rclickable = /^(a|area)$/i,

+	rradiocheck = /radio|checkbox/;

+

+jQuery.fn.extend({

+	attr: function( name, value ) {

+		return access( this, name, value, true, jQuery.attr );

+	},

+

+	removeAttr: function( name, fn ) {

+		return this.each(function(){

+			jQuery.attr( this, name, "" );

+			if ( this.nodeType === 1 ) {

+				this.removeAttribute( name );

+			}

+		});

+	},

+

+	addClass: function( value ) {

+		if ( jQuery.isFunction(value) ) {

+			return this.each(function(i) {

+				var self = jQuery(this);

+				self.addClass( value.call(this, i, self.attr("class")) );

+			});

+		}

+

+		if ( value && typeof value === "string" ) {

+			var classNames = (value || "").split( rspace );

+

+			for ( var i = 0, l = this.length; i < l; i++ ) {

+				var elem = this[i];

+

+				if ( elem.nodeType === 1 ) {

+					if ( !elem.className ) {

+						elem.className = value;

+

+					} else {

+						var className = " " + elem.className + " ";

+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {

+							if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {

+								elem.className += " " + classNames[c];

+							}

+						}

+					}

+				}

+			}

+		}

+

+		return this;

+	},

+

+	removeClass: function( value ) {

+		if ( jQuery.isFunction(value) ) {

+			return this.each(function(i) {

+				var self = jQuery(this);

+				self.removeClass( value.call(this, i, self.attr("class")) );

+			});

+		}

+

+		if ( (value && typeof value === "string") || value === undefined ) {

+			var classNames = (value || "").split(rspace);

+

+			for ( var i = 0, l = this.length; i < l; i++ ) {

+				var elem = this[i];

+

+				if ( elem.nodeType === 1 && elem.className ) {

+					if ( value ) {

+						var className = (" " + elem.className + " ").replace(rclass, " ");

+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {

+							className = className.replace(" " + classNames[c] + " ", " ");

+						}

+						elem.className = className.substring(1, className.length - 1);

+

+					} else {

+						elem.className = "";

+					}

+				}

+			}

+		}

+

+		return this;

+	},

+

+	toggleClass: function( value, stateVal ) {

+		var type = typeof value, isBool = typeof stateVal === "boolean";

+

+		if ( jQuery.isFunction( value ) ) {

+			return this.each(function(i) {

+				var self = jQuery(this);

+				self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );

+			});

+		}

+

+		return this.each(function() {

+			if ( type === "string" ) {

+				// toggle individual class names

+				var className, i = 0, self = jQuery(this),

+					state = stateVal,

+					classNames = value.split( rspace );

+

+				while ( (className = classNames[ i++ ]) ) {

+					// check each className given, space seperated list

+					state = isBool ? state : !self.hasClass( className );

+					self[ state ? "addClass" : "removeClass" ]( className );

+				}

+

+			} else if ( type === "undefined" || type === "boolean" ) {

+				if ( this.className ) {

+					// store className if set

+					jQuery.data( this, "__className__", this.className );

+				}

+

+				// toggle whole className

+				this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";

+			}

+		});

+	},

+

+	hasClass: function( selector ) {

+		var className = " " + selector + " ";

+		for ( var i = 0, l = this.length; i < l; i++ ) {

+			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {

+				return true;

+			}

+		}

+

+		return false;

+	},

+

+	val: function( value ) {

+		if ( value === undefined ) {

+			var elem = this[0];

+

+			if ( elem ) {

+				if ( jQuery.nodeName( elem, "option" ) ) {

+					return (elem.attributes.value || {}).specified ? elem.value : elem.text;

+				}

+

+				// We need to handle select boxes special

+				if ( jQuery.nodeName( elem, "select" ) ) {

+					var index = elem.selectedIndex,

+						values = [],

+						options = elem.options,

+						one = elem.type === "select-one";

+

+					// Nothing was selected

+					if ( index < 0 ) {

+						return null;

+					}

+

+					// Loop through all the selected options

+					for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {

+						var option = options[ i ];

+

+						if ( option.selected ) {

+							// Get the specifc value for the option

+							value = jQuery(option).val();

+

+							// We don't need an array for one selects

+							if ( one ) {

+								return value;

+							}

+

+							// Multi-Selects return an array

+							values.push( value );

+						}

+					}

+

+					return values;

+				}

+

+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified

+				if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {

+					return elem.getAttribute("value") === null ? "on" : elem.value;

+				}

+				

+

+				// Everything else, we just grab the value

+				return (elem.value || "").replace(rreturn, "");

+

+			}

+

+			return undefined;

+		}

+

+		var isFunction = jQuery.isFunction(value);

+

+		return this.each(function(i) {

+			var self = jQuery(this), val = value;

+

+			if ( this.nodeType !== 1 ) {

+				return;

+			}

+

+			if ( isFunction ) {

+				val = value.call(this, i, self.val());

+			}

+

+			// Typecast each time if the value is a Function and the appended

+			// value is therefore different each time.

+			if ( typeof val === "number" ) {

+				val += "";

+			}

+

+			if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {

+				this.checked = jQuery.inArray( self.val(), val ) >= 0;

+

+			} else if ( jQuery.nodeName( this, "select" ) ) {

+				var values = jQuery.makeArray(val);

+

+				jQuery( "option", this ).each(function() {

+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;

+				});

+

+				if ( !values.length ) {

+					this.selectedIndex = -1;

+				}

+

+			} else {

+				this.value = val;

+			}

+		});

+	}

+});

+

+jQuery.extend({

+	attrFn: {

+		val: true,

+		css: true,

+		html: true,

+		text: true,

+		data: true,

+		width: true,

+		height: true,

+		offset: true

+	},

+		

+	attr: function( elem, name, value, pass ) {

+		// don't set attributes on text and comment nodes

+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {

+			return undefined;

+		}

+

+		if ( pass && name in jQuery.attrFn ) {

+			return jQuery(elem)[name](value);

+		}

+

+		var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),

+			// Whether we are setting (or getting)

+			set = value !== undefined;

+

+		// Try to normalize/fix the name

+		name = notxml && jQuery.props[ name ] || name;

+

+		// Only do all the following if this is a node (faster for style)

+		if ( elem.nodeType === 1 ) {

+			// These attributes require special treatment

+			var special = rspecialurl.test( name );

+

+			// Safari mis-reports the default selected property of an option

+			// Accessing the parent's selectedIndex property fixes it

+			if ( name === "selected" && !jQuery.support.optSelected ) {

+				var parent = elem.parentNode;

+				if ( parent ) {

+					parent.selectedIndex;

+	

+					// Make sure that it also works with optgroups, see #5701

+					if ( parent.parentNode ) {

+						parent.parentNode.selectedIndex;

+					}

+				}

+			}

+

+			// If applicable, access the attribute via the DOM 0 way

+			if ( name in elem && notxml && !special ) {

+				if ( set ) {

+					// We can't allow the type property to be changed (since it causes problems in IE)

+					if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {

+						jQuery.error( "type property can't be changed" );

+					}

+

+					elem[ name ] = value;

+				}

+

+				// browsers index elements by id/name on forms, give priority to attributes.

+				if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {

+					return elem.getAttributeNode( name ).nodeValue;

+				}

+

+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set

+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/

+				if ( name === "tabIndex" ) {

+					var attributeNode = elem.getAttributeNode( "tabIndex" );

+

+					return attributeNode && attributeNode.specified ?

+						attributeNode.value :

+						rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?

+							0 :

+							undefined;

+				}

+

+				return elem[ name ];

+			}

+

+			if ( !jQuery.support.style && notxml && name === "style" ) {

+				if ( set ) {

+					elem.style.cssText = "" + value;

+				}

+

+				return elem.style.cssText;

+			}

+

+			if ( set ) {

+				// convert the value to a string (all browsers do this but IE) see #1070

+				elem.setAttribute( name, "" + value );

+			}

+

+			var attr = !jQuery.support.hrefNormalized && notxml && special ?

+					// Some attributes require a special call on IE

+					elem.getAttribute( name, 2 ) :

+					elem.getAttribute( name );

+

+			// Non-existent attributes return null, we normalize to undefined

+			return attr === null ? undefined : attr;

+		}

+

+		// elem is actually elem.style ... set the style

+		// Using attr for specific style information is now deprecated. Use style insead.

+		return jQuery.style( elem, name, value );

+	}

+});

+var fcleanup = function( nm ) {

+	return nm.replace(/[^\w\s\.\|`]/g, function( ch ) {

+		return "\\" + ch;

+	});

+};

+

+/*

+ * A number of helper functions used for managing events.

+ * Many of the ideas behind this code originated from

+ * Dean Edwards' addEvent library.

+ */

+jQuery.event = {

+

+	// Bind an event to an element

+	// Original by Dean Edwards

+	add: function( elem, types, handler, data ) {

+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {

+			return;

+		}

+

+		// For whatever reason, IE has trouble passing the window object

+		// around, causing it to be cloned in the process

+		if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) {

+			elem = window;

+		}

+

+		// Make sure that the function being executed has a unique ID

+		if ( !handler.guid ) {

+			handler.guid = jQuery.guid++;

+		}

+

+		// if data is passed, bind to handler

+		if ( data !== undefined ) {

+			// Create temporary function pointer to original handler

+			var fn = handler;

+

+			// Create unique handler function, wrapped around original handler

+			handler = jQuery.proxy( fn );

+

+			// Store data in unique handler

+			handler.data = data;

+		}

+

+		// Init the element's event structure

+		var events = jQuery.data( elem, "events" ) || jQuery.data( elem, "events", {} ),

+			handle = jQuery.data( elem, "handle" ), eventHandle;

+

+		if ( !handle ) {

+			eventHandle = function() {

+				// Handle the second event of a trigger and when

+				// an event is called after a page has unloaded

+				return typeof jQuery !== "undefined" && !jQuery.event.triggered ?

+					jQuery.event.handle.apply( eventHandle.elem, arguments ) :

+					undefined;

+			};

+

+			handle = jQuery.data( elem, "handle", eventHandle );

+		}

+

+		// If no handle is found then we must be trying to bind to one of the

+		// banned noData elements

+		if ( !handle ) {

+			return;

+		}

+

+		// Add elem as a property of the handle function

+		// This is to prevent a memory leak with non-native

+		// event in IE.

+		handle.elem = elem;

+

+		// Handle multiple events separated by a space

+		// jQuery(...).bind("mouseover mouseout", fn);

+		types = types.split( /\s+/ );

+

+		var type, i = 0;

+

+		while ( (type = types[ i++ ]) ) {

+			// Namespaced event handlers

+			var namespaces = type.split(".");

+			type = namespaces.shift();

+

+			if ( i > 1 ) {

+				handler = jQuery.proxy( handler );

+

+				if ( data !== undefined ) {

+					handler.data = data;

+				}

+			}

+

+			handler.type = namespaces.slice(0).sort().join(".");

+

+			// Get the current list of functions bound to this event

+			var handlers = events[ type ],

+				special = this.special[ type ] || {};

+

+			// Init the event handler queue

+			if ( !handlers ) {

+				handlers = events[ type ] = {};

+

+				// Check for a special event handler

+				// Only use addEventListener/attachEvent if the special

+				// events handler returns false

+				if ( !special.setup || special.setup.call( elem, data, namespaces, handler) === false ) {

+					// Bind the global event handler to the element

+					if ( elem.addEventListener ) {

+						elem.addEventListener( type, handle, false );

+					} else if ( elem.attachEvent ) {

+						elem.attachEvent( "on" + type, handle );

+					}

+				}

+			}

+			

+			if ( special.add ) { 

+				var modifiedHandler = special.add.call( elem, handler, data, namespaces, handlers ); 

+				if ( modifiedHandler && jQuery.isFunction( modifiedHandler ) ) { 

+					modifiedHandler.guid = modifiedHandler.guid || handler.guid; 

+					modifiedHandler.data = modifiedHandler.data || handler.data; 

+					modifiedHandler.type = modifiedHandler.type || handler.type; 

+					handler = modifiedHandler; 

+				} 

+			} 

+			

+			// Add the function to the element's handler list

+			handlers[ handler.guid ] = handler;

+

+			// Keep track of which events have been used, for global triggering

+			this.global[ type ] = true;

+		}

+

+		// Nullify elem to prevent memory leaks in IE

+		elem = null;

+	},

+

+	global: {},

+

+	// Detach an event or set of events from an element

+	remove: function( elem, types, handler ) {

+		// don't do events on text and comment nodes

+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {

+			return;

+		}

+

+		var events = jQuery.data( elem, "events" ), ret, type, fn;

+

+		if ( events ) {

+			// Unbind all events for the element

+			if ( types === undefined || (typeof types === "string" && types.charAt(0) === ".") ) {

+				for ( type in events ) {

+					this.remove( elem, type + (types || "") );

+				}

+			} else {

+				// types is actually an event object here

+				if ( types.type ) {

+					handler = types.handler;

+					types = types.type;

+				}

+

+				// Handle multiple events separated by a space

+				// jQuery(...).unbind("mouseover mouseout", fn);

+				types = types.split(/\s+/);

+				var i = 0;

+				while ( (type = types[ i++ ]) ) {

+					// Namespaced event handlers

+					var namespaces = type.split(".");

+					type = namespaces.shift();

+					var all = !namespaces.length,

+						cleaned = jQuery.map( namespaces.slice(0).sort(), fcleanup ),

+						namespace = new RegExp("(^|\\.)" + cleaned.join("\\.(?:.*\\.)?") + "(\\.|$)"),

+						special = this.special[ type ] || {};

+

+					if ( events[ type ] ) {

+						// remove the given handler for the given type

+						if ( handler ) {

+							fn = events[ type ][ handler.guid ];

+							delete events[ type ][ handler.guid ];

+

+						// remove all handlers for the given type

+						} else {

+							for ( var handle in events[ type ] ) {

+								// Handle the removal of namespaced events

+								if ( all || namespace.test( events[ type ][ handle ].type ) ) {

+									delete events[ type ][ handle ];

+								}

+							}

+						}

+

+						if ( special.remove ) {

+							special.remove.call( elem, namespaces, fn);

+						}

+

+						// remove generic event handler if no more handlers exist

+						for ( ret in events[ type ] ) {

+							break;

+						}

+						if ( !ret ) {

+							if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {

+								if ( elem.removeEventListener ) {

+									elem.removeEventListener( type, jQuery.data( elem, "handle" ), false );

+								} else if ( elem.detachEvent ) {

+									elem.detachEvent( "on" + type, jQuery.data( elem, "handle" ) );

+								}

+							}

+							ret = null;

+							delete events[ type ];

+						}

+					}

+				}

+			}

+

+			// Remove the expando if it's no longer used

+			for ( ret in events ) {

+				break;

+			}

+			if ( !ret ) {

+				var handle = jQuery.data( elem, "handle" );

+				if ( handle ) {

+					handle.elem = null;

+				}

+				jQuery.removeData( elem, "events" );

+				jQuery.removeData( elem, "handle" );

+			}

+		}

+	},

+

+	// bubbling is internal

+	trigger: function( event, data, elem /*, bubbling */ ) {

+		// Event object or event type

+		var type = event.type || event,

+			bubbling = arguments[3];

+

+		if ( !bubbling ) {

+			event = typeof event === "object" ?

+				// jQuery.Event object

+				event[expando] ? event :

+				// Object literal

+				jQuery.extend( jQuery.Event(type), event ) :

+				// Just the event type (string)

+				jQuery.Event(type);

+

+			if ( type.indexOf("!") >= 0 ) {

+				event.type = type = type.slice(0, -1);

+				event.exclusive = true;

+			}

+

+			// Handle a global trigger

+			if ( !elem ) {

+				// Don't bubble custom events when global (to avoid too much overhead)

+				event.stopPropagation();

+

+				// Only trigger if we've ever bound an event for it

+				if ( this.global[ type ] ) {

+					jQuery.each( jQuery.cache, function() {

+						if ( this.events && this.events[type] ) {

+							jQuery.event.trigger( event, data, this.handle.elem );

+						}

+					});

+				}

+			}

+

+			// Handle triggering a single element

+

+			// don't do events on text and comment nodes

+			if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {

+				return undefined;

+			}

+

+			// Clean up in case it is reused

+			event.result = undefined;

+			event.target = elem;

+

+			// Clone the incoming data, if any

+			data = jQuery.makeArray( data );

+			data.unshift( event );

+		}

+

+		event.currentTarget = elem;

+

+		// Trigger the event, it is assumed that "handle" is a function

+		var handle = jQuery.data( elem, "handle" );

+		if ( handle ) {

+			handle.apply( elem, data );

+		}

+

+		var parent = elem.parentNode || elem.ownerDocument;

+

+		// Trigger an inline bound script

+		try {

+			if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {

+				if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {

+					event.result = false;

+				}

+			}

+

+		// prevent IE from throwing an error for some elements with some event types, see #3533

+		} catch (e) {}

+

+		if ( !event.isPropagationStopped() && parent ) {

+			jQuery.event.trigger( event, data, parent, true );

+

+		} else if ( !event.isDefaultPrevented() ) {

+			var target = event.target, old,

+				isClick = jQuery.nodeName(target, "a") && type === "click";

+

+			if ( !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {

+				try {

+					if ( target[ type ] ) {

+						// Make sure that we don't accidentally re-trigger the onFOO events

+						old = target[ "on" + type ];

+

+						if ( old ) {

+							target[ "on" + type ] = null;

+						}

+

+						this.triggered = true;

+						target[ type ]();

+					}

+

+				// prevent IE from throwing an error for some elements with some event types, see #3533

+				} catch (e) {}

+

+				if ( old ) {

+					target[ "on" + type ] = old;

+				}

+

+				this.triggered = false;

+			}

+		}

+	},

+

+	handle: function( event ) {

+		// returned undefined or false

+		var all, handlers;

+

+		event = arguments[0] = jQuery.event.fix( event || window.event );

+		event.currentTarget = this;

+

+		// Namespaced event handlers

+		var namespaces = event.type.split(".");

+		event.type = namespaces.shift();

+

+		// Cache this now, all = true means, any handler

+		all = !namespaces.length && !event.exclusive;

+

+		var namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");

+

+		handlers = ( jQuery.data(this, "events") || {} )[ event.type ];

+

+		for ( var j in handlers ) {

+			var handler = handlers[ j ];

+

+			// Filter the functions by class

+			if ( all || namespace.test(handler.type) ) {

+				// Pass in a reference to the handler function itself

+				// So that we can later remove it

+				event.handler = handler;

+				event.data = handler.data;

+

+				var ret = handler.apply( this, arguments );

+

+				if ( ret !== undefined ) {

+					event.result = ret;

+					if ( ret === false ) {

+						event.preventDefault();

+						event.stopPropagation();

+					}

+				}

+

+				if ( event.isImmediatePropagationStopped() ) {

+					break;

+				}

+

+			}

+		}

+

+		return event.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( event ) {

+		if ( event[ expando ] ) {

+			return event;

+		}

+

+		// store a copy of the original event object

+		// and "clone" to set read-only properties

+		var originalEvent = event;

+		event = jQuery.Event( originalEvent );

+

+		for ( var i = this.props.length, prop; i; ) {

+			prop = this.props[ --i ];

+			event[ prop ] = originalEvent[ prop ];

+		}

+

+		// Fix target property, if necessary

+		if ( !event.target ) {

+			event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either

+		}

+

+		// check if target is a textnode (safari)

+		if ( event.target.nodeType === 3 ) {

+			event.target = event.target.parentNode;

+		}

+

+		// Add relatedTarget, if necessary

+		if ( !event.relatedTarget && event.fromElement ) {

+			event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;

+		}

+

+		// Calculate pageX/Y if missing and clientX/Y available

+		if ( event.pageX == null && event.clientX != null ) {

+			var doc = document.documentElement, body = document.body;

+			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);

+			event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);

+		}

+

+		// Add which for key events

+		if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {

+			event.which = event.charCode || event.keyCode;

+		}

+

+		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)

+		if ( !event.metaKey && event.ctrlKey ) {

+			event.metaKey = event.ctrlKey;

+		}

+

+		// Add which for click: 1 === left; 2 === middle; 3 === right

+		// Note: button is not normalized, so don't use it

+		if ( !event.which && event.button !== undefined ) {

+			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));

+		}

+

+		return event;

+	},

+

+	// Deprecated, use jQuery.guid instead

+	guid: 1E8,

+

+	// Deprecated, use jQuery.proxy instead

+	proxy: jQuery.proxy,

+

+	special: {

+		ready: {

+			// Make sure the ready event is setup

+			setup: jQuery.bindReady,

+			teardown: jQuery.noop

+		},

+

+		live: {

+			add: function( proxy, data, namespaces, live ) {

+				jQuery.extend( proxy, data || {} );

+

+				proxy.guid += data.selector + data.live; 

+				data.liveProxy = proxy;

+

+				jQuery.event.add( this, data.live, liveHandler, data ); 

+				

+			},

+

+			remove: function( namespaces ) {

+				if ( namespaces.length ) {

+					var remove = 0, name = new RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)");

+

+					jQuery.each( (jQuery.data(this, "events").live || {}), function() {

+						if ( name.test(this.type) ) {

+							remove++;

+						}

+					});

+

+					if ( remove < 1 ) {

+						jQuery.event.remove( this, namespaces[0], liveHandler );

+					}

+				}

+			},

+			special: {}

+		},

+		beforeunload: {

+			setup: function( data, namespaces, fn ) {

+				// We only want to do this special case on windows

+				if ( this.setInterval ) {

+					this.onbeforeunload = fn;

+				}

+

+				return false;

+			},

+			teardown: function( namespaces, fn ) {

+				if ( this.onbeforeunload === fn ) {

+					this.onbeforeunload = null;

+				}

+			}

+		}

+	}

+};

+

+jQuery.Event = function( src ) {

+	// Allow instantiation without the 'new' keyword

+	if ( !this.preventDefault ) {

+		return new jQuery.Event( src );

+	}

+

+	// Event object

+	if ( src && src.type ) {

+		this.originalEvent = src;

+		this.type = src.type;

+	// Event type

+	} else {

+		this.type = src;

+	}

+

+	// timeStamp is buggy for some events on Firefox(#3843)

+	// So we won't rely on the native value

+	this.timeStamp = now();

+

+	// Mark it as fixed

+	this[ expando ] = true;

+};

+

+function returnFalse() {

+	return false;

+}

+function returnTrue() {

+	return true;

+}

+

+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding

+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html

+jQuery.Event.prototype = {

+	preventDefault: function() {

+		this.isDefaultPrevented = returnTrue;

+

+		var e = this.originalEvent;

+		if ( !e ) {

+			return;

+		}

+		

+		// if preventDefault exists run it on the original event

+		if ( e.preventDefault ) {

+			e.preventDefault();

+		}

+		// otherwise set the returnValue property of the original event to false (IE)

+		e.returnValue = false;

+	},

+	stopPropagation: function() {

+		this.isPropagationStopped = returnTrue;

+

+		var e = this.originalEvent;

+		if ( !e ) {

+			return;

+		}

+		// if stopPropagation exists run it on the original event

+		if ( e.stopPropagation ) {

+			e.stopPropagation();

+		}

+		// otherwise set the cancelBubble property of the original event to true (IE)

+		e.cancelBubble = true;

+	},

+	stopImmediatePropagation: function() {

+		this.isImmediatePropagationStopped = returnTrue;

+		this.stopPropagation();

+	},

+	isDefaultPrevented: returnFalse,

+	isPropagationStopped: returnFalse,

+	isImmediatePropagationStopped: returnFalse

+};

+

+// Checks if an event happened on an element within another element

+// Used in jQuery.event.special.mouseenter and mouseleave handlers

+var withinElement = function( event ) {

+	// Check if mouse(over|out) are still within the same parent element

+	var parent = event.relatedTarget;

+

+	// Traverse up the tree

+	while ( parent && parent !== this ) {

+		// Firefox sometimes assigns relatedTarget a XUL element

+		// which we cannot access the parentNode property of

+		try {

+			parent = parent.parentNode;

+

+		// assuming we've left the element since we most likely mousedover a xul element

+		} catch(e) {

+			break;

+		}

+	}

+

+	if ( parent !== this ) {

+		// set the correct event type

+		event.type = event.data;

+

+		// handle event if we actually just moused on to a non sub-element

+		jQuery.event.handle.apply( this, arguments );

+	}

+

+},

+

+// In case of event delegation, we only need to rename the event.type,

+// liveHandler will take care of the rest.

+delegate = function( event ) {

+	event.type = event.data;

+	jQuery.event.handle.apply( this, arguments );

+};

+

+// Create mouseenter and mouseleave events

+jQuery.each({

+	mouseenter: "mouseover",

+	mouseleave: "mouseout"

+}, function( orig, fix ) {

+	jQuery.event.special[ orig ] = {

+		setup: function( data ) {

+			jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );

+		},

+		teardown: function( data ) {

+			jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );

+		}

+	};

+});

+

+// submit delegation

+if ( !jQuery.support.submitBubbles ) {

+

+jQuery.event.special.submit = {

+	setup: function( data, namespaces, fn ) {

+		if ( this.nodeName.toLowerCase() !== "form" ) {

+			jQuery.event.add(this, "click.specialSubmit." + fn.guid, function( e ) {

+				var elem = e.target, type = elem.type;

+

+				if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {

+					return trigger( "submit", this, arguments );

+				}

+			});

+	 

+			jQuery.event.add(this, "keypress.specialSubmit." + fn.guid, function( e ) {

+				var elem = e.target, type = elem.type;

+

+				if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {

+					return trigger( "submit", this, arguments );

+				}

+			});

+

+		} else {

+			return false;

+		}

+	},

+

+	remove: function( namespaces, fn ) {

+		jQuery.event.remove( this, "click.specialSubmit" + (fn ? "."+fn.guid : "") );

+		jQuery.event.remove( this, "keypress.specialSubmit" + (fn ? "."+fn.guid : "") );

+	}

+};

+

+}

+

+// change delegation, happens here so we have bind.

+if ( !jQuery.support.changeBubbles ) {

+

+var formElems = /textarea|input|select/i;

+

+function getVal( elem ) {

+	var type = elem.type, val = elem.value;

+

+	if ( type === "radio" || type === "checkbox" ) {

+		val = elem.checked;

+

+	} else if ( type === "select-multiple" ) {

+		val = elem.selectedIndex > -1 ?

+			jQuery.map( elem.options, function( elem ) {

+				return elem.selected;

+			}).join("-") :

+			"";

+

+	} else if ( elem.nodeName.toLowerCase() === "select" ) {

+		val = elem.selectedIndex;

+	}

+

+	return val;

+}

+

+function testChange( e ) {

+		var elem = e.target, data, val;

+

+		if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {

+			return;

+		}

+

+		data = jQuery.data( elem, "_change_data" );

+		val = getVal(elem);

+

+		// the current data will be also retrieved by beforeactivate

+		if ( e.type !== "focusout" || elem.type !== "radio" ) {

+			jQuery.data( elem, "_change_data", val );

+		}

+		

+		if ( data === undefined || val === data ) {

+			return;

+		}

+

+		if ( data != null || val ) {

+			e.type = "change";

+			return jQuery.event.trigger( e, arguments[1], elem );

+		}

+}

+

+jQuery.event.special.change = {

+	filters: {

+		focusout: testChange, 

+

+		click: function( e ) {

+			var elem = e.target, type = elem.type;

+

+			if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {

+				return testChange.call( this, e );

+			}

+		},

+

+		// Change has to be called before submit

+		// Keydown will be called before keypress, which is used in submit-event delegation

+		keydown: function( e ) {

+			var elem = e.target, type = elem.type;

+

+			if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||

+				(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||

+				type === "select-multiple" ) {

+				return testChange.call( this, e );

+			}

+		},

+

+		// Beforeactivate happens also before the previous element is blurred

+		// with this event you can't trigger a change event, but you can store

+		// information/focus[in] is not needed anymore

+		beforeactivate: function( e ) {

+			var elem = e.target;

+

+			if ( elem.nodeName.toLowerCase() === "input" && elem.type === "radio" ) {

+				jQuery.data( elem, "_change_data", getVal(elem) );

+			}

+		}

+	},

+	setup: function( data, namespaces, fn ) {

+		for ( var type in changeFilters ) {

+			jQuery.event.add( this, type + ".specialChange." + fn.guid, changeFilters[type] );

+		}

+

+		return formElems.test( this.nodeName );

+	},

+	remove: function( namespaces, fn ) {

+		for ( var type in changeFilters ) {

+			jQuery.event.remove( this, type + ".specialChange" + (fn ? "."+fn.guid : ""), changeFilters[type] );

+		}

+

+		return formElems.test( this.nodeName );

+	}

+};

+

+var changeFilters = jQuery.event.special.change.filters;

+

+}

+

+function trigger( type, elem, args ) {

+	args[0].type = type;

+	return jQuery.event.handle.apply( elem, args );

+}

+

+// Create "bubbling" focus and blur events

+if ( document.addEventListener ) {

+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {

+		jQuery.event.special[ fix ] = {

+			setup: function() {

+				this.addEventListener( orig, handler, true );

+			}, 

+			teardown: function() { 

+				this.removeEventListener( orig, handler, true );

+			}

+		};

+

+		function handler( e ) { 

+			e = jQuery.event.fix( e );

+			e.type = fix;

+			return jQuery.event.handle.call( this, e );

+		}

+	});

+}

+

+jQuery.each(["bind", "one"], function( i, name ) {

+	jQuery.fn[ name ] = function( type, data, fn ) {

+		// Handle object literals

+		if ( typeof type === "object" ) {

+			for ( var key in type ) {

+				this[ name ](key, data, type[key], fn);

+			}

+			return this;

+		}

+		

+		if ( jQuery.isFunction( data ) ) {

+			fn = data;

+			data = undefined;

+		}

+

+		var handler = name === "one" ? jQuery.proxy( fn, function( event ) {

+			jQuery( this ).unbind( event, handler );

+			return fn.apply( this, arguments );

+		}) : fn;

+

+		return type === "unload" && name !== "one" ?

+			this.one( type, data, fn ) :

+			this.each(function() {

+				jQuery.event.add( this, type, handler, data );

+			});

+	};

+});

+

+jQuery.fn.extend({

+	unbind: function( type, fn ) {

+		// Handle object literals

+		if ( typeof type === "object" && !type.preventDefault ) {

+			for ( var key in type ) {

+				this.unbind(key, type[key]);

+			}

+			return this;

+		}

+

+		return this.each(function() {

+			jQuery.event.remove( this, type, fn );

+		});

+	},

+	trigger: function( type, data ) {

+		return this.each(function() {

+			jQuery.event.trigger( type, data, this );

+		});

+	},

+

+	triggerHandler: function( type, data ) {

+		if ( this[0] ) {

+			var event = jQuery.Event( type );

+			event.preventDefault();

+			event.stopPropagation();

+			jQuery.event.trigger( event, data, this[0] );

+			return event.result;

+		}

+	},

+

+	toggle: function( fn ) {

+		// Save reference to arguments for access in closure

+		var args = arguments, i = 1;

+

+		// link all the functions, so any of them can unbind this click handler

+		while ( i < args.length ) {

+			jQuery.proxy( fn, args[ i++ ] );

+		}

+

+		return this.click( jQuery.proxy( fn, function( event ) {

+			// Figure out which function to execute

+			var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;

+			jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );

+

+			// Make sure that clicks stop

+			event.preventDefault();

+

+			// and execute the function

+			return args[ lastToggle ].apply( this, arguments ) || false;

+		}));

+	},

+

+	hover: function( fnOver, fnOut ) {

+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );

+	}

+});

+

+jQuery.each(["live", "die"], function( i, name ) {

+	jQuery.fn[ name ] = function( types, data, fn ) {

+		var type, i = 0;

+

+		if ( jQuery.isFunction( data ) ) {

+			fn = data;

+			data = undefined;

+		}

+

+		types = (types || "").split( /\s+/ );

+

+		while ( (type = types[ i++ ]) != null ) {

+			type = type === "focus" ? "focusin" : // focus --> focusin

+					type === "blur" ? "focusout" : // blur --> focusout

+					type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support

+					type;

+			

+			if ( name === "live" ) {

+				// bind live handler

+				jQuery( this.context ).bind( liveConvert( type, this.selector ), {

+					data: data, selector: this.selector, live: type

+				}, fn );

+

+			} else {

+				// unbind live handler

+				jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null );

+			}

+		}

+		

+		return this;

+	}

+});

+

+function liveHandler( event ) {

+	var stop, elems = [], selectors = [], args = arguments,

+		related, match, fn, elem, j, i, l, data,

+		live = jQuery.extend({}, jQuery.data( this, "events" ).live);

+

+	// Make sure we avoid non-left-click bubbling in Firefox (#3861)

+	if ( event.button && event.type === "click" ) {

+		return;

+	}

+

+	for ( j in live ) {

+		fn = live[j];

+		if ( fn.live === event.type ||

+				fn.altLive && jQuery.inArray(event.type, fn.altLive) > -1 ) {

+

+			data = fn.data;

+			if ( !(data.beforeFilter && data.beforeFilter[event.type] && 

+					!data.beforeFilter[event.type](event)) ) {

+				selectors.push( fn.selector );

+			}

+		} else {

+			delete live[j];

+		}

+	}

+

+	match = jQuery( event.target ).closest( selectors, event.currentTarget );

+

+	for ( i = 0, l = match.length; i < l; i++ ) {

+		for ( j in live ) {

+			fn = live[j];

+			elem = match[i].elem;

+			related = null;

+

+			if ( match[i].selector === fn.selector ) {

+				// Those two events require additional checking

+				if ( fn.live === "mouseenter" || fn.live === "mouseleave" ) {

+					related = jQuery( event.relatedTarget ).closest( fn.selector )[0];

+				}

+

+				if ( !related || related !== elem ) {

+					elems.push({ elem: elem, fn: fn });

+				}

+			}

+		}

+	}

+

+	for ( i = 0, l = elems.length; i < l; i++ ) {

+		match = elems[i];

+		event.currentTarget = match.elem;

+		event.data = match.fn.data;

+		if ( match.fn.apply( match.elem, args ) === false ) {

+			stop = false;

+			break;

+		}

+	}

+

+	return stop;

+}

+

+function liveConvert( type, selector ) {

+	return "live." + (type ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");

+}

+

+jQuery.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( i, name ) {

+

+	// Handle event binding

+	jQuery.fn[ name ] = function( fn ) {

+		return fn ? this.bind( name, fn ) : this.trigger( name );

+	};

+

+	if ( jQuery.attrFn ) {

+		jQuery.attrFn[ name ] = true;

+	}

+});

+

+// Prevent memory leaks in IE

+// Window isn't included so as not to unbind existing unload events

+// More info:

+//  - http://isaacschlueter.com/2006/10/msie-memory-leaks/

+if ( window.attachEvent && !window.addEventListener ) {

+	window.attachEvent("onunload", function() {

+		for ( var id in jQuery.cache ) {

+			if ( jQuery.cache[ id ].handle ) {

+				// Try/Catch is to handle iframes being unloaded, see #4280

+				try {

+					jQuery.event.remove( jQuery.cache[ id ].handle.elem );

+				} catch(e) {}

+			}

+		}

+	});

+}

+/*!

+ * Sizzle CSS Selector Engine - v1.0

+ *  Copyright 2009, The Dojo Foundation

+ *  More information: http://sizzlejs.com/

+ *

+ * Permission is hereby granted, free of charge, to any person obtaining

+ * a copy of this software and associated documentation files (the

+ * "Software"), to deal in the Software without restriction, including

+ * without limitation the rights to use, copy, modify, merge, publish,

+ * distribute, sublicense, and/or sell copies of the Software, and to

+ * permit persons to whom the Software is furnished to do so, subject to

+ * the following conditions:

+ * 

+ * The above copyright notice and this permission notice shall be

+ * included in all copies or substantial portions of the Software.

+ * 

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND

+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE

+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION

+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION

+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ */

+(function(){

+

+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,

+	done = 0,

+	toString = Object.prototype.toString,

+	hasDuplicate = false,

+	baseHasDuplicate = true;

+

+// Here we check if the JavaScript engine is using some sort of

+// optimization where it does not always call our comparision

+// function. If that is the case, discard the hasDuplicate value.

+//   Thus far that includes Google Chrome.

+[0, 0].sort(function(){

+	baseHasDuplicate = false;

+	return 0;

+});

+

+var Sizzle = function(selector, context, results, seed) {

+	results = results || [];

+	var origContext = context = context || document;

+

+	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {

+		return [];

+	}

+	

+	if ( !selector || typeof selector !== "string" ) {

+		return results;

+	}

+

+	var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context),

+		soFar = selector;

+	

+	// Reset the position of the chunker regexp (start from head)

+	while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {

+		soFar = m[3];

+		

+		parts.push( m[1] );

+		

+		if ( m[2] ) {

+			extra = m[3];

+			break;

+		}

+	}

+

+	if ( parts.length > 1 && origPOS.exec( selector ) ) {

+		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {

+			set = posProcess( parts[0] + parts[1], context );

+		} else {

+			set = Expr.relative[ parts[0] ] ?

+				[ context ] :

+				Sizzle( parts.shift(), context );

+

+			while ( parts.length ) {

+				selector = parts.shift();

+

+				if ( Expr.relative[ selector ] ) {

+					selector += parts.shift();

+				}

+				

+				set = posProcess( selector, set );

+			}

+		}

+	} else {

+		// Take a shortcut and set the context if the root selector is an ID

+		// (but not if it'll be faster if the inner selector is an ID)

+		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&

+				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {

+			var ret = Sizzle.find( parts.shift(), context, contextXML );

+			context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];

+		}

+

+		if ( context ) {

+			var ret = seed ?

+				{ expr: parts.pop(), set: makeArray(seed) } :

+				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );

+			set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;

+

+			if ( parts.length > 0 ) {

+				checkSet = makeArray(set);

+			} else {

+				prune = false;

+			}

+

+			while ( parts.length ) {

+				var cur = parts.pop(), pop = cur;

+

+				if ( !Expr.relative[ cur ] ) {

+					cur = "";

+				} else {

+					pop = parts.pop();

+				}

+

+				if ( pop == null ) {

+					pop = context;

+				}

+

+				Expr.relative[ cur ]( checkSet, pop, contextXML );

+			}

+		} else {

+			checkSet = parts = [];

+		}

+	}

+

+	if ( !checkSet ) {

+		checkSet = set;

+	}

+

+	if ( !checkSet ) {

+		Sizzle.error( cur || selector );

+	}

+

+	if ( toString.call(checkSet) === "[object Array]" ) {

+		if ( !prune ) {

+			results.push.apply( results, checkSet );

+		} else if ( context && context.nodeType === 1 ) {

+			for ( var i = 0; checkSet[i] != null; i++ ) {

+				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {

+					results.push( set[i] );

+				}

+			}

+		} else {

+			for ( var i = 0; checkSet[i] != null; i++ ) {

+				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {

+					results.push( set[i] );

+				}

+			}

+		}

+	} else {

+		makeArray( checkSet, results );

+	}

+

+	if ( extra ) {

+		Sizzle( extra, origContext, results, seed );

+		Sizzle.uniqueSort( results );

+	}

+

+	return results;

+};

+

+Sizzle.uniqueSort = function(results){

+	if ( sortOrder ) {

+		hasDuplicate = baseHasDuplicate;

+		results.sort(sortOrder);

+

+		if ( hasDuplicate ) {

+			for ( var i = 1; i < results.length; i++ ) {

+				if ( results[i] === results[i-1] ) {

+					results.splice(i--, 1);

+				}

+			}

+		}

+	}

+

+	return results;

+};

+

+Sizzle.matches = function(expr, set){

+	return Sizzle(expr, null, null, set);

+};

+

+Sizzle.find = function(expr, context, isXML){

+	var set, match;

+

+	if ( !expr ) {

+		return [];

+	}

+

+	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {

+		var type = Expr.order[i], match;

+		

+		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {

+			var left = match[1];

+			match.splice(1,1);

+

+			if ( left.substr( left.length - 1 ) !== "\\" ) {

+				match[1] = (match[1] || "").replace(/\\/g, "");

+				set = Expr.find[ type ]( match, context, isXML );

+				if ( set != null ) {

+					expr = expr.replace( Expr.match[ type ], "" );

+					break;

+				}

+			}

+		}

+	}

+

+	if ( !set ) {

+		set = context.getElementsByTagName("*");

+	}

+

+	return {set: set, expr: expr};

+};

+

+Sizzle.filter = function(expr, set, inplace, not){

+	var old = expr, result = [], curLoop = set, match, anyFound,

+		isXMLFilter = set && set[0] && isXML(set[0]);

+

+	while ( expr && set.length ) {

+		for ( var type in Expr.filter ) {

+			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {

+				var filter = Expr.filter[ type ], found, item, left = match[1];

+				anyFound = false;

+

+				match.splice(1,1);

+

+				if ( left.substr( left.length - 1 ) === "\\" ) {

+					continue;

+				}

+

+				if ( curLoop === result ) {

+					result = [];

+				}

+

+				if ( Expr.preFilter[ type ] ) {

+					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );

+

+					if ( !match ) {

+						anyFound = found = true;

+					} else if ( match === true ) {

+						continue;

+					}

+				}

+

+				if ( match ) {

+					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {

+						if ( item ) {

+							found = filter( item, match, i, curLoop );

+							var pass = not ^ !!found;

+

+							if ( inplace && found != null ) {

+								if ( pass ) {

+									anyFound = true;

+								} else {

+									curLoop[i] = false;

+								}

+							} else if ( pass ) {

+								result.push( item );

+								anyFound = true;

+							}

+						}

+					}

+				}

+

+				if ( found !== undefined ) {

+					if ( !inplace ) {

+						curLoop = result;

+					}

+

+					expr = expr.replace( Expr.match[ type ], "" );

+

+					if ( !anyFound ) {

+						return [];

+					}

+

+					break;

+				}

+			}

+		}

+

+		// Improper expression

+		if ( expr === old ) {

+			if ( anyFound == null ) {

+				Sizzle.error( expr );

+			} else {

+				break;

+			}

+		}

+

+		old = expr;

+	}

+

+	return curLoop;

+};

+

+Sizzle.error = function( msg ) {

+	throw "Syntax error, unrecognized expression: " + msg;

+};

+

+var Expr = Sizzle.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(elem){

+			return elem.getAttribute("href");

+		}

+	},

+	relative: {

+		"+": function(checkSet, part){

+			var isPartStr = typeof part === "string",

+				isTag = isPartStr && !/\W/.test(part),

+				isPartStrNotTag = isPartStr && !isTag;

+

+			if ( isTag ) {

+				part = part.toLowerCase();

+			}

+

+			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {

+				if ( (elem = checkSet[i]) ) {

+					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}

+

+					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?

+						elem || false :

+						elem === part;

+				}

+			}

+

+			if ( isPartStrNotTag ) {

+				Sizzle.filter( part, checkSet, true );

+			}

+		},

+		">": function(checkSet, part){

+			var isPartStr = typeof part === "string";

+

+			if ( isPartStr && !/\W/.test(part) ) {

+				part = part.toLowerCase();

+

+				for ( var i = 0, l = checkSet.length; i < l; i++ ) {

+					var elem = checkSet[i];

+					if ( elem ) {

+						var parent = elem.parentNode;

+						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;

+					}

+				}

+			} else {

+				for ( var i = 0, l = checkSet.length; i < l; i++ ) {

+					var elem = checkSet[i];

+					if ( elem ) {

+						checkSet[i] = isPartStr ?

+							elem.parentNode :

+							elem.parentNode === part;

+					}

+				}

+

+				if ( isPartStr ) {

+					Sizzle.filter( part, checkSet, true );

+				}

+			}

+		},

+		"": function(checkSet, part, isXML){

+			var doneName = done++, checkFn = dirCheck;

+

+			if ( typeof part === "string" && !/\W/.test(part) ) {

+				var nodeCheck = part = part.toLowerCase();

+				checkFn = dirNodeCheck;

+			}

+

+			checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);

+		},

+		"~": function(checkSet, part, isXML){

+			var doneName = done++, checkFn = dirCheck;

+

+			if ( typeof part === "string" && !/\W/.test(part) ) {

+				var nodeCheck = part = part.toLowerCase();

+				checkFn = dirNodeCheck;

+			}

+

+			checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);

+		}

+	},

+	find: {

+		ID: function(match, context, isXML){

+			if ( typeof context.getElementById !== "undefined" && !isXML ) {

+				var m = context.getElementById(match[1]);

+				return m ? [m] : [];

+			}

+		},

+		NAME: function(match, context){

+			if ( typeof context.getElementsByName !== "undefined" ) {

+				var ret = [], results = context.getElementsByName(match[1]);

+

+				for ( var i = 0, l = results.length; i < l; i++ ) {

+					if ( results[i].getAttribute("name") === match[1] ) {

+						ret.push( results[i] );

+					}

+				}

+

+				return ret.length === 0 ? null : ret;

+			}

+		},

+		TAG: function(match, context){

+			return context.getElementsByTagName(match[1]);

+		}

+	},

+	preFilter: {

+		CLASS: function(match, curLoop, inplace, result, not, isXML){

+			match = " " + match[1].replace(/\\/g, "") + " ";

+

+			if ( isXML ) {

+				return match;

+			}

+

+			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {

+				if ( elem ) {

+					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {

+						if ( !inplace ) {

+							result.push( elem );

+						}

+					} else if ( inplace ) {

+						curLoop[i] = false;

+					}

+				}

+			}

+

+			return false;

+		},

+		ID: function(match){

+			return match[1].replace(/\\/g, "");

+		},

+		TAG: function(match, curLoop){

+			return match[1].toLowerCase();

+		},

+		CHILD: function(match){

+			if ( match[1] === "nth" ) {

+				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'

+				var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(

+					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||

+					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);

+

+				// calculate the numbers (first)n+(last) including if they are negative

+				match[2] = (test[1] + (test[2] || 1)) - 0;

+				match[3] = test[3] - 0;

+			}

+

+			// TODO: Move to normal caching system

+			match[0] = done++;

+

+			return match;

+		},

+		ATTR: function(match, curLoop, inplace, result, not, isXML){

+			var name = match[1].replace(/\\/g, "");

+			

+			if ( !isXML && Expr.attrMap[name] ) {

+				match[1] = Expr.attrMap[name];

+			}

+

+			if ( match[2] === "~=" ) {

+				match[4] = " " + match[4] + " ";

+			}

+

+			return match;

+		},

+		PSEUDO: function(match, curLoop, inplace, result, not){

+			if ( match[1] === "not" ) {

+				// If we're dealing with a complex expression, or a simple one

+				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {

+					match[3] = Sizzle(match[3], null, null, curLoop);

+				} else {

+					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);

+					if ( !inplace ) {

+						result.push.apply( result, ret );

+					}

+					return false;

+				}

+			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {

+				return true;

+			}

+			

+			return match;

+		},

+		POS: function(match){

+			match.unshift( true );

+			return match;

+		}

+	},

+	filters: {

+		enabled: function(elem){

+			return elem.disabled === false && elem.type !== "hidden";

+		},

+		disabled: function(elem){

+			return elem.disabled === true;

+		},

+		checked: function(elem){

+			return elem.checked === true;

+		},

+		selected: function(elem){

+			// Accessing this property makes selected-by-default

+			// options in Safari work properly

+			elem.parentNode.selectedIndex;

+			return elem.selected === true;

+		},

+		parent: function(elem){

+			return !!elem.firstChild;

+		},

+		empty: function(elem){

+			return !elem.firstChild;

+		},

+		has: function(elem, i, match){

+			return !!Sizzle( match[3], elem ).length;

+		},

+		header: function(elem){

+			return /h\d/i.test( elem.nodeName );

+		},

+		text: function(elem){

+			return "text" === elem.type;

+		},

+		radio: function(elem){

+			return "radio" === elem.type;

+		},

+		checkbox: function(elem){

+			return "checkbox" === elem.type;

+		},

+		file: function(elem){

+			return "file" === elem.type;

+		},

+		password: function(elem){

+			return "password" === elem.type;

+		},

+		submit: function(elem){

+			return "submit" === elem.type;

+		},

+		image: function(elem){

+			return "image" === elem.type;

+		},

+		reset: function(elem){

+			return "reset" === elem.type;

+		},

+		button: function(elem){

+			return "button" === elem.type || elem.nodeName.toLowerCase() === "button";

+		},

+		input: function(elem){

+			return /input|select|textarea|button/i.test(elem.nodeName);

+		}

+	},

+	setFilters: {

+		first: function(elem, i){

+			return i === 0;

+		},

+		last: function(elem, i, match, array){

+			return i === array.length - 1;

+		},

+		even: function(elem, i){

+			return i % 2 === 0;

+		},

+		odd: function(elem, i){

+			return i % 2 === 1;

+		},

+		lt: function(elem, i, match){

+			return i < match[3] - 0;

+		},

+		gt: function(elem, i, match){

+			return i > match[3] - 0;

+		},

+		nth: function(elem, i, match){

+			return match[3] - 0 === i;

+		},

+		eq: function(elem, i, match){

+			return match[3] - 0 === i;

+		}

+	},

+	filter: {

+		PSEUDO: function(elem, match, i, array){

+			var name = match[1], filter = Expr.filters[ name ];

+

+			if ( filter ) {

+				return filter( elem, i, match, array );

+			} else if ( name === "contains" ) {

+				return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;

+			} else if ( name === "not" ) {

+				var not = match[3];

+

+				for ( var i = 0, l = not.length; i < l; i++ ) {

+					if ( not[i] === elem ) {

+						return false;

+					}

+				}

+

+				return true;

+			} else {

+				Sizzle.error( "Syntax error, unrecognized expression: " + name );

+			}

+		},

+		CHILD: function(elem, match){

+			var type = match[1], node = elem;

+			switch (type) {

+				case 'only':

+				case 'first':

+					while ( (node = node.previousSibling) )	 {

+						if ( node.nodeType === 1 ) { 

+							return false; 

+						}

+					}

+					if ( type === "first" ) { 

+						return true; 

+					}

+					node = elem;

+				case 'last':

+					while ( (node = node.nextSibling) )	 {

+						if ( node.nodeType === 1 ) { 

+							return false; 

+						}

+					}

+					return true;

+				case 'nth':

+					var first = match[2], last = match[3];

+

+					if ( first === 1 && last === 0 ) {

+						return true;

+					}

+					

+					var doneName = match[0],

+						parent = elem.parentNode;

+	

+					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {

+						var count = 0;

+						for ( node = parent.firstChild; node; node = node.nextSibling ) {

+							if ( node.nodeType === 1 ) {

+								node.nodeIndex = ++count;

+							}

+						} 

+						parent.sizcache = doneName;

+					}

+					

+					var diff = elem.nodeIndex - last;

+					if ( first === 0 ) {

+						return diff === 0;

+					} else {

+						return ( diff % first === 0 && diff / first >= 0 );

+					}

+			}

+		},

+		ID: function(elem, match){

+			return elem.nodeType === 1 && elem.getAttribute("id") === match;

+		},

+		TAG: function(elem, match){

+			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;

+		},

+		CLASS: function(elem, match){

+			return (" " + (elem.className || elem.getAttribute("class")) + " ")

+				.indexOf( match ) > -1;

+		},

+		ATTR: function(elem, match){

+			var name = match[1],

+				result = Expr.attrHandle[ name ] ?

+					Expr.attrHandle[ name ]( elem ) :

+					elem[ name ] != null ?

+						elem[ name ] :

+						elem.getAttribute( name ),

+				value = result + "",

+				type = match[2],

+				check = match[4];

+

+			return result == null ?

+				type === "!=" :

+				type === "=" ?

+				value === check :

+				type === "*=" ?

+				value.indexOf(check) >= 0 :

+				type === "~=" ?

+				(" " + value + " ").indexOf(check) >= 0 :

+				!check ?

+				value && result !== false :

+				type === "!=" ?

+				value !== check :

+				type === "^=" ?

+				value.indexOf(check) === 0 :

+				type === "$=" ?

+				value.substr(value.length - check.length) === check :

+				type === "|=" ?

+				value === check || value.substr(0, check.length + 1) === check + "-" :

+				false;

+		},

+		POS: function(elem, match, i, array){

+			var name = match[2], filter = Expr.setFilters[ name ];

+

+			if ( filter ) {

+				return filter( elem, i, match, array );

+			}

+		}

+	}

+};

+

+var origPOS = Expr.match.POS;

+

+for ( var type in Expr.match ) {

+	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );

+	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){

+		return "\\" + (num - 0 + 1);

+	}));

+}

+

+var makeArray = function(array, results) {

+	array = Array.prototype.slice.call( array, 0 );

+

+	if ( results ) {

+		results.push.apply( results, array );

+		return results;

+	}

+	

+	return array;

+};

+

+// Perform a simple check to determine if the browser is capable of

+// converting a NodeList to an array using builtin methods.

+try {

+	Array.prototype.slice.call( document.documentElement.childNodes, 0 );

+

+// Provide a fallback method if it does not work

+} catch(e){

+	makeArray = function(array, results) {

+		var ret = results || [];

+

+		if ( toString.call(array) === "[object Array]" ) {

+			Array.prototype.push.apply( ret, array );

+		} else {

+			if ( typeof array.length === "number" ) {

+				for ( var i = 0, l = array.length; i < l; i++ ) {

+					ret.push( array[i] );

+				}

+			} else {

+				for ( var i = 0; array[i]; i++ ) {

+					ret.push( array[i] );

+				}

+			}

+		}

+

+		return ret;

+	};

+}

+

+var sortOrder;

+

+if ( document.documentElement.compareDocumentPosition ) {

+	sortOrder = function( a, b ) {

+		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {

+			if ( a == b ) {

+				hasDuplicate = true;

+			}

+			return a.compareDocumentPosition ? -1 : 1;

+		}

+

+		var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;

+		if ( ret === 0 ) {

+			hasDuplicate = true;

+		}

+		return ret;

+	};

+} else if ( "sourceIndex" in document.documentElement ) {

+	sortOrder = function( a, b ) {

+		if ( !a.sourceIndex || !b.sourceIndex ) {

+			if ( a == b ) {

+				hasDuplicate = true;

+			}

+			return a.sourceIndex ? -1 : 1;

+		}

+

+		var ret = a.sourceIndex - b.sourceIndex;

+		if ( ret === 0 ) {

+			hasDuplicate = true;

+		}

+		return ret;

+	};

+} else if ( document.createRange ) {

+	sortOrder = function( a, b ) {

+		if ( !a.ownerDocument || !b.ownerDocument ) {

+			if ( a == b ) {

+				hasDuplicate = true;

+			}

+			return a.ownerDocument ? -1 : 1;

+		}

+

+		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();

+		aRange.setStart(a, 0);

+		aRange.setEnd(a, 0);

+		bRange.setStart(b, 0);

+		bRange.setEnd(b, 0);

+		var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);

+		if ( ret === 0 ) {

+			hasDuplicate = true;

+		}

+		return ret;

+	};

+}

+

+// Utility function for retreiving the text value of an array of DOM nodes

+function getText( elems ) {

+	var ret = "", elem;

+

+	for ( var i = 0; elems[i]; i++ ) {

+		elem = elems[i];

+

+		// Get the text from text nodes and CDATA nodes

+		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {

+			ret += elem.nodeValue;

+

+		// Traverse everything else, except comment nodes

+		} else if ( elem.nodeType !== 8 ) {

+			ret += getText( elem.childNodes );

+		}

+	}

+

+	return ret;

+}

+

+// Check to see if the browser returns elements by name when

+// querying by getElementById (and provide a workaround)

+(function(){

+	// We're going to inject a fake input element with a specified name

+	var form = document.createElement("div"),

+		id = "script" + (new Date).getTime();

+	form.innerHTML = "<a name='" + id + "'/>";

+

+	// Inject it into the root element, check its status, and remove it quickly

+	var root = document.documentElement;

+	root.insertBefore( form, root.firstChild );

+

+	// The workaround has to do additional checks after a getElementById

+	// Which slows things down for other browsers (hence the branching)

+	if ( document.getElementById( id ) ) {

+		Expr.find.ID = function(match, context, isXML){

+			if ( typeof context.getElementById !== "undefined" && !isXML ) {

+				var m = context.getElementById(match[1]);

+				return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];

+			}

+		};

+

+		Expr.filter.ID = function(elem, match){

+			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");

+			return elem.nodeType === 1 && node && node.nodeValue === match;

+		};

+	}

+

+	root.removeChild( form );

+	root = form = null; // release memory in IE

+})();

+

+(function(){

+	// Check to see if the browser returns only elements

+	// when doing getElementsByTagName("*")

+

+	// Create a fake element

+	var div = document.createElement("div");

+	div.appendChild( document.createComment("") );

+

+	// Make sure no comments are found

+	if ( div.getElementsByTagName("*").length > 0 ) {

+		Expr.find.TAG = function(match, context){

+			var results = context.getElementsByTagName(match[1]);

+

+			// Filter out possible comments

+			if ( match[1] === "*" ) {

+				var tmp = [];

+

+				for ( var i = 0; results[i]; i++ ) {

+					if ( results[i].nodeType === 1 ) {

+						tmp.push( results[i] );

+					}

+				}

+

+				results = tmp;

+			}

+

+			return results;

+		};

+	}

+

+	// Check to see if an attribute returns normalized href attributes

+	div.innerHTML = "<a href='#'></a>";

+	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&

+			div.firstChild.getAttribute("href") !== "#" ) {

+		Expr.attrHandle.href = function(elem){

+			return elem.getAttribute("href", 2);

+		};

+	}

+

+	div = null; // release memory in IE

+})();

+

+if ( document.querySelectorAll ) {

+	(function(){

+		var oldSizzle = Sizzle, div = document.createElement("div");

+		div.innerHTML = "<p class='TEST'></p>";

+

+		// Safari can't handle uppercase or unicode characters when

+		// in quirks mode.

+		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {

+			return;

+		}

+	

+		Sizzle = function(query, context, extra, seed){

+			context = context || document;

+

+			// Only use querySelectorAll on non-XML documents

+			// (ID selectors don't work in non-HTML documents)

+			if ( !seed && context.nodeType === 9 && !isXML(context) ) {

+				try {

+					return makeArray( context.querySelectorAll(query), extra );

+				} catch(e){}

+			}

+		

+			return oldSizzle(query, context, extra, seed);

+		};

+

+		for ( var prop in oldSizzle ) {

+			Sizzle[ prop ] = oldSizzle[ prop ];

+		}

+

+		div = null; // release memory in IE

+	})();

+}

+

+(function(){

+	var div = document.createElement("div");

+

+	div.innerHTML = "<div class='test e'></div><div class='test'></div>";

+

+	// Opera can't find a second classname (in 9.6)

+	// Also, make sure that getElementsByClassName actually exists

+	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {

+		return;

+	}

+

+	// Safari caches class attributes, doesn't catch changes (in 3.2)

+	div.lastChild.className = "e";

+

+	if ( div.getElementsByClassName("e").length === 1 ) {

+		return;

+	}

+	

+	Expr.order.splice(1, 0, "CLASS");

+	Expr.find.CLASS = function(match, context, isXML) {

+		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {

+			return context.getElementsByClassName(match[1]);

+		}

+	};

+

+	div = null; // release memory in IE

+})();

+

+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {

+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {

+		var elem = checkSet[i];

+		if ( elem ) {

+			elem = elem[dir];

+			var match = false;

+

+			while ( elem ) {

+				if ( elem.sizcache === doneName ) {

+					match = checkSet[elem.sizset];

+					break;

+				}

+

+				if ( elem.nodeType === 1 && !isXML ){

+					elem.sizcache = doneName;

+					elem.sizset = i;

+				}

+

+				if ( elem.nodeName.toLowerCase() === cur ) {

+					match = elem;

+					break;

+				}

+

+				elem = elem[dir];

+			}

+

+			checkSet[i] = match;

+		}

+	}

+}

+

+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {

+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {

+		var elem = checkSet[i];

+		if ( elem ) {

+			elem = elem[dir];

+			var match = false;

+

+			while ( elem ) {

+				if ( elem.sizcache === doneName ) {

+					match = checkSet[elem.sizset];

+					break;

+				}

+

+				if ( elem.nodeType === 1 ) {

+					if ( !isXML ) {

+						elem.sizcache = doneName;

+						elem.sizset = i;

+					}

+					if ( typeof cur !== "string" ) {

+						if ( elem === cur ) {

+							match = true;

+							break;

+						}

+

+					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {

+						match = elem;

+						break;

+					}

+				}

+

+				elem = elem[dir];

+			}

+

+			checkSet[i] = match;

+		}

+	}

+}

+

+var contains = document.compareDocumentPosition ? function(a, b){

+	return a.compareDocumentPosition(b) & 16;

+} : function(a, b){

+	return a !== b && (a.contains ? a.contains(b) : true);

+};

+

+var isXML = function(elem){

+	// documentElement is verified for cases where it doesn't yet exist

+	// (such as loading iframes in IE - #4833) 

+	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;

+	return documentElement ? documentElement.nodeName !== "HTML" : false;

+};

+

+var posProcess = function(selector, context){

+	var tmpSet = [], later = "", match,

+		root = context.nodeType ? [context] : context;

+

+	// Position selectors must be done after the filter

+	// And so must :not(positional) so we move all PSEUDOs to the end

+	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {

+		later += match[0];

+		selector = selector.replace( Expr.match.PSEUDO, "" );

+	}

+

+	selector = Expr.relative[selector] ? selector + "*" : selector;

+

+	for ( var i = 0, l = root.length; i < l; i++ ) {

+		Sizzle( selector, root[i], tmpSet );

+	}

+

+	return Sizzle.filter( later, tmpSet );

+};

+

+// EXPOSE

+jQuery.find = Sizzle;

+jQuery.expr = Sizzle.selectors;

+jQuery.expr[":"] = jQuery.expr.filters;

+jQuery.unique = Sizzle.uniqueSort;

+jQuery.getText = getText;

+jQuery.isXMLDoc = isXML;

+jQuery.contains = contains;

+

+return;

+

+window.Sizzle = Sizzle;

+

+})();

+var runtil = /Until$/,

+	rparentsprev = /^(?:parents|prevUntil|prevAll)/,

+	// Note: This RegExp should be improved, or likely pulled from Sizzle

+	rmultiselector = /,/,

+	slice = Array.prototype.slice;

+

+// Implement the identical functionality for filter and not

+var winnow = function( elements, qualifier, keep ) {

+	if ( jQuery.isFunction( qualifier ) ) {

+		return jQuery.grep(elements, function( elem, i ) {

+			return !!qualifier.call( elem, i, elem ) === keep;

+		});

+

+	} else if ( qualifier.nodeType ) {

+		return jQuery.grep(elements, function( elem, i ) {

+			return (elem === qualifier) === keep;

+		});

+

+	} else if ( typeof qualifier === "string" ) {

+		var filtered = jQuery.grep(elements, function( elem ) {

+			return elem.nodeType === 1;

+		});

+

+		if ( isSimple.test( qualifier ) ) {

+			return jQuery.filter(qualifier, filtered, !keep);

+		} else {

+			qualifier = jQuery.filter( qualifier, filtered );

+		}

+	}

+

+	return jQuery.grep(elements, function( elem, i ) {

+		return (jQuery.inArray( elem, qualifier ) >= 0) === keep;

+	});

+};

+

+jQuery.fn.extend({

+	find: function( selector ) {

+		var ret = this.pushStack( "", "find", selector ), length = 0;

+

+		for ( var i = 0, l = this.length; i < l; i++ ) {

+			length = ret.length;

+			jQuery.find( selector, this[i], ret );

+

+			if ( i > 0 ) {

+				// Make sure that the results are unique

+				for ( var n = length; n < ret.length; n++ ) {

+					for ( var r = 0; r < length; r++ ) {

+						if ( ret[r] === ret[n] ) {

+							ret.splice(n--, 1);

+							break;

+						}

+					}

+				}

+			}

+		}

+

+		return ret;

+	},

+

+	has: function( target ) {

+		var targets = jQuery( target );

+		return this.filter(function() {

+			for ( var i = 0, l = targets.length; i < l; i++ ) {

+				if ( jQuery.contains( this, targets[i] ) ) {

+					return true;

+				}

+			}

+		});

+	},

+

+	not: function( selector ) {

+		return this.pushStack( winnow(this, selector, false), "not", selector);

+	},

+

+	filter: function( selector ) {

+		return this.pushStack( winnow(this, selector, true), "filter", selector );

+	},

+	

+	is: function( selector ) {

+		return !!selector && jQuery.filter( selector, this ).length > 0;

+	},

+

+	closest: function( selectors, context ) {

+		if ( jQuery.isArray( selectors ) ) {

+			var ret = [], cur = this[0], match, matches = {}, selector;

+

+			if ( cur && selectors.length ) {

+				for ( var i = 0, l = selectors.length; i < l; i++ ) {

+					selector = selectors[i];

+

+					if ( !matches[selector] ) {

+						matches[selector] = jQuery.expr.match.POS.test( selector ) ? 

+							jQuery( selector, context || this.context ) :

+							selector;

+					}

+				}

+

+				while ( cur && cur.ownerDocument && cur !== context ) {

+					for ( selector in matches ) {

+						match = matches[selector];

+

+						if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {

+							ret.push({ selector: selector, elem: cur });

+							delete matches[selector];

+						}

+					}

+					cur = cur.parentNode;

+				}

+			}

+

+			return ret;

+		}

+

+		var pos = jQuery.expr.match.POS.test( selectors ) ? 

+			jQuery( selectors, context || this.context ) : null;

+

+		return this.map(function( i, cur ) {

+			while ( cur && cur.ownerDocument && cur !== context ) {

+				if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) {

+					return cur;

+				}

+				cur = cur.parentNode;

+			}

+			return null;

+		});

+	},

+	

+	// Determine the position of an element within

+	// the matched set of elements

+	index: function( elem ) {

+		if ( !elem || typeof elem === "string" ) {

+			return jQuery.inArray( this[0],

+				// If it receives a string, the selector is used

+				// If it receives nothing, the siblings are used

+				elem ? jQuery( elem ) : this.parent().children() );

+		}

+		// Locate the position of the desired element

+		return jQuery.inArray(

+			// If it receives a jQuery object, the first element is used

+			elem.jquery ? elem[0] : elem, this );

+	},

+

+	add: function( selector, context ) {

+		var set = typeof selector === "string" ?

+				jQuery( selector, context || this.context ) :

+				jQuery.makeArray( selector ),

+			all = jQuery.merge( this.get(), set );

+

+		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?

+			all :

+			jQuery.unique( all ) );

+	},

+

+	andSelf: function() {

+		return this.add( this.prevObject );

+	}

+});

+

+// A painfully simple check to see if an element is disconnected

+// from a document (should be improved, where feasible).

+function isDisconnected( node ) {

+	return !node || !node.parentNode || node.parentNode.nodeType === 11;

+}

+

+jQuery.each({

+	parent: function( elem ) {

+		var parent = elem.parentNode;

+		return parent && parent.nodeType !== 11 ? parent : null;

+	},

+	parents: function( elem ) {

+		return jQuery.dir( elem, "parentNode" );

+	},

+	parentsUntil: function( elem, i, until ) {

+		return jQuery.dir( elem, "parentNode", until );

+	},

+	next: function( elem ) {

+		return jQuery.nth( elem, 2, "nextSibling" );

+	},

+	prev: function( elem ) {

+		return jQuery.nth( elem, 2, "previousSibling" );

+	},

+	nextAll: function( elem ) {

+		return jQuery.dir( elem, "nextSibling" );

+	},

+	prevAll: function( elem ) {

+		return jQuery.dir( elem, "previousSibling" );

+	},

+	nextUntil: function( elem, i, until ) {

+		return jQuery.dir( elem, "nextSibling", until );

+	},

+	prevUntil: function( elem, i, until ) {

+		return jQuery.dir( elem, "previousSibling", until );

+	},

+	siblings: function( elem ) {

+		return jQuery.sibling( elem.parentNode.firstChild, elem );

+	},

+	children: function( elem ) {

+		return jQuery.sibling( elem.firstChild );

+	},

+	contents: function( elem ) {

+		return jQuery.nodeName( elem, "iframe" ) ?

+			elem.contentDocument || elem.contentWindow.document :

+			jQuery.makeArray( elem.childNodes );

+	}

+}, function( name, fn ) {

+	jQuery.fn[ name ] = function( until, selector ) {

+		var ret = jQuery.map( this, fn, until );

+		

+		if ( !runtil.test( name ) ) {

+			selector = until;

+		}

+

+		if ( selector && typeof selector === "string" ) {

+			ret = jQuery.filter( selector, ret );

+		}

+

+		ret = this.length > 1 ? jQuery.unique( ret ) : ret;

+

+		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {

+			ret = ret.reverse();

+		}

+

+		return this.pushStack( ret, name, slice.call(arguments).join(",") );

+	};

+});

+

+jQuery.extend({

+	filter: function( expr, elems, not ) {

+		if ( not ) {

+			expr = ":not(" + expr + ")";

+		}

+

+		return jQuery.find.matches(expr, elems);

+	},

+	

+	dir: function( elem, dir, until ) {

+		var matched = [], cur = elem[dir];

+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {

+			if ( cur.nodeType === 1 ) {

+				matched.push( cur );

+			}

+			cur = cur[dir];

+		}

+		return matched;

+	},

+

+	nth: function( cur, result, dir, elem ) {

+		result = result || 1;

+		var num = 0;

+

+		for ( ; cur; cur = cur[dir] ) {

+			if ( cur.nodeType === 1 && ++num === result ) {

+				break;

+			}

+		}

+

+		return cur;

+	},

+

+	sibling: function( n, elem ) {

+		var r = [];

+

+		for ( ; n; n = n.nextSibling ) {

+			if ( n.nodeType === 1 && n !== elem ) {

+				r.push( n );

+			}

+		}

+

+		return r;

+	}

+});

+var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,

+	rleadingWhitespace = /^\s+/,

+	rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g,

+	rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,

+	rtagName = /<([\w:]+)/,

+	rtbody = /<tbody/i,

+	rhtml = /<|&\w+;/,

+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,  // checked="checked" or checked (html5)

+	fcloseTag = function( all, front, tag ) {

+		return rselfClosing.test( tag ) ?

+			all :

+			front + "></" + tag + ">";

+	},

+	wrapMap = {

+		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, "", "" ]

+	};

+

+wrapMap.optgroup = wrapMap.option;

+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;

+wrapMap.th = wrapMap.td;

+

+// IE can't serialize <link> and <script> tags normally

+if ( !jQuery.support.htmlSerialize ) {

+	wrapMap._default = [ 1, "div<div>", "</div>" ];

+}

+

+jQuery.fn.extend({

+	text: function( text ) {

+		if ( jQuery.isFunction(text) ) {

+			return this.each(function(i) {

+				var self = jQuery(this);

+				self.text( text.call(this, i, self.text()) );

+			});

+		}

+

+		if ( typeof text !== "object" && text !== undefined ) {

+			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );

+		}

+

+		return jQuery.getText( this );

+	},

+

+	wrapAll: function( html ) {

+		if ( jQuery.isFunction( html ) ) {

+			return this.each(function(i) {

+				jQuery(this).wrapAll( html.call(this, i) );

+			});

+		}

+

+		if ( this[0] ) {

+			// The elements to wrap the target around

+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);

+

+			if ( this[0].parentNode ) {

+				wrap.insertBefore( this[0] );

+			}

+

+			wrap.map(function() {

+				var elem = this;

+

+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {

+					elem = elem.firstChild;

+				}

+

+				return elem;

+			}).append(this);

+		}

+

+		return this;

+	},

+

+	wrapInner: function( html ) {

+		if ( jQuery.isFunction( html ) ) {

+			return this.each(function(i) {

+				jQuery(this).wrapInner( html.call(this, i) );

+			});

+		}

+

+		return this.each(function() {

+			var self = jQuery( this ), contents = self.contents();

+

+			if ( contents.length ) {

+				contents.wrapAll( html );

+

+			} else {

+				self.append( html );

+			}

+		});

+	},

+

+	wrap: function( html ) {

+		return this.each(function() {

+			jQuery( this ).wrapAll( html );

+		});

+	},

+

+	unwrap: function() {

+		return this.parent().each(function() {

+			if ( !jQuery.nodeName( this, "body" ) ) {

+				jQuery( this ).replaceWith( this.childNodes );

+			}

+		}).end();

+	},

+

+	append: function() {

+		return this.domManip(arguments, true, function( elem ) {

+			if ( this.nodeType === 1 ) {

+				this.appendChild( elem );

+			}

+		});

+	},

+

+	prepend: function() {

+		return this.domManip(arguments, true, function( elem ) {

+			if ( this.nodeType === 1 ) {

+				this.insertBefore( elem, this.firstChild );

+			}

+		});

+	},

+

+	before: function() {

+		if ( this[0] && this[0].parentNode ) {

+			return this.domManip(arguments, false, function( elem ) {

+				this.parentNode.insertBefore( elem, this );

+			});

+		} else if ( arguments.length ) {

+			var set = jQuery(arguments[0]);

+			set.push.apply( set, this.toArray() );

+			return this.pushStack( set, "before", arguments );

+		}

+	},

+

+	after: function() {

+		if ( this[0] && this[0].parentNode ) {

+			return this.domManip(arguments, false, function( elem ) {

+				this.parentNode.insertBefore( elem, this.nextSibling );

+			});

+		} else if ( arguments.length ) {

+			var set = this.pushStack( this, "after", arguments );

+			set.push.apply( set, jQuery(arguments[0]).toArray() );

+			return set;

+		}

+	},

+

+	clone: function( events ) {

+		// Do the clone

+		var ret = this.map(function() {

+			if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {

+				// IE copies events bound via attachEvent when

+				// using cloneNode. Calling detachEvent on the

+				// clone will also remove the events from the orignal

+				// In order to get around this, we use innerHTML.

+				// Unfortunately, this means some modifications to

+				// attributes in IE that are actually only stored

+				// as properties will not be copied (such as the

+				// the name attribute on an input).

+				var html = this.outerHTML, ownerDocument = this.ownerDocument;

+				if ( !html ) {

+					var div = ownerDocument.createElement("div");

+					div.appendChild( this.cloneNode(true) );

+					html = div.innerHTML;

+				}

+

+				return jQuery.clean([html.replace(rinlinejQuery, "")

+					.replace(rleadingWhitespace, "")], ownerDocument)[0];

+			} else {

+				return this.cloneNode(true);

+			}

+		});

+

+		// Copy the events from the original to the clone

+		if ( events === true ) {

+			cloneCopyEvent( this, ret );

+			cloneCopyEvent( this.find("*"), ret.find("*") );

+		}

+

+		// Return the cloned set

+		return ret;

+	},

+

+	html: function( value ) {

+		if ( value === undefined ) {

+			return this[0] && this[0].nodeType === 1 ?

+				this[0].innerHTML.replace(rinlinejQuery, "") :

+				null;

+

+		// See if we can take a shortcut and just use innerHTML

+		} else if ( typeof value === "string" && !/<script/i.test( value ) &&

+			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&

+			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {

+

+			value = value.replace(rxhtmlTag, fcloseTag);

+

+			try {

+				for ( var i = 0, l = this.length; i < l; i++ ) {

+					// Remove element nodes and prevent memory leaks

+					if ( this[i].nodeType === 1 ) {

+						jQuery.cleanData( this[i].getElementsByTagName("*") );

+						this[i].innerHTML = value;

+					}

+				}

+

+			// If using innerHTML throws an exception, use the fallback method

+			} catch(e) {

+				this.empty().append( value );

+			}

+

+		} else if ( jQuery.isFunction( value ) ) {

+			this.each(function(i){

+				var self = jQuery(this), old = self.html();

+				self.empty().append(function(){

+					return value.call( this, i, old );

+				});

+			});

+

+		} else {

+			this.empty().append( value );

+		}

+

+		return this;

+	},

+

+	replaceWith: function( value ) {

+		if ( this[0] && this[0].parentNode ) {

+			// Make sure that the elements are removed from the DOM before they are inserted

+			// this can help fix replacing a parent with child elements

+			if ( !jQuery.isFunction( value ) ) {

+				value = jQuery( value ).detach();

+

+			} else {

+				return this.each(function(i) {

+					var self = jQuery(this), old = self.html();

+					self.replaceWith( value.call( this, i, old ) );

+				});

+			}

+

+			return this.each(function() {

+				var next = this.nextSibling, parent = this.parentNode;

+

+				jQuery(this).remove();

+

+				if ( next ) {

+					jQuery(next).before( value );

+				} else {

+					jQuery(parent).append( value );

+				}

+			});

+		} else {

+			return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );

+		}

+	},

+

+	detach: function( selector ) {

+		return this.remove( selector, true );

+	},

+

+	domManip: function( args, table, callback ) {

+		var results, first, value = args[0], scripts = [];

+

+		// We can't cloneNode fragments that contain checked, in WebKit

+		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {

+			return this.each(function() {

+				jQuery(this).domManip( args, table, callback, true );

+			});

+		}

+

+		if ( jQuery.isFunction(value) ) {

+			return this.each(function(i) {

+				var self = jQuery(this);

+				args[0] = value.call(this, i, table ? self.html() : undefined);

+				self.domManip( args, table, callback );

+			});

+		}

+

+		if ( this[0] ) {

+			// If we're in a fragment, just use that instead of building a new one

+			if ( args[0] && args[0].parentNode && args[0].parentNode.nodeType === 11 ) {

+				results = { fragment: args[0].parentNode };

+			} else {

+				results = buildFragment( args, this, scripts );

+			}

+

+			first = results.fragment.firstChild;

+

+			if ( first ) {

+				table = table && jQuery.nodeName( first, "tr" );

+

+				for ( var i = 0, l = this.length; i < l; i++ ) {

+					callback.call(

+						table ?

+							root(this[i], first) :

+							this[i],

+						results.cacheable || this.length > 1 || i > 0 ?

+							results.fragment.cloneNode(true) :

+							results.fragment

+					);

+				}

+			}

+

+			if ( scripts ) {

+				jQuery.each( scripts, evalScript );

+			}

+		}

+

+		return this;

+

+		function root( elem, cur ) {

+			return jQuery.nodeName(elem, "table") ?

+				(elem.getElementsByTagName("tbody")[0] ||

+				elem.appendChild(elem.ownerDocument.createElement("tbody"))) :

+				elem;

+		}

+	}

+});

+

+function cloneCopyEvent(orig, ret) {

+	var i = 0;

+

+	ret.each(function() {

+		if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {

+			return;

+		}

+

+		var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events;

+

+		if ( events ) {

+			delete curData.handle;

+			curData.events = {};

+

+			for ( var type in events ) {

+				for ( var handler in events[ type ] ) {

+					jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );

+				}

+			}

+		}

+	});

+}

+

+function buildFragment( args, nodes, scripts ) {

+	var fragment, cacheable, cacheresults, doc;

+

+	// webkit does not clone 'checked' attribute of radio inputs on cloneNode, so don't cache if string has a checked

+	if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && args[0].indexOf("<option") < 0 && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {

+		cacheable = true;

+		cacheresults = jQuery.fragments[ args[0] ];

+		if ( cacheresults ) {

+			if ( cacheresults !== 1 ) {

+				fragment = cacheresults;

+			}

+		}

+	}

+

+	if ( !fragment ) {

+		doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);

+		fragment = doc.createDocumentFragment();

+		jQuery.clean( args, doc, fragment, scripts );

+	}

+

+	if ( cacheable ) {

+		jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;

+	}

+

+	return { fragment: fragment, cacheable: cacheable };

+}

+

+jQuery.fragments = {};

+

+jQuery.each({

+	appendTo: "append",

+	prependTo: "prepend",

+	insertBefore: "before",

+	insertAfter: "after",

+	replaceAll: "replaceWith"

+}, function( name, original ) {

+	jQuery.fn[ name ] = function( selector ) {

+		var ret = [], insert = jQuery( selector );

+

+		for ( var i = 0, l = insert.length; i < l; i++ ) {

+			var elems = (i > 0 ? this.clone(true) : this).get();

+			jQuery.fn[ original ].apply( jQuery(insert[i]), elems );

+			ret = ret.concat( elems );

+		}

+		return this.pushStack( ret, name, insert.selector );

+	};

+});

+

+jQuery.each({

+	// keepData is for internal use only--do not document

+	remove: function( selector, keepData ) {

+		if ( !selector || jQuery.filter( selector, [ this ] ).length ) {

+			if ( !keepData && this.nodeType === 1 ) {

+				jQuery.cleanData( this.getElementsByTagName("*") );

+				jQuery.cleanData( [ this ] );

+			}

+

+			if ( this.parentNode ) {

+				 this.parentNode.removeChild( this );

+			}

+		}

+	},

+

+	empty: function() {

+		// Remove element nodes and prevent memory leaks

+		if ( this.nodeType === 1 ) {

+			jQuery.cleanData( this.getElementsByTagName("*") );

+		}

+

+		// Remove any remaining nodes

+		while ( this.firstChild ) {

+			this.removeChild( this.firstChild );

+		}

+	}

+}, function( name, fn ) {

+	jQuery.fn[ name ] = function() {

+		return this.each( fn, arguments );

+	};

+});

+

+jQuery.extend({

+	clean: function( elems, context, fragment, scripts ) {

+		context = context || document;

+

+		// !context.createElement fails in IE with an error but returns typeof 'object'

+		if ( typeof context.createElement === "undefined" ) {

+			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;

+		}

+

+		var ret = [];

+

+		jQuery.each(elems, function( i, elem ) {

+			if ( typeof elem === "number" ) {

+				elem += "";

+			}

+

+			if ( !elem ) {

+				return;

+			}

+

+			// Convert html string into DOM nodes

+			if ( typeof elem === "string" && !rhtml.test( elem ) ) {

+				elem = context.createTextNode( elem );

+

+			} else if ( typeof elem === "string" ) {

+				// Fix "XHTML"-style tags in all browsers

+				elem = elem.replace(rxhtmlTag, fcloseTag);

+

+				// Trim whitespace, otherwise indexOf won't work as expected

+				var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),

+					wrap = wrapMap[ tag ] || wrapMap._default,

+					depth = wrap[0],

+					div = context.createElement("div");

+

+				// Go to html and back, then peel off extra wrappers

+				div.innerHTML = wrap[1] + elem + wrap[2];

+

+				// Move to the right depth

+				while ( depth-- ) {

+					div = div.lastChild;

+				}

+

+				// Remove IE's autoinserted <tbody> from table fragments

+				if ( !jQuery.support.tbody ) {

+

+					// String was a <table>, *may* have spurious <tbody>

+					var hasBody = rtbody.test(elem),

+						tbody = tag === "table" && !hasBody ?

+							div.firstChild && div.firstChild.childNodes :

+

+							// String was a bare <thead> or <tfoot>

+							wrap[1] === "<table>" && !hasBody ?

+								div.childNodes :

+								[];

+

+					for ( var j = tbody.length - 1; j >= 0 ; --j ) {

+						if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {

+							tbody[ j ].parentNode.removeChild( tbody[ j ] );

+						}

+					}

+

+				}

+

+				// IE completely kills leading whitespace when innerHTML is used

+				if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {

+					div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );

+				}

+

+				elem = jQuery.makeArray( div.childNodes );

+			}

+

+			if ( elem.nodeType ) {

+				ret.push( elem );

+			} else {

+				ret = jQuery.merge( ret, elem );

+			}

+

+		});

+

+		if ( fragment ) {

+			for ( var i = 0; ret[i]; i++ ) {

+				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {

+					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );

+				} else {

+					if ( ret[i].nodeType === 1 ) {

+						ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );

+					}

+					fragment.appendChild( ret[i] );

+				}

+			}

+		}

+

+		return ret;

+	},

+	

+	cleanData: function( elems ) {

+		for ( var i = 0, elem, id; (elem = elems[i]) != null; i++ ) {

+			jQuery.event.remove( elem );

+			jQuery.removeData( elem );

+		}

+	}

+});

+// exclude the following css properties to add px

+var rexclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,

+	ralpha = /alpha\([^)]*\)/,

+	ropacity = /opacity=([^)]*)/,

+	rfloat = /float/i,

+	rdashAlpha = /-([a-z])/ig,

+	rupper = /([A-Z])/g,

+	rnumpx = /^-?\d+(?:px)?$/i,

+	rnum = /^-?\d/,

+

+	cssShow = { position: "absolute", visibility: "hidden", display:"block" },

+	cssWidth = [ "Left", "Right" ],

+	cssHeight = [ "Top", "Bottom" ],

+

+	// cache check for defaultView.getComputedStyle

+	getComputedStyle = document.defaultView && document.defaultView.getComputedStyle,

+	// normalize float css property

+	styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat",

+	fcamelCase = function( all, letter ) {

+		return letter.toUpperCase();

+	};

+

+jQuery.fn.css = function( name, value ) {

+	return access( this, name, value, true, function( elem, name, value ) {

+		if ( value === undefined ) {

+			return jQuery.curCSS( elem, name );

+		}

+		

+		if ( typeof value === "number" && !rexclude.test(name) ) {

+			value += "px";

+		}

+

+		jQuery.style( elem, name, value );

+	});

+};

+

+jQuery.extend({

+	style: function( elem, name, value ) {

+		// don't set styles on text and comment nodes

+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {

+			return undefined;

+		}

+

+		// ignore negative width and height values #1599

+		if ( (name === "width" || name === "height") && parseFloat(value) < 0 ) {

+			value = undefined;

+		}

+

+		var style = elem.style || elem, set = value !== undefined;

+

+		// IE uses filters for opacity

+		if ( !jQuery.support.opacity && name === "opacity" ) {

+			if ( set ) {

+				// IE has trouble with opacity if it does not have layout

+				// Force it by setting the zoom level

+				style.zoom = 1;

+

+				// Set the alpha filter to set the opacity

+				var opacity = parseInt( value, 10 ) + "" === "NaN" ? "" : "alpha(opacity=" + value * 100 + ")";

+				var filter = style.filter || jQuery.curCSS( elem, "filter" ) || "";

+				style.filter = ralpha.test(filter) ? filter.replace(ralpha, opacity) : opacity;

+			}

+

+			return style.filter && style.filter.indexOf("opacity=") >= 0 ?

+				(parseFloat( ropacity.exec(style.filter)[1] ) / 100) + "":

+				"";

+		}

+

+		// Make sure we're using the right name for getting the float value

+		if ( rfloat.test( name ) ) {

+			name = styleFloat;

+		}

+

+		name = name.replace(rdashAlpha, fcamelCase);

+

+		if ( set ) {

+			style[ name ] = value;

+		}

+

+		return style[ name ];

+	},

+

+	css: function( elem, name, force, extra ) {

+		if ( name === "width" || name === "height" ) {

+			var val, props = cssShow, which = name === "width" ? cssWidth : cssHeight;

+

+			function getWH() {

+				val = name === "width" ? elem.offsetWidth : elem.offsetHeight;

+

+				if ( extra === "border" ) {

+					return;

+				}

+

+				jQuery.each( which, function() {

+					if ( !extra ) {

+						val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;

+					}

+

+					if ( extra === "margin" ) {

+						val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;

+					} else {

+						val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;

+					}

+				});

+			}

+

+			if ( elem.offsetWidth !== 0 ) {

+				getWH();

+			} else {

+				jQuery.swap( elem, props, getWH );

+			}

+

+			return Math.max(0, Math.round(val));

+		}

+

+		return jQuery.curCSS( elem, name, force );

+	},

+

+	curCSS: function( elem, name, force ) {

+		var ret, style = elem.style, filter;

+

+		// IE uses filters for opacity

+		if ( !jQuery.support.opacity && name === "opacity" && elem.currentStyle ) {

+			ret = ropacity.test(elem.currentStyle.filter || "") ?

+				(parseFloat(RegExp.$1) / 100) + "" :

+				"";

+

+			return ret === "" ?

+				"1" :

+				ret;

+		}

+

+		// Make sure we're using the right name for getting the float value

+		if ( rfloat.test( name ) ) {

+			name = styleFloat;

+		}

+

+		if ( !force && style && style[ name ] ) {

+			ret = style[ name ];

+

+		} else if ( getComputedStyle ) {

+

+			// Only "float" is needed here

+			if ( rfloat.test( name ) ) {

+				name = "float";

+			}

+

+			name = name.replace( rupper, "-$1" ).toLowerCase();

+

+			var defaultView = elem.ownerDocument.defaultView;

+

+			if ( !defaultView ) {

+				return null;

+			}

+

+			var computedStyle = defaultView.getComputedStyle( elem, null );

+

+			if ( computedStyle ) {

+				ret = computedStyle.getPropertyValue( name );

+			}

+

+			// We should always get a number back from opacity

+			if ( name === "opacity" && ret === "" ) {

+				ret = "1";

+			}

+

+		} else if ( elem.currentStyle ) {

+			var camelCase = name.replace(rdashAlpha, fcamelCase);

+

+			ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];

+

+			// From the awesome hack by Dean Edwards

+			// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291

+

+			// If we're not dealing with a regular pixel number

+			// but a number that has a weird ending, we need to convert it to pixels

+			if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {

+				// Remember the original values

+				var left = style.left, rsLeft = elem.runtimeStyle.left;

+

+				// Put in the new values to get a computed value out

+				elem.runtimeStyle.left = elem.currentStyle.left;

+				style.left = camelCase === "fontSize" ? "1em" : (ret || 0);

+				ret = style.pixelLeft + "px";

+

+				// Revert the changed values

+				style.left = left;

+				elem.runtimeStyle.left = rsLeft;

+			}

+		}

+

+		return ret;

+	},

+

+	// A method for quickly swapping in/out CSS properties to get correct calculations

+	swap: function( elem, options, callback ) {

+		var old = {};

+

+		// Remember the old values, and insert the new ones

+		for ( var name in options ) {

+			old[ name ] = elem.style[ name ];

+			elem.style[ name ] = options[ name ];

+		}

+

+		callback.call( elem );

+

+		// Revert the old values

+		for ( var name in options ) {

+			elem.style[ name ] = old[ name ];

+		}

+	}

+});

+

+if ( jQuery.expr && jQuery.expr.filters ) {

+	jQuery.expr.filters.hidden = function( elem ) {

+		var width = elem.offsetWidth, height = elem.offsetHeight,

+			skip = elem.nodeName.toLowerCase() === "tr";

+

+		return width === 0 && height === 0 && !skip ?

+			true :

+			width > 0 && height > 0 && !skip ?

+				false :

+				jQuery.curCSS(elem, "display") === "none";

+	};

+

+	jQuery.expr.filters.visible = function( elem ) {

+		return !jQuery.expr.filters.hidden( elem );

+	};

+}

+var jsc = now(),

+	rscript = /<script(.|\s)*?\/script>/gi,

+	rselectTextarea = /select|textarea/i,

+	rinput = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,

+	jsre = /=\?(&|$)/,

+	rquery = /\?/,

+	rts = /(\?|&)_=.*?(&|$)/,

+	rurl = /^(\w+:)?\/\/([^\/?#]+)/,

+	r20 = /%20/g;

+

+jQuery.fn.extend({

+	// Keep a copy of the old load

+	_load: jQuery.fn.load,

+

+	load: function( url, params, callback ) {

+		if ( typeof url !== "string" ) {

+			return this._load( url );

+

+		// Don't do a request if no elements are being requested

+		} else if ( !this.length ) {

+			return this;

+		}

+

+		var off = url.indexOf(" ");

+		if ( off >= 0 ) {

+			var selector = url.slice(off, url.length);

+			url = url.slice(0, off);

+		}

+

+		// Default to a GET request

+		var type = "GET";

+

+		// If the second parameter was provided

+		if ( params ) {

+			// If it's a function

+			if ( jQuery.isFunction( params ) ) {

+				// We assume that it's the callback

+				callback = params;

+				params = null;

+

+			// Otherwise, build a param string

+			} else if ( typeof params === "object" ) {

+				params = jQuery.param( params, jQuery.ajaxSettings.traditional );

+				type = "POST";

+			}

+		}

+

+		var self = this;

+

+		// Request the remote document

+		jQuery.ajax({

+			url: url,

+			type: type,

+			dataType: "html",

+			data: params,

+			complete: function( res, status ) {

+				// If successful, inject the HTML into all the matched elements

+				if ( status === "success" || status === "notmodified" ) {

+					// See if a selector was specified

+					self.html( selector ?

+						// Create a dummy div to hold the results

+						jQuery("<div />")

+							// inject the contents of the document in, removing the scripts

+							// to avoid any 'Permission Denied' errors in IE

+							.append(res.responseText.replace(rscript, ""))

+

+							// Locate the specified elements

+							.find(selector) :

+

+						// If not, just inject the full result

+						res.responseText );

+				}

+

+				if ( callback ) {

+					self.each( callback, [res.responseText, status, res] );

+				}

+			}

+		});

+

+		return this;

+	},

+

+	serialize: function() {

+		return jQuery.param(this.serializeArray());

+	},

+	serializeArray: function() {

+		return this.map(function() {

+			return this.elements ? jQuery.makeArray(this.elements) : this;

+		})

+		.filter(function() {

+			return this.name && !this.disabled &&

+				(this.checked || rselectTextarea.test(this.nodeName) ||

+					rinput.test(this.type));

+		})

+		.map(function( i, elem ) {

+			var val = jQuery(this).val();

+

+			return val == null ?

+				null :

+				jQuery.isArray(val) ?

+					jQuery.map( val, function( val, i ) {

+						return { name: elem.name, value: val };

+					}) :

+					{ name: elem.name, value: val };

+		}).get();

+	}

+});

+

+// Attach a bunch of functions for handling common AJAX events

+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o ) {

+	jQuery.fn[o] = function( f ) {

+		return this.bind(o, f);

+	};

+});

+

+jQuery.extend({

+

+	get: function( url, data, callback, type ) {

+		// shift arguments if data argument was omited

+		if ( jQuery.isFunction( data ) ) {

+			type = type || callback;

+			callback = data;

+			data = null;

+		}

+

+		return jQuery.ajax({

+			type: "GET",

+			url: url,

+			data: data,

+			success: callback,

+			dataType: type

+		});

+	},

+

+	getScript: function( url, callback ) {

+		return jQuery.get(url, null, callback, "script");

+	},

+

+	getJSON: function( url, data, callback ) {

+		return jQuery.get(url, data, callback, "json");

+	},

+

+	post: function( url, data, callback, type ) {

+		// shift arguments if data argument was omited

+		if ( jQuery.isFunction( data ) ) {

+			type = type || callback;

+			callback = data;

+			data = {};

+		}

+

+		return jQuery.ajax({

+			type: "POST",

+			url: url,

+			data: data,

+			success: callback,

+			dataType: type

+		});

+	},

+

+	ajaxSetup: function( settings ) {

+		jQuery.extend( jQuery.ajaxSettings, settings );

+	},

+

+	ajaxSettings: {

+		url: location.href,

+		global: true,

+		type: "GET",

+		contentType: "application/x-www-form-urlencoded",

+		processData: true,

+		async: true,

+		/*

+		timeout: 0,

+		data: null,

+		username: null,

+		password: null,

+		traditional: false,

+		*/

+		// Create the request object; Microsoft failed to properly

+		// implement the XMLHttpRequest in IE7 (can't request local files),

+		// so we use the ActiveXObject when it is available

+		// This function can be overriden by calling jQuery.ajaxSetup

+		xhr: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ?

+			function() {

+				return new window.XMLHttpRequest();

+			} :

+			function() {

+				try {

+					return new window.ActiveXObject("Microsoft.XMLHTTP");

+				} catch(e) {}

+			},

+		accepts: {

+			xml: "application/xml, text/xml",

+			html: "text/html",

+			script: "text/javascript, application/javascript",

+			json: "application/json, text/javascript",

+			text: "text/plain",

+			_default: "*/*"

+		}

+	},

+

+	// Last-Modified header cache for next request

+	lastModified: {},

+	etag: {},

+

+	ajax: function( origSettings ) {

+		var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings);

+		

+		var jsonp, status, data,

+			callbackContext = origSettings && origSettings.context || s,

+			type = s.type.toUpperCase();

+

+		// convert data if not already a string

+		if ( s.data && s.processData && typeof s.data !== "string" ) {

+			s.data = jQuery.param( s.data, s.traditional );

+		}

+

+		// Handle JSONP Parameter Callbacks

+		if ( s.dataType === "jsonp" ) {

+			if ( type === "GET" ) {

+				if ( !jsre.test( s.url ) ) {

+					s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?";

+				}

+			} else if ( !s.data || !jsre.test(s.data) ) {

+				s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";

+			}

+			s.dataType = "json";

+		}

+

+		// Build temporary JSONP function

+		if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) {

+			jsonp = s.jsonpCallback || ("jsonp" + jsc++);

+

+			// Replace the =? sequence both in the query string and the data

+			if ( s.data ) {

+				s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");

+			}

+

+			s.url = s.url.replace(jsre, "=" + jsonp + "$1");

+

+			// We need to make sure

+			// that a JSONP style response is executed properly

+			s.dataType = "script";

+

+			// Handle JSONP-style loading

+			window[ jsonp ] = window[ jsonp ] || function( tmp ) {

+				data = tmp;

+				success();

+				complete();

+				// Garbage collect

+				window[ jsonp ] = undefined;

+

+				try {

+					delete window[ jsonp ];

+				} catch(e) {}

+

+				if ( head ) {

+					head.removeChild( script );

+				}

+			};

+		}

+

+		if ( s.dataType === "script" && s.cache === null ) {

+			s.cache = false;

+		}

+

+		if ( s.cache === false && type === "GET" ) {

+			var ts = now();

+

+			// try replacing _= if it is there

+			var ret = s.url.replace(rts, "$1_=" + ts + "$2");

+

+			// if nothing was replaced, add timestamp to the end

+			s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");

+		}

+

+		// If data is available, append data to url for get requests

+		if ( s.data && type === "GET" ) {

+			s.url += (rquery.test(s.url) ? "&" : "?") + s.data;

+		}

+

+		// Watch for a new set of requests

+		if ( s.global && ! jQuery.active++ ) {

+			jQuery.event.trigger( "ajaxStart" );

+		}

+

+		// Matches an absolute URL, and saves the domain

+		var parts = rurl.exec( s.url ),

+			remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);

+

+		// If we're requesting a remote document

+		// and trying to load JSON or Script with a GET

+		if ( s.dataType === "script" && type === "GET" && remote ) {

+			var head = document.getElementsByTagName("head")[0] || document.documentElement;

+			var script = document.createElement("script");

+			script.src = s.url;

+			if ( s.scriptCharset ) {

+				script.charset = s.scriptCharset;

+			}

+

+			// Handle Script loading

+			if ( !jsonp ) {

+				var done = false;

+

+				// Attach handlers for all browsers

+				script.onload = script.onreadystatechange = function() {

+					if ( !done && (!this.readyState ||

+							this.readyState === "loaded" || this.readyState === "complete") ) {

+						done = true;

+						success();

+						complete();

+

+						// Handle memory leak in IE

+						script.onload = script.onreadystatechange = null;

+						if ( head && script.parentNode ) {

+							head.removeChild( script );

+						}

+					}

+				};

+			}

+

+			// Use insertBefore instead of appendChild  to circumvent an IE6 bug.

+			// This arises when a base node is used (#2709 and #4378).

+			head.insertBefore( script, head.firstChild );

+

+			// We handle everything using the script element injection

+			return undefined;

+		}

+

+		var requestDone = false;

+

+		// Create the request object

+		var xhr = s.xhr();

+

+		if ( !xhr ) {

+			return;

+		}

+

+		// Open the socket

+		// Passing null username, generates a login popup on Opera (#2865)

+		if ( s.username ) {

+			xhr.open(type, s.url, s.async, s.username, s.password);

+		} else {

+			xhr.open(type, s.url, s.async);

+		}

+

+		// Need an extra try/catch for cross domain requests in Firefox 3

+		try {

+			// Set the correct header, if data is being sent

+			if ( s.data || origSettings && origSettings.contentType ) {

+				xhr.setRequestHeader("Content-Type", s.contentType);

+			}

+

+			// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.

+			if ( s.ifModified ) {

+				if ( jQuery.lastModified[s.url] ) {

+					xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);

+				}

+

+				if ( jQuery.etag[s.url] ) {

+					xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);

+				}

+			}

+

+			// Set header so the called script knows that it's an XMLHttpRequest

+			// Only send the header if it's not a remote XHR

+			if ( !remote ) {

+				xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");

+			}

+

+			// Set the Accepts header for the server, depending on the dataType

+			xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?

+				s.accepts[ s.dataType ] + ", */*" :

+				s.accepts._default );

+		} catch(e) {}

+

+		// Allow custom headers/mimetypes and early abort

+		if ( s.beforeSend && s.beforeSend.call(callbackContext, xhr, s) === false ) {

+			// Handle the global AJAX counter

+			if ( s.global && ! --jQuery.active ) {

+				jQuery.event.trigger( "ajaxStop" );

+			}

+

+			// close opended socket

+			xhr.abort();

+			return false;

+		}

+

+		if ( s.global ) {

+			trigger("ajaxSend", [xhr, s]);

+		}

+

+		// Wait for a response to come back

+		var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) {

+			// The request was aborted

+			if ( !xhr || xhr.readyState === 0 || isTimeout === "abort" ) {

+				// Opera doesn't call onreadystatechange before this point

+				// so we simulate the call

+				if ( !requestDone ) {

+					complete();

+				}

+

+				requestDone = true;

+				if ( xhr ) {

+					xhr.onreadystatechange = jQuery.noop;

+				}

+

+			// The transfer is complete and the data is available, or the request timed out

+			} else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {

+				requestDone = true;

+				xhr.onreadystatechange = jQuery.noop;

+

+				status = isTimeout === "timeout" ?

+					"timeout" :

+					!jQuery.httpSuccess( xhr ) ?

+						"error" :

+						s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?

+							"notmodified" :

+							"success";

+

+				var errMsg;

+

+				if ( status === "success" ) {

+					// Watch for, and catch, XML document parse errors

+					try {

+						// process the data (runs the xml through httpData regardless of callback)

+						data = jQuery.httpData( xhr, s.dataType, s );

+					} catch(err) {

+						status = "parsererror";

+						errMsg = err;

+					}

+				}

+

+				// Make sure that the request was successful or notmodified

+				if ( status === "success" || status === "notmodified" ) {

+					// JSONP handles its own success callback

+					if ( !jsonp ) {

+						success();

+					}

+				} else {

+					jQuery.handleError(s, xhr, status, errMsg);

+				}

+

+				// Fire the complete handlers

+				complete();

+

+				if ( isTimeout === "timeout" ) {

+					xhr.abort();

+				}

+

+				// Stop memory leaks

+				if ( s.async ) {

+					xhr = null;

+				}

+			}

+		};

+

+		// Override the abort handler, if we can (IE doesn't allow it, but that's OK)

+		// Opera doesn't fire onreadystatechange at all on abort

+		try {

+			var oldAbort = xhr.abort;

+			xhr.abort = function() {

+				if ( xhr ) {

+					oldAbort.call( xhr );

+				}

+

+				onreadystatechange( "abort" );

+			};

+		} catch(e) { }

+

+		// Timeout checker

+		if ( s.async && s.timeout > 0 ) {

+			setTimeout(function() {

+				// Check to see if the request is still happening

+				if ( xhr && !requestDone ) {

+					onreadystatechange( "timeout" );

+				}

+			}, s.timeout);

+		}

+

+		// Send the data

+		try {

+			xhr.send( type === "POST" || type === "PUT" || type === "DELETE" ? s.data : null );

+		} catch(e) {

+			jQuery.handleError(s, xhr, null, e);

+			// Fire the complete handlers

+			complete();

+		}

+

+		// firefox 1.5 doesn't fire statechange for sync requests

+		if ( !s.async ) {

+			onreadystatechange();

+		}

+

+		function success() {

+			// If a local callback was specified, fire it and pass it the data

+			if ( s.success ) {

+				s.success.call( callbackContext, data, status, xhr );

+			}

+

+			// Fire the global callback

+			if ( s.global ) {

+				trigger( "ajaxSuccess", [xhr, s] );

+			}

+		}

+

+		function complete() {

+			// Process result

+			if ( s.complete ) {

+				s.complete.call( callbackContext, xhr, status);

+			}

+

+			// The request was completed

+			if ( s.global ) {

+				trigger( "ajaxComplete", [xhr, s] );

+			}

+

+			// Handle the global AJAX counter

+			if ( s.global && ! --jQuery.active ) {

+				jQuery.event.trigger( "ajaxStop" );

+			}

+		}

+		

+		function trigger(type, args) {

+			(s.context ? jQuery(s.context) : jQuery.event).trigger(type, args);

+		}

+

+		// return XMLHttpRequest to allow aborting the request etc.

+		return xhr;

+	},

+

+	handleError: function( s, xhr, status, e ) {

+		// If a local callback was specified, fire it

+		if ( s.error ) {

+			s.error.call( s.context || s, xhr, status, e );

+		}

+

+		// Fire the global callback

+		if ( s.global ) {

+			(s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );

+		}

+	},

+

+	// Counter for holding the number of active queries

+	active: 0,

+

+	// Determines if an XMLHttpRequest was successful or not

+	httpSuccess: function( xhr ) {

+		try {

+			// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450

+			return !xhr.status && location.protocol === "file:" ||

+				// Opera returns 0 when status is 304

+				( xhr.status >= 200 && xhr.status < 300 ) ||

+				xhr.status === 304 || xhr.status === 1223 || xhr.status === 0;

+		} catch(e) {}

+

+		return false;

+	},

+

+	// Determines if an XMLHttpRequest returns NotModified

+	httpNotModified: function( xhr, url ) {

+		var lastModified = xhr.getResponseHeader("Last-Modified"),

+			etag = xhr.getResponseHeader("Etag");

+

+		if ( lastModified ) {

+			jQuery.lastModified[url] = lastModified;

+		}

+

+		if ( etag ) {

+			jQuery.etag[url] = etag;

+		}

+

+		// Opera returns 0 when status is 304

+		return xhr.status === 304 || xhr.status === 0;

+	},

+

+	httpData: function( xhr, type, s ) {

+		var ct = xhr.getResponseHeader("content-type") || "",

+			xml = type === "xml" || !type && ct.indexOf("xml") >= 0,

+			data = xml ? xhr.responseXML : xhr.responseText;

+

+		if ( xml && data.documentElement.nodeName === "parsererror" ) {

+			jQuery.error( "parsererror" );

+		}

+

+		// Allow a pre-filtering function to sanitize the response

+		// s is checked to keep backwards compatibility

+		if ( s && s.dataFilter ) {

+			data = s.dataFilter( data, type );

+		}

+

+		// The filter can actually parse the response

+		if ( typeof data === "string" ) {

+			// Get the JavaScript object, if JSON is used.

+			if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {

+				data = jQuery.parseJSON( data );

+

+			// If the type is "script", eval it in global context

+			} else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) {

+				jQuery.globalEval( data );

+			}

+		}

+

+		return data;

+	},

+

+	// Serialize an array of form elements or a set of

+	// key/values into a query string

+	param: function( a, traditional ) {

+		var s = [];

+		

+		// Set traditional to true for jQuery <= 1.3.2 behavior.

+		if ( traditional === undefined ) {

+			traditional = jQuery.ajaxSettings.traditional;

+		}

+		

+		// If an array was passed in, assume that it is an array of form elements.

+		if ( jQuery.isArray(a) || a.jquery ) {

+			// Serialize the form elements

+			jQuery.each( a, function() {

+				add( this.name, this.value );

+			});

+			

+		} else {

+			// If traditional, encode the "old" way (the way 1.3.2 or older

+			// did it), otherwise encode params recursively.

+			for ( var prefix in a ) {

+				buildParams( prefix, a[prefix] );

+			}

+		}

+

+		// Return the resulting serialization

+		return s.join("&").replace(r20, "+");

+

+		function buildParams( prefix, obj ) {

+			if ( jQuery.isArray(obj) ) {

+				// Serialize array item.

+				jQuery.each( obj, function( i, v ) {

+					if ( traditional ) {

+						// Treat each array item as a scalar.

+						add( prefix, v );

+					} else {

+						// If array item is non-scalar (array or object), encode its

+						// numeric index to resolve deserialization ambiguity issues.

+						// Note that rack (as of 1.0.0) can't currently deserialize

+						// nested arrays properly, and attempting to do so may cause

+						// a server error. Possible fixes are to modify rack's

+						// deserialization algorithm or to provide an option or flag

+						// to force array serialization to be shallow.

+						buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v );

+					}

+				});

+					

+			} else if ( !traditional && obj != null && typeof obj === "object" ) {

+				// Serialize object item.

+				jQuery.each( obj, function( k, v ) {

+					buildParams( prefix + "[" + k + "]", v );

+				});

+					

+			} else {

+				// Serialize scalar item.

+				add( prefix, obj );

+			}

+		}

+

+		function add( key, value ) {

+			// If value is a function, invoke it and return its value

+			value = jQuery.isFunction(value) ? value() : value;

+			s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);

+		}

+	}

+});

+var elemdisplay = {},

+	rfxtypes = /toggle|show|hide/,

+	rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/,

+	timerId,

+	fxAttrs = [

+		// height animations

+		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],

+		// width animations

+		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],

+		// opacity animations

+		[ "opacity" ]

+	];

+

+jQuery.fn.extend({

+	show: function( speed, callback ) {

+		if ( speed || speed === 0) {

+			return this.animate( genFx("show", 3), speed, callback);

+

+		} else {

+			for ( var i = 0, l = this.length; i < l; i++ ) {

+				var old = jQuery.data(this[i], "olddisplay");

+

+				this[i].style.display = old || "";

+

+				if ( jQuery.css(this[i], "display") === "none" ) {

+					var nodeName = this[i].nodeName, display;

+

+					if ( elemdisplay[ nodeName ] ) {

+						display = elemdisplay[ nodeName ];

+

+					} else {

+						var elem = jQuery("<" + nodeName + " />").appendTo("body");

+

+						display = elem.css("display");

+

+						if ( display === "none" ) {

+							display = "block";

+						}

+

+						elem.remove();

+

+						elemdisplay[ nodeName ] = display;

+					}

+

+					jQuery.data(this[i], "olddisplay", display);

+				}

+			}

+

+			// Set the display of the elements in a second loop

+			// to avoid the constant reflow

+			for ( var j = 0, k = this.length; j < k; j++ ) {

+				this[j].style.display = jQuery.data(this[j], "olddisplay") || "";

+			}

+

+			return this;

+		}

+	},

+

+	hide: function( speed, callback ) {

+		if ( speed || speed === 0 ) {

+			return this.animate( genFx("hide", 3), speed, callback);

+

+		} else {

+			for ( var i = 0, l = this.length; i < l; i++ ) {

+				var old = jQuery.data(this[i], "olddisplay");

+				if ( !old && old !== "none" ) {

+					jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));

+				}

+			}

+

+			// Set the display of the elements in a second loop

+			// to avoid the constant reflow

+			for ( var j = 0, k = this.length; j < k; j++ ) {

+				this[j].style.display = "none";

+			}

+

+			return this;

+		}

+	},

+

+	// Save the old toggle function

+	_toggle: jQuery.fn.toggle,

+

+	toggle: function( fn, fn2 ) {

+		var bool = typeof fn === "boolean";

+

+		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {

+			this._toggle.apply( this, arguments );

+

+		} else if ( fn == null || bool ) {

+			this.each(function() {

+				var state = bool ? fn : jQuery(this).is(":hidden");

+				jQuery(this)[ state ? "show" : "hide" ]();

+			});

+

+		} else {

+			this.animate(genFx("toggle", 3), fn, fn2);

+		}

+

+		return this;

+	},

+

+	fadeTo: function( speed, to, callback ) {

+		return this.filter(":hidden").css("opacity", 0).show().end()

+					.animate({opacity: to}, speed, callback);

+	},

+

+	animate: function( prop, speed, easing, callback ) {

+		var optall = jQuery.speed(speed, easing, callback);

+

+		if ( jQuery.isEmptyObject( prop ) ) {

+			return this.each( optall.complete );

+		}

+

+		return this[ optall.queue === false ? "each" : "queue" ](function() {

+			var opt = jQuery.extend({}, optall), p,

+				hidden = this.nodeType === 1 && jQuery(this).is(":hidden"),

+				self = this;

+

+			for ( p in prop ) {

+				var name = p.replace(rdashAlpha, fcamelCase);

+

+				if ( p !== name ) {

+					prop[ name ] = prop[ p ];

+					delete prop[ p ];

+					p = name;

+				}

+

+				if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {

+					return opt.complete.call(this);

+				}

+

+				if ( ( p === "height" || p === "width" ) && this.style ) {

+					// Store display property

+					opt.display = jQuery.css(this, "display");

+

+					// Make sure that nothing sneaks out

+					opt.overflow = this.style.overflow;

+				}

+

+				if ( jQuery.isArray( prop[p] ) ) {

+					// Create (if needed) and add to specialEasing

+					(opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1];

+					prop[p] = prop[p][0];

+				}

+			}

+

+			if ( opt.overflow != null ) {

+				this.style.overflow = "hidden";

+			}

+

+			opt.curAnim = jQuery.extend({}, prop);

+

+			jQuery.each( prop, function( name, val ) {

+				var e = new jQuery.fx( self, opt, name );

+

+				if ( rfxtypes.test(val) ) {

+					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop );

+

+				} else {

+					var parts = rfxnum.exec(val),

+						start = e.cur(true) || 0;

+

+					if ( parts ) {

+						var end = parseFloat( parts[2] ),

+							unit = parts[3] || "px";

+

+						// We need to compute starting value

+						if ( unit !== "px" ) {

+							self.style[ name ] = (end || 1) + unit;

+							start = ((end || 1) / e.cur(true)) * start;

+							self.style[ name ] = start + unit;

+						}

+

+						// If a +=/-= token was provided, we're doing a relative animation

+						if ( parts[1] ) {

+							end = ((parts[1] === "-=" ? -1 : 1) * end) + start;

+						}

+

+						e.custom( start, end, unit );

+

+					} else {

+						e.custom( start, val, "" );

+					}

+				}

+			});

+

+			// For JS strict compliance

+			return true;

+		});

+	},

+

+	stop: function( clearQueue, gotoEnd ) {

+		var timers = jQuery.timers;

+

+		if ( clearQueue ) {

+			this.queue([]);

+		}

+

+		this.each(function() {

+			// go in reverse order so anything added to the queue during the loop is ignored

+			for ( var i = timers.length - 1; i >= 0; i-- ) {

+				if ( timers[i].elem === this ) {

+					if (gotoEnd) {

+						// force the next step to be the last

+						timers[i](true);

+					}

+

+					timers.splice(i, 1);

+				}

+			}

+		});

+

+		// start the next in the queue if the last step wasn't forced

+		if ( !gotoEnd ) {

+			this.dequeue();

+		}

+

+		return this;

+	}

+

+});

+

+// Generate shortcuts for custom animations

+jQuery.each({

+	slideDown: genFx("show", 1),

+	slideUp: genFx("hide", 1),

+	slideToggle: genFx("toggle", 1),

+	fadeIn: { opacity: "show" },

+	fadeOut: { opacity: "hide" }

+}, function( name, props ) {

+	jQuery.fn[ name ] = function( speed, callback ) {

+		return this.animate( props, speed, callback );

+	};

+});

+

+jQuery.extend({

+	speed: function( speed, easing, fn ) {

+		var opt = speed && typeof speed === "object" ? speed : {

+			complete: fn || !fn && easing ||

+				jQuery.isFunction( speed ) && speed,

+			duration: speed,

+			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing

+		};

+

+		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :

+			jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;

+

+		// Queueing

+		opt.old = opt.complete;

+		opt.complete = function() {

+			if ( opt.queue !== false ) {

+				jQuery(this).dequeue();

+			}

+			if ( jQuery.isFunction( opt.old ) ) {

+				opt.old.call( this );

+			}

+		};

+

+		return opt;

+	},

+

+	easing: {

+		linear: function( p, n, firstNum, diff ) {

+			return firstNum + diff * p;

+		},

+		swing: function( p, n, firstNum, diff ) {

+			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;

+		}

+	},

+

+	timers: [],

+

+	fx: function( elem, options, prop ) {

+		this.options = options;

+		this.elem = elem;

+		this.prop = prop;

+

+		if ( !options.orig ) {

+			options.orig = {};

+		}

+	}

+

+});

+

+jQuery.fx.prototype = {

+	// Simple function for setting a style value

+	update: function() {

+		if ( this.options.step ) {

+			this.options.step.call( this.elem, this.now, this );

+		}

+

+		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );

+

+		// Set display property to block for height/width animations

+		if ( ( this.prop === "height" || this.prop === "width" ) && this.elem.style ) {

+			this.elem.style.display = "block";

+		}

+	},

+

+	// Get the current size

+	cur: function( force ) {

+		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {

+			return this.elem[ this.prop ];

+		}

+

+		var r = parseFloat(jQuery.css(this.elem, this.prop, force));

+		return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;

+	},

+

+	// Start an animation from one number to another

+	custom: function( from, to, unit ) {

+		this.startTime = now();

+		this.start = from;

+		this.end = to;

+		this.unit = unit || this.unit || "px";

+		this.now = this.start;

+		this.pos = this.state = 0;

+

+		var self = this;

+		function t( gotoEnd ) {

+			return self.step(gotoEnd);

+		}

+

+		t.elem = this.elem;

+

+		if ( t() && jQuery.timers.push(t) && !timerId ) {

+			timerId = setInterval(jQuery.fx.tick, 13);

+		}

+	},

+

+	// Simple 'show' function

+	show: function() {

+		// Remember where we started, so that we can go back to it later

+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );

+		this.options.show = true;

+

+		// Begin the animation

+		// Make sure that we start at a small width/height to avoid any

+		// flash of content

+		this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());

+

+		// Start by showing the element

+		jQuery( this.elem ).show();

+	},

+

+	// Simple 'hide' function

+	hide: function() {

+		// Remember where we started, so that we can go back to it later

+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );

+		this.options.hide = true;

+

+		// Begin the animation

+		this.custom(this.cur(), 0);

+	},

+

+	// Each step of an animation

+	step: function( gotoEnd ) {

+		var t = now(), done = true;

+

+		if ( gotoEnd || t >= this.options.duration + this.startTime ) {

+			this.now = this.end;

+			this.pos = this.state = 1;

+			this.update();

+

+			this.options.curAnim[ this.prop ] = true;

+

+			for ( var i in this.options.curAnim ) {

+				if ( this.options.curAnim[i] !== true ) {

+					done = false;

+				}

+			}

+

+			if ( done ) {

+				if ( this.options.display != null ) {

+					// Reset the overflow

+					this.elem.style.overflow = this.options.overflow;

+

+					// Reset the display

+					var old = jQuery.data(this.elem, "olddisplay");

+					this.elem.style.display = old ? old : this.options.display;

+

+					if ( jQuery.css(this.elem, "display") === "none" ) {

+						this.elem.style.display = "block";

+					}

+				}

+

+				// Hide the element if the "hide" operation was done

+				if ( this.options.hide ) {

+					jQuery(this.elem).hide();

+				}

+

+				// Reset the properties, if the item has been hidden or shown

+				if ( this.options.hide || this.options.show ) {

+					for ( var p in this.options.curAnim ) {

+						jQuery.style(this.elem, p, this.options.orig[p]);

+					}

+				}

+

+				// Execute the complete function

+				this.options.complete.call( this.elem );

+			}

+

+			return false;

+

+		} else {

+			var n = t - this.startTime;

+			this.state = n / this.options.duration;

+

+			// Perform the easing function, defaults to swing

+			var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop];

+			var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear");

+			this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);

+			this.now = this.start + ((this.end - this.start) * this.pos);

+

+			// Perform the next step of the animation

+			this.update();

+		}

+

+		return true;

+	}

+};

+

+jQuery.extend( jQuery.fx, {

+	tick: function() {

+		var timers = jQuery.timers;

+

+		for ( var i = 0; i < timers.length; i++ ) {

+			if ( !timers[i]() ) {

+				timers.splice(i--, 1);

+			}

+		}

+

+		if ( !timers.length ) {

+			jQuery.fx.stop();

+		}

+	},

+		

+	stop: function() {

+		clearInterval( timerId );

+		timerId = null;

+	},

+	

+	speeds: {

+		slow: 600,

+ 		fast: 200,

+ 		// Default speed

+ 		_default: 400

+	},

+

+	step: {

+		opacity: function( fx ) {

+			jQuery.style(fx.elem, "opacity", fx.now);

+		},

+

+		_default: function( fx ) {

+			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {

+				fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;

+			} else {

+				fx.elem[ fx.prop ] = fx.now;

+			}

+		}

+	}

+});

+

+if ( jQuery.expr && jQuery.expr.filters ) {

+	jQuery.expr.filters.animated = function( elem ) {

+		return jQuery.grep(jQuery.timers, function( fn ) {

+			return elem === fn.elem;

+		}).length;

+	};

+}

+

+function genFx( type, num ) {

+	var obj = {};

+

+	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {

+		obj[ this ] = type;

+	});

+

+	return obj;

+}

+if ( "getBoundingClientRect" in document.documentElement ) {

+	jQuery.fn.offset = function( options ) {

+		var elem = this[0];

+

+		if ( options ) { 

+			return this.each(function( i ) {

+				jQuery.offset.setOffset( this, options, i );

+			});

+		}

+

+		if ( !elem || !elem.ownerDocument ) {

+			return null;

+		}

+

+		if ( elem === elem.ownerDocument.body ) {

+			return jQuery.offset.bodyOffset( elem );

+		}

+

+		var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement,

+			clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,

+			top  = box.top  + (self.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop ) - clientTop,

+			left = box.left + (self.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;

+

+		return { top: top, left: left };

+	};

+

+} else {

+	jQuery.fn.offset = function( options ) {

+		var elem = this[0];

+

+		if ( options ) { 

+			return this.each(function( i ) {

+				jQuery.offset.setOffset( this, options, i );

+			});

+		}

+

+		if ( !elem || !elem.ownerDocument ) {

+			return null;

+		}

+

+		if ( elem === elem.ownerDocument.body ) {

+			return jQuery.offset.bodyOffset( elem );

+		}

+

+		jQuery.offset.initialize();

+

+		var offsetParent = elem.offsetParent, prevOffsetParent = elem,

+			doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,

+			body = doc.body, defaultView = doc.defaultView,

+			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,

+			top = elem.offsetTop, left = elem.offsetLeft;

+

+		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {

+			if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {

+				break;

+			}

+

+			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;

+			top  -= elem.scrollTop;

+			left -= elem.scrollLeft;

+

+			if ( elem === offsetParent ) {

+				top  += elem.offsetTop;

+				left += elem.offsetLeft;

+

+				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.nodeName)) ) {

+					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;

+					left += parseFloat( computedStyle.borderLeftWidth ) || 0;

+				}

+

+				prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;

+			}

+

+			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {

+				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;

+				left += parseFloat( computedStyle.borderLeftWidth ) || 0;

+			}

+

+			prevComputedStyle = computedStyle;

+		}

+

+		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {

+			top  += body.offsetTop;

+			left += body.offsetLeft;

+		}

+

+		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {

+			top  += Math.max( docElem.scrollTop, body.scrollTop );

+			left += Math.max( docElem.scrollLeft, body.scrollLeft );

+		}

+

+		return { top: top, left: left };

+	};

+}

+

+jQuery.offset = {

+	initialize: function() {

+		var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0,

+			html = "<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>";

+

+		jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );

+

+		container.innerHTML = html;

+		body.insertBefore( container, body.firstChild );

+		innerDiv = container.firstChild;

+		checkDiv = innerDiv.firstChild;

+		td = innerDiv.nextSibling.firstChild.firstChild;

+

+		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);

+		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);

+

+		checkDiv.style.position = "fixed", checkDiv.style.top = "20px";

+		// safari subtracts parent border width here which is 5px

+		this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);

+		checkDiv.style.position = checkDiv.style.top = "";

+

+		innerDiv.style.overflow = "hidden", innerDiv.style.position = "relative";

+		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);

+

+		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);

+

+		body.removeChild( container );

+		body = container = innerDiv = checkDiv = table = td = null;

+		jQuery.offset.initialize = jQuery.noop;

+	},

+

+	bodyOffset: function( body ) {

+		var top = body.offsetTop, left = body.offsetLeft;

+

+		jQuery.offset.initialize();

+

+		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {

+			top  += parseFloat( jQuery.curCSS(body, "marginTop",  true) ) || 0;

+			left += parseFloat( jQuery.curCSS(body, "marginLeft", true) ) || 0;

+		}

+

+		return { top: top, left: left };

+	},

+	

+	setOffset: function( elem, options, i ) {

+		// set position first, in-case top/left are set even on static elem

+		if ( /static/.test( jQuery.curCSS( elem, "position" ) ) ) {

+			elem.style.position = "relative";

+		}

+		var curElem   = jQuery( elem ),

+			curOffset = curElem.offset(),

+			curTop    = parseInt( jQuery.curCSS( elem, "top",  true ), 10 ) || 0,

+			curLeft   = parseInt( jQuery.curCSS( elem, "left", true ), 10 ) || 0;

+

+		if ( jQuery.isFunction( options ) ) {

+			options = options.call( elem, i, curOffset );

+		}

+

+		var props = {

+			top:  (options.top  - curOffset.top)  + curTop,

+			left: (options.left - curOffset.left) + curLeft

+		};

+		

+		if ( "using" in options ) {

+			options.using.call( elem, props );

+		} else {

+			curElem.css( props );

+		}

+	}

+};

+

+

+jQuery.fn.extend({

+	position: function() {

+		if ( !this[0] ) {

+			return null;

+		}

+

+		var elem = this[0],

+

+		// Get *real* offsetParent

+		offsetParent = this.offsetParent(),

+

+		// Get correct offsets

+		offset       = this.offset(),

+		parentOffset = /^body|html$/i.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();

+

+		// Subtract element margins

+		// note: when an element has margin: auto the offsetLeft and marginLeft

+		// are the same in Safari causing offset.left to incorrectly be 0

+		offset.top  -= parseFloat( jQuery.curCSS(elem, "marginTop",  true) ) || 0;

+		offset.left -= parseFloat( jQuery.curCSS(elem, "marginLeft", true) ) || 0;

+

+		// Add offsetParent borders

+		parentOffset.top  += parseFloat( jQuery.curCSS(offsetParent[0], "borderTopWidth",  true) ) || 0;

+		parentOffset.left += parseFloat( jQuery.curCSS(offsetParent[0], "borderLeftWidth", true) ) || 0;

+

+		// Subtract the two offsets

+		return {

+			top:  offset.top  - parentOffset.top,

+			left: offset.left - parentOffset.left

+		};

+	},

+

+	offsetParent: function() {

+		return this.map(function() {

+			var offsetParent = this.offsetParent || document.body;

+			while ( offsetParent && (!/^body|html$/i.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {

+				offsetParent = offsetParent.offsetParent;

+			}

+			return offsetParent;

+		});

+	}

+});

+

+

+// Create scrollLeft and scrollTop methods

+jQuery.each( ["Left", "Top"], function( i, name ) {

+	var method = "scroll" + name;

+

+	jQuery.fn[ method ] = function(val) {

+		var elem = this[0], win;

+		

+		if ( !elem ) {

+			return null;

+		}

+

+		if ( val !== undefined ) {

+			// Set the scroll offset

+			return this.each(function() {

+				win = getWindow( this );

+

+				if ( win ) {

+					win.scrollTo(

+						!i ? val : jQuery(win).scrollLeft(),

+						 i ? val : jQuery(win).scrollTop()

+					);

+

+				} else {

+					this[ method ] = val;

+				}

+			});

+		} else {

+			win = getWindow( elem );

+

+			// Return the scroll offset

+			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :

+				jQuery.support.boxModel && win.document.documentElement[ method ] ||

+					win.document.body[ method ] :

+				elem[ method ];

+		}

+	};

+});

+

+function getWindow( elem ) {

+	return ("scrollTo" in elem && elem.document) ?

+		elem :

+		elem.nodeType === 9 ?

+			elem.defaultView || elem.parentWindow :

+			false;

+}

+// Create innerHeight, innerWidth, outerHeight and outerWidth methods

+jQuery.each([ "Height", "Width" ], function( i, name ) {

+

+	var type = name.toLowerCase();

+

+	// innerHeight and innerWidth

+	jQuery.fn["inner" + name] = function() {

+		return this[0] ?

+			jQuery.css( this[0], type, false, "padding" ) :

+			null;

+	};

+

+	// outerHeight and outerWidth

+	jQuery.fn["outer" + name] = function( margin ) {

+		return this[0] ?

+			jQuery.css( this[0], type, false, margin ? "margin" : "border" ) :

+			null;

+	};

+

+	jQuery.fn[ type ] = function( size ) {

+		// Get window width or height

+		var elem = this[0];

+		if ( !elem ) {

+			return size == null ? null : this;

+		}

+		

+		if ( jQuery.isFunction( size ) ) {

+			return this.each(function( i ) {

+				var self = jQuery( this );

+				self[ type ]( size.call( this, i, self[ type ]() ) );

+			});

+		}

+

+		return ("scrollTo" in elem && elem.document) ? // does it walk and quack like a window?

+			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode

+			elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||

+			elem.document.body[ "client" + name ] :

+

+			// Get document width or height

+			(elem.nodeType === 9) ? // is it a document

+				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater

+				Math.max(

+					elem.documentElement["client" + name],

+					elem.body["scroll" + name], elem.documentElement["scroll" + name],

+					elem.body["offset" + name], elem.documentElement["offset" + name]

+				) :

+

+				// Get or set width or height on the element

+				size === undefined ?

+					// Get width or height on the element

+					jQuery.css( elem, type ) :

+

+					// Set the width or height on the element (default to pixels if value is unitless)

+					this.css( type, typeof size === "string" ? size : size + "px" );

+	};

+

+});

+// Expose jQuery to the global object

+window.jQuery = window.$ = jQuery;

+

+})(window);

diff --git a/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery-1.4.1.min-vsdoc.js b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery-1.4.1.min-vsdoc.js
new file mode 100644
index 0000000..a6d00ce
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery-1.4.1.min-vsdoc.js
@@ -0,0 +1,8061 @@
+/*

+ * This file has been commented to support Visual Studio Intellisense.

+ * You should not use this file at runtime inside the browser--it is only

+ * intended to be used only for design-time IntelliSense.  Please use the

+ * standard jQuery library for all production use.

+ *

+ * Comment version: 1.4.1a

+ */

+

+/*!

+ * jQuery JavaScript Library v1.4.1

+ * http://jquery.com/

+ *

+ * Distributed in whole under the terms of the MIT

+ *

+ * Copyright 2010, John Resig

+ *

+ * Permission is hereby granted, free of charge, to any person obtaining

+ * a copy of this software and associated documentation files (the

+ * "Software"), to deal in the Software without restriction, including

+ * without limitation the rights to use, copy, modify, merge, publish,

+ * distribute, sublicense, and/or sell copies of the Software, and to

+ * permit persons to whom the Software is furnished to do so, subject to

+ * the following conditions:

+ *

+ * The above copyright notice and this permission notice shall be

+ * included in all copies or substantial portions of the Software.

+ *

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND

+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE

+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION

+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION

+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ *

+ * Includes Sizzle.js

+ * http://sizzlejs.com/

+ * Copyright 2010, The Dojo Foundation

+ * Released under the MIT, BSD, and GPL Licenses.

+ *

+ * Date: Mon Jan 25 19:43:33 2010 -0500

+ */

+

+(function( window, undefined ) {

+

+// Define a local copy of jQuery

+var jQuery = function( selector, context ) {

+		///	<summary>

+		///		1: $(expression, context) - This function accepts a string containing a CSS selector which is then used to match a set of elements.

+		///		2: $(html) - Create DOM elements on-the-fly from the provided String of raw HTML.

+		///		3: $(elements) - Wrap jQuery functionality around a single or multiple DOM Element(s).

+		///		4: $(callback) - A shorthand for $(document).ready().

+		///		5: $() - As of jQuery 1.4, if you pass no arguments in to the jQuery() method, an empty jQuery set will be returned.

+		///	</summary>

+		///	<param name="selector" type="String">

+		///		1: expression - An expression to search with.

+		///		2: html - A string of HTML to create on the fly.

+		///		3: elements - DOM element(s) to be encapsulated by a jQuery object.

+		///		4: callback - The function to execute when the DOM is ready.

+		///	</param>

+		///	<param name="context" type="jQuery">

+		///		1: context - A DOM Element, Document or jQuery to use as context.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		// The jQuery object is actually just the init constructor 'enhanced'

+		return new jQuery.fn.init( selector, context );

+	},

+

+	// Map over jQuery in case of overwrite

+	_jQuery = window.jQuery,

+

+	// Map over the $ in case of overwrite

+	_$ = window.$,

+

+	// Use the correct document accordingly with window argument (sandbox)

+	document = window.document,

+

+	// A central reference to the root jQuery(document)

+	rootjQuery,

+

+	// A simple way to check for HTML strings or ID strings

+	// (both of which we optimize for)

+	quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,

+

+	// Is it a simple selector

+	isSimple = /^.[^:#\[\.,]*$/,

+

+	// Check if a string has a non-whitespace character in it

+	rnotwhite = /\S/,

+

+	// Used for trimming whitespace

+	rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,

+

+	// Match a standalone tag

+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,

+

+	// Keep a UserAgent string for use with jQuery.browser

+	userAgent = navigator.userAgent,

+

+	// For matching the engine and version of the browser

+	browserMatch,

+	

+	// Has the ready events already been bound?

+	readyBound = false,

+	

+	// The functions to execute on DOM ready

+	readyList = [],

+

+	// The ready event handler

+	DOMContentLoaded,

+

+	// Save a reference to some core methods

+	toString = Object.prototype.toString,

+	hasOwnProperty = Object.prototype.hasOwnProperty,

+	push = Array.prototype.push,

+	slice = Array.prototype.slice,

+	indexOf = Array.prototype.indexOf;

+

+jQuery.fn = jQuery.prototype = {

+	init: function( selector, context ) {

+

+		var match, elem, ret, doc;

+

+		// Handle $(""), $(null), or $(undefined)

+		if ( !selector ) {

+			return this;

+		}

+

+		// Handle $(DOMElement)

+		if ( selector.nodeType ) {

+			this.context = this[0] = selector;

+			this.length = 1;

+			return this;

+		}

+

+		// Handle HTML strings

+		if ( typeof selector === "string" ) {

+			// Are we dealing with HTML string or an ID?

+			match = quickExpr.exec( selector );

+

+			// Verify a match, and that no context was specified for #id

+			if ( match && (match[1] || !context) ) {

+

+				// HANDLE: $(html) -> $(array)

+				if ( match[1] ) {

+					doc = (context ? context.ownerDocument || context : document);

+

+					// If a single string is passed in and it's a single tag

+					// just do a createElement and skip the rest

+					ret = rsingleTag.exec( selector );

+

+					if ( ret ) {

+						if ( jQuery.isPlainObject( context ) ) {

+							selector = [ document.createElement( ret[1] ) ];

+							jQuery.fn.attr.call( selector, context, true );

+

+						} else {

+							selector = [ doc.createElement( ret[1] ) ];

+						}

+

+					} else {

+						ret = buildFragment( [ match[1] ], [ doc ] );

+						selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;

+					}

+

+				// HANDLE: $("#id")

+				} else {

+					elem = document.getElementById( match[2] );

+

+					if ( elem ) {

+						// Handle the case where IE and Opera return items

+						// by name instead of ID

+						if ( elem.id !== match[2] ) {

+							return rootjQuery.find( selector );

+						}

+

+						// Otherwise, we inject the element directly into the jQuery object

+						this.length = 1;

+						this[0] = elem;

+					}

+

+					this.context = document;

+					this.selector = selector;

+					return this;

+				}

+

+			// HANDLE: $("TAG")

+			} else if ( !context && /^\w+$/.test( selector ) ) {

+				this.selector = selector;

+				this.context = document;

+				selector = document.getElementsByTagName( selector );

+

+			// HANDLE: $(expr, $(...))

+			} else if ( !context || context.jquery ) {

+				return (context || rootjQuery).find( selector );

+

+			// HANDLE: $(expr, context)

+			// (which is just equivalent to: $(context).find(expr)

+			} else {

+				return jQuery( context ).find( selector );

+			}

+

+		// HANDLE: $(function)

+		// Shortcut for document ready

+		} else if ( jQuery.isFunction( selector ) ) {

+			return rootjQuery.ready( selector );

+		}

+

+		if (selector.selector !== undefined) {

+			this.selector = selector.selector;

+			this.context = selector.context;

+		}

+

+		return jQuery.isArray( selector ) ?

+			this.setArray( selector ) :

+			jQuery.makeArray( selector, this );

+	},

+

+	// Start with an empty selector

+	selector: "",

+

+	// The current version of jQuery being used

+	jquery: "1.4.1",

+

+	// The default length of a jQuery object is 0

+	length: 0,

+

+	// The number of elements contained in the matched element set

+	size: function() {

+		///	<summary>

+		///		The number of elements currently matched.

+		///		Part of Core

+		///	</summary>

+		///	<returns type="Number" />

+

+		return this.length;

+	},

+

+	toArray: function() {

+		///	<summary>

+		///		Retrieve all the DOM elements contained in the jQuery set, as an array.

+		///	</summary>

+		///	<returns type="Array" />

+		return slice.call( this, 0 );

+	},

+

+	// Get the Nth element in the matched element set OR

+	// Get the whole matched element set as a clean array

+	get: function( num ) {

+		///	<summary>

+		///		Access a single matched element. num is used to access the

+		///		Nth element matched.

+		///		Part of Core

+		///	</summary>

+		///	<returns type="Element" />

+		///	<param name="num" type="Number">

+		///		Access the element in the Nth position.

+		///	</param>

+

+		return num == null ?

+

+			// Return a 'clean' array

+			this.toArray() :

+

+			// Return just the object

+			( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );

+	},

+

+	// Take an array of elements and push it onto the stack

+	// (returning the new matched element set)

+	pushStack: function( elems, name, selector ) {

+		///	<summary>

+		///		Set the jQuery object to an array of elements, while maintaining

+		///		the stack.

+		///		Part of Core

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="elems" type="Elements">

+		///		An array of elements

+		///	</param>

+

+		// Build a new jQuery matched element set

+		var ret = jQuery( elems || null );

+

+		// Add the old object onto the stack (as a reference)

+		ret.prevObject = this;

+

+		ret.context = this.context;

+

+		if ( name === "find" ) {

+			ret.selector = this.selector + (this.selector ? " " : "") + selector;

+		} else if ( name ) {

+			ret.selector = this.selector + "." + name + "(" + selector + ")";

+		}

+

+		// Return the newly-formed element set

+		return ret;

+	},

+

+	// Force the current matched set of elements to become

+	// the specified array of elements (destroying the stack in the process)

+	// You should use pushStack() in order to do this, but maintain the stack

+	setArray: function( elems ) {

+		///	<summary>

+		///		Set the jQuery object to an array of elements. This operation is

+		///		completely destructive - be sure to use .pushStack() if you wish to maintain

+		///		the jQuery stack.

+		///		Part of Core

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="elems" type="Elements">

+		///		An array of elements

+		///	</param>

+

+		// Resetting the length to 0, then using the native Array push

+		// is a super-fast way to populate an object with array-like properties

+		this.length = 0;

+		push.apply( this, elems );

+

+		return this;

+	},

+

+	// Execute a callback for every element in the matched set.

+	// (You can seed the arguments with an array of args, but this is

+	// only used internally.)

+	each: function( callback, args ) {

+		///	<summary>

+		///		Execute a function within the context of every matched element.

+		///		This means that every time the passed-in function is executed

+		///		(which is once for every element matched) the 'this' keyword

+		///		points to the specific element.

+		///		Additionally, the function, when executed, is passed a single

+		///		argument representing the position of the element in the matched

+		///		set.

+		///		Part of Core

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="callback" type="Function">

+		///		A function to execute

+		///	</param>

+

+		return jQuery.each( this, callback, args );

+	},

+	

+	ready: function( fn ) {

+		///	<summary>

+		///		Binds a function to be executed whenever the DOM is ready to be traversed and manipulated.

+		///	</summary>

+		///	<param name="fn" type="Function">The function to be executed when the DOM is ready.</param>

+

+		// Attach the listeners

+		jQuery.bindReady();

+

+		// If the DOM is already ready

+		if ( jQuery.isReady ) {

+			// Execute the function immediately

+			fn.call( document, jQuery );

+

+		// Otherwise, remember the function for later

+		} else if ( readyList ) {

+			// Add the function to the wait list

+			readyList.push( fn );

+		}

+

+		return this;

+	},

+	

+	eq: function( i ) {

+		///	<summary>

+		///		Reduce the set of matched elements to a single element.

+		///		The position of the element in the set of matched elements

+		///		starts at 0 and goes to length - 1.

+		///		Part of Core

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="num" type="Number">

+		///		pos The index of the element that you wish to limit to.

+		///	</param>

+

+		return i === -1 ?

+			this.slice( i ) :

+			this.slice( i, +i + 1 );

+	},

+

+	first: function() {

+		///	<summary>

+		///		Reduce the set of matched elements to the first in the set.

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		return this.eq( 0 );

+	},

+

+	last: function() {

+		///	<summary>

+		///		Reduce the set of matched elements to the final one in the set.

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		return this.eq( -1 );

+	},

+

+	slice: function() {

+		///	<summary>

+		///		Selects a subset of the matched elements.  Behaves exactly like the built-in Array slice method.

+		///	</summary>

+		///	<param name="start" type="Number" integer="true">Where to start the subset (0-based).</param>

+		///	<param name="end" optional="true" type="Number" integer="true">Where to end the subset (not including the end element itself).

+		///		If omitted, ends at the end of the selection</param>

+		///	<returns type="jQuery">The sliced elements</returns>

+

+		return this.pushStack( slice.apply( this, arguments ),

+			"slice", slice.call(arguments).join(",") );

+	},

+

+	map: function( callback ) {

+		///	<summary>

+		///		This member is internal.

+		///	</summary>

+		///	<private />

+		///	<returns type="jQuery" />

+

+		return this.pushStack( jQuery.map(this, function( elem, i ) {

+			return callback.call( elem, i, elem );

+		}));

+	},

+	

+	end: function() {

+		///	<summary>

+		///		End the most recent 'destructive' operation, reverting the list of matched elements

+		///		back to its previous state. After an end operation, the list of matched elements will

+		///		revert to the last state of matched elements.

+		///		If there was no destructive operation before, an empty set is returned.

+		///		Part of DOM/Traversing

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		return this.prevObject || jQuery(null);

+	},

+

+	// For internal use only.

+	// Behaves like an Array's method, not like a jQuery method.

+	push: push,

+	sort: [].sort,

+	splice: [].splice

+};

+

+// Give the init function the jQuery prototype for later instantiation

+jQuery.fn.init.prototype = jQuery.fn;

+

+jQuery.extend = jQuery.fn.extend = function() {

+	///	<summary>

+	///		Extend one object with one or more others, returning the original,

+	///		modified, object. This is a great utility for simple inheritance.

+	///		jQuery.extend(settings, options);

+	///		var settings = jQuery.extend({}, defaults, options);

+	///		Part of JavaScript

+	///	</summary>

+	///	<param name="target" type="Object">

+	///		 The object to extend

+	///	</param>

+	///	<param name="prop1" type="Object">

+	///		 The object that will be merged into the first.

+	///	</param>

+	///	<param name="propN" type="Object" optional="true" parameterArray="true">

+	///		 (optional) More objects to merge into the first

+	///	</param>

+	///	<returns type="Object" />

+

+	// copy reference to target object

+	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy;

+

+	// Handle a deep copy situation

+	if ( typeof target === "boolean" ) {

+		deep = target;

+		target = arguments[1] || {};

+		// skip the boolean and the target

+		i = 2;

+	}

+

+	// Handle case when target is a string or something (possible in deep copy)

+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {

+		target = {};

+	}

+

+	// extend jQuery itself if only one argument is passed

+	if ( length === i ) {

+		target = this;

+		--i;

+	}

+

+	for ( ; i < length; i++ ) {

+		// Only deal with non-null/undefined values

+		if ( (options = arguments[ i ]) != null ) {

+			// Extend the base object

+			for ( name in options ) {

+				src = target[ name ];

+				copy = options[ name ];

+

+				// Prevent never-ending loop

+				if ( target === copy ) {

+					continue;

+				}

+

+				// Recurse if we're merging object literal values or arrays

+				if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {

+					var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src

+						: jQuery.isArray(copy) ? [] : {};

+

+					// Never move original objects, clone them

+					target[ name ] = jQuery.extend( deep, clone, copy );

+

+				// Don't bring in undefined values

+				} else if ( copy !== undefined ) {

+					target[ name ] = copy;

+				}

+			}

+		}

+	}

+

+	// Return the modified object

+	return target;

+};

+

+jQuery.extend({

+	noConflict: function( deep ) {

+		///	<summary>

+		///		Run this function to give control of the $ variable back

+		///		to whichever library first implemented it. This helps to make 

+		///		sure that jQuery doesn't conflict with the $ object

+		///		of other libraries.

+		///		By using this function, you will only be able to access jQuery

+		///		using the 'jQuery' variable. For example, where you used to do

+		///		$(&quot;div p&quot;), you now must do jQuery(&quot;div p&quot;).

+		///		Part of Core 

+		///	</summary>

+		///	<returns type="undefined" />

+

+		window.$ = _$;

+

+		if ( deep ) {

+			window.jQuery = _jQuery;

+		}

+

+		return jQuery;

+	},

+	

+	// Is the DOM ready to be used? Set to true once it occurs.

+	isReady: false,

+	

+	// Handle when the DOM is ready

+	ready: function() {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		// Make sure that the DOM is not already loaded

+		if ( !jQuery.isReady ) {

+			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).

+			if ( !document.body ) {

+				return setTimeout( jQuery.ready, 13 );

+			}

+

+			// Remember that the DOM is ready

+			jQuery.isReady = true;

+

+			// If there are functions bound, to execute

+			if ( readyList ) {

+				// Execute all of them

+				var fn, i = 0;

+				while ( (fn = readyList[ i++ ]) ) {

+					fn.call( document, jQuery );

+				}

+

+				// Reset the list of functions

+				readyList = null;

+			}

+

+			// Trigger any bound ready events

+			if ( jQuery.fn.triggerHandler ) {

+				jQuery( document ).triggerHandler( "ready" );

+			}

+		}

+	},

+	

+	bindReady: function() {

+		if ( readyBound ) {

+			return;

+		}

+

+		readyBound = true;

+

+		// Catch cases where $(document).ready() is called after the

+		// browser event has already occurred.

+		if ( document.readyState === "complete" ) {

+			return jQuery.ready();

+		}

+

+		// Mozilla, Opera and webkit nightlies currently support this event

+		if ( document.addEventListener ) {

+			// Use the handy event callback

+			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );

+			

+			// A fallback to window.onload, that will always work

+			window.addEventListener( "load", jQuery.ready, false );

+

+		// If IE event model is used

+		} else if ( document.attachEvent ) {

+			// ensure firing before onload,

+			// maybe late but safe also for iframes

+			document.attachEvent("onreadystatechange", DOMContentLoaded);

+			

+			// A fallback to window.onload, that will always work

+			window.attachEvent( "onload", jQuery.ready );

+

+			// If IE and not a frame

+			// continually check to see if the document is ready

+			var toplevel = false;

+

+			try {

+				toplevel = window.frameElement == null;

+			} catch(e) {}

+

+			if ( document.documentElement.doScroll && toplevel ) {

+				doScrollCheck();

+			}

+		}

+	},

+

+	// See test/unit/core.js for details concerning isFunction.

+	// Since version 1.3, DOM methods and functions like alert

+	// aren't supported. They return false on IE (#2968).

+	isFunction: function( obj ) {

+		///	<summary>

+		///		Determines if the parameter passed is a function.

+		///	</summary>

+		///	<param name="obj" type="Object">The object to check</param>

+		///	<returns type="Boolean">True if the parameter is a function; otherwise false.</returns>

+

+		return toString.call(obj) === "[object Function]";

+	},

+

+	isArray: function( obj ) {

+		///	<summary>

+		///		Determine if the parameter passed is an array.

+		///	</summary>

+		///	<param name="obj" type="Object">Object to test whether or not it is an array.</param>

+		///	<returns type="Boolean">True if the parameter is a function; otherwise false.</returns>

+

+		return toString.call(obj) === "[object Array]";

+	},

+

+	isPlainObject: function( obj ) {

+		///	<summary>

+		///		Check to see if an object is a plain object (created using "{}" or "new Object").

+		///	</summary>

+		///	<param name="obj" type="Object">

+		///		The object that will be checked to see if it's a plain object.

+		///	</param>

+		///	<returns type="Boolean" />

+

+		// Must be an Object.

+		// Because of IE, we also have to check the presence of the constructor property.

+		// Make sure that DOM nodes and window objects don't pass through, as well

+		if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) {

+			return false;

+		}

+		

+		// Not own constructor property must be Object

+		if ( obj.constructor

+			&& !hasOwnProperty.call(obj, "constructor")

+			&& !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {

+			return false;

+		}

+		

+		// Own properties are enumerated firstly, so to speed up,

+		// if last one is own, then all properties are own.

+	

+		var key;

+		for ( key in obj ) {}

+		

+		return key === undefined || hasOwnProperty.call( obj, key );

+	},

+

+	isEmptyObject: function( obj ) {

+		///	<summary>

+		///		Check to see if an object is empty (contains no properties).

+		///	</summary>

+		///	<param name="obj" type="Object">

+		///		The object that will be checked to see if it's empty.

+		///	</param>

+		///	<returns type="Boolean" />

+

+		for ( var name in obj ) {

+			return false;

+		}

+		return true;

+	},

+	

+	error: function( msg ) {

+		throw msg;

+	},

+	

+	parseJSON: function( data ) {

+		if ( typeof data !== "string" || !data ) {

+			return null;

+		}

+		

+		// Make sure the incoming data is actual JSON

+		// Logic borrowed from http://json.org/json2.js

+		if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")

+			.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")

+			.replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {

+

+			// Try to use the native JSON parser first

+			return window.JSON && window.JSON.parse ?

+				window.JSON.parse( data ) :

+				(new Function("return " + data))();

+

+		} else {

+			jQuery.error( "Invalid JSON: " + data );

+		}

+	},

+

+	noop: function() {

+		///	<summary>

+		///		An empty function.

+		///	</summary>

+		///	<returns type="Function" />

+	},

+

+	// Evalulates a script in a global context

+	globalEval: function( data ) {

+		///	<summary>

+		///		Internally evaluates a script in a global context.

+		///	</summary>

+		///	<private />

+

+		if ( data && rnotwhite.test(data) ) {

+			// Inspired by code by Andrea Giammarchi

+			// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html

+			var head = document.getElementsByTagName("head")[0] || document.documentElement,

+				script = document.createElement("script");

+

+			script.type = "text/javascript";

+

+			if ( jQuery.support.scriptEval ) {

+				script.appendChild( document.createTextNode( data ) );

+			} else {

+				script.text = data;

+			}

+

+			// Use insertBefore instead of appendChild to circumvent an IE6 bug.

+			// This arises when a base node is used (#2709).

+			head.insertBefore( script, head.firstChild );

+			head.removeChild( script );

+		}

+	},

+

+	nodeName: function( elem, name ) {

+		///	<summary>

+		///		Checks whether the specified element has the specified DOM node name.

+		///	</summary>

+		///	<param name="elem" type="Element">The element to examine</param>

+		///	<param name="name" type="String">The node name to check</param>

+		///	<returns type="Boolean">True if the specified node name matches the node's DOM node name; otherwise false</returns>

+

+		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();

+	},

+

+	// args is for internal usage only

+	each: function( object, callback, args ) {

+		///	<summary>

+		///		A generic iterator function, which can be used to seemlessly

+		///		iterate over both objects and arrays. This function is not the same

+		///		as $().each() - which is used to iterate, exclusively, over a jQuery

+		///		object. This function can be used to iterate over anything.

+		///		The callback has two arguments:the key (objects) or index (arrays) as first

+		///		the first, and the value as the second.

+		///		Part of JavaScript

+		///	</summary>

+		///	<param name="obj" type="Object">

+		///		 The object, or array, to iterate over.

+		///	</param>

+		///	<param name="fn" type="Function">

+		///		 The function that will be executed on every object.

+		///	</param>

+		///	<returns type="Object" />

+

+		var name, i = 0,

+			length = object.length,

+			isObj = length === undefined || jQuery.isFunction(object);

+

+		if ( args ) {

+			if ( isObj ) {

+				for ( name in object ) {

+					if ( callback.apply( object[ name ], args ) === false ) {

+						break;

+					}

+				}

+			} else {

+				for ( ; i < length; ) {

+					if ( callback.apply( object[ i++ ], args ) === false ) {

+						break;

+					}

+				}

+			}

+

+		// A special, fast, case for the most common use of each

+		} else {

+			if ( isObj ) {

+				for ( name in object ) {

+					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {

+						break;

+					}

+				}

+			} else {

+				for ( var value = object[0];

+					i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}

+			}

+		}

+

+		return object;

+	},

+

+	trim: function( text ) {

+		///	<summary>

+		///		Remove the whitespace from the beginning and end of a string.

+		///		Part of JavaScript

+		///	</summary>

+		///	<returns type="String" />

+		///	<param name="text" type="String">

+		///		The string to trim.

+		///	</param>

+

+		return (text || "").replace( rtrim, "" );

+	},

+

+	// results is for internal usage only

+	makeArray: function( array, results ) {

+		///	<summary>

+		///		Turns anything into a true array.  This is an internal method.

+		///	</summary>

+		///	<param name="array" type="Object">Anything to turn into an actual Array</param>

+		///	<returns type="Array" />

+		///	<private />

+

+		var ret = results || [];

+

+		if ( array != null ) {

+			// The window, strings (and functions) also have 'length'

+			// The extra typeof function check is to prevent crashes

+			// in Safari 2 (See: #3039)

+			if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) {

+				push.call( ret, array );

+			} else {

+				jQuery.merge( ret, array );

+			}

+		}

+

+		return ret;

+	},

+

+	inArray: function( elem, array ) {

+		if ( array.indexOf ) {

+			return array.indexOf( elem );

+		}

+

+		for ( var i = 0, length = array.length; i < length; i++ ) {

+			if ( array[ i ] === elem ) {

+				return i;

+			}

+		}

+

+		return -1;

+	},

+

+	merge: function( first, second ) {

+		///	<summary>

+		///		Merge two arrays together, removing all duplicates.

+		///		The new array is: All the results from the first array, followed

+		///		by the unique results from the second array.

+		///		Part of JavaScript

+		///	</summary>

+		///	<returns type="Array" />

+		///	<param name="first" type="Array">

+		///		 The first array to merge.

+		///	</param>

+		///	<param name="second" type="Array">

+		///		 The second array to merge.

+		///	</param>

+

+		var i = first.length, j = 0;

+

+		if ( typeof second.length === "number" ) {

+			for ( var l = second.length; j < l; j++ ) {

+				first[ i++ ] = second[ j ];

+			}

+		} else {

+			while ( second[j] !== undefined ) {

+				first[ i++ ] = second[ j++ ];

+			}

+		}

+

+		first.length = i;

+

+		return first;

+	},

+

+	grep: function( elems, callback, inv ) {

+		///	<summary>

+		///		Filter items out of an array, by using a filter function.

+		///		The specified function will be passed two arguments: The

+		///		current array item and the index of the item in the array. The

+		///		function must return 'true' to keep the item in the array, 

+		///		false to remove it.

+		///		});

+		///		Part of JavaScript

+		///	</summary>

+		///	<returns type="Array" />

+		///	<param name="elems" type="Array">

+		///		array The Array to find items in.

+		///	</param>

+		///	<param name="fn" type="Function">

+		///		 The function to process each item against.

+		///	</param>

+		///	<param name="inv" type="Boolean">

+		///		 Invert the selection - select the opposite of the function.

+		///	</param>

+

+		var ret = [];

+

+		// Go through the array, only saving the items

+		// that pass the validator function

+		for ( var i = 0, length = elems.length; i < length; i++ ) {

+			if ( !inv !== !callback( elems[ i ], i ) ) {

+				ret.push( elems[ i ] );

+			}

+		}

+

+		return ret;

+	},

+

+	// arg is for internal usage only

+	map: function( elems, callback, arg ) {

+		///	<summary>

+		///		Translate all items in an array to another array of items.

+		///		The translation function that is provided to this method is 

+		///		called for each item in the array and is passed one argument: 

+		///		The item to be translated.

+		///		The function can then return the translated value, 'null'

+		///		(to remove the item), or  an array of values - which will

+		///		be flattened into the full array.

+		///		Part of JavaScript

+		///	</summary>

+		///	<returns type="Array" />

+		///	<param name="elems" type="Array">

+		///		array The Array to translate.

+		///	</param>

+		///	<param name="fn" type="Function">

+		///		 The function to process each item against.

+		///	</param>

+

+		var ret = [], value;

+

+		// Go through the array, translating each of the items to their

+		// new value (or values).

+		for ( var i = 0, length = elems.length; i < length; i++ ) {

+			value = callback( elems[ i ], i, arg );

+

+			if ( value != null ) {

+				ret[ ret.length ] = value;

+			}

+		}

+

+		return ret.concat.apply( [], ret );

+	},

+

+	// A global GUID counter for objects

+	guid: 1,

+

+	proxy: function( fn, proxy, thisObject ) {

+		///	<summary>

+		///		Takes a function and returns a new one that will always have a particular scope.

+		///	</summary>

+		///	<param name="fn" type="Function">

+		///		The function whose scope will be changed.

+		///	</param>

+		///	<param name="proxy" type="Object">

+		///		The object to which the scope of the function should be set.

+		///	</param>

+		///	<returns type="Function" />

+

+		if ( arguments.length === 2 ) {

+			if ( typeof proxy === "string" ) {

+				thisObject = fn;

+				fn = thisObject[ proxy ];

+				proxy = undefined;

+

+			} else if ( proxy && !jQuery.isFunction( proxy ) ) {

+				thisObject = proxy;

+				proxy = undefined;

+			}

+		}

+

+		if ( !proxy && fn ) {

+			proxy = function() {

+				return fn.apply( thisObject || this, arguments );

+			};

+		}

+

+		// Set the guid of unique handler to the same of original handler, so it can be removed

+		if ( fn ) {

+			proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;

+		}

+

+		// So proxy can be declared as an argument

+		return proxy;

+	},

+

+	// Use of jQuery.browser is frowned upon.

+	// More details: http://docs.jquery.com/Utilities/jQuery.browser

+	uaMatch: function( ua ) {

+		ua = ua.toLowerCase();

+

+		var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) ||

+			/(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) ||

+			/(msie) ([\w.]+)/.exec( ua ) ||

+			!/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) ||

+		  	[];

+

+		return { browser: match[1] || "", version: match[2] || "0" };

+	},

+

+	browser: {}

+});

+

+browserMatch = jQuery.uaMatch( userAgent );

+if ( browserMatch.browser ) {

+	jQuery.browser[ browserMatch.browser ] = true;

+	jQuery.browser.version = browserMatch.version;

+}

+

+// Deprecated, use jQuery.browser.webkit instead

+if ( jQuery.browser.webkit ) {

+	jQuery.browser.safari = true;

+}

+

+if ( indexOf ) {

+	jQuery.inArray = function( elem, array ) {

+		///	<summary>

+		///		Determines the index of the first parameter in the array.

+		///	</summary>

+		///	<param name="elem">The value to see if it exists in the array.</param>

+		///	<param name="array" type="Array">The array to look through for the value</param>

+		///	<returns type="Number" integer="true">The 0-based index of the item if it was found, otherwise -1.</returns>

+

+		return indexOf.call( array, elem );

+	};

+}

+

+// All jQuery objects should point back to these

+rootjQuery = jQuery(document);

+

+// Cleanup functions for the document ready method

+if ( document.addEventListener ) {

+	DOMContentLoaded = function() {

+		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );

+		jQuery.ready();

+	};

+

+} else if ( document.attachEvent ) {

+	DOMContentLoaded = function() {

+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).

+		if ( document.readyState === "complete" ) {

+			document.detachEvent( "onreadystatechange", DOMContentLoaded );

+			jQuery.ready();

+		}

+	};

+}

+

+// The DOM ready check for Internet Explorer

+function doScrollCheck() {

+	if ( jQuery.isReady ) {

+		return;

+	}

+

+	try {

+		// If IE is used, use the trick by Diego Perini

+		// http://javascript.nwbox.com/IEContentLoaded/

+		document.documentElement.doScroll("left");

+	} catch( error ) {

+		setTimeout( doScrollCheck, 1 );

+		return;

+	}

+

+	// and execute any waiting functions

+	jQuery.ready();

+}

+

+function evalScript( i, elem ) {

+	///	<summary>

+	///		This method is internal.

+	///	</summary>

+	/// <private />

+

+	if ( elem.src ) {

+		jQuery.ajax({

+			url: elem.src,

+			async: false,

+			dataType: "script"

+		});

+	} else {

+		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );

+	}

+

+	if ( elem.parentNode ) {

+		elem.parentNode.removeChild( elem );

+	}

+}

+

+// Mutifunctional method to get and set values to a collection

+// The value/s can be optionally by executed if its a function

+function access( elems, key, value, exec, fn, pass ) {

+	var length = elems.length;

+	

+	// Setting many attributes

+	if ( typeof key === "object" ) {

+		for ( var k in key ) {

+			access( elems, k, key[k], exec, fn, value );

+		}

+		return elems;

+	}

+	

+	// Setting one attribute

+	if ( value !== undefined ) {

+		// Optionally, function values get executed if exec is true

+		exec = !pass && exec && jQuery.isFunction(value);

+		

+		for ( var i = 0; i < length; i++ ) {

+			fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );

+		}

+		

+		return elems;

+	}

+	

+	// Getting an attribute

+	return length ? fn( elems[0], key ) : null;

+}

+

+function now() {

+	///	<summary>

+	///		Gets the current date.

+	///	</summary>

+	///	<returns type="Date">The current date.</returns>

+

+	return (new Date).getTime();

+}

+

+// [vsdoc] The following function has been modified for IntelliSense.

+// [vsdoc] Stubbing support properties to "false" for IntelliSense compat.

+(function() {

+

+	jQuery.support = {};

+

+	//	var root = document.documentElement,

+	//		script = document.createElement("script"),

+	//		div = document.createElement("div"),

+	//		id = "script" + now();

+

+	//	div.style.display = "none";

+	//	div.innerHTML = "   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";

+

+	//	var all = div.getElementsByTagName("*"),

+	//		a = div.getElementsByTagName("a")[0];

+

+	//	// Can't get basic test support

+	//	if ( !all || !all.length || !a ) {

+	//		return;

+	//	}

+

+	jQuery.support = {

+		// IE strips leading whitespace when .innerHTML is used

+		leadingWhitespace: false,

+

+		// Make sure that tbody elements aren't automatically inserted

+		// IE will insert them into empty tables

+		tbody: false,

+

+		// Make sure that link elements get serialized correctly by innerHTML

+		// This requires a wrapper element in IE

+		htmlSerialize: false,

+

+		// Get the style information from getAttribute

+		// (IE uses .cssText insted)

+		style: false,

+

+		// Make sure that URLs aren't manipulated

+		// (IE normalizes it by default)

+		hrefNormalized: false,

+

+		// Make sure that element opacity exists

+		// (IE uses filter instead)

+		// Use a regex to work around a WebKit issue. See #5145

+		opacity: false,

+

+		// Verify style float existence

+		// (IE uses styleFloat instead of cssFloat)

+		cssFloat: false,

+

+		// Make sure that if no value is specified for a checkbox

+		// that it defaults to "on".

+		// (WebKit defaults to "" instead)

+		checkOn: false,

+

+		// Make sure that a selected-by-default option has a working selected property.

+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)

+		optSelected: false,

+

+		// Will be defined later

+		checkClone: false,

+		scriptEval: false,

+		noCloneEvent: false,

+		boxModel: false

+	};

+

+	//	script.type = "text/javascript";

+	//	try {

+	//		script.appendChild( document.createTextNode( "window." + id + "=1;" ) );

+	//	} catch(e) {}

+

+	//	root.insertBefore( script, root.firstChild );

+

+	//	// Make sure that the execution of code works by injecting a script

+	//	// tag with appendChild/createTextNode

+	//	// (IE doesn't support this, fails, and uses .text instead)

+	//	if ( window[ id ] ) {

+	//		jQuery.support.scriptEval = true;

+	//		delete window[ id ];

+	//	}

+

+	//	root.removeChild( script );

+

+	//	if ( div.attachEvent && div.fireEvent ) {

+	//		div.attachEvent("onclick", function click() {

+	//			// Cloning a node shouldn't copy over any

+	//			// bound event handlers (IE does this)

+	//			jQuery.support.noCloneEvent = false;

+	//			div.detachEvent("onclick", click);

+	//		});

+	//		div.cloneNode(true).fireEvent("onclick");

+	//	}

+

+	//	div = document.createElement("div");

+	//	div.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>";

+

+	//	var fragment = document.createDocumentFragment();

+	//	fragment.appendChild( div.firstChild );

+

+	//	// WebKit doesn't clone checked state correctly in fragments

+	//	jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;

+

+	//	// Figure out if the W3C box model works as expected

+	//	// document.body must exist before we can do this

+	//	jQuery(function() {

+	//		var div = document.createElement("div");

+	//		div.style.width = div.style.paddingLeft = "1px";

+

+	//		document.body.appendChild( div );

+	//		jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;

+	//		document.body.removeChild( div ).style.display = 'none';

+	//		div = null;

+	//	});

+

+	//	// Technique from Juriy Zaytsev

+	//	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/

+	//	var eventSupported = function( eventName ) { 

+	//		var el = document.createElement("div"); 

+	//		eventName = "on" + eventName; 

+

+	//		var isSupported = (eventName in el); 

+	//		if ( !isSupported ) { 

+	//			el.setAttribute(eventName, "return;"); 

+	//			isSupported = typeof el[eventName] === "function"; 

+	//		} 

+	//		el = null; 

+

+	//		return isSupported; 

+	//	};

+	

+	jQuery.support.submitBubbles = false;

+	jQuery.support.changeBubbles = false;

+

+	//	// release memory in IE

+	//	root = script = div = all = a = null;

+})();

+

+jQuery.props = {

+	"for": "htmlFor",

+	"class": "className",

+	readonly: "readOnly",

+	maxlength: "maxLength",

+	cellspacing: "cellSpacing",

+	rowspan: "rowSpan",

+	colspan: "colSpan",

+	tabindex: "tabIndex",

+	usemap: "useMap",

+	frameborder: "frameBorder"

+};

+var expando = "jQuery" + now(), uuid = 0, windowData = {};

+var emptyObject = {};

+

+jQuery.extend({

+	cache: {},

+	

+	expando:expando,

+

+	// The following elements throw uncatchable exceptions if you

+	// attempt to add expando properties to them.

+	noData: {

+		"embed": true,

+		"object": true,

+		"applet": true

+	},

+

+	data: function( elem, name, data ) {

+		///	<summary>

+		///		Store arbitrary data associated with the specified element.

+		///	</summary>

+		///	<param name="elem" type="Element">

+		///		The DOM element to associate with the data.

+		///	</param>

+		///	<param name="name" type="String">

+		///		A string naming the piece of data to set.

+		///	</param>

+		///	<param name="value" type="Object">

+		///		The new data value.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {

+			return;

+		}

+

+		elem = elem == window ?

+			windowData :

+			elem;

+

+		var id = elem[ expando ], cache = jQuery.cache, thisCache;

+

+		// Handle the case where there's no name immediately

+		if ( !name && !id ) {

+			return null;

+		}

+

+		// Compute a unique ID for the element

+		if ( !id ) { 

+			id = ++uuid;

+		}

+

+		// Avoid generating a new cache unless none exists and we

+		// want to manipulate it.

+		if ( typeof name === "object" ) {

+			elem[ expando ] = id;

+			thisCache = cache[ id ] = jQuery.extend(true, {}, name);

+		} else if ( cache[ id ] ) {

+			thisCache = cache[ id ];

+		} else if ( typeof data === "undefined" ) {

+			thisCache = emptyObject;

+		} else {

+			thisCache = cache[ id ] = {};

+		}

+

+		// Prevent overriding the named cache with undefined values

+		if ( data !== undefined ) {

+			elem[ expando ] = id;

+			thisCache[ name ] = data;

+		}

+

+		return typeof name === "string" ? thisCache[ name ] : thisCache;

+	},

+

+	removeData: function( elem, name ) {

+		if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {

+			return;

+		}

+

+		elem = elem == window ?

+			windowData :

+			elem;

+

+		var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];

+

+		// If we want to remove a specific section of the element's data

+		if ( name ) {

+			if ( thisCache ) {

+				// Remove the section of cache data

+				delete thisCache[ name ];

+

+				// If we've removed all the data, remove the element's cache

+				if ( jQuery.isEmptyObject(thisCache) ) {

+					jQuery.removeData( elem );

+				}

+			}

+

+		// Otherwise, we want to remove all of the element's data

+		} else {

+			// Clean up the element expando

+			try {

+				delete elem[ expando ];

+			} catch( e ) {

+				// IE has trouble directly removing the expando

+				// but it's ok with using removeAttribute

+				if ( elem.removeAttribute ) {

+					elem.removeAttribute( expando );

+				}

+			}

+

+			// Completely remove the data cache

+			delete cache[ id ];

+		}

+	}

+});

+

+jQuery.fn.extend({

+	data: function( key, value ) {

+		///	<summary>

+		///		Store arbitrary data associated with the matched elements.

+		///	</summary>

+		///	<param name="key" type="String">

+		///		A string naming the piece of data to set.

+		///	</param>

+		///	<param name="value" type="Object">

+		///		The new data value.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		if ( typeof key === "undefined" && this.length ) {

+			return jQuery.data( this[0] );

+

+		} else if ( typeof key === "object" ) {

+			return this.each(function() {

+				jQuery.data( this, key );

+			});

+		}

+

+		var parts = key.split(".");

+		parts[1] = parts[1] ? "." + parts[1] : "";

+

+		if ( value === undefined ) {

+			var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);

+

+			if ( data === undefined && this.length ) {

+				data = jQuery.data( this[0], key );

+			}

+			return data === undefined && parts[1] ?

+				this.data( parts[0] ) :

+				data;

+		} else {

+			return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() {

+				jQuery.data( this, key, value );

+			});

+		}

+	},

+

+	removeData: function( key ) {

+		return this.each(function() {

+			jQuery.removeData( this, key );

+		});

+	}

+});

+jQuery.extend({

+	queue: function( elem, type, data ) {

+		if ( !elem ) {

+			return;

+		}

+

+		type = (type || "fx") + "queue";

+		var q = jQuery.data( elem, type );

+

+		// Speed up dequeue by getting out quickly if this is just a lookup

+		if ( !data ) {

+			return q || [];

+		}

+

+		if ( !q || jQuery.isArray(data) ) {

+			q = jQuery.data( elem, type, jQuery.makeArray(data) );

+

+		} else {

+			q.push( data );

+		}

+

+		return q;

+	},

+

+	dequeue: function( elem, type ) {

+		type = type || "fx";

+

+		var queue = jQuery.queue( elem, type ), fn = queue.shift();

+

+		// If the fx queue is dequeued, always remove the progress sentinel

+		if ( fn === "inprogress" ) {

+			fn = queue.shift();

+		}

+

+		if ( fn ) {

+			// Add a progress sentinel to prevent the fx queue from being

+			// automatically dequeued

+			if ( type === "fx" ) {

+				queue.unshift("inprogress");

+			}

+

+			fn.call(elem, function() {

+				jQuery.dequeue(elem, type);

+			});

+		}

+	}

+});

+

+jQuery.fn.extend({

+	queue: function( type, data ) {

+		///	<summary>

+		///		1: queue() - Returns a reference to the first element's queue (which is an array of functions).

+		///		2: queue(callback) - Adds a new function, to be executed, onto the end of the queue of all matched elements.

+		///		3: queue(queue) - Replaces the queue of all matched element with this new queue (the array of functions).

+		///	</summary>

+		///	<param name="type" type="Function">The function to add to the queue.</param>

+		///	<returns type="jQuery" />

+

+		if ( typeof type !== "string" ) {

+			data = type;

+			type = "fx";

+		}

+

+		if ( data === undefined ) {

+			return jQuery.queue( this[0], type );

+		}

+		return this.each(function( i, elem ) {

+			var queue = jQuery.queue( this, type, data );

+

+			if ( type === "fx" && queue[0] !== "inprogress" ) {

+				jQuery.dequeue( this, type );

+			}

+		});

+	},

+	dequeue: function( type ) {

+		///	<summary>

+		///		Removes a queued function from the front of the queue and executes it.

+		///	</summary>

+		///	<param name="type" type="String" optional="true">The type of queue to access.</param>

+		///	<returns type="jQuery" />

+

+		return this.each(function() {

+			jQuery.dequeue( this, type );

+		});

+	},

+

+	// Based off of the plugin by Clint Helfers, with permission.

+	// http://blindsignals.com/index.php/2009/07/jquery-delay/

+	delay: function( time, type ) {

+		///	<summary>

+		///		Set a timer to delay execution of subsequent items in the queue.

+		///	</summary>

+		///	<param name="time" type="Number">

+		///		An integer indicating the number of milliseconds to delay execution of the next item in the queue.

+		///	</param>

+		///	<param name="type" type="String">

+		///		A string containing the name of the queue. Defaults to fx, the standard effects queue.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;

+		type = type || "fx";

+

+		return this.queue( type, function() {

+			var elem = this;

+			setTimeout(function() {

+				jQuery.dequeue( elem, type );

+			}, time );

+		});

+	},

+

+	clearQueue: function( type ) {

+		///	<summary>

+		///		Remove from the queue all items that have not yet been run.

+		///	</summary>

+		///	<param name="type" type="String" optional="true">

+		///		A string containing the name of the queue. Defaults to fx, the standard effects queue.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		return this.queue( type || "fx", [] );

+	}

+});

+var rclass = /[\n\t]/g,

+	rspace = /\s+/,

+	rreturn = /\r/g,

+	rspecialurl = /href|src|style/,

+	rtype = /(button|input)/i,

+	rfocusable = /(button|input|object|select|textarea)/i,

+	rclickable = /^(a|area)$/i,

+	rradiocheck = /radio|checkbox/;

+

+jQuery.fn.extend({

+	attr: function( name, value ) {

+		///	<summary>

+		///		Set a single property to a computed value, on all matched elements.

+		///		Instead of a value, a function is provided, that computes the value.

+		///		Part of DOM/Attributes

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="name" type="String">

+		///		The name of the property to set.

+		///	</param>

+		///	<param name="value" type="Function">

+		///		A function returning the value to set.

+		///	</param>

+

+		return access( this, name, value, true, jQuery.attr );

+	},

+

+	removeAttr: function( name, fn ) {

+		///	<summary>

+		///		Remove an attribute from each of the matched elements.

+		///		Part of DOM/Attributes

+		///	</summary>

+		///	<param name="name" type="String">

+		///		An attribute to remove.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		return this.each(function(){

+			jQuery.attr( this, name, "" );

+			if ( this.nodeType === 1 ) {

+				this.removeAttribute( name );

+			}

+		});

+	},

+

+	addClass: function( value ) {

+		///	<summary>

+		///		Adds the specified class(es) to each of the set of matched elements.

+		///		Part of DOM/Attributes

+		///	</summary>

+		///	<param name="value" type="String">

+		///		One or more class names to be added to the class attribute of each matched element.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		if ( jQuery.isFunction(value) ) {

+			return this.each(function(i) {

+				var self = jQuery(this);

+				self.addClass( value.call(this, i, self.attr("class")) );

+			});

+		}

+

+		if ( value && typeof value === "string" ) {

+			var classNames = (value || "").split( rspace );

+

+			for ( var i = 0, l = this.length; i < l; i++ ) {

+				var elem = this[i];

+

+				if ( elem.nodeType === 1 ) {

+					if ( !elem.className ) {

+						elem.className = value;

+

+					} else {

+						var className = " " + elem.className + " ";

+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {

+							if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {

+								elem.className += " " + classNames[c];

+							}

+						}

+					}

+				}

+			}

+		}

+

+		return this;

+	},

+

+	removeClass: function( value ) {

+		///	<summary>

+		///		Removes all or the specified class(es) from the set of matched elements.

+		///		Part of DOM/Attributes

+		///	</summary>

+		///	<param name="value" type="String" optional="true">

+		///		(Optional) A class name to be removed from the class attribute of each matched element.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		if ( jQuery.isFunction(value) ) {

+			return this.each(function(i) {

+				var self = jQuery(this);

+				self.removeClass( value.call(this, i, self.attr("class")) );

+			});

+		}

+

+		if ( (value && typeof value === "string") || value === undefined ) {

+			var classNames = (value || "").split(rspace);

+

+			for ( var i = 0, l = this.length; i < l; i++ ) {

+				var elem = this[i];

+

+				if ( elem.nodeType === 1 && elem.className ) {

+					if ( value ) {

+						var className = (" " + elem.className + " ").replace(rclass, " ");

+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {

+							className = className.replace(" " + classNames[c] + " ", " ");

+						}

+						elem.className = className.substring(1, className.length - 1);

+

+					} else {

+						elem.className = "";

+					}

+				}

+			}

+		}

+

+		return this;

+	},

+

+	toggleClass: function( value, stateVal ) {

+		///	<summary>

+		///		Add or remove a class from each element in the set of matched elements, depending

+		///		on either the class's presence or the value of the switch argument.

+		///	</summary>

+		///	<param name="value" type="Object">

+		///		A class name to be toggled for each element in the matched set.

+		///	</param>

+		///	<param name="stateVal" type="Object">

+		///		A boolean value to determine whether the class should be added or removed.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		var type = typeof value, isBool = typeof stateVal === "boolean";

+

+		if ( jQuery.isFunction( value ) ) {

+			return this.each(function(i) {

+				var self = jQuery(this);

+				self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );

+			});

+		}

+

+		return this.each(function() {

+			if ( type === "string" ) {

+				// toggle individual class names

+				var className, i = 0, self = jQuery(this),

+					state = stateVal,

+					classNames = value.split( rspace );

+

+				while ( (className = classNames[ i++ ]) ) {

+					// check each className given, space seperated list

+					state = isBool ? state : !self.hasClass( className );

+					self[ state ? "addClass" : "removeClass" ]( className );

+				}

+

+			} else if ( type === "undefined" || type === "boolean" ) {

+				if ( this.className ) {

+					// store className if set

+					jQuery.data( this, "__className__", this.className );

+				}

+

+				// toggle whole className

+				this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";

+			}

+		});

+	},

+

+	hasClass: function( selector ) {

+		///	<summary>

+		///		Checks the current selection against a class and returns whether at least one selection has a given class.

+		///	</summary>

+		///	<param name="selector" type="String">The class to check against</param>

+		///	<returns type="Boolean">True if at least one element in the selection has the class, otherwise false.</returns>

+

+		var className = " " + selector + " ";

+		for ( var i = 0, l = this.length; i < l; i++ ) {

+			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {

+				return true;

+			}

+		}

+

+		return false;

+	},

+

+	val: function( value ) {

+		///	<summary>

+		///		Set the value of every matched element.

+		///		Part of DOM/Attributes

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="value" type="String">

+		///		A string of text or an array of strings to set as the value property of each

+		///		matched element.

+		///	</param>

+

+		if ( value === undefined ) {

+			var elem = this[0];

+

+			if ( elem ) {

+				if ( jQuery.nodeName( elem, "option" ) ) {

+					return (elem.attributes.value || {}).specified ? elem.value : elem.text;

+				}

+

+				// We need to handle select boxes special

+				if ( jQuery.nodeName( elem, "select" ) ) {

+					var index = elem.selectedIndex,

+						values = [],

+						options = elem.options,

+						one = elem.type === "select-one";

+

+					// Nothing was selected

+					if ( index < 0 ) {

+						return null;

+					}

+

+					// Loop through all the selected options

+					for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {

+						var option = options[ i ];

+

+						if ( option.selected ) {

+							// Get the specifc value for the option

+							value = jQuery(option).val();

+

+							// We don't need an array for one selects

+							if ( one ) {

+								return value;

+							}

+

+							// Multi-Selects return an array

+							values.push( value );

+						}

+					}

+

+					return values;

+				}

+

+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified

+				if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {

+					return elem.getAttribute("value") === null ? "on" : elem.value;

+				}

+				

+

+				// Everything else, we just grab the value

+				return (elem.value || "").replace(rreturn, "");

+

+			}

+

+			return undefined;

+		}

+

+		var isFunction = jQuery.isFunction(value);

+

+		return this.each(function(i) {

+			var self = jQuery(this), val = value;

+

+			if ( this.nodeType !== 1 ) {

+				return;

+			}

+

+			if ( isFunction ) {

+				val = value.call(this, i, self.val());

+			}

+

+			// Typecast each time if the value is a Function and the appended

+			// value is therefore different each time.

+			if ( typeof val === "number" ) {

+				val += "";

+			}

+

+			if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {

+				this.checked = jQuery.inArray( self.val(), val ) >= 0;

+

+			} else if ( jQuery.nodeName( this, "select" ) ) {

+				var values = jQuery.makeArray(val);

+

+				jQuery( "option", this ).each(function() {

+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;

+				});

+

+				if ( !values.length ) {

+					this.selectedIndex = -1;

+				}

+

+			} else {

+				this.value = val;

+			}

+		});

+	}

+});

+

+jQuery.extend({

+	attrFn: {

+		val: true,

+		css: true,

+		html: true,

+		text: true,

+		data: true,

+		width: true,

+		height: true,

+		offset: true

+	},

+		

+	attr: function( elem, name, value, pass ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		// don't set attributes on text and comment nodes

+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {

+			return undefined;

+		}

+

+		if ( pass && name in jQuery.attrFn ) {

+			return jQuery(elem)[name](value);

+		}

+

+		var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),

+			// Whether we are setting (or getting)

+			set = value !== undefined;

+

+		// Try to normalize/fix the name

+		name = notxml && jQuery.props[ name ] || name;

+

+		// Only do all the following if this is a node (faster for style)

+		if ( elem.nodeType === 1 ) {

+			// These attributes require special treatment

+			var special = rspecialurl.test( name );

+

+			// Safari mis-reports the default selected property of an option

+			// Accessing the parent's selectedIndex property fixes it

+			if ( name === "selected" && !jQuery.support.optSelected ) {

+				var parent = elem.parentNode;

+				if ( parent ) {

+					parent.selectedIndex;

+	

+					// Make sure that it also works with optgroups, see #5701

+					if ( parent.parentNode ) {

+						parent.parentNode.selectedIndex;

+					}

+				}

+			}

+

+			// If applicable, access the attribute via the DOM 0 way

+			if ( name in elem && notxml && !special ) {

+				if ( set ) {

+					// We can't allow the type property to be changed (since it causes problems in IE)

+					if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {

+						jQuery.error( "type property can't be changed" );

+					}

+

+					elem[ name ] = value;

+				}

+

+				// browsers index elements by id/name on forms, give priority to attributes.

+				if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {

+					return elem.getAttributeNode( name ).nodeValue;

+				}

+

+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set

+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/

+				if ( name === "tabIndex" ) {

+					var attributeNode = elem.getAttributeNode( "tabIndex" );

+

+					return attributeNode && attributeNode.specified ?

+						attributeNode.value :

+						rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?

+							0 :

+							undefined;

+				}

+

+				return elem[ name ];

+			}

+

+			if ( !jQuery.support.style && notxml && name === "style" ) {

+				if ( set ) {

+					elem.style.cssText = "" + value;

+				}

+

+				return elem.style.cssText;

+			}

+

+			if ( set ) {

+				// convert the value to a string (all browsers do this but IE) see #1070

+				elem.setAttribute( name, "" + value );

+			}

+

+			var attr = !jQuery.support.hrefNormalized && notxml && special ?

+					// Some attributes require a special call on IE

+					elem.getAttribute( name, 2 ) :

+					elem.getAttribute( name );

+

+			// Non-existent attributes return null, we normalize to undefined

+			return attr === null ? undefined : attr;

+		}

+

+		// elem is actually elem.style ... set the style

+		// Using attr for specific style information is now deprecated. Use style insead.

+		return jQuery.style( elem, name, value );

+	}

+});

+var fcleanup = function( nm ) {

+	return nm.replace(/[^\w\s\.\|`]/g, function( ch ) {

+		return "\\" + ch;

+	});

+};

+

+/*

+ * A number of helper functions used for managing events.

+ * Many of the ideas behind this code originated from

+ * Dean Edwards' addEvent library.

+ */

+jQuery.event = {

+

+	// Bind an event to an element

+	// Original by Dean Edwards

+	add: function( elem, types, handler, data ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {

+			return;

+		}

+

+		// For whatever reason, IE has trouble passing the window object

+		// around, causing it to be cloned in the process

+		if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) {

+			elem = window;

+		}

+

+		// Make sure that the function being executed has a unique ID

+		if ( !handler.guid ) {

+			handler.guid = jQuery.guid++;

+		}

+

+		// if data is passed, bind to handler

+		if ( data !== undefined ) {

+			// Create temporary function pointer to original handler

+			var fn = handler;

+

+			// Create unique handler function, wrapped around original handler

+			handler = jQuery.proxy( fn );

+

+			// Store data in unique handler

+			handler.data = data;

+		}

+

+		// Init the element's event structure

+		var events = jQuery.data( elem, "events" ) || jQuery.data( elem, "events", {} ),

+			handle = jQuery.data( elem, "handle" ), eventHandle;

+

+		if ( !handle ) {

+			eventHandle = function() {

+				// Handle the second event of a trigger and when

+				// an event is called after a page has unloaded

+				return typeof jQuery !== "undefined" && !jQuery.event.triggered ?

+					jQuery.event.handle.apply( eventHandle.elem, arguments ) :

+					undefined;

+			};

+

+			handle = jQuery.data( elem, "handle", eventHandle );

+		}

+

+		// If no handle is found then we must be trying to bind to one of the

+		// banned noData elements

+		if ( !handle ) {

+			return;

+		}

+

+		// Add elem as a property of the handle function

+		// This is to prevent a memory leak with non-native

+		// event in IE.

+		handle.elem = elem;

+

+		// Handle multiple events separated by a space

+		// jQuery(...).bind("mouseover mouseout", fn);

+		types = types.split( /\s+/ );

+

+		var type, i = 0;

+

+		while ( (type = types[ i++ ]) ) {

+			// Namespaced event handlers

+			var namespaces = type.split(".");

+			type = namespaces.shift();

+

+			if ( i > 1 ) {

+				handler = jQuery.proxy( handler );

+

+				if ( data !== undefined ) {

+					handler.data = data;

+				}

+			}

+

+			handler.type = namespaces.slice(0).sort().join(".");

+

+			// Get the current list of functions bound to this event

+			var handlers = events[ type ],

+				special = this.special[ type ] || {};

+

+			// Init the event handler queue

+			if ( !handlers ) {

+				handlers = events[ type ] = {};

+

+				// Check for a special event handler

+				// Only use addEventListener/attachEvent if the special

+				// events handler returns false

+				if ( !special.setup || special.setup.call( elem, data, namespaces, handler) === false ) {

+					// Bind the global event handler to the element

+					if ( elem.addEventListener ) {

+						elem.addEventListener( type, handle, false );

+					} else if ( elem.attachEvent ) {

+						elem.attachEvent( "on" + type, handle );

+					}

+				}

+			}

+			

+			if ( special.add ) { 

+				var modifiedHandler = special.add.call( elem, handler, data, namespaces, handlers ); 

+				if ( modifiedHandler && jQuery.isFunction( modifiedHandler ) ) { 

+					modifiedHandler.guid = modifiedHandler.guid || handler.guid; 

+					modifiedHandler.data = modifiedHandler.data || handler.data; 

+					modifiedHandler.type = modifiedHandler.type || handler.type; 

+					handler = modifiedHandler; 

+				} 

+			} 

+			

+			// Add the function to the element's handler list

+			handlers[ handler.guid ] = handler;

+

+			// Keep track of which events have been used, for global triggering

+			this.global[ type ] = true;

+		}

+

+		// Nullify elem to prevent memory leaks in IE

+		elem = null;

+	},

+

+	global: {},

+

+	// Detach an event or set of events from an element

+	remove: function( elem, types, handler ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		// don't do events on text and comment nodes

+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {

+			return;

+		}

+

+		var events = jQuery.data( elem, "events" ), ret, type, fn;

+

+		if ( events ) {

+			// Unbind all events for the element

+			if ( types === undefined || (typeof types === "string" && types.charAt(0) === ".") ) {

+				for ( type in events ) {

+					this.remove( elem, type + (types || "") );

+				}

+			} else {

+				// types is actually an event object here

+				if ( types.type ) {

+					handler = types.handler;

+					types = types.type;

+				}

+

+				// Handle multiple events separated by a space

+				// jQuery(...).unbind("mouseover mouseout", fn);

+				types = types.split(/\s+/);

+				var i = 0;

+				while ( (type = types[ i++ ]) ) {

+					// Namespaced event handlers

+					var namespaces = type.split(".");

+					type = namespaces.shift();

+					var all = !namespaces.length,

+						cleaned = jQuery.map( namespaces.slice(0).sort(), fcleanup ),

+						namespace = new RegExp("(^|\\.)" + cleaned.join("\\.(?:.*\\.)?") + "(\\.|$)"),

+						special = this.special[ type ] || {};

+

+					if ( events[ type ] ) {

+						// remove the given handler for the given type

+						if ( handler ) {

+							fn = events[ type ][ handler.guid ];

+							delete events[ type ][ handler.guid ];

+

+						// remove all handlers for the given type

+						} else {

+							for ( var handle in events[ type ] ) {

+								// Handle the removal of namespaced events

+								if ( all || namespace.test( events[ type ][ handle ].type ) ) {

+									delete events[ type ][ handle ];

+								}

+							}

+						}

+

+						if ( special.remove ) {

+							special.remove.call( elem, namespaces, fn);

+						}

+

+						// remove generic event handler if no more handlers exist

+						for ( ret in events[ type ] ) {

+							break;

+						}

+						if ( !ret ) {

+							if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {

+								if ( elem.removeEventListener ) {

+									elem.removeEventListener( type, jQuery.data( elem, "handle" ), false );

+								} else if ( elem.detachEvent ) {

+									elem.detachEvent( "on" + type, jQuery.data( elem, "handle" ) );

+								}

+							}

+							ret = null;

+							delete events[ type ];

+						}

+					}

+				}

+			}

+

+			// Remove the expando if it's no longer used

+			for ( ret in events ) {

+				break;

+			}

+			if ( !ret ) {

+				var handle = jQuery.data( elem, "handle" );

+				if ( handle ) {

+					handle.elem = null;

+				}

+				jQuery.removeData( elem, "events" );

+				jQuery.removeData( elem, "handle" );

+			}

+		}

+	},

+

+	// bubbling is internal

+	trigger: function( event, data, elem /*, bubbling */ ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		// Event object or event type

+		var type = event.type || event,

+			bubbling = arguments[3];

+

+		if ( !bubbling ) {

+			event = typeof event === "object" ?

+				// jQuery.Event object

+				event[expando] ? event :

+				// Object literal

+				jQuery.extend( jQuery.Event(type), event ) :

+				// Just the event type (string)

+				jQuery.Event(type);

+

+			if ( type.indexOf("!") >= 0 ) {

+				event.type = type = type.slice(0, -1);

+				event.exclusive = true;

+			}

+

+			// Handle a global trigger

+			if ( !elem ) {

+				// Don't bubble custom events when global (to avoid too much overhead)

+				event.stopPropagation();

+

+				// Only trigger if we've ever bound an event for it

+				if ( this.global[ type ] ) {

+					jQuery.each( jQuery.cache, function() {

+						if ( this.events && this.events[type] ) {

+							jQuery.event.trigger( event, data, this.handle.elem );

+						}

+					});

+				}

+			}

+

+			// Handle triggering a single element

+

+			// don't do events on text and comment nodes

+			if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {

+				return undefined;

+			}

+

+			// Clean up in case it is reused

+			event.result = undefined;

+			event.target = elem;

+

+			// Clone the incoming data, if any

+			data = jQuery.makeArray( data );

+			data.unshift( event );

+		}

+

+		event.currentTarget = elem;

+

+		// Trigger the event, it is assumed that "handle" is a function

+		var handle = jQuery.data( elem, "handle" );

+		if ( handle ) {

+			handle.apply( elem, data );

+		}

+

+		var parent = elem.parentNode || elem.ownerDocument;

+

+		// Trigger an inline bound script

+		try {

+			if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {

+				if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {

+					event.result = false;

+				}

+			}

+

+		// prevent IE from throwing an error for some elements with some event types, see #3533

+		} catch (e) {}

+

+		if ( !event.isPropagationStopped() && parent ) {

+			jQuery.event.trigger( event, data, parent, true );

+

+		} else if ( !event.isDefaultPrevented() ) {

+			var target = event.target, old,

+				isClick = jQuery.nodeName(target, "a") && type === "click";

+

+			if ( !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {

+				try {

+					if ( target[ type ] ) {

+						// Make sure that we don't accidentally re-trigger the onFOO events

+						old = target[ "on" + type ];

+

+						if ( old ) {

+							target[ "on" + type ] = null;

+						}

+

+						this.triggered = true;

+						target[ type ]();

+					}

+

+				// prevent IE from throwing an error for some elements with some event types, see #3533

+				} catch (e) {}

+

+				if ( old ) {

+					target[ "on" + type ] = old;

+				}

+

+				this.triggered = false;

+			}

+		}

+	},

+

+	handle: function( event ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		// returned undefined or false

+		var all, handlers;

+

+		event = arguments[0] = jQuery.event.fix( event || window.event );

+		event.currentTarget = this;

+

+		// Namespaced event handlers

+		var namespaces = event.type.split(".");

+		event.type = namespaces.shift();

+

+		// Cache this now, all = true means, any handler

+		all = !namespaces.length && !event.exclusive;

+

+		var namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");

+

+		handlers = ( jQuery.data(this, "events") || {} )[ event.type ];

+

+		for ( var j in handlers ) {

+			var handler = handlers[ j ];

+

+			// Filter the functions by class

+			if ( all || namespace.test(handler.type) ) {

+				// Pass in a reference to the handler function itself

+				// So that we can later remove it

+				event.handler = handler;

+				event.data = handler.data;

+

+				var ret = handler.apply( this, arguments );

+

+				if ( ret !== undefined ) {

+					event.result = ret;

+					if ( ret === false ) {

+						event.preventDefault();

+						event.stopPropagation();

+					}

+				}

+

+				if ( event.isImmediatePropagationStopped() ) {

+					break;

+				}

+

+			}

+		}

+

+		return event.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( event ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		if ( event[ expando ] ) {

+			return event;

+		}

+

+		// store a copy of the original event object

+		// and "clone" to set read-only properties

+		var originalEvent = event;

+		event = jQuery.Event( originalEvent );

+

+		for ( var i = this.props.length, prop; i; ) {

+			prop = this.props[ --i ];

+			event[ prop ] = originalEvent[ prop ];

+		}

+

+		// Fix target property, if necessary

+		if ( !event.target ) {

+			event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either

+		}

+

+		// check if target is a textnode (safari)

+		if ( event.target.nodeType === 3 ) {

+			event.target = event.target.parentNode;

+		}

+

+		// Add relatedTarget, if necessary

+		if ( !event.relatedTarget && event.fromElement ) {

+			event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;

+		}

+

+		// Calculate pageX/Y if missing and clientX/Y available

+		if ( event.pageX == null && event.clientX != null ) {

+			var doc = document.documentElement, body = document.body;

+			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);

+			event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);

+		}

+

+		// Add which for key events

+		if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {

+			event.which = event.charCode || event.keyCode;

+		}

+

+		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)

+		if ( !event.metaKey && event.ctrlKey ) {

+			event.metaKey = event.ctrlKey;

+		}

+

+		// Add which for click: 1 === left; 2 === middle; 3 === right

+		// Note: button is not normalized, so don't use it

+		if ( !event.which && event.button !== undefined ) {

+			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));

+		}

+

+		return event;

+	},

+

+	// Deprecated, use jQuery.guid instead

+	guid: 1E8,

+

+	// Deprecated, use jQuery.proxy instead

+	proxy: jQuery.proxy,

+

+	special: {

+		ready: {

+			// Make sure the ready event is setup

+			setup: jQuery.bindReady,

+			teardown: jQuery.noop

+		},

+

+		live: {

+			add: function( proxy, data, namespaces, live ) {

+				jQuery.extend( proxy, data || {} );

+

+				proxy.guid += data.selector + data.live; 

+				data.liveProxy = proxy;

+

+				jQuery.event.add( this, data.live, liveHandler, data ); 

+				

+			},

+

+			remove: function( namespaces ) {

+				if ( namespaces.length ) {

+					var remove = 0, name = new RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)");

+

+					jQuery.each( (jQuery.data(this, "events").live || {}), function() {

+						if ( name.test(this.type) ) {

+							remove++;

+						}

+					});

+

+					if ( remove < 1 ) {

+						jQuery.event.remove( this, namespaces[0], liveHandler );

+					}

+				}

+			},

+			special: {}

+		},

+		beforeunload: {

+			setup: function( data, namespaces, fn ) {

+				// We only want to do this special case on windows

+				if ( this.setInterval ) {

+					this.onbeforeunload = fn;

+				}

+

+				return false;

+			},

+			teardown: function( namespaces, fn ) {

+				if ( this.onbeforeunload === fn ) {

+					this.onbeforeunload = null;

+				}

+			}

+		}

+	}

+};

+

+jQuery.Event = function( src ) {

+	// Allow instantiation without the 'new' keyword

+	if ( !this.preventDefault ) {

+		return new jQuery.Event( src );

+	}

+

+	// Event object

+	if ( src && src.type ) {

+		this.originalEvent = src;

+		this.type = src.type;

+	// Event type

+	} else {

+		this.type = src;

+	}

+

+	// timeStamp is buggy for some events on Firefox(#3843)

+	// So we won't rely on the native value

+	this.timeStamp = now();

+

+	// Mark it as fixed

+	this[ expando ] = true;

+};

+

+function returnFalse() {

+	return false;

+}

+function returnTrue() {

+	return true;

+}

+

+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding

+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html

+jQuery.Event.prototype = {

+	preventDefault: function() {

+		this.isDefaultPrevented = returnTrue;

+

+		var e = this.originalEvent;

+		if ( !e ) {

+			return;

+		}

+		

+		// if preventDefault exists run it on the original event

+		if ( e.preventDefault ) {

+			e.preventDefault();

+		}

+		// otherwise set the returnValue property of the original event to false (IE)

+		e.returnValue = false;

+	},

+	stopPropagation: function() {

+		this.isPropagationStopped = returnTrue;

+

+		var e = this.originalEvent;

+		if ( !e ) {

+			return;

+		}

+		// if stopPropagation exists run it on the original event

+		if ( e.stopPropagation ) {

+			e.stopPropagation();

+		}

+		// otherwise set the cancelBubble property of the original event to true (IE)

+		e.cancelBubble = true;

+	},

+	stopImmediatePropagation: function() {

+		this.isImmediatePropagationStopped = returnTrue;

+		this.stopPropagation();

+	},

+	isDefaultPrevented: returnFalse,

+	isPropagationStopped: returnFalse,

+	isImmediatePropagationStopped: returnFalse

+};

+

+// Checks if an event happened on an element within another element

+// Used in jQuery.event.special.mouseenter and mouseleave handlers

+var withinElement = function( event ) {

+	// Check if mouse(over|out) are still within the same parent element

+	var parent = event.relatedTarget;

+

+	// Traverse up the tree

+	while ( parent && parent !== this ) {

+		// Firefox sometimes assigns relatedTarget a XUL element

+		// which we cannot access the parentNode property of

+		try {

+			parent = parent.parentNode;

+

+		// assuming we've left the element since we most likely mousedover a xul element

+		} catch(e) {

+			break;

+		}

+	}

+

+	if ( parent !== this ) {

+		// set the correct event type

+		event.type = event.data;

+

+		// handle event if we actually just moused on to a non sub-element

+		jQuery.event.handle.apply( this, arguments );

+	}

+

+},

+

+// In case of event delegation, we only need to rename the event.type,

+// liveHandler will take care of the rest.

+delegate = function( event ) {

+	event.type = event.data;

+	jQuery.event.handle.apply( this, arguments );

+};

+

+// Create mouseenter and mouseleave events

+jQuery.each({

+	mouseenter: "mouseover",

+	mouseleave: "mouseout"

+}, function( orig, fix ) {

+	jQuery.event.special[ orig ] = {

+		setup: function( data ) {

+			jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );

+		},

+		teardown: function( data ) {

+			jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );

+		}

+	};

+});

+

+// submit delegation

+if ( !jQuery.support.submitBubbles ) {

+

+jQuery.event.special.submit = {

+	setup: function( data, namespaces, fn ) {

+		if ( this.nodeName.toLowerCase() !== "form" ) {

+			jQuery.event.add(this, "click.specialSubmit." + fn.guid, function( e ) {

+				var elem = e.target, type = elem.type;

+

+				if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {

+					return trigger( "submit", this, arguments );

+				}

+			});

+	 

+			jQuery.event.add(this, "keypress.specialSubmit." + fn.guid, function( e ) {

+				var elem = e.target, type = elem.type;

+

+				if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {

+					return trigger( "submit", this, arguments );

+				}

+			});

+

+		} else {

+			return false;

+		}

+	},

+

+	remove: function( namespaces, fn ) {

+		jQuery.event.remove( this, "click.specialSubmit" + (fn ? "."+fn.guid : "") );

+		jQuery.event.remove( this, "keypress.specialSubmit" + (fn ? "."+fn.guid : "") );

+	}

+};

+

+}

+

+// change delegation, happens here so we have bind.

+if ( !jQuery.support.changeBubbles ) {

+

+var formElems = /textarea|input|select/i;

+

+function getVal( elem ) {

+	var type = elem.type, val = elem.value;

+

+	if ( type === "radio" || type === "checkbox" ) {

+		val = elem.checked;

+

+	} else if ( type === "select-multiple" ) {

+		val = elem.selectedIndex > -1 ?

+			jQuery.map( elem.options, function( elem ) {

+				return elem.selected;

+			}).join("-") :

+			"";

+

+	} else if ( elem.nodeName.toLowerCase() === "select" ) {

+		val = elem.selectedIndex;

+	}

+

+	return val;

+}

+

+function testChange( e ) {

+		var elem = e.target, data, val;

+

+		if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {

+			return;

+		}

+

+		data = jQuery.data( elem, "_change_data" );

+		val = getVal(elem);

+

+		// the current data will be also retrieved by beforeactivate

+		if ( e.type !== "focusout" || elem.type !== "radio" ) {

+			jQuery.data( elem, "_change_data", val );

+		}

+		

+		if ( data === undefined || val === data ) {

+			return;

+		}

+

+		if ( data != null || val ) {

+			e.type = "change";

+			return jQuery.event.trigger( e, arguments[1], elem );

+		}

+}

+

+jQuery.event.special.change = {

+	filters: {

+		focusout: testChange, 

+

+		click: function( e ) {

+			var elem = e.target, type = elem.type;

+

+			if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {

+				return testChange.call( this, e );

+			}

+		},

+

+		// Change has to be called before submit

+		// Keydown will be called before keypress, which is used in submit-event delegation

+		keydown: function( e ) {

+			var elem = e.target, type = elem.type;

+

+			if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||

+				(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||

+				type === "select-multiple" ) {

+				return testChange.call( this, e );

+			}

+		},

+

+		// Beforeactivate happens also before the previous element is blurred

+		// with this event you can't trigger a change event, but you can store

+		// information/focus[in] is not needed anymore

+		beforeactivate: function( e ) {

+			var elem = e.target;

+

+			if ( elem.nodeName.toLowerCase() === "input" && elem.type === "radio" ) {

+				jQuery.data( elem, "_change_data", getVal(elem) );

+			}

+		}

+	},

+	setup: function( data, namespaces, fn ) {

+		for ( var type in changeFilters ) {

+			jQuery.event.add( this, type + ".specialChange." + fn.guid, changeFilters[type] );

+		}

+

+		return formElems.test( this.nodeName );

+	},

+	remove: function( namespaces, fn ) {

+		for ( var type in changeFilters ) {

+			jQuery.event.remove( this, type + ".specialChange" + (fn ? "."+fn.guid : ""), changeFilters[type] );

+		}

+

+		return formElems.test( this.nodeName );

+	}

+};

+

+var changeFilters = jQuery.event.special.change.filters;

+

+}

+

+function trigger( type, elem, args ) {

+	args[0].type = type;

+	return jQuery.event.handle.apply( elem, args );

+}

+

+// Create "bubbling" focus and blur events

+if ( document.addEventListener ) {

+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {

+		jQuery.event.special[ fix ] = {

+			setup: function() {

+				///	<summary>

+				///		This method is internal.

+				///	</summary>

+				///	<private />

+

+				this.addEventListener( orig, handler, true );

+			}, 

+			teardown: function() { 

+				///	<summary>

+				///		This method is internal.

+				///	</summary>

+				///	<private />

+

+				this.removeEventListener( orig, handler, true );

+			}

+		};

+

+		function handler( e ) { 

+			e = jQuery.event.fix( e );

+			e.type = fix;

+			return jQuery.event.handle.call( this, e );

+		}

+	});

+}

+

+//	jQuery.each(["bind", "one"], function( i, name ) {

+//		jQuery.fn[ name ] = function( type, data, fn ) {

+//			// Handle object literals

+//			if ( typeof type === "object" ) {

+//				for ( var key in type ) {

+//					this[ name ](key, data, type[key], fn);

+//				}

+//				return this;

+//			}

+//			

+//			if ( jQuery.isFunction( data ) ) {

+//				fn = data;

+//				data = undefined;

+//			}

+//

+//			var handler = name === "one" ? jQuery.proxy( fn, function( event ) {

+//				jQuery( this ).unbind( event, handler );

+//				return fn.apply( this, arguments );

+//			}) : fn;

+//

+//			return type === "unload" && name !== "one" ?

+//				this.one( type, data, fn ) :

+//				this.each(function() {

+//					jQuery.event.add( this, type, handler, data );

+//				});

+//		};

+//	});

+

+jQuery.fn[ "bind" ] = function( type, data, fn ) {

+	///	<summary>

+	///		Binds a handler to one or more events for each matched element.  Can also bind custom events.

+	///	</summary>

+	///	<param name="type" type="String">One or more event types separated by a space.  Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error .</param>

+	///	<param name="data" optional="true" type="Object">Additional data passed to the event handler as event.data</param>

+	///	<param name="fn" type="Function">A function to bind to the event on each of the set of matched elements.  function callback(eventObject) such that this corresponds to the dom element.</param>

+

+	// Handle object literals

+	if ( typeof type === "object" ) {

+		for ( var key in type ) {

+			this[ "bind" ](key, data, type[key], fn);

+		}

+		return this;

+	}

+	

+	if ( jQuery.isFunction( data ) ) {

+		fn = data;

+		data = undefined;

+	}

+

+	var handler = "bind" === "one" ? jQuery.proxy( fn, function( event ) {

+		jQuery( this ).unbind( event, handler );

+		return fn.apply( this, arguments );

+	}) : fn;

+

+	return type === "unload" && "bind" !== "one" ?

+		this.one( type, data, fn ) :

+		this.each(function() {

+			jQuery.event.add( this, type, handler, data );

+		});

+};

+

+jQuery.fn[ "one" ] = function( type, data, fn ) {

+	///	<summary>

+	///		Binds a handler to one or more events to be executed exactly once for each matched element.

+	///	</summary>

+	///	<param name="type" type="String">One or more event types separated by a space.  Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error .</param>

+	///	<param name="data" optional="true" type="Object">Additional data passed to the event handler as event.data</param>

+	///	<param name="fn" type="Function">A function to bind to the event on each of the set of matched elements.  function callback(eventObject) such that this corresponds to the dom element.</param>

+

+	// Handle object literals

+	if ( typeof type === "object" ) {

+		for ( var key in type ) {

+			this[ "one" ](key, data, type[key], fn);

+		}

+		return this;

+	}

+	

+	if ( jQuery.isFunction( data ) ) {

+		fn = data;

+		data = undefined;

+	}

+

+	var handler = "one" === "one" ? jQuery.proxy( fn, function( event ) {

+		jQuery( this ).unbind( event, handler );

+		return fn.apply( this, arguments );

+	}) : fn;

+

+	return type === "unload" && "one" !== "one" ?

+		this.one( type, data, fn ) :

+		this.each(function() {

+			jQuery.event.add( this, type, handler, data );

+		});

+};

+

+jQuery.fn.extend({

+	unbind: function( type, fn ) {

+		///	<summary>

+		///		Unbinds a handler from one or more events for each matched element.

+		///	</summary>

+		///	<param name="type" type="String">One or more event types separated by a space.  Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error .</param>

+		///	<param name="fn" type="Function">A function to bind to the event on each of the set of matched elements.  function callback(eventObject) such that this corresponds to the dom element.</param>

+

+		// Handle object literals

+		if ( typeof type === "object" && !type.preventDefault ) {

+			for ( var key in type ) {

+				this.unbind(key, type[key]);

+			}

+			return this;

+		}

+

+		return this.each(function() {

+			jQuery.event.remove( this, type, fn );

+		});

+	},

+	trigger: function( type, data ) {

+		///	<summary>

+		///		Triggers a type of event on every matched element.

+		///	</summary>

+		///	<param name="type" type="String">One or more event types separated by a space.  Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error .</param>

+		///	<param name="data" optional="true" type="Array">Additional data passed to the event handler as additional arguments.</param>

+		///	<param name="fn" type="Function">This parameter is undocumented.</param>

+

+		return this.each(function() {

+			jQuery.event.trigger( type, data, this );

+		});

+	},

+

+	triggerHandler: function( type, data ) {

+		///	<summary>

+		///		Triggers all bound event handlers on an element for a specific event type without executing the browser's default actions.

+		///	</summary>

+		///	<param name="type" type="String">One or more event types separated by a space.  Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error .</param>

+		///	<param name="data" optional="true" type="Array">Additional data passed to the event handler as additional arguments.</param>

+		///	<param name="fn" type="Function">This parameter is undocumented.</param>

+

+		if ( this[0] ) {

+			var event = jQuery.Event( type );

+			event.preventDefault();

+			event.stopPropagation();

+			jQuery.event.trigger( event, data, this[0] );

+			return event.result;

+		}

+	},

+

+	toggle: function( fn ) {

+		///	<summary>

+		///		Toggles among two or more function calls every other click.

+		///	</summary>

+		///	<param name="fn" type="Function">The functions among which to toggle execution</param>

+

+		// Save reference to arguments for access in closure

+		var args = arguments, i = 1;

+

+		// link all the functions, so any of them can unbind this click handler

+		while ( i < args.length ) {

+			jQuery.proxy( fn, args[ i++ ] );

+		}

+

+		return this.click( jQuery.proxy( fn, function( event ) {

+			// Figure out which function to execute

+			var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;

+			jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );

+

+			// Make sure that clicks stop

+			event.preventDefault();

+

+			// and execute the function

+			return args[ lastToggle ].apply( this, arguments ) || false;

+		}));

+	},

+

+	hover: function( fnOver, fnOut ) {

+		///	<summary>

+		///		Simulates hovering (moving the mouse on or off of an object).

+		///	</summary>

+		///	<param name="fnOver" type="Function">The function to fire when the mouse is moved over a matched element.</param>

+		///	<param name="fnOut" type="Function">The function to fire when the mouse is moved off of a matched element.</param>

+

+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );

+	}

+});

+

+//	jQuery.each(["live", "die"], function( i, name ) {

+//		jQuery.fn[ name ] = function( types, data, fn ) {

+//			var type, i = 0;

+//

+//			if ( jQuery.isFunction( data ) ) {

+//				fn = data;

+//				data = undefined;

+//			}

+//

+//			types = (types || "").split( /\s+/ );

+//

+//			while ( (type = types[ i++ ]) != null ) {

+//				type = type === "focus" ? "focusin" : // focus --> focusin

+//						type === "blur" ? "focusout" : // blur --> focusout

+//						type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support

+//						type;

+//				

+//				if ( name === "live" ) {

+//					// bind live handler

+//					jQuery( this.context ).bind( liveConvert( type, this.selector ), {

+//						data: data, selector: this.selector, live: type

+//					}, fn );

+//

+//				} else {

+//					// unbind live handler

+//					jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null );

+//				}

+//			}

+//			

+//			return this;

+//		}

+//	});

+

+jQuery.fn[ "live" ] = function( types, data, fn ) {

+	///	<summary>

+	///		Attach a handler to the event for all elements which match the current selector, now or

+	///		in the future.

+	///	</summary>

+	///	<param name="types" type="String">

+	///		A string containing a JavaScript event type, such as "click" or "keydown".

+	///	</param>

+	///	<param name="data" type="Object">

+	///		A map of data that will be passed to the event handler.

+	///	</param>

+	///	<param name="fn" type="Function">

+	///		A function to execute at the time the event is triggered.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var type, i = 0;

+

+	if ( jQuery.isFunction( data ) ) {

+		fn = data;

+		data = undefined;

+	}

+

+	types = (types || "").split( /\s+/ );

+

+	while ( (type = types[ i++ ]) != null ) {

+		type = type === "focus" ? "focusin" : // focus --> focusin

+				type === "blur" ? "focusout" : // blur --> focusout

+				type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support

+				type;

+		

+		if ( "live" === "live" ) {

+			// bind live handler

+			jQuery( this.context ).bind( liveConvert( type, this.selector ), {

+				data: data, selector: this.selector, live: type

+			}, fn );

+

+		} else {

+			// unbind live handler

+			jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null );

+		}

+	}

+	

+	return this;

+}

+

+jQuery.fn[ "die" ] = function( types, data, fn ) {

+	///	<summary>

+	///		Remove all event handlers previously attached using .live() from the elements.

+	///	</summary>

+	///	<param name="types" type="String">

+	///		A string containing a JavaScript event type, such as click or keydown.

+	///	</param>

+	///	<param name="data" type="Object">

+	///		The function that is to be no longer executed.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var type, i = 0;

+

+	if ( jQuery.isFunction( data ) ) {

+		fn = data;

+		data = undefined;

+	}

+

+	types = (types || "").split( /\s+/ );

+

+	while ( (type = types[ i++ ]) != null ) {

+		type = type === "focus" ? "focusin" : // focus --> focusin

+				type === "blur" ? "focusout" : // blur --> focusout

+				type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support

+				type;

+		

+		if ( "die" === "live" ) {

+			// bind live handler

+			jQuery( this.context ).bind( liveConvert( type, this.selector ), {

+				data: data, selector: this.selector, live: type

+			}, fn );

+

+		} else {

+			// unbind live handler

+			jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null );

+		}

+	}

+	

+	return this;

+}

+

+function liveHandler( event ) {

+	var stop, elems = [], selectors = [], args = arguments,

+		related, match, fn, elem, j, i, l, data,

+		live = jQuery.extend({}, jQuery.data( this, "events" ).live);

+

+	// Make sure we avoid non-left-click bubbling in Firefox (#3861)

+	if ( event.button && event.type === "click" ) {

+		return;

+	}

+

+	for ( j in live ) {

+		fn = live[j];

+		if ( fn.live === event.type ||

+				fn.altLive && jQuery.inArray(event.type, fn.altLive) > -1 ) {

+

+			data = fn.data;

+			if ( !(data.beforeFilter && data.beforeFilter[event.type] && 

+					!data.beforeFilter[event.type](event)) ) {

+				selectors.push( fn.selector );

+			}

+		} else {

+			delete live[j];

+		}

+	}

+

+	match = jQuery( event.target ).closest( selectors, event.currentTarget );

+

+	for ( i = 0, l = match.length; i < l; i++ ) {

+		for ( j in live ) {

+			fn = live[j];

+			elem = match[i].elem;

+			related = null;

+

+			if ( match[i].selector === fn.selector ) {

+				// Those two events require additional checking

+				if ( fn.live === "mouseenter" || fn.live === "mouseleave" ) {

+					related = jQuery( event.relatedTarget ).closest( fn.selector )[0];

+				}

+

+				if ( !related || related !== elem ) {

+					elems.push({ elem: elem, fn: fn });

+				}

+			}

+		}

+	}

+

+	for ( i = 0, l = elems.length; i < l; i++ ) {

+		match = elems[i];

+		event.currentTarget = match.elem;

+		event.data = match.fn.data;

+		if ( match.fn.apply( match.elem, args ) === false ) {

+			stop = false;

+			break;

+		}

+	}

+

+	return stop;

+}

+

+function liveConvert( type, selector ) {

+	return "live." + (type ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");

+}

+

+//	jQuery.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( i, name ) {

+//

+//		// Handle event binding

+//		jQuery.fn[ name ] = function( fn ) {

+//			return fn ? this.bind( name, fn ) : this.trigger( name );

+//		};

+//

+//		if ( jQuery.attrFn ) {

+//			jQuery.attrFn[ name ] = true;

+//		}

+//	});

+

+jQuery.fn[ "blur" ] = function( fn ) {

+	///	<summary>

+	///		1: blur() - Triggers the blur event of each matched element.

+	///		2: blur(fn) - Binds a function to the blur event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "blur", fn ) : this.trigger( "blur" );

+};

+

+jQuery.fn[ "focus" ] = function( fn ) {

+	///	<summary>

+	///		1: focus() - Triggers the focus event of each matched element.

+	///		2: focus(fn) - Binds a function to the focus event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "focus", fn ) : this.trigger( "focus" );

+};

+

+jQuery.fn[ "focusin" ] = function( fn ) {

+		///	<summary>

+		///		Bind an event handler to the "focusin" JavaScript event.

+		///	</summary>

+		///	<param name="fn" type="Function">

+		///		A function to execute each time the event is triggered.

+		///	</param>

+		///	<returns type="jQuery" />

+

+	return fn ? this.bind( "focusin", fn ) : this.trigger( "focusin" );

+};

+

+jQuery.fn[ "focusout" ] = function( fn ) {

+		///	<summary>

+		///		Bind an event handler to the "focusout" JavaScript event.

+		///	</summary>

+		///	<param name="fn" type="Function">

+		///		A function to execute each time the event is triggered.

+		///	</param>

+		///	<returns type="jQuery" />

+

+	return fn ? this.bind( "focusout", fn ) : this.trigger( "focusout" );

+};

+

+jQuery.fn[ "load" ] = function( fn ) {

+	///	<summary>

+	///		1: load() - Triggers the load event of each matched element.

+	///		2: load(fn) - Binds a function to the load event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "load", fn ) : this.trigger( "load" );

+};

+

+jQuery.fn[ "resize" ] = function( fn ) {

+	///	<summary>

+	///		1: resize() - Triggers the resize event of each matched element.

+	///		2: resize(fn) - Binds a function to the resize event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "resize", fn ) : this.trigger( "resize" );

+};

+

+jQuery.fn[ "scroll" ] = function( fn ) {

+	///	<summary>

+	///		1: scroll() - Triggers the scroll event of each matched element.

+	///		2: scroll(fn) - Binds a function to the scroll event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "scroll", fn ) : this.trigger( "scroll" );

+};

+

+jQuery.fn[ "unload" ] = function( fn ) {

+	///	<summary>

+	///		1: unload() - Triggers the unload event of each matched element.

+	///		2: unload(fn) - Binds a function to the unload event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "unload", fn ) : this.trigger( "unload" );

+};

+

+jQuery.fn[ "click" ] = function( fn ) {

+	///	<summary>

+	///		1: click() - Triggers the click event of each matched element.

+	///		2: click(fn) - Binds a function to the click event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "click", fn ) : this.trigger( "click" );

+};

+

+jQuery.fn[ "dblclick" ] = function( fn ) {

+	///	<summary>

+	///		1: dblclick() - Triggers the dblclick event of each matched element.

+	///		2: dblclick(fn) - Binds a function to the dblclick event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "dblclick", fn ) : this.trigger( "dblclick" );

+};

+

+jQuery.fn[ "mousedown" ] = function( fn ) {

+	///	<summary>

+	///		Binds a function to the mousedown event of each matched element. 

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "mousedown", fn ) : this.trigger( "mousedown" );

+};

+

+jQuery.fn[ "mouseup" ] = function( fn ) {

+	///	<summary>

+	///		Bind a function to the mouseup event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "mouseup", fn ) : this.trigger( "mouseup" );

+};

+

+jQuery.fn[ "mousemove" ] = function( fn ) {

+	///	<summary>

+	///		Bind a function to the mousemove event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "mousemove", fn ) : this.trigger( "mousemove" );

+};

+

+jQuery.fn[ "mouseover" ] = function( fn ) {

+	///	<summary>

+	///		Bind a function to the mouseover event of each matched element. 

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "mouseover", fn ) : this.trigger( "mouseover" );

+};

+

+jQuery.fn[ "mouseout" ] = function( fn ) {

+	///	<summary>

+	///		Bind a function to the mouseout event of each matched element. 

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "mouseout", fn ) : this.trigger( "mouseout" );

+};

+

+jQuery.fn[ "mouseenter" ] = function( fn ) {

+	///	<summary>

+	///		Bind a function to the mouseenter event of each matched element. 

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "mouseenter", fn ) : this.trigger( "mouseenter" );

+};

+

+jQuery.fn[ "mouseleave" ] = function( fn ) {

+	///	<summary>

+	///		Bind a function to the mouseleave event of each matched element. 

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "mouseleave", fn ) : this.trigger( "mouseleave" );

+};

+

+jQuery.fn[ "change" ] = function( fn ) {

+	///	<summary>

+	///		1: change() - Triggers the change event of each matched element.

+	///		2: change(fn) - Binds a function to the change event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "change", fn ) : this.trigger( "change" );

+};

+

+jQuery.fn[ "select" ] = function( fn ) {

+	///	<summary>

+	///		1: select() - Triggers the select event of each matched element.

+	///		2: select(fn) - Binds a function to the select event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "select", fn ) : this.trigger( "select" );

+};

+

+jQuery.fn[ "submit" ] = function( fn ) {

+	///	<summary>

+	///		1: submit() - Triggers the submit event of each matched element.

+	///		2: submit(fn) - Binds a function to the submit event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "submit", fn ) : this.trigger( "submit" );

+};

+

+jQuery.fn[ "keydown" ] = function( fn ) {

+	///	<summary>

+	///		1: keydown() - Triggers the keydown event of each matched element.

+	///		2: keydown(fn) - Binds a function to the keydown event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "keydown", fn ) : this.trigger( "keydown" );

+};

+

+jQuery.fn[ "keypress" ] = function( fn ) {

+	///	<summary>

+	///		1: keypress() - Triggers the keypress event of each matched element.

+	///		2: keypress(fn) - Binds a function to the keypress event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "keypress", fn ) : this.trigger( "keypress" );

+};

+

+jQuery.fn[ "keyup" ] = function( fn ) {

+	///	<summary>

+	///		1: keyup() - Triggers the keyup event of each matched element.

+	///		2: keyup(fn) - Binds a function to the keyup event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "keyup", fn ) : this.trigger( "keyup" );

+};

+

+jQuery.fn[ "error" ] = function( fn ) {

+	///	<summary>

+	///		1: error() - Triggers the error event of each matched element.

+	///		2: error(fn) - Binds a function to the error event of each matched element.

+	///	</summary>

+	///	<param name="fn" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return fn ? this.bind( "error", fn ) : this.trigger( "error" );

+};

+

+// Prevent memory leaks in IE

+// Window isn't included so as not to unbind existing unload events

+// More info:

+//  - http://isaacschlueter.com/2006/10/msie-memory-leaks/

+if ( window.attachEvent && !window.addEventListener ) {

+	window.attachEvent("onunload", function() {

+		for ( var id in jQuery.cache ) {

+			if ( jQuery.cache[ id ].handle ) {

+				// Try/Catch is to handle iframes being unloaded, see #4280

+				try {

+					jQuery.event.remove( jQuery.cache[ id ].handle.elem );

+				} catch(e) {}

+			}

+		}

+	});

+}

+/*!

+ * Sizzle CSS Selector Engine - v1.0

+ *  Copyright 2009, The Dojo Foundation

+ *  Released under the MIT, BSD, and GPL Licenses.

+ *  More information: http://sizzlejs.com/

+ */

+(function(){

+

+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,

+	done = 0,

+	toString = Object.prototype.toString,

+	hasDuplicate = false,

+	baseHasDuplicate = true;

+

+// Here we check if the JavaScript engine is using some sort of

+// optimization where it does not always call our comparision

+// function. If that is the case, discard the hasDuplicate value.

+//   Thus far that includes Google Chrome.

+[0, 0].sort(function(){

+	baseHasDuplicate = false;

+	return 0;

+});

+

+var Sizzle = function(selector, context, results, seed) {

+	results = results || [];

+	var origContext = context = context || document;

+

+	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {

+		return [];

+	}

+	

+	if ( !selector || typeof selector !== "string" ) {

+		return results;

+	}

+

+	var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context),

+		soFar = selector;

+	

+	// Reset the position of the chunker regexp (start from head)

+	while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {

+		soFar = m[3];

+		

+		parts.push( m[1] );

+		

+		if ( m[2] ) {

+			extra = m[3];

+			break;

+		}

+	}

+

+	if ( parts.length > 1 && origPOS.exec( selector ) ) {

+		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {

+			set = posProcess( parts[0] + parts[1], context );

+		} else {

+			set = Expr.relative[ parts[0] ] ?

+				[ context ] :

+				Sizzle( parts.shift(), context );

+

+			while ( parts.length ) {

+				selector = parts.shift();

+

+				if ( Expr.relative[ selector ] ) {

+					selector += parts.shift();

+				}

+				

+				set = posProcess( selector, set );

+			}

+		}

+	} else {

+		// Take a shortcut and set the context if the root selector is an ID

+		// (but not if it'll be faster if the inner selector is an ID)

+		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&

+				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {

+			var ret = Sizzle.find( parts.shift(), context, contextXML );

+			context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];

+		}

+

+		if ( context ) {

+			var ret = seed ?

+				{ expr: parts.pop(), set: makeArray(seed) } :

+				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );

+			set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;

+

+			if ( parts.length > 0 ) {

+				checkSet = makeArray(set);

+			} else {

+				prune = false;

+			}

+

+			while ( parts.length ) {

+				var cur = parts.pop(), pop = cur;

+

+				if ( !Expr.relative[ cur ] ) {

+					cur = "";

+				} else {

+					pop = parts.pop();

+				}

+

+				if ( pop == null ) {

+					pop = context;

+				}

+

+				Expr.relative[ cur ]( checkSet, pop, contextXML );

+			}

+		} else {

+			checkSet = parts = [];

+		}

+	}

+

+	if ( !checkSet ) {

+		checkSet = set;

+	}

+

+	if ( !checkSet ) {

+		Sizzle.error( cur || selector );

+	}

+

+	if ( toString.call(checkSet) === "[object Array]" ) {

+		if ( !prune ) {

+			results.push.apply( results, checkSet );

+		} else if ( context && context.nodeType === 1 ) {

+			for ( var i = 0; checkSet[i] != null; i++ ) {

+				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {

+					results.push( set[i] );

+				}

+			}

+		} else {

+			for ( var i = 0; checkSet[i] != null; i++ ) {

+				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {

+					results.push( set[i] );

+				}

+			}

+		}

+	} else {

+		makeArray( checkSet, results );

+	}

+

+	if ( extra ) {

+		Sizzle( extra, origContext, results, seed );

+		Sizzle.uniqueSort( results );

+	}

+

+	return results;

+};

+

+Sizzle.uniqueSort = function(results){

+	///	<summary>

+	///		Removes all duplicate elements from an array of elements.

+	///	</summary>

+	///	<param name="array" type="Array&lt;Element&gt;">The array to translate</param>

+	///	<returns type="Array&lt;Element&gt;">The array after translation.</returns>

+

+	if ( sortOrder ) {

+		hasDuplicate = baseHasDuplicate;

+		results.sort(sortOrder);

+

+		if ( hasDuplicate ) {

+			for ( var i = 1; i < results.length; i++ ) {

+				if ( results[i] === results[i-1] ) {

+					results.splice(i--, 1);

+				}

+			}

+		}

+	}

+

+	return results;

+};

+

+Sizzle.matches = function(expr, set){

+	return Sizzle(expr, null, null, set);

+};

+

+Sizzle.find = function(expr, context, isXML){

+	var set, match;

+

+	if ( !expr ) {

+		return [];

+	}

+

+	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {

+		var type = Expr.order[i], match;

+		

+		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {

+			var left = match[1];

+			match.splice(1,1);

+

+			if ( left.substr( left.length - 1 ) !== "\\" ) {

+				match[1] = (match[1] || "").replace(/\\/g, "");

+				set = Expr.find[ type ]( match, context, isXML );

+				if ( set != null ) {

+					expr = expr.replace( Expr.match[ type ], "" );

+					break;

+				}

+			}

+		}

+	}

+

+	if ( !set ) {

+		set = context.getElementsByTagName("*");

+	}

+

+	return {set: set, expr: expr};

+};

+

+Sizzle.filter = function(expr, set, inplace, not){

+	var old = expr, result = [], curLoop = set, match, anyFound,

+		isXMLFilter = set && set[0] && isXML(set[0]);

+

+	while ( expr && set.length ) {

+		for ( var type in Expr.filter ) {

+			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {

+				var filter = Expr.filter[ type ], found, item, left = match[1];

+				anyFound = false;

+

+				match.splice(1,1);

+

+				if ( left.substr( left.length - 1 ) === "\\" ) {

+					continue;

+				}

+

+				if ( curLoop === result ) {

+					result = [];

+				}

+

+				if ( Expr.preFilter[ type ] ) {

+					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );

+

+					if ( !match ) {

+						anyFound = found = true;

+					} else if ( match === true ) {

+						continue;

+					}

+				}

+

+				if ( match ) {

+					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {

+						if ( item ) {

+							found = filter( item, match, i, curLoop );

+							var pass = not ^ !!found;

+

+							if ( inplace && found != null ) {

+								if ( pass ) {

+									anyFound = true;

+								} else {

+									curLoop[i] = false;

+								}

+							} else if ( pass ) {

+								result.push( item );

+								anyFound = true;

+							}

+						}

+					}

+				}

+

+				if ( found !== undefined ) {

+					if ( !inplace ) {

+						curLoop = result;

+					}

+

+					expr = expr.replace( Expr.match[ type ], "" );

+

+					if ( !anyFound ) {

+						return [];

+					}

+

+					break;

+				}

+			}

+		}

+

+		// Improper expression

+		if ( expr === old ) {

+			if ( anyFound == null ) {

+				Sizzle.error( expr );

+			} else {

+				break;

+			}

+		}

+

+		old = expr;

+	}

+

+	return curLoop;

+};

+

+Sizzle.error = function( msg ) {

+	throw "Syntax error, unrecognized expression: " + msg;

+};

+

+var Expr = Sizzle.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(elem){

+			return elem.getAttribute("href");

+		}

+	},

+	relative: {

+		"+": function(checkSet, part){

+			var isPartStr = typeof part === "string",

+				isTag = isPartStr && !/\W/.test(part),

+				isPartStrNotTag = isPartStr && !isTag;

+

+			if ( isTag ) {

+				part = part.toLowerCase();

+			}

+

+			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {

+				if ( (elem = checkSet[i]) ) {

+					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}

+

+					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?

+						elem || false :

+						elem === part;

+				}

+			}

+

+			if ( isPartStrNotTag ) {

+				Sizzle.filter( part, checkSet, true );

+			}

+		},

+		">": function(checkSet, part){

+			var isPartStr = typeof part === "string";

+

+			if ( isPartStr && !/\W/.test(part) ) {

+				part = part.toLowerCase();

+

+				for ( var i = 0, l = checkSet.length; i < l; i++ ) {

+					var elem = checkSet[i];

+					if ( elem ) {

+						var parent = elem.parentNode;

+						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;

+					}

+				}

+			} else {

+				for ( var i = 0, l = checkSet.length; i < l; i++ ) {

+					var elem = checkSet[i];

+					if ( elem ) {

+						checkSet[i] = isPartStr ?

+							elem.parentNode :

+							elem.parentNode === part;

+					}

+				}

+

+				if ( isPartStr ) {

+					Sizzle.filter( part, checkSet, true );

+				}

+			}

+		},

+		"": function(checkSet, part, isXML){

+			var doneName = done++, checkFn = dirCheck;

+

+			if ( typeof part === "string" && !/\W/.test(part) ) {

+				var nodeCheck = part = part.toLowerCase();

+				checkFn = dirNodeCheck;

+			}

+

+			checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);

+		},

+		"~": function(checkSet, part, isXML){

+			var doneName = done++, checkFn = dirCheck;

+

+			if ( typeof part === "string" && !/\W/.test(part) ) {

+				var nodeCheck = part = part.toLowerCase();

+				checkFn = dirNodeCheck;

+			}

+

+			checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);

+		}

+	},

+	find: {

+		ID: function(match, context, isXML){

+			if ( typeof context.getElementById !== "undefined" && !isXML ) {

+				var m = context.getElementById(match[1]);

+				return m ? [m] : [];

+			}

+		},

+		NAME: function(match, context){

+			if ( typeof context.getElementsByName !== "undefined" ) {

+				var ret = [], results = context.getElementsByName(match[1]);

+

+				for ( var i = 0, l = results.length; i < l; i++ ) {

+					if ( results[i].getAttribute("name") === match[1] ) {

+						ret.push( results[i] );

+					}

+				}

+

+				return ret.length === 0 ? null : ret;

+			}

+		},

+		TAG: function(match, context){

+			return context.getElementsByTagName(match[1]);

+		}

+	},

+	preFilter: {

+		CLASS: function(match, curLoop, inplace, result, not, isXML){

+			match = " " + match[1].replace(/\\/g, "") + " ";

+

+			if ( isXML ) {

+				return match;

+			}

+

+			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {

+				if ( elem ) {

+					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {

+						if ( !inplace ) {

+							result.push( elem );

+						}

+					} else if ( inplace ) {

+						curLoop[i] = false;

+					}

+				}

+			}

+

+			return false;

+		},

+		ID: function(match){

+			return match[1].replace(/\\/g, "");

+		},

+		TAG: function(match, curLoop){

+			return match[1].toLowerCase();

+		},

+		CHILD: function(match){

+			if ( match[1] === "nth" ) {

+				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'

+				var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(

+					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||

+					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);

+

+				// calculate the numbers (first)n+(last) including if they are negative

+				match[2] = (test[1] + (test[2] || 1)) - 0;

+				match[3] = test[3] - 0;

+			}

+

+			// TODO: Move to normal caching system

+			match[0] = done++;

+

+			return match;

+		},

+		ATTR: function(match, curLoop, inplace, result, not, isXML){

+			var name = match[1].replace(/\\/g, "");

+			

+			if ( !isXML && Expr.attrMap[name] ) {

+				match[1] = Expr.attrMap[name];

+			}

+

+			if ( match[2] === "~=" ) {

+				match[4] = " " + match[4] + " ";

+			}

+

+			return match;

+		},

+		PSEUDO: function(match, curLoop, inplace, result, not){

+			if ( match[1] === "not" ) {

+				// If we're dealing with a complex expression, or a simple one

+				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {

+					match[3] = Sizzle(match[3], null, null, curLoop);

+				} else {

+					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);

+					if ( !inplace ) {

+						result.push.apply( result, ret );

+					}

+					return false;

+				}

+			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {

+				return true;

+			}

+			

+			return match;

+		},

+		POS: function(match){

+			match.unshift( true );

+			return match;

+		}

+	},

+	filters: {

+		enabled: function(elem){

+			return elem.disabled === false && elem.type !== "hidden";

+		},

+		disabled: function(elem){

+			return elem.disabled === true;

+		},

+		checked: function(elem){

+			return elem.checked === true;

+		},

+		selected: function(elem){

+			// Accessing this property makes selected-by-default

+			// options in Safari work properly

+			elem.parentNode.selectedIndex;

+			return elem.selected === true;

+		},

+		parent: function(elem){

+			return !!elem.firstChild;

+		},

+		empty: function(elem){

+			return !elem.firstChild;

+		},

+		has: function(elem, i, match){

+			///	<summary>

+			///		Internal use only; use hasClass('class')

+			///	</summary>

+			///	<private />

+

+			return !!Sizzle( match[3], elem ).length;

+		},

+		header: function(elem){

+			return /h\d/i.test( elem.nodeName );

+		},

+		text: function(elem){

+			return "text" === elem.type;

+		},

+		radio: function(elem){

+			return "radio" === elem.type;

+		},

+		checkbox: function(elem){

+			return "checkbox" === elem.type;

+		},

+		file: function(elem){

+			return "file" === elem.type;

+		},

+		password: function(elem){

+			return "password" === elem.type;

+		},

+		submit: function(elem){

+			return "submit" === elem.type;

+		},

+		image: function(elem){

+			return "image" === elem.type;

+		},

+		reset: function(elem){

+			return "reset" === elem.type;

+		},

+		button: function(elem){

+			return "button" === elem.type || elem.nodeName.toLowerCase() === "button";

+		},

+		input: function(elem){

+			return /input|select|textarea|button/i.test(elem.nodeName);

+		}

+	},

+	setFilters: {

+		first: function(elem, i){

+			return i === 0;

+		},

+		last: function(elem, i, match, array){

+			return i === array.length - 1;

+		},

+		even: function(elem, i){

+			return i % 2 === 0;

+		},

+		odd: function(elem, i){

+			return i % 2 === 1;

+		},

+		lt: function(elem, i, match){

+			return i < match[3] - 0;

+		},

+		gt: function(elem, i, match){

+			return i > match[3] - 0;

+		},

+		nth: function(elem, i, match){

+			return match[3] - 0 === i;

+		},

+		eq: function(elem, i, match){

+			return match[3] - 0 === i;

+		}

+	},

+	filter: {

+		PSEUDO: function(elem, match, i, array){

+			var name = match[1], filter = Expr.filters[ name ];

+

+			if ( filter ) {

+				return filter( elem, i, match, array );

+			} else if ( name === "contains" ) {

+				return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;

+			} else if ( name === "not" ) {

+				var not = match[3];

+

+				for ( var i = 0, l = not.length; i < l; i++ ) {

+					if ( not[i] === elem ) {

+						return false;

+					}

+				}

+

+				return true;

+			} else {

+				Sizzle.error( "Syntax error, unrecognized expression: " + name );

+			}

+		},

+		CHILD: function(elem, match){

+			var type = match[1], node = elem;

+			switch (type) {

+				case 'only':

+				case 'first':

+					while ( (node = node.previousSibling) )	 {

+						if ( node.nodeType === 1 ) { 

+							return false; 

+						}

+					}

+					if ( type === "first" ) { 

+						return true; 

+					}

+					node = elem;

+				case 'last':

+					while ( (node = node.nextSibling) )	 {

+						if ( node.nodeType === 1 ) { 

+							return false; 

+						}

+					}

+					return true;

+				case 'nth':

+					var first = match[2], last = match[3];

+

+					if ( first === 1 && last === 0 ) {

+						return true;

+					}

+					

+					var doneName = match[0],

+						parent = elem.parentNode;

+	

+					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {

+						var count = 0;

+						for ( node = parent.firstChild; node; node = node.nextSibling ) {

+							if ( node.nodeType === 1 ) {

+								node.nodeIndex = ++count;

+							}

+						} 

+						parent.sizcache = doneName;

+					}

+					

+					var diff = elem.nodeIndex - last;

+					if ( first === 0 ) {

+						return diff === 0;

+					} else {

+						return ( diff % first === 0 && diff / first >= 0 );

+					}

+			}

+		},

+		ID: function(elem, match){

+			return elem.nodeType === 1 && elem.getAttribute("id") === match;

+		},

+		TAG: function(elem, match){

+			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;

+		},

+		CLASS: function(elem, match){

+			return (" " + (elem.className || elem.getAttribute("class")) + " ")

+				.indexOf( match ) > -1;

+		},

+		ATTR: function(elem, match){

+			var name = match[1],

+				result = Expr.attrHandle[ name ] ?

+					Expr.attrHandle[ name ]( elem ) :

+					elem[ name ] != null ?

+						elem[ name ] :

+						elem.getAttribute( name ),

+				value = result + "",

+				type = match[2],

+				check = match[4];

+

+			return result == null ?

+				type === "!=" :

+				type === "=" ?

+				value === check :

+				type === "*=" ?

+				value.indexOf(check) >= 0 :

+				type === "~=" ?

+				(" " + value + " ").indexOf(check) >= 0 :

+				!check ?

+				value && result !== false :

+				type === "!=" ?

+				value !== check :

+				type === "^=" ?

+				value.indexOf(check) === 0 :

+				type === "$=" ?

+				value.substr(value.length - check.length) === check :

+				type === "|=" ?

+				value === check || value.substr(0, check.length + 1) === check + "-" :

+				false;

+		},

+		POS: function(elem, match, i, array){

+			var name = match[2], filter = Expr.setFilters[ name ];

+

+			if ( filter ) {

+				return filter( elem, i, match, array );

+			}

+		}

+	}

+};

+

+var origPOS = Expr.match.POS;

+

+for ( var type in Expr.match ) {

+	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );

+	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){

+		return "\\" + (num - 0 + 1);

+	}));

+}

+

+var makeArray = function(array, results) {

+	array = Array.prototype.slice.call( array, 0 );

+

+	if ( results ) {

+		results.push.apply( results, array );

+		return results;

+	}

+	

+	return array;

+};

+

+// Perform a simple check to determine if the browser is capable of

+// converting a NodeList to an array using builtin methods.

+try {

+	Array.prototype.slice.call( document.documentElement.childNodes, 0 );

+

+// Provide a fallback method if it does not work

+} catch(e){

+	makeArray = function(array, results) {

+		var ret = results || [];

+

+		if ( toString.call(array) === "[object Array]" ) {

+			Array.prototype.push.apply( ret, array );

+		} else {

+			if ( typeof array.length === "number" ) {

+				for ( var i = 0, l = array.length; i < l; i++ ) {

+					ret.push( array[i] );

+				}

+			} else {

+				for ( var i = 0; array[i]; i++ ) {

+					ret.push( array[i] );

+				}

+			}

+		}

+

+		return ret;

+	};

+}

+

+var sortOrder;

+

+if ( document.documentElement.compareDocumentPosition ) {

+	sortOrder = function( a, b ) {

+		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {

+			if ( a == b ) {

+				hasDuplicate = true;

+			}

+			return a.compareDocumentPosition ? -1 : 1;

+		}

+

+		var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;

+		if ( ret === 0 ) {

+			hasDuplicate = true;

+		}

+		return ret;

+	};

+} else if ( "sourceIndex" in document.documentElement ) {

+	sortOrder = function( a, b ) {

+		if ( !a.sourceIndex || !b.sourceIndex ) {

+			if ( a == b ) {

+				hasDuplicate = true;

+			}

+			return a.sourceIndex ? -1 : 1;

+		}

+

+		var ret = a.sourceIndex - b.sourceIndex;

+		if ( ret === 0 ) {

+			hasDuplicate = true;

+		}

+		return ret;

+	};

+} else if ( document.createRange ) {

+	sortOrder = function( a, b ) {

+		if ( !a.ownerDocument || !b.ownerDocument ) {

+			if ( a == b ) {

+				hasDuplicate = true;

+			}

+			return a.ownerDocument ? -1 : 1;

+		}

+

+		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();

+		aRange.setStart(a, 0);

+		aRange.setEnd(a, 0);

+		bRange.setStart(b, 0);

+		bRange.setEnd(b, 0);

+		var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);

+		if ( ret === 0 ) {

+			hasDuplicate = true;

+		}

+		return ret;

+	};

+}

+

+// Utility function for retreiving the text value of an array of DOM nodes

+function getText( elems ) {

+	var ret = "", elem;

+

+	for ( var i = 0; elems[i]; i++ ) {

+		elem = elems[i];

+

+		// Get the text from text nodes and CDATA nodes

+		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {

+			ret += elem.nodeValue;

+

+		// Traverse everything else, except comment nodes

+		} else if ( elem.nodeType !== 8 ) {

+			ret += getText( elem.childNodes );

+		}

+	}

+

+	return ret;

+}

+

+// [vsdoc] The following function has been modified for IntelliSense.

+// Check to see if the browser returns elements by name when

+// querying by getElementById (and provide a workaround)

+(function(){

+	// We're going to inject a fake input element with a specified name

+	//	var form = document.createElement("div"),

+	//		id = "script" + (new Date).getTime();

+	//	form.innerHTML = "<a name='" + id + "'/>";

+

+	//	// Inject it into the root element, check its status, and remove it quickly

+	//	var root = document.documentElement;

+	//	root.insertBefore( form, root.firstChild );

+

+	// The workaround has to do additional checks after a getElementById

+	// Which slows things down for other browsers (hence the branching)

+	//	if ( document.getElementById( id ) ) {

+		Expr.find.ID = function(match, context, isXML){

+			if ( typeof context.getElementById !== "undefined" && !isXML ) {

+				var m = context.getElementById(match[1]);

+				return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];

+			}

+		};

+

+		Expr.filter.ID = function(elem, match){

+			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");

+			return elem.nodeType === 1 && node && node.nodeValue === match;

+		};

+	//	}

+

+	//	root.removeChild( form );

+	root = form = null; // release memory in IE

+})();

+

+// [vsdoc] The following function has been modified for IntelliSense.

+(function(){

+	// Check to see if the browser returns only elements

+	// when doing getElementsByTagName("*")

+

+	// Create a fake element

+	//	var div = document.createElement("div");

+	//	div.appendChild( document.createComment("") );

+

+	// Make sure no comments are found

+	//	if ( div.getElementsByTagName("*").length > 0 ) {

+		Expr.find.TAG = function(match, context){

+			var results = context.getElementsByTagName(match[1]);

+

+			// Filter out possible comments

+			if ( match[1] === "*" ) {

+				var tmp = [];

+

+				for ( var i = 0; results[i]; i++ ) {

+					if ( results[i].nodeType === 1 ) {

+						tmp.push( results[i] );

+					}

+				}

+

+				results = tmp;

+			}

+

+			return results;

+		};

+	//	}

+

+	// Check to see if an attribute returns normalized href attributes

+	//	div.innerHTML = "<a href='#'></a>";

+	//	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&

+	//			div.firstChild.getAttribute("href") !== "#" ) {

+		Expr.attrHandle.href = function(elem){

+			return elem.getAttribute("href", 2);

+		};

+	//	}

+

+	div = null; // release memory in IE

+})();

+

+if ( document.querySelectorAll ) {

+	(function(){

+		var oldSizzle = Sizzle, div = document.createElement("div");

+		div.innerHTML = "<p class='TEST'></p>";

+

+		// Safari can't handle uppercase or unicode characters when

+		// in quirks mode.

+		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {

+			return;

+		}

+	

+		Sizzle = function(query, context, extra, seed){

+			context = context || document;

+

+			// Only use querySelectorAll on non-XML documents

+			// (ID selectors don't work in non-HTML documents)

+			if ( !seed && context.nodeType === 9 && !isXML(context) ) {

+				try {

+					return makeArray( context.querySelectorAll(query), extra );

+				} catch(e){}

+			}

+		

+			return oldSizzle(query, context, extra, seed);

+		};

+

+		for ( var prop in oldSizzle ) {

+			Sizzle[ prop ] = oldSizzle[ prop ];

+		}

+

+		div = null; // release memory in IE

+	})();

+}

+

+(function(){

+	var div = document.createElement("div");

+

+	div.innerHTML = "<div class='test e'></div><div class='test'></div>";

+

+	// Opera can't find a second classname (in 9.6)

+	// Also, make sure that getElementsByClassName actually exists

+	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {

+		return;

+	}

+

+	// Safari caches class attributes, doesn't catch changes (in 3.2)

+	div.lastChild.className = "e";

+

+	if ( div.getElementsByClassName("e").length === 1 ) {

+		return;

+	}

+	

+	Expr.order.splice(1, 0, "CLASS");

+	Expr.find.CLASS = function(match, context, isXML) {

+		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {

+			return context.getElementsByClassName(match[1]);

+		}

+	};

+

+	div = null; // release memory in IE

+})();

+

+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {

+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {

+		var elem = checkSet[i];

+		if ( elem ) {

+			elem = elem[dir];

+			var match = false;

+

+			while ( elem ) {

+				if ( elem.sizcache === doneName ) {

+					match = checkSet[elem.sizset];

+					break;

+				}

+

+				if ( elem.nodeType === 1 && !isXML ){

+					elem.sizcache = doneName;

+					elem.sizset = i;

+				}

+

+				if ( elem.nodeName.toLowerCase() === cur ) {

+					match = elem;

+					break;

+				}

+

+				elem = elem[dir];

+			}

+

+			checkSet[i] = match;

+		}

+	}

+}

+

+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {

+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {

+		var elem = checkSet[i];

+		if ( elem ) {

+			elem = elem[dir];

+			var match = false;

+

+			while ( elem ) {

+				if ( elem.sizcache === doneName ) {

+					match = checkSet[elem.sizset];

+					break;

+				}

+

+				if ( elem.nodeType === 1 ) {

+					if ( !isXML ) {

+						elem.sizcache = doneName;

+						elem.sizset = i;

+					}

+					if ( typeof cur !== "string" ) {

+						if ( elem === cur ) {

+							match = true;

+							break;

+						}

+

+					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {

+						match = elem;

+						break;

+					}

+				}

+

+				elem = elem[dir];

+			}

+

+			checkSet[i] = match;

+		}

+	}

+}

+

+var contains = document.compareDocumentPosition ? function(a, b){

+	///	<summary>

+	///		Check to see if a DOM node is within another DOM node.

+	///	</summary>

+	///	<param name="a" type="Object">

+	///		The DOM element that may contain the other element.

+	///	</param>

+	///	<param name="b" type="Object">

+	///		The DOM node that may be contained by the other element.

+	///	</param>

+	///	<returns type="Boolean" />

+

+	return a.compareDocumentPosition(b) & 16;

+} : function(a, b){

+	///	<summary>

+	///		Check to see if a DOM node is within another DOM node.

+	///	</summary>

+	///	<param name="a" type="Object">

+	///		The DOM element that may contain the other element.

+	///	</param>

+	///	<param name="b" type="Object">

+	///		The DOM node that may be contained by the other element.

+	///	</param>

+	///	<returns type="Boolean" />

+

+	return a !== b && (a.contains ? a.contains(b) : true);

+};

+

+var isXML = function(elem){

+	///	<summary>

+	///		Determines if the parameter passed is an XML document.

+	///	</summary>

+	///	<param name="elem" type="Object">The object to test</param>

+	///	<returns type="Boolean">True if the parameter is an XML document; otherwise false.</returns>

+

+	// documentElement is verified for cases where it doesn't yet exist

+	// (such as loading iframes in IE - #4833) 

+	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;

+	return documentElement ? documentElement.nodeName !== "HTML" : false;

+};

+

+var posProcess = function(selector, context){

+	var tmpSet = [], later = "", match,

+		root = context.nodeType ? [context] : context;

+

+	// Position selectors must be done after the filter

+	// And so must :not(positional) so we move all PSEUDOs to the end

+	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {

+		later += match[0];

+		selector = selector.replace( Expr.match.PSEUDO, "" );

+	}

+

+	selector = Expr.relative[selector] ? selector + "*" : selector;

+

+	for ( var i = 0, l = root.length; i < l; i++ ) {

+		Sizzle( selector, root[i], tmpSet );

+	}

+

+	return Sizzle.filter( later, tmpSet );

+};

+

+// EXPOSE

+jQuery.find = Sizzle;

+jQuery.expr = Sizzle.selectors;

+jQuery.expr[":"] = jQuery.expr.filters;

+jQuery.unique = Sizzle.uniqueSort;

+jQuery.getText = getText;

+jQuery.isXMLDoc = isXML;

+jQuery.contains = contains;

+

+return;

+

+window.Sizzle = Sizzle;

+

+})();

+var runtil = /Until$/,

+	rparentsprev = /^(?:parents|prevUntil|prevAll)/,

+	// Note: This RegExp should be improved, or likely pulled from Sizzle

+	rmultiselector = /,/,

+	slice = Array.prototype.slice;

+

+// Implement the identical functionality for filter and not

+var winnow = function( elements, qualifier, keep ) {

+	if ( jQuery.isFunction( qualifier ) ) {

+		return jQuery.grep(elements, function( elem, i ) {

+			return !!qualifier.call( elem, i, elem ) === keep;

+		});

+

+	} else if ( qualifier.nodeType ) {

+		return jQuery.grep(elements, function( elem, i ) {

+			return (elem === qualifier) === keep;

+		});

+

+	} else if ( typeof qualifier === "string" ) {

+		var filtered = jQuery.grep(elements, function( elem ) {

+			return elem.nodeType === 1;

+		});

+

+		if ( isSimple.test( qualifier ) ) {

+			return jQuery.filter(qualifier, filtered, !keep);

+		} else {

+			qualifier = jQuery.filter( qualifier, filtered );

+		}

+	}

+

+	return jQuery.grep(elements, function( elem, i ) {

+		return (jQuery.inArray( elem, qualifier ) >= 0) === keep;

+	});

+};

+

+jQuery.fn.extend({

+	find: function( selector ) {

+		///	<summary>

+		///		Searches for all elements that match the specified expression.

+		///		This method is a good way to find additional descendant

+		///		elements with which to process.

+		///		All searching is done using a jQuery expression. The expression can be

+		///		written using CSS 1-3 Selector syntax, or basic XPath.

+		///		Part of DOM/Traversing

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="selector" type="String">

+		///		An expression to search with.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		var ret = this.pushStack( "", "find", selector ), length = 0;

+

+		for ( var i = 0, l = this.length; i < l; i++ ) {

+			length = ret.length;

+			jQuery.find( selector, this[i], ret );

+

+			if ( i > 0 ) {

+				// Make sure that the results are unique

+				for ( var n = length; n < ret.length; n++ ) {

+					for ( var r = 0; r < length; r++ ) {

+						if ( ret[r] === ret[n] ) {

+							ret.splice(n--, 1);

+							break;

+						}

+					}

+				}

+			}

+		}

+

+		return ret;

+	},

+

+	has: function( target ) {

+		///	<summary>

+		///		Reduce the set of matched elements to those that have a descendant that matches the

+		///		selector or DOM element.

+		///	</summary>

+		///	<param name="target" type="String">

+		///		A string containing a selector expression to match elements against.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		var targets = jQuery( target );

+		return this.filter(function() {

+			for ( var i = 0, l = targets.length; i < l; i++ ) {

+				if ( jQuery.contains( this, targets[i] ) ) {

+					return true;

+				}

+			}

+		});

+	},

+

+	not: function( selector ) {

+		///	<summary>

+		///		Removes any elements inside the array of elements from the set

+		///		of matched elements. This method is used to remove one or more

+		///		elements from a jQuery object.

+		///		Part of DOM/Traversing

+		///	</summary>

+		///	<param name="selector" type="jQuery">

+		///		A set of elements to remove from the jQuery set of matched elements.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		return this.pushStack( winnow(this, selector, false), "not", selector);

+	},

+

+	filter: function( selector ) {

+		///	<summary>

+		///		Removes all elements from the set of matched elements that do not

+		///		pass the specified filter. This method is used to narrow down

+		///		the results of a search.

+		///		})

+		///		Part of DOM/Traversing

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="selector" type="Function">

+		///		A function to use for filtering

+		///	</param>

+		///	<returns type="jQuery" />

+

+		return this.pushStack( winnow(this, selector, true), "filter", selector );

+	},

+	

+	is: function( selector ) {

+		///	<summary>

+		///		Checks the current selection against an expression and returns true,

+		///		if at least one element of the selection fits the given expression.

+		///		Does return false, if no element fits or the expression is not valid.

+		///		filter(String) is used internally, therefore all rules that apply there

+		///		apply here, too.

+		///		Part of DOM/Traversing

+		///	</summary>

+		///	<returns type="Boolean" />

+		///	<param name="expr" type="String">

+		///		 The expression with which to filter

+		///	</param>

+

+		return !!selector && jQuery.filter( selector, this ).length > 0;

+	},

+

+	closest: function( selectors, context ) {

+		///	<summary>

+		///		Get a set of elements containing the closest parent element that matches the specified selector, the starting element included.

+		///	</summary>

+		///	<param name="selectors" type="String">

+		///		A string containing a selector expression to match elements against.

+		///	</param>

+		///	<param name="context" type="Element">

+		///		A DOM element within which a matching element may be found. If no context is passed

+		///		in then the context of the jQuery set will be used instead.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		if ( jQuery.isArray( selectors ) ) {

+			var ret = [], cur = this[0], match, matches = {}, selector;

+

+			if ( cur && selectors.length ) {

+				for ( var i = 0, l = selectors.length; i < l; i++ ) {

+					selector = selectors[i];

+

+					if ( !matches[selector] ) {

+						matches[selector] = jQuery.expr.match.POS.test( selector ) ? 

+							jQuery( selector, context || this.context ) :

+							selector;

+					}

+				}

+

+				while ( cur && cur.ownerDocument && cur !== context ) {

+					for ( selector in matches ) {

+						match = matches[selector];

+

+						if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {

+							ret.push({ selector: selector, elem: cur });

+							delete matches[selector];

+						}

+					}

+					cur = cur.parentNode;

+				}

+			}

+

+			return ret;

+		}

+

+		var pos = jQuery.expr.match.POS.test( selectors ) ? 

+			jQuery( selectors, context || this.context ) : null;

+

+		return this.map(function( i, cur ) {

+			while ( cur && cur.ownerDocument && cur !== context ) {

+				if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) {

+					return cur;

+				}

+				cur = cur.parentNode;

+			}

+			return null;

+		});

+	},

+	

+	// Determine the position of an element within

+	// the matched set of elements

+	index: function( elem ) {

+		///	<summary>

+		///		Searches every matched element for the object and returns

+		///		the index of the element, if found, starting with zero. 

+		///		Returns -1 if the object wasn't found.

+		///		Part of Core

+		///	</summary>

+		///	<returns type="Number" />

+		///	<param name="elem" type="Element">

+		///		Object to search for

+		///	</param>

+

+		if ( !elem || typeof elem === "string" ) {

+			return jQuery.inArray( this[0],

+				// If it receives a string, the selector is used

+				// If it receives nothing, the siblings are used

+				elem ? jQuery( elem ) : this.parent().children() );

+		}

+		// Locate the position of the desired element

+		return jQuery.inArray(

+			// If it receives a jQuery object, the first element is used

+			elem.jquery ? elem[0] : elem, this );

+	},

+

+	add: function( selector, context ) {

+		///	<summary>

+		///		Adds one or more Elements to the set of matched elements.

+		///		Part of DOM/Traversing

+		///	</summary>

+		///	<param name="selector" type="String">

+		///		A string containing a selector expression to match additional elements against.

+		///	</param>

+		///	<param name="context" type="Element">

+		///		Add some elements rooted against the specified context.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		var set = typeof selector === "string" ?

+				jQuery( selector, context || this.context ) :

+				jQuery.makeArray( selector ),

+			all = jQuery.merge( this.get(), set );

+

+		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?

+			all :

+			jQuery.unique( all ) );

+	},

+

+	andSelf: function() {

+		///	<summary>

+		///		Adds the previous selection to the current selection.

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		return this.add( this.prevObject );

+	}

+});

+

+// A painfully simple check to see if an element is disconnected

+// from a document (should be improved, where feasible).

+function isDisconnected( node ) {

+	return !node || !node.parentNode || node.parentNode.nodeType === 11;

+}

+

+jQuery.each({

+	parent: function( elem ) {

+		var parent = elem.parentNode;

+		return parent && parent.nodeType !== 11 ? parent : null;

+	},

+	parents: function( elem ) {

+		return jQuery.dir( elem, "parentNode" );

+	},

+	next: function( elem ) {

+		return jQuery.nth( elem, 2, "nextSibling" );

+	},

+	prev: function( elem ) {

+		return jQuery.nth( elem, 2, "previousSibling" );

+	},

+	nextAll: function( elem ) {

+		return jQuery.dir( elem, "nextSibling" );

+	},

+	prevAll: function( elem ) {

+		return jQuery.dir( elem, "previousSibling" );

+	},

+	siblings: function( elem ) {

+		return jQuery.sibling( elem.parentNode.firstChild, elem );

+	},

+	children: function( elem ) {

+		return jQuery.sibling( elem.firstChild );

+	},

+	contents: function( elem ) {

+		return jQuery.nodeName( elem, "iframe" ) ?

+			elem.contentDocument || elem.contentWindow.document :

+			jQuery.makeArray( elem.childNodes );

+	}

+}, function( name, fn ) {

+	jQuery.fn[ name ] = function( until, selector ) {

+		var ret = jQuery.map( this, fn, until );

+		

+		if ( !runtil.test( name ) ) {

+			selector = until;

+		}

+

+		if ( selector && typeof selector === "string" ) {

+			ret = jQuery.filter( selector, ret );

+		}

+

+		ret = this.length > 1 ? jQuery.unique( ret ) : ret;

+

+		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {

+			ret = ret.reverse();

+		}

+

+		return this.pushStack( ret, name, slice.call(arguments).join(",") );

+	};

+});

+

+jQuery.fn[ "parentsUntil" ] = function( until, selector ) {

+	///	<summary>

+	///		Get the ancestors of each element in the current set of matched elements, up to but not

+	///		including the element matched by the selector.

+	///	</summary>

+	///	<param name="until" type="String">

+	///		A string containing a selector expression to indicate where to stop matching ancestor

+	///		elements.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var fn = function( elem, i, until ) {

+		return jQuery.dir( elem, "parentNode", until );

+	}

+

+	var ret = jQuery.map( this, fn, until );

+	

+	if ( !runtil.test( "parentsUntil" ) ) {

+		selector = until;

+	}

+

+	if ( selector && typeof selector === "string" ) {

+		ret = jQuery.filter( selector, ret );

+	}

+

+	ret = this.length > 1 ? jQuery.unique( ret ) : ret;

+

+	if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( "parentsUntil" ) ) {

+		ret = ret.reverse();

+	}

+

+	return this.pushStack( ret, "parentsUntil", slice.call(arguments).join(",") );

+};

+

+jQuery.fn[ "nextUntil" ] = function( until, selector ) {

+	///	<summary>

+	///		Get all following siblings of each element up to but not including the element matched

+	///		by the selector.

+	///	</summary>

+	///	<param name="until" type="String">

+	///		A string containing a selector expression to indicate where to stop matching following

+	///		sibling elements.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var fn = function( elem, i, until ) {

+		return jQuery.dir( elem, "nextSibling", until );

+	}

+

+	var ret = jQuery.map( this, fn, until );

+	

+	if ( !runtil.test( "nextUntil" ) ) {

+		selector = until;

+	}

+

+	if ( selector && typeof selector === "string" ) {

+		ret = jQuery.filter( selector, ret );

+	}

+

+	ret = this.length > 1 ? jQuery.unique( ret ) : ret;

+

+	if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( "nextUntil" ) ) {

+		ret = ret.reverse();

+	}

+

+	return this.pushStack( ret, "nextUntil", slice.call(arguments).join(",") );

+};

+

+jQuery.fn[ "prevUntil" ] = function( until, selector ) {

+	///	<summary>

+	///		Get all preceding siblings of each element up to but not including the element matched

+	///		by the selector.

+	///	</summary>

+	///	<param name="until" type="String">

+	///		A string containing a selector expression to indicate where to stop matching preceding

+	///		sibling elements.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var fn = function( elem, i, until ) {

+		return jQuery.dir( elem, "previousSibling", until );

+	}

+

+	var ret = jQuery.map( this, fn, until );

+	

+	if ( !runtil.test( "prevUntil" ) ) {

+		selector = until;

+	}

+

+	if ( selector && typeof selector === "string" ) {

+		ret = jQuery.filter( selector, ret );

+	}

+

+	ret = this.length > 1 ? jQuery.unique( ret ) : ret;

+

+	if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( "prevUntil" ) ) {

+		ret = ret.reverse();

+	}

+

+	return this.pushStack( ret, "prevUntil", slice.call(arguments).join(",") );

+};

+

+jQuery.extend({

+	filter: function( expr, elems, not ) {

+		if ( not ) {

+			expr = ":not(" + expr + ")";

+		}

+

+		return jQuery.find.matches(expr, elems);

+	},

+	

+	dir: function( elem, dir, until ) {

+		///	<summary>

+		///		This member is internal only.

+		///	</summary>

+		///	<private />

+

+		var matched = [], cur = elem[dir];

+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {

+			if ( cur.nodeType === 1 ) {

+				matched.push( cur );

+			}

+			cur = cur[dir];

+		}

+		return matched;

+	},

+

+	nth: function( cur, result, dir, elem ) {

+		///	<summary>

+		///		This member is internal only.

+		///	</summary>

+		///	<private />

+

+		result = result || 1;

+		var num = 0;

+

+		for ( ; cur; cur = cur[dir] ) {

+			if ( cur.nodeType === 1 && ++num === result ) {

+				break;

+			}

+		}

+

+		return cur;

+	},

+

+	sibling: function( n, elem ) {

+		///	<summary>

+		///		This member is internal only.

+		///	</summary>

+		///	<private />

+

+		var r = [];

+

+		for ( ; n; n = n.nextSibling ) {

+			if ( n.nodeType === 1 && n !== elem ) {

+				r.push( n );

+			}

+		}

+

+		return r;

+	}

+});

+var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,

+	rleadingWhitespace = /^\s+/,

+	rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g,

+	rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,

+	rtagName = /<([\w:]+)/,

+	rtbody = /<tbody/i,

+	rhtml = /<|&\w+;/,

+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,  // checked="checked" or checked (html5)

+	fcloseTag = function( all, front, tag ) {

+		return rselfClosing.test( tag ) ?

+			all :

+			front + "></" + tag + ">";

+	},

+	wrapMap = {

+		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, "", "" ]

+	};

+

+wrapMap.optgroup = wrapMap.option;

+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;

+wrapMap.th = wrapMap.td;

+

+// IE can't serialize <link> and <script> tags normally

+if ( !jQuery.support.htmlSerialize ) {

+	wrapMap._default = [ 1, "div<div>", "</div>" ];

+}

+

+jQuery.fn.extend({

+	text: function( text ) {

+		///	<summary>

+		///		Set the text contents of all matched elements.

+		///		Similar to html(), but escapes HTML (replace &quot;&lt;&quot; and &quot;&gt;&quot; with their

+		///		HTML entities).

+		///		Part of DOM/Attributes

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="text" type="String">

+		///		The text value to set the contents of the element to.

+		///	</param>

+

+		if ( jQuery.isFunction(text) ) {

+			return this.each(function(i) {

+				var self = jQuery(this);

+				self.text( text.call(this, i, self.text()) );

+			});

+		}

+

+		if ( typeof text !== "object" && text !== undefined ) {

+			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );

+		}

+

+		return jQuery.getText( this );

+	},

+

+	wrapAll: function( html ) {

+		///	<summary>

+		///		Wrap all matched elements with a structure of other elements.

+		///		This wrapping process is most useful for injecting additional

+		///		stucture into a document, without ruining the original semantic

+		///		qualities of a document.

+		///		This works by going through the first element

+		///		provided and finding the deepest ancestor element within its

+		///		structure - it is that element that will en-wrap everything else.

+		///		This does not work with elements that contain text. Any necessary text

+		///		must be added after the wrapping is done.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="html" type="Element">

+		///		A DOM element that will be wrapped around the target.

+		///	</param>

+

+		if ( jQuery.isFunction( html ) ) {

+			return this.each(function(i) {

+				jQuery(this).wrapAll( html.call(this, i) );

+			});

+		}

+

+		if ( this[0] ) {

+			// The elements to wrap the target around

+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);

+

+			if ( this[0].parentNode ) {

+				wrap.insertBefore( this[0] );

+			}

+

+			wrap.map(function() {

+				var elem = this;

+

+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {

+					elem = elem.firstChild;

+				}

+

+				return elem;

+			}).append(this);

+		}

+

+		return this;

+	},

+

+	wrapInner: function( html ) {

+		///	<summary>

+		///		Wraps the inner child contents of each matched elemenht (including text nodes) with an HTML structure.

+		///	</summary>

+		///	<param name="html" type="String">

+		///		A string of HTML or a DOM element that will be wrapped around the target contents.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		if ( jQuery.isFunction( html ) ) {

+			return this.each(function(i) {

+				jQuery(this).wrapInner( html.call(this, i) );

+			});

+		}

+

+		return this.each(function() {

+			var self = jQuery( this ), contents = self.contents();

+

+			if ( contents.length ) {

+				contents.wrapAll( html );

+

+			} else {

+				self.append( html );

+			}

+		});

+	},

+

+	wrap: function( html ) {

+		///	<summary>

+		///		Wrap all matched elements with a structure of other elements.

+		///		This wrapping process is most useful for injecting additional

+		///		stucture into a document, without ruining the original semantic

+		///		qualities of a document.

+		///		This works by going through the first element

+		///		provided and finding the deepest ancestor element within its

+		///		structure - it is that element that will en-wrap everything else.

+		///		This does not work with elements that contain text. Any necessary text

+		///		must be added after the wrapping is done.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="html" type="Element">

+		///		A DOM element that will be wrapped around the target.

+		///	</param>

+

+		return this.each(function() {

+			jQuery( this ).wrapAll( html );

+		});

+	},

+

+	unwrap: function() {

+		///	<summary>

+		///		Remove the parents of the set of matched elements from the DOM, leaving the matched

+		///		elements in their place.

+		///	</summary>

+		///	<returns type="jQuery" />

+		return this.parent().each(function() {

+			if ( !jQuery.nodeName( this, "body" ) ) {

+				jQuery( this ).replaceWith( this.childNodes );

+			}

+		}).end();

+	},

+

+	append: function() {

+		///	<summary>

+		///		Append content to the inside of every matched element.

+		///		This operation is similar to doing an appendChild to all the

+		///		specified elements, adding them into the document.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		return this.domManip(arguments, true, function( elem ) {

+			if ( this.nodeType === 1 ) {

+				this.appendChild( elem );

+			}

+		});

+	},

+

+	prepend: function() {

+		///	<summary>

+		///		Prepend content to the inside of every matched element.

+		///		This operation is the best way to insert elements

+		///		inside, at the beginning, of all matched elements.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		return this.domManip(arguments, true, function( elem ) {

+			if ( this.nodeType === 1 ) {

+				this.insertBefore( elem, this.firstChild );

+			}

+		});

+	},

+

+	before: function() {

+		///	<summary>

+		///		Insert content before each of the matched elements.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		if ( this[0] && this[0].parentNode ) {

+			return this.domManip(arguments, false, function( elem ) {

+				this.parentNode.insertBefore( elem, this );

+			});

+		} else if ( arguments.length ) {

+			var set = jQuery(arguments[0]);

+			set.push.apply( set, this.toArray() );

+			return this.pushStack( set, "before", arguments );

+		}

+	},

+

+	after: function() {

+		///	<summary>

+		///		Insert content after each of the matched elements.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		if ( this[0] && this[0].parentNode ) {

+			return this.domManip(arguments, false, function( elem ) {

+				this.parentNode.insertBefore( elem, this.nextSibling );

+			});

+		} else if ( arguments.length ) {

+			var set = this.pushStack( this, "after", arguments );

+			set.push.apply( set, jQuery(arguments[0]).toArray() );

+			return set;

+		}

+	},

+

+	clone: function( events ) {

+		///	<summary>

+		///		Clone matched DOM Elements and select the clones. 

+		///		This is useful for moving copies of the elements to another

+		///		location in the DOM.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="deep" type="Boolean" optional="true">

+		///		(Optional) Set to false if you don't want to clone all descendant nodes, in addition to the element itself.

+		///	</param>

+

+		// Do the clone

+		var ret = this.map(function() {

+			if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {

+				// IE copies events bound via attachEvent when

+				// using cloneNode. Calling detachEvent on the

+				// clone will also remove the events from the orignal

+				// In order to get around this, we use innerHTML.

+				// Unfortunately, this means some modifications to

+				// attributes in IE that are actually only stored

+				// as properties will not be copied (such as the

+				// the name attribute on an input).

+				var html = this.outerHTML, ownerDocument = this.ownerDocument;

+				if ( !html ) {

+					var div = ownerDocument.createElement("div");

+					div.appendChild( this.cloneNode(true) );

+					html = div.innerHTML;

+				}

+

+				return jQuery.clean([html.replace(rinlinejQuery, "")

+					.replace(rleadingWhitespace, "")], ownerDocument)[0];

+			} else {

+				return this.cloneNode(true);

+			}

+		});

+

+		// Copy the events from the original to the clone

+		if ( events === true ) {

+			cloneCopyEvent( this, ret );

+			cloneCopyEvent( this.find("*"), ret.find("*") );

+		}

+

+		// Return the cloned set

+		return ret;

+	},

+

+	html: function( value ) {

+		///	<summary>

+		///		Set the html contents of every matched element.

+		///		This property is not available on XML documents.

+		///		Part of DOM/Attributes

+		///	</summary>

+		///	<returns type="jQuery" />

+		///	<param name="value" type="String">

+		///		A string of HTML to set as the content of each matched element.

+		///	</param>

+

+		if ( value === undefined ) {

+			return this[0] && this[0].nodeType === 1 ?

+				this[0].innerHTML.replace(rinlinejQuery, "") :

+				null;

+

+		// See if we can take a shortcut and just use innerHTML

+		} else if ( typeof value === "string" && !/<script/i.test( value ) &&

+			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&

+			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {

+

+			value = value.replace(rxhtmlTag, fcloseTag);

+

+			try {

+				for ( var i = 0, l = this.length; i < l; i++ ) {

+					// Remove element nodes and prevent memory leaks

+					if ( this[i].nodeType === 1 ) {

+						jQuery.cleanData( this[i].getElementsByTagName("*") );

+						this[i].innerHTML = value;

+					}

+				}

+

+			// If using innerHTML throws an exception, use the fallback method

+			} catch(e) {

+				this.empty().append( value );

+			}

+

+		} else if ( jQuery.isFunction( value ) ) {

+			this.each(function(i){

+				var self = jQuery(this), old = self.html();

+				self.empty().append(function(){

+					return value.call( this, i, old );

+				});

+			});

+

+		} else {

+			this.empty().append( value );

+		}

+

+		return this;

+	},

+

+	replaceWith: function( value ) {

+		///	<summary>

+		///		Replaces all matched element with the specified HTML or DOM elements.

+		///	</summary>

+		///	<param name="value" type="Object">

+		///		The content to insert. May be an HTML string, DOM element, or jQuery object.

+		///	</param>

+		///	<returns type="jQuery">The element that was just replaced.</returns>

+

+		if ( this[0] && this[0].parentNode ) {

+			// Make sure that the elements are removed from the DOM before they are inserted

+			// this can help fix replacing a parent with child elements

+			if ( !jQuery.isFunction( value ) ) {

+				value = jQuery( value ).detach();

+

+			} else {

+				return this.each(function(i) {

+					var self = jQuery(this), old = self.html();

+					self.replaceWith( value.call( this, i, old ) );

+				});

+			}

+

+			return this.each(function() {

+				var next = this.nextSibling, parent = this.parentNode;

+

+				jQuery(this).remove();

+

+				if ( next ) {

+					jQuery(next).before( value );

+				} else {

+					jQuery(parent).append( value );

+				}

+			});

+		} else {

+			return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );

+		}

+	},

+

+	detach: function( selector ) {

+		///	<summary>

+		///		Remove the set of matched elements from the DOM.

+		///	</summary>

+		///	<param name="selector" type="String">

+		///		A selector expression that filters the set of matched elements to be removed.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		return this.remove( selector, true );

+	},

+

+	domManip: function( args, table, callback ) {

+		///	<param name="args" type="Array">

+		///		 Args

+		///	</param>

+		///	<param name="table" type="Boolean">

+		///		 Insert TBODY in TABLEs if one is not found.

+		///	</param>

+		///	<param name="dir" type="Number">

+		///		 If dir&lt;0, process args in reverse order.

+		///	</param>

+		///	<param name="fn" type="Function">

+		///		 The function doing the DOM manipulation.

+		///	</param>

+		///	<returns type="jQuery" />

+		///	<summary>

+		///		Part of Core

+		///	</summary>

+

+		var results, first, value = args[0], scripts = [];

+

+		// We can't cloneNode fragments that contain checked, in WebKit

+		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {

+			return this.each(function() {

+				jQuery(this).domManip( args, table, callback, true );

+			});

+		}

+

+		if ( jQuery.isFunction(value) ) {

+			return this.each(function(i) {

+				var self = jQuery(this);

+				args[0] = value.call(this, i, table ? self.html() : undefined);

+				self.domManip( args, table, callback );

+			});

+		}

+

+		if ( this[0] ) {

+			// If we're in a fragment, just use that instead of building a new one

+			if ( args[0] && args[0].parentNode && args[0].parentNode.nodeType === 11 ) {

+				results = { fragment: args[0].parentNode };

+			} else {

+				results = buildFragment( args, this, scripts );

+			}

+

+			first = results.fragment.firstChild;

+

+			if ( first ) {

+				table = table && jQuery.nodeName( first, "tr" );

+

+				for ( var i = 0, l = this.length; i < l; i++ ) {

+					callback.call(

+						table ?

+							root(this[i], first) :

+							this[i],

+						results.cacheable || this.length > 1 || i > 0 ?

+							results.fragment.cloneNode(true) :

+							results.fragment

+					);

+				}

+			}

+

+			if ( scripts ) {

+				jQuery.each( scripts, evalScript );

+			}

+		}

+

+		return this;

+

+		function root( elem, cur ) {

+			return jQuery.nodeName(elem, "table") ?

+				(elem.getElementsByTagName("tbody")[0] ||

+				elem.appendChild(elem.ownerDocument.createElement("tbody"))) :

+				elem;

+		}

+	}

+});

+

+function cloneCopyEvent(orig, ret) {

+	var i = 0;

+

+	ret.each(function() {

+		if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {

+			return;

+		}

+

+		var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events;

+

+		if ( events ) {

+			delete curData.handle;

+			curData.events = {};

+

+			for ( var type in events ) {

+				for ( var handler in events[ type ] ) {

+					jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );

+				}

+			}

+		}

+	});

+}

+

+function buildFragment( args, nodes, scripts ) {

+	var fragment, cacheable, cacheresults, doc;

+

+	// webkit does not clone 'checked' attribute of radio inputs on cloneNode, so don't cache if string has a checked

+	if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && args[0].indexOf("<option") < 0 && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {

+		cacheable = true;

+		cacheresults = jQuery.fragments[ args[0] ];

+		if ( cacheresults ) {

+			if ( cacheresults !== 1 ) {

+				fragment = cacheresults;

+			}

+		}

+	}

+

+	if ( !fragment ) {

+		doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);

+		fragment = doc.createDocumentFragment();

+		jQuery.clean( args, doc, fragment, scripts );

+	}

+

+	if ( cacheable ) {

+		jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;

+	}

+

+	return { fragment: fragment, cacheable: cacheable };

+}

+

+jQuery.fragments = {};

+

+//	jQuery.each({

+//		appendTo: "append",

+//		prependTo: "prepend",

+//		insertBefore: "before",

+//		insertAfter: "after",

+//		replaceAll: "replaceWith"

+//	}, function( name, original ) {

+//		jQuery.fn[ name ] = function( selector ) {

+//			var ret = [], insert = jQuery( selector );

+

+//			for ( var i = 0, l = insert.length; i < l; i++ ) {

+//				var elems = (i > 0 ? this.clone(true) : this).get();

+//				jQuery.fn[ original ].apply( jQuery(insert[i]), elems );

+//				ret = ret.concat( elems );

+//			}

+//			return this.pushStack( ret, name, insert.selector );

+//		};

+//	});

+

+jQuery.fn[ "appendTo" ] = function( selector ) {

+	///	<summary>

+	///		Append all of the matched elements to another, specified, set of elements.

+	///		As of jQuery 1.3.2, returns all of the inserted elements.

+	///		This operation is, essentially, the reverse of doing a regular

+	///		$(A).append(B), in that instead of appending B to A, you're appending

+	///		A to B.

+	///	</summary>

+	///	<param name="selector" type="Selector">

+	///		 target to which the content will be appended.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var ret = [], insert = jQuery( selector );

+

+	for ( var i = 0, l = insert.length; i < l; i++ ) {

+		var elems = (i > 0 ? this.clone(true) : this).get();

+		jQuery.fn[ "append" ].apply( jQuery(insert[i]), elems );

+		ret = ret.concat( elems );

+	}

+	return this.pushStack( ret, "appendTo", insert.selector );

+};

+

+jQuery.fn[ "prependTo" ] = function( selector ) {

+	///	<summary>

+	///		Prepend all of the matched elements to another, specified, set of elements.

+	///		As of jQuery 1.3.2, returns all of the inserted elements.

+	///		This operation is, essentially, the reverse of doing a regular

+	///		$(A).prepend(B), in that instead of prepending B to A, you're prepending

+	///		A to B.

+	///	</summary>

+	///	<param name="selector" type="Selector">

+	///		 target to which the content will be appended.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var ret = [], insert = jQuery( selector );

+

+	for ( var i = 0, l = insert.length; i < l; i++ ) {

+		var elems = (i > 0 ? this.clone(true) : this).get();

+		jQuery.fn[ "prepend" ].apply( jQuery(insert[i]), elems );

+		ret = ret.concat( elems );

+	}

+	return this.pushStack( ret, "prependTo", insert.selector );

+};

+

+jQuery.fn[ "insertBefore" ] = function( selector ) {

+	///	<summary>

+	///		Insert all of the matched elements before another, specified, set of elements.

+	///		As of jQuery 1.3.2, returns all of the inserted elements.

+	///		This operation is, essentially, the reverse of doing a regular

+	///		$(A).before(B), in that instead of inserting B before A, you're inserting

+	///		A before B.

+	///	</summary>

+	///	<param name="content" type="String">

+	///		 Content after which the selected element(s) is inserted.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var ret = [], insert = jQuery( selector );

+

+	for ( var i = 0, l = insert.length; i < l; i++ ) {

+		var elems = (i > 0 ? this.clone(true) : this).get();

+		jQuery.fn[ "before" ].apply( jQuery(insert[i]), elems );

+		ret = ret.concat( elems );

+	}

+	return this.pushStack( ret, "insertBefore", insert.selector );

+};

+

+jQuery.fn[ "insertAfter" ] = function( selector ) {

+	///	<summary>

+	///		Insert all of the matched elements after another, specified, set of elements.

+	///		As of jQuery 1.3.2, returns all of the inserted elements.

+	///		This operation is, essentially, the reverse of doing a regular

+	///		$(A).after(B), in that instead of inserting B after A, you're inserting

+	///		A after B.

+	///	</summary>

+	///	<param name="content" type="String">

+	///		 Content after which the selected element(s) is inserted.

+	///	</param>

+	///	<returns type="jQuery" />

+

+	var ret = [], insert = jQuery( selector );

+

+	for ( var i = 0, l = insert.length; i < l; i++ ) {

+		var elems = (i > 0 ? this.clone(true) : this).get();

+		jQuery.fn[ "after" ].apply( jQuery(insert[i]), elems );

+		ret = ret.concat( elems );

+	}

+	return this.pushStack( ret, "insertAfter", insert.selector );

+};

+

+jQuery.fn[ "replaceAll" ] = function( selector ) {

+	///	<summary>

+	///		Replaces the elements matched by the specified selector with the matched elements.

+	///		As of jQuery 1.3.2, returns all of the inserted elements.

+	///	</summary>

+	///	<param name="selector" type="Selector">The elements to find and replace the matched elements with.</param>

+	///	<returns type="jQuery" />

+

+	var ret = [], insert = jQuery( selector );

+

+	for ( var i = 0, l = insert.length; i < l; i++ ) {

+		var elems = (i > 0 ? this.clone(true) : this).get();

+		jQuery.fn[ "replaceWith" ].apply( jQuery(insert[i]), elems );

+		ret = ret.concat( elems );

+	}

+	return this.pushStack( ret, "replaceAll", insert.selector );

+};

+

+jQuery.each({

+	// keepData is for internal use only--do not document

+	remove: function( selector, keepData ) {

+		if ( !selector || jQuery.filter( selector, [ this ] ).length ) {

+			if ( !keepData && this.nodeType === 1 ) {

+				jQuery.cleanData( this.getElementsByTagName("*") );

+				jQuery.cleanData( [ this ] );

+			}

+

+			if ( this.parentNode ) {

+				 this.parentNode.removeChild( this );

+			}

+		}

+	},

+

+	empty: function() {

+		///	<summary>

+		///		Removes all child nodes from the set of matched elements.

+		///		Part of DOM/Manipulation

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		// Remove element nodes and prevent memory leaks

+		if ( this.nodeType === 1 ) {

+			jQuery.cleanData( this.getElementsByTagName("*") );

+		}

+

+		// Remove any remaining nodes

+		while ( this.firstChild ) {

+			this.removeChild( this.firstChild );

+		}

+	}

+}, function( name, fn ) {

+	jQuery.fn[ name ] = function() {

+		return this.each( fn, arguments );

+	};

+});

+

+jQuery.extend({

+	clean: function( elems, context, fragment, scripts ) {

+		///	<summary>

+		///		This method is internal only.

+		///	</summary>

+		///	<private />

+

+		context = context || document;

+

+		// !context.createElement fails in IE with an error but returns typeof 'object'

+		if ( typeof context.createElement === "undefined" ) {

+			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;

+		}

+

+		var ret = [];

+

+		jQuery.each(elems, function( i, elem ) {

+			if ( typeof elem === "number" ) {

+				elem += "";

+			}

+

+			if ( !elem ) {

+				return;

+			}

+

+			// Convert html string into DOM nodes

+			if ( typeof elem === "string" && !rhtml.test( elem ) ) {

+				elem = context.createTextNode( elem );

+

+			} else if ( typeof elem === "string" ) {

+				// Fix "XHTML"-style tags in all browsers

+				elem = elem.replace(rxhtmlTag, fcloseTag);

+

+				// Trim whitespace, otherwise indexOf won't work as expected

+				var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),

+					wrap = wrapMap[ tag ] || wrapMap._default,

+					depth = wrap[0],

+					div = context.createElement("div");

+

+				// Go to html and back, then peel off extra wrappers

+				div.innerHTML = wrap[1] + elem + wrap[2];

+

+				// Move to the right depth

+				while ( depth-- ) {

+					div = div.lastChild;

+				}

+

+				// Remove IE's autoinserted <tbody> from table fragments

+				if ( !jQuery.support.tbody ) {

+

+					// String was a <table>, *may* have spurious <tbody>

+					var hasBody = rtbody.test(elem),

+						tbody = tag === "table" && !hasBody ?

+							div.firstChild && div.firstChild.childNodes :

+

+							// String was a bare <thead> or <tfoot>

+							wrap[1] === "<table>" && !hasBody ?

+								div.childNodes :

+								[];

+

+					for ( var j = tbody.length - 1; j >= 0 ; --j ) {

+						if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {

+							tbody[ j ].parentNode.removeChild( tbody[ j ] );

+						}

+					}

+

+				}

+

+				// IE completely kills leading whitespace when innerHTML is used

+				if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {

+					div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );

+				}

+

+				elem = jQuery.makeArray( div.childNodes );

+			}

+

+			if ( elem.nodeType ) {

+				ret.push( elem );

+			} else {

+				ret = jQuery.merge( ret, elem );

+			}

+

+		});

+

+		if ( fragment ) {

+			for ( var i = 0; ret[i]; i++ ) {

+				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {

+					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );

+				} else {

+					if ( ret[i].nodeType === 1 ) {

+						ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );

+					}

+					fragment.appendChild( ret[i] );

+				}

+			}

+		}

+

+		return ret;

+	},

+	

+	cleanData: function( elems ) {

+		for ( var i = 0, elem, id; (elem = elems[i]) != null; i++ ) {

+			jQuery.event.remove( elem );

+			jQuery.removeData( elem );

+		}

+	}

+});

+// exclude the following css properties to add px

+var rexclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,

+	ralpha = /alpha\([^)]*\)/,

+	ropacity = /opacity=([^)]*)/,

+	rfloat = /float/i,

+	rdashAlpha = /-([a-z])/ig,

+	rupper = /([A-Z])/g,

+	rnumpx = /^-?\d+(?:px)?$/i,

+	rnum = /^-?\d/,

+

+	cssShow = { position: "absolute", visibility: "hidden", display:"block" },

+	cssWidth = [ "Left", "Right" ],

+	cssHeight = [ "Top", "Bottom" ],

+

+	// cache check for defaultView.getComputedStyle

+	getComputedStyle = document.defaultView && document.defaultView.getComputedStyle,

+	// normalize float css property

+	styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat",

+	fcamelCase = function( all, letter ) {

+		return letter.toUpperCase();

+	};

+

+jQuery.fn.css = function( name, value ) {

+	///	<summary>

+	///		Set a single style property to a value, on all matched elements.

+	///		If a number is provided, it is automatically converted into a pixel value.

+	///		Part of CSS

+	///	</summary>

+	///	<returns type="jQuery" />

+	///	<param name="name" type="String">

+	///		A CSS property name.

+	///	</param>

+	///	<param name="value" type="String">

+	///		A value to set for the property.

+	///	</param>

+

+	return access( this, name, value, true, function( elem, name, value ) {

+		if ( value === undefined ) {

+			return jQuery.curCSS( elem, name );

+		}

+		

+		if ( typeof value === "number" && !rexclude.test(name) ) {

+			value += "px";

+		}

+

+		jQuery.style( elem, name, value );

+	});

+};

+

+jQuery.extend({

+	style: function( elem, name, value ) {

+		// don't set styles on text and comment nodes

+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {

+			return undefined;

+		}

+

+		// ignore negative width and height values #1599

+		if ( (name === "width" || name === "height") && parseFloat(value) < 0 ) {

+			value = undefined;

+		}

+

+		var style = elem.style || elem, set = value !== undefined;

+

+		// IE uses filters for opacity

+		if ( !jQuery.support.opacity && name === "opacity" ) {

+			if ( set ) {

+				// IE has trouble with opacity if it does not have layout

+				// Force it by setting the zoom level

+				style.zoom = 1;

+

+				// Set the alpha filter to set the opacity

+				var opacity = parseInt( value, 10 ) + "" === "NaN" ? "" : "alpha(opacity=" + value * 100 + ")";

+				var filter = style.filter || jQuery.curCSS( elem, "filter" ) || "";

+				style.filter = ralpha.test(filter) ? filter.replace(ralpha, opacity) : opacity;

+			}

+

+			return style.filter && style.filter.indexOf("opacity=") >= 0 ?

+				(parseFloat( ropacity.exec(style.filter)[1] ) / 100) + "":

+				"";

+		}

+

+		// Make sure we're using the right name for getting the float value

+		if ( rfloat.test( name ) ) {

+			name = styleFloat;

+		}

+

+		name = name.replace(rdashAlpha, fcamelCase);

+

+		if ( set ) {

+			style[ name ] = value;

+		}

+

+		return style[ name ];

+	},

+

+	css: function( elem, name, force, extra ) {

+		///	<summary>

+		///		This method is internal only.

+		///	</summary>

+		///	<private />

+

+		if ( name === "width" || name === "height" ) {

+			var val, props = cssShow, which = name === "width" ? cssWidth : cssHeight;

+

+			function getWH() {

+				val = name === "width" ? elem.offsetWidth : elem.offsetHeight;

+

+				if ( extra === "border" ) {

+					return;

+				}

+

+				jQuery.each( which, function() {

+					if ( !extra ) {

+						val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;

+					}

+

+					if ( extra === "margin" ) {

+						val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;

+					} else {

+						val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;

+					}

+				});

+			}

+

+			if ( elem.offsetWidth !== 0 ) {

+				getWH();

+			} else {

+				jQuery.swap( elem, props, getWH );

+			}

+

+			return Math.max(0, Math.round(val));

+		}

+

+		return jQuery.curCSS( elem, name, force );

+	},

+

+	curCSS: function( elem, name, force ) {

+		///	<summary>

+		///		This method is internal only.

+		///	</summary>

+		///	<private />

+

+		var ret, style = elem.style, filter;

+

+		// IE uses filters for opacity

+		if ( !jQuery.support.opacity && name === "opacity" && elem.currentStyle ) {

+			ret = ropacity.test(elem.currentStyle.filter || "") ?

+				(parseFloat(RegExp.$1) / 100) + "" :

+				"";

+

+			return ret === "" ?

+				"1" :

+				ret;

+		}

+

+		// Make sure we're using the right name for getting the float value

+		if ( rfloat.test( name ) ) {

+			name = styleFloat;

+		}

+

+		if ( !force && style && style[ name ] ) {

+			ret = style[ name ];

+

+		} else if ( getComputedStyle ) {

+

+			// Only "float" is needed here

+			if ( rfloat.test( name ) ) {

+				name = "float";

+			}

+

+			name = name.replace( rupper, "-$1" ).toLowerCase();

+

+			var defaultView = elem.ownerDocument.defaultView;

+

+			if ( !defaultView ) {

+				return null;

+			}

+

+			var computedStyle = defaultView.getComputedStyle( elem, null );

+

+			if ( computedStyle ) {

+				ret = computedStyle.getPropertyValue( name );

+			}

+

+			// We should always get a number back from opacity

+			if ( name === "opacity" && ret === "" ) {

+				ret = "1";

+			}

+

+		} else if ( elem.currentStyle ) {

+			var camelCase = name.replace(rdashAlpha, fcamelCase);

+

+			ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];

+

+			// From the awesome hack by Dean Edwards

+			// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291

+

+			// If we're not dealing with a regular pixel number

+			// but a number that has a weird ending, we need to convert it to pixels

+			if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {

+				// Remember the original values

+				var left = style.left, rsLeft = elem.runtimeStyle.left;

+

+				// Put in the new values to get a computed value out

+				elem.runtimeStyle.left = elem.currentStyle.left;

+				style.left = camelCase === "fontSize" ? "1em" : (ret || 0);

+				ret = style.pixelLeft + "px";

+

+				// Revert the changed values

+				style.left = left;

+				elem.runtimeStyle.left = rsLeft;

+			}

+		}

+

+		return ret;

+	},

+

+	// A method for quickly swapping in/out CSS properties to get correct calculations

+	swap: function( elem, options, callback ) {

+		///	<summary>

+		///		Swap in/out style options.

+		///	</summary>

+

+		var old = {};

+

+		// Remember the old values, and insert the new ones

+		for ( var name in options ) {

+			old[ name ] = elem.style[ name ];

+			elem.style[ name ] = options[ name ];

+		}

+

+		callback.call( elem );

+

+		// Revert the old values

+		for ( var name in options ) {

+			elem.style[ name ] = old[ name ];

+		}

+	}

+});

+

+if ( jQuery.expr && jQuery.expr.filters ) {

+	jQuery.expr.filters.hidden = function( elem ) {

+		var width = elem.offsetWidth, height = elem.offsetHeight,

+			skip = elem.nodeName.toLowerCase() === "tr";

+

+		return width === 0 && height === 0 && !skip ?

+			true :

+			width > 0 && height > 0 && !skip ?

+				false :

+				jQuery.curCSS(elem, "display") === "none";

+	};

+

+	jQuery.expr.filters.visible = function( elem ) {

+		return !jQuery.expr.filters.hidden( elem );

+	};

+}

+var jsc = now(),

+	rscript = /<script(.|\s)*?\/script>/gi,

+	rselectTextarea = /select|textarea/i,

+	rinput = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,

+	jsre = /=\?(&|$)/,

+	rquery = /\?/,

+	rts = /(\?|&)_=.*?(&|$)/,

+	rurl = /^(\w+:)?\/\/([^\/?#]+)/,

+	r20 = /%20/g;

+

+jQuery.fn.extend({

+	// Keep a copy of the old load

+	_load: jQuery.fn.load,

+

+	load: function( url, params, callback ) {

+		///	<summary>

+		///		Loads HTML from a remote file and injects it into the DOM.  By default performs a GET request, but if parameters are included

+		///		then a POST will be performed.

+		///	</summary>

+		///	<param name="url" type="String">The URL of the HTML page to load.</param>

+		///	<param name="data" optional="true" type="Map">Key/value pairs that will be sent to the server.</param>

+		///	<param name="callback" optional="true" type="Function">The function called when the AJAX request is complete.  It should map function(responseText, textStatus, XMLHttpRequest) such that this maps the injected DOM element.</param>

+		///	<returns type="jQuery" />

+

+		if ( typeof url !== "string" ) {

+			return this._load( url );

+

+		// Don't do a request if no elements are being requested

+		} else if ( !this.length ) {

+			return this;

+		}

+

+		var off = url.indexOf(" ");

+		if ( off >= 0 ) {

+			var selector = url.slice(off, url.length);

+			url = url.slice(0, off);

+		}

+

+		// Default to a GET request

+		var type = "GET";

+

+		// If the second parameter was provided

+		if ( params ) {

+			// If it's a function

+			if ( jQuery.isFunction( params ) ) {

+				// We assume that it's the callback

+				callback = params;

+				params = null;

+

+			// Otherwise, build a param string

+			} else if ( typeof params === "object" ) {

+				params = jQuery.param( params, jQuery.ajaxSettings.traditional );

+				type = "POST";

+			}

+		}

+

+		var self = this;

+

+		// Request the remote document

+		jQuery.ajax({

+			url: url,

+			type: type,

+			dataType: "html",

+			data: params,

+			complete: function( res, status ) {

+				// If successful, inject the HTML into all the matched elements

+				if ( status === "success" || status === "notmodified" ) {

+					// See if a selector was specified

+					self.html( selector ?

+						// Create a dummy div to hold the results

+						jQuery("<div />")

+							// inject the contents of the document in, removing the scripts

+							// to avoid any 'Permission Denied' errors in IE

+							.append(res.responseText.replace(rscript, ""))

+

+							// Locate the specified elements

+							.find(selector) :

+

+						// If not, just inject the full result

+						res.responseText );

+				}

+

+				if ( callback ) {

+					self.each( callback, [res.responseText, status, res] );

+				}

+			}

+		});

+

+		return this;

+	},

+

+	serialize: function() {

+		///	<summary>

+		///		Serializes a set of input elements into a string of data.

+		///	</summary>

+		///	<returns type="String">The serialized result</returns>

+

+		return jQuery.param(this.serializeArray());

+	},

+	serializeArray: function() {

+		///	<summary>

+		///		Serializes all forms and form elements but returns a JSON data structure.

+		///	</summary>

+		///	<returns type="String">A JSON data structure representing the serialized items.</returns>

+

+		return this.map(function() {

+			return this.elements ? jQuery.makeArray(this.elements) : this;

+		})

+		.filter(function() {

+			return this.name && !this.disabled &&

+				(this.checked || rselectTextarea.test(this.nodeName) ||

+					rinput.test(this.type));

+		})

+		.map(function( i, elem ) {

+			var val = jQuery(this).val();

+

+			return val == null ?

+				null :

+				jQuery.isArray(val) ?

+					jQuery.map( val, function( val, i ) {

+						return { name: elem.name, value: val };

+					}) :

+					{ name: elem.name, value: val };

+		}).get();

+	}

+});

+

+// Attach a bunch of functions for handling common AJAX events

+//	jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o ) {

+//		jQuery.fn[o] = function( f ) {

+//			return this.bind(o, f);

+//		};

+//	});

+

+jQuery.fn["ajaxStart"] = function( f ) {

+	///	<summary>

+	///		Attach a function to be executed whenever an AJAX request begins and there is none already active. This is an Ajax Event.

+	///	</summary>

+	///	<param name="f" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return this.bind("ajaxStart", f);

+};

+

+jQuery.fn["ajaxStop"] = function( f ) {

+	///	<summary>

+	///		Attach a function to be executed whenever all AJAX requests have ended. This is an Ajax Event.

+	///	</summary>

+	///	<param name="f" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return this.bind("ajaxStop", f);

+};

+

+jQuery.fn["ajaxComplete"] = function( f ) {

+	///	<summary>

+	///		Attach a function to be executed whenever an AJAX request completes. This is an Ajax Event.

+	///	</summary>

+	///	<param name="f" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return this.bind("ajaxComplete", f);

+};

+

+jQuery.fn["ajaxError"] = function( f ) {

+	///	<summary>

+	///		Attach a function to be executed whenever an AJAX request fails. This is an Ajax Event.

+	///	</summary>

+	///	<param name="f" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return this.bind("ajaxError", f);

+};

+

+jQuery.fn["ajaxSuccess"] = function( f ) {

+	///	<summary>

+	///		Attach a function to be executed whenever an AJAX request completes successfully. This is an Ajax Event.

+	///	</summary>

+	///	<param name="f" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return this.bind("ajaxSuccess", f);

+};

+

+jQuery.fn["ajaxSend"] = function( f ) {

+	///	<summary>

+	///		Attach a function to be executed before an AJAX request is sent. This is an Ajax Event.

+	///	</summary>

+	///	<param name="f" type="Function">The function to execute.</param>

+	///	<returns type="jQuery" />

+

+	return this.bind("ajaxSend", f);

+};

+

+jQuery.extend({

+

+	get: function( url, data, callback, type ) {

+		///	<summary>

+		///		Loads a remote page using an HTTP GET request.

+		///	</summary>

+		///	<param name="url" type="String">The URL of the HTML page to load.</param>

+		///	<param name="data" optional="true" type="Map">Key/value pairs that will be sent to the server.</param>

+		///	<param name="callback" optional="true" type="Function">The function called when the AJAX request is complete.  It should map function(responseText, textStatus) such that this maps the options for this AJAX request.</param>

+		///	<param name="type" optional="true" type="String">Type of data to be returned to callback function.  Valid valiues are xml, html, script, json, text, _default.</param>

+		///	<returns type="XMLHttpRequest" />

+

+		// shift arguments if data argument was omited

+		if ( jQuery.isFunction( data ) ) {

+			type = type || callback;

+			callback = data;

+			data = null;

+		}

+

+		return jQuery.ajax({

+			type: "GET",

+			url: url,

+			data: data,

+			success: callback,

+			dataType: type

+		});

+	},

+

+	getScript: function( url, callback ) {

+		///	<summary>

+		///		Loads and executes a local JavaScript file using an HTTP GET request.

+		///	</summary>

+		///	<param name="url" type="String">The URL of the script to load.</param>

+		///	<param name="callback" optional="true" type="Function">The function called when the AJAX request is complete.  It should map function(data, textStatus) such that this maps the options for the AJAX request.</param>

+		///	<returns type="XMLHttpRequest" />

+

+		return jQuery.get(url, null, callback, "script");

+	},

+

+	getJSON: function( url, data, callback ) {

+		///	<summary>

+		///		Loads JSON data using an HTTP GET request.

+		///	</summary>

+		///	<param name="url" type="String">The URL of the JSON data to load.</param>

+		///	<param name="data" optional="true" type="Map">Key/value pairs that will be sent to the server.</param>

+		///	<param name="callback" optional="true" type="Function">The function called when the AJAX request is complete if the data is loaded successfully.  It should map function(data, textStatus) such that this maps the options for this AJAX request.</param>

+		///	<returns type="XMLHttpRequest" />

+

+		return jQuery.get(url, data, callback, "json");

+	},

+

+	post: function( url, data, callback, type ) {

+		///	<summary>

+		///		Loads a remote page using an HTTP POST request.

+		///	</summary>

+		///	<param name="url" type="String">The URL of the HTML page to load.</param>

+		///	<param name="data" optional="true" type="Map">Key/value pairs that will be sent to the server.</param>

+		///	<param name="callback" optional="true" type="Function">The function called when the AJAX request is complete.  It should map function(responseText, textStatus) such that this maps the options for this AJAX request.</param>

+		///	<param name="type" optional="true" type="String">Type of data to be returned to callback function.  Valid valiues are xml, html, script, json, text, _default.</param>

+		///	<returns type="XMLHttpRequest" />

+

+		// shift arguments if data argument was omited

+		if ( jQuery.isFunction( data ) ) {

+			type = type || callback;

+			callback = data;

+			data = {};

+		}

+

+		return jQuery.ajax({

+			type: "POST",

+			url: url,

+			data: data,

+			success: callback,

+			dataType: type

+		});

+	},

+

+	ajaxSetup: function( settings ) {

+		///	<summary>

+		///		Sets up global settings for AJAX requests.

+		///	</summary>

+		///	<param name="settings" type="Options">A set of key/value pairs that configure the default Ajax request.</param>

+

+		jQuery.extend( jQuery.ajaxSettings, settings );

+	},

+

+	ajaxSettings: {

+		url: location.href,

+		global: true,

+		type: "GET",

+		contentType: "application/x-www-form-urlencoded",

+		processData: true,

+		async: true,

+		/*

+		timeout: 0,

+		data: null,

+		username: null,

+		password: null,

+		traditional: false,

+		*/

+		// Create the request object; Microsoft failed to properly

+		// implement the XMLHttpRequest in IE7 (can't request local files),

+		// so we use the ActiveXObject when it is available

+		// This function can be overriden by calling jQuery.ajaxSetup

+		xhr: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ?

+			function() {

+				return new window.XMLHttpRequest();

+			} :

+			function() {

+				try {

+					return new window.ActiveXObject("Microsoft.XMLHTTP");

+				} catch(e) {}

+			},

+		accepts: {

+			xml: "application/xml, text/xml",

+			html: "text/html",

+			script: "text/javascript, application/javascript",

+			json: "application/json, text/javascript",

+			text: "text/plain",

+			_default: "*/*"

+		}

+	},

+

+	// Last-Modified header cache for next request

+	lastModified: {},

+	etag: {},

+

+	ajax: function( origSettings ) {

+		///	<summary>

+		///		Load a remote page using an HTTP request.

+		///	</summary>

+		///	<private />

+

+		var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings);

+		

+		var jsonp, status, data,

+			callbackContext = origSettings && origSettings.context || s,

+			type = s.type.toUpperCase();

+

+		// convert data if not already a string

+		if ( s.data && s.processData && typeof s.data !== "string" ) {

+			s.data = jQuery.param( s.data, s.traditional );

+		}

+

+		// Handle JSONP Parameter Callbacks

+		if ( s.dataType === "jsonp" ) {

+			if ( type === "GET" ) {

+				if ( !jsre.test( s.url ) ) {

+					s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?";

+				}

+			} else if ( !s.data || !jsre.test(s.data) ) {

+				s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";

+			}

+			s.dataType = "json";

+		}

+

+		// Build temporary JSONP function

+		if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) {

+			jsonp = s.jsonpCallback || ("jsonp" + jsc++);

+

+			// Replace the =? sequence both in the query string and the data

+			if ( s.data ) {

+				s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");

+			}

+

+			s.url = s.url.replace(jsre, "=" + jsonp + "$1");

+

+			// We need to make sure

+			// that a JSONP style response is executed properly

+			s.dataType = "script";

+

+			// Handle JSONP-style loading

+			window[ jsonp ] = window[ jsonp ] || function( tmp ) {

+				data = tmp;

+				success();

+				complete();

+				// Garbage collect

+				window[ jsonp ] = undefined;

+

+				try {

+					delete window[ jsonp ];

+				} catch(e) {}

+

+				if ( head ) {

+					head.removeChild( script );

+				}

+			};

+		}

+

+		if ( s.dataType === "script" && s.cache === null ) {

+			s.cache = false;

+		}

+

+		if ( s.cache === false && type === "GET" ) {

+			var ts = now();

+

+			// try replacing _= if it is there

+			var ret = s.url.replace(rts, "$1_=" + ts + "$2");

+

+			// if nothing was replaced, add timestamp to the end

+			s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");

+		}

+

+		// If data is available, append data to url for get requests

+		if ( s.data && type === "GET" ) {

+			s.url += (rquery.test(s.url) ? "&" : "?") + s.data;

+		}

+

+		// Watch for a new set of requests

+		if ( s.global && ! jQuery.active++ ) {

+			jQuery.event.trigger( "ajaxStart" );

+		}

+

+		// Matches an absolute URL, and saves the domain

+		var parts = rurl.exec( s.url ),

+			remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);

+

+		// If we're requesting a remote document

+		// and trying to load JSON or Script with a GET

+		if ( s.dataType === "script" && type === "GET" && remote ) {

+			var head = document.getElementsByTagName("head")[0] || document.documentElement;

+			var script = document.createElement("script");

+			script.src = s.url;

+			if ( s.scriptCharset ) {

+				script.charset = s.scriptCharset;

+			}

+

+			// Handle Script loading

+			if ( !jsonp ) {

+				var done = false;

+

+				// Attach handlers for all browsers

+				script.onload = script.onreadystatechange = function() {

+					if ( !done && (!this.readyState ||

+							this.readyState === "loaded" || this.readyState === "complete") ) {

+						done = true;

+						success();

+						complete();

+

+						// Handle memory leak in IE

+						script.onload = script.onreadystatechange = null;

+						if ( head && script.parentNode ) {

+							head.removeChild( script );

+						}

+					}

+				};

+			}

+

+			// Use insertBefore instead of appendChild  to circumvent an IE6 bug.

+			// This arises when a base node is used (#2709 and #4378).

+			head.insertBefore( script, head.firstChild );

+

+			// We handle everything using the script element injection

+			return undefined;

+		}

+

+		var requestDone = false;

+

+		// Create the request object

+		var xhr = s.xhr();

+

+		if ( !xhr ) {

+			return;

+		}

+

+		// Open the socket

+		// Passing null username, generates a login popup on Opera (#2865)

+		if ( s.username ) {

+			xhr.open(type, s.url, s.async, s.username, s.password);

+		} else {

+			xhr.open(type, s.url, s.async);

+		}

+

+		// Need an extra try/catch for cross domain requests in Firefox 3

+		try {

+			// Set the correct header, if data is being sent

+			if ( s.data || origSettings && origSettings.contentType ) {

+				xhr.setRequestHeader("Content-Type", s.contentType);

+			}

+

+			// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.

+			if ( s.ifModified ) {

+				if ( jQuery.lastModified[s.url] ) {

+					xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);

+				}

+

+				if ( jQuery.etag[s.url] ) {

+					xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);

+				}

+			}

+

+			// Set header so the called script knows that it's an XMLHttpRequest

+			// Only send the header if it's not a remote XHR

+			if ( !remote ) {

+				xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");

+			}

+

+			// Set the Accepts header for the server, depending on the dataType

+			xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?

+				s.accepts[ s.dataType ] + ", */*" :

+				s.accepts._default );

+		} catch(e) {}

+

+		// Allow custom headers/mimetypes and early abort

+		if ( s.beforeSend && s.beforeSend.call(callbackContext, xhr, s) === false ) {

+			// Handle the global AJAX counter

+			if ( s.global && ! --jQuery.active ) {

+				jQuery.event.trigger( "ajaxStop" );

+			}

+

+			// close opended socket

+			xhr.abort();

+			return false;

+		}

+

+		if ( s.global ) {

+			trigger("ajaxSend", [xhr, s]);

+		}

+

+		// Wait for a response to come back

+		var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) {

+			// The request was aborted

+			if ( !xhr || xhr.readyState === 0 || isTimeout === "abort" ) {

+				// Opera doesn't call onreadystatechange before this point

+				// so we simulate the call

+				if ( !requestDone ) {

+					complete();

+				}

+

+				requestDone = true;

+				if ( xhr ) {

+					xhr.onreadystatechange = jQuery.noop;

+				}

+

+			// The transfer is complete and the data is available, or the request timed out

+			} else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {

+				requestDone = true;

+				xhr.onreadystatechange = jQuery.noop;

+

+				status = isTimeout === "timeout" ?

+					"timeout" :

+					!jQuery.httpSuccess( xhr ) ?

+						"error" :

+						s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?

+							"notmodified" :

+							"success";

+

+				var errMsg;

+

+				if ( status === "success" ) {

+					// Watch for, and catch, XML document parse errors

+					try {

+						// process the data (runs the xml through httpData regardless of callback)

+						data = jQuery.httpData( xhr, s.dataType, s );

+					} catch(err) {

+						status = "parsererror";

+						errMsg = err;

+					}

+				}

+

+				// Make sure that the request was successful or notmodified

+				if ( status === "success" || status === "notmodified" ) {

+					// JSONP handles its own success callback

+					if ( !jsonp ) {

+						success();

+					}

+				} else {

+					jQuery.handleError(s, xhr, status, errMsg);

+				}

+

+				// Fire the complete handlers

+				complete();

+

+				if ( isTimeout === "timeout" ) {

+					xhr.abort();

+				}

+

+				// Stop memory leaks

+				if ( s.async ) {

+					xhr = null;

+				}

+			}

+		};

+

+		// Override the abort handler, if we can (IE doesn't allow it, but that's OK)

+		// Opera doesn't fire onreadystatechange at all on abort

+		try {

+			var oldAbort = xhr.abort;

+			xhr.abort = function() {

+				if ( xhr ) {

+					oldAbort.call( xhr );

+				}

+

+				onreadystatechange( "abort" );

+			};

+		} catch(e) { }

+

+		// Timeout checker

+		if ( s.async && s.timeout > 0 ) {

+			setTimeout(function() {

+				// Check to see if the request is still happening

+				if ( xhr && !requestDone ) {

+					onreadystatechange( "timeout" );

+				}

+			}, s.timeout);

+		}

+

+		// Send the data

+		try {

+			xhr.send( type === "POST" || type === "PUT" || type === "DELETE" ? s.data : null );

+		} catch(e) {

+			jQuery.handleError(s, xhr, null, e);

+			// Fire the complete handlers

+			complete();

+		}

+

+		// firefox 1.5 doesn't fire statechange for sync requests

+		if ( !s.async ) {

+			onreadystatechange();

+		}

+

+		function success() {

+			// If a local callback was specified, fire it and pass it the data

+			if ( s.success ) {

+				s.success.call( callbackContext, data, status, xhr );

+			}

+

+			// Fire the global callback

+			if ( s.global ) {

+				trigger( "ajaxSuccess", [xhr, s] );

+			}

+		}

+

+		function complete() {

+			// Process result

+			if ( s.complete ) {

+				s.complete.call( callbackContext, xhr, status);

+			}

+

+			// The request was completed

+			if ( s.global ) {

+				trigger( "ajaxComplete", [xhr, s] );

+			}

+

+			// Handle the global AJAX counter

+			if ( s.global && ! --jQuery.active ) {

+				jQuery.event.trigger( "ajaxStop" );

+			}

+		}

+		

+		function trigger(type, args) {

+			(s.context ? jQuery(s.context) : jQuery.event).trigger(type, args);

+		}

+

+		// return XMLHttpRequest to allow aborting the request etc.

+		return xhr;

+	},

+

+	handleError: function( s, xhr, status, e ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		// If a local callback was specified, fire it

+		if ( s.error ) {

+			s.error.call( s.context || s, xhr, status, e );

+		}

+

+		// Fire the global callback

+		if ( s.global ) {

+			(s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );

+		}

+	},

+

+	// Counter for holding the number of active queries

+	active: 0,

+

+	// Determines if an XMLHttpRequest was successful or not

+	httpSuccess: function( xhr ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		try {

+			// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450

+			return !xhr.status && location.protocol === "file:" ||

+				// Opera returns 0 when status is 304

+				( xhr.status >= 200 && xhr.status < 300 ) ||

+				xhr.status === 304 || xhr.status === 1223 || xhr.status === 0;

+		} catch(e) {}

+

+		return false;

+	},

+

+	// Determines if an XMLHttpRequest returns NotModified

+	httpNotModified: function( xhr, url ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		var lastModified = xhr.getResponseHeader("Last-Modified"),

+			etag = xhr.getResponseHeader("Etag");

+

+		if ( lastModified ) {

+			jQuery.lastModified[url] = lastModified;

+		}

+

+		if ( etag ) {

+			jQuery.etag[url] = etag;

+		}

+

+		// Opera returns 0 when status is 304

+		return xhr.status === 304 || xhr.status === 0;

+	},

+

+	httpData: function( xhr, type, s ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		var ct = xhr.getResponseHeader("content-type") || "",

+			xml = type === "xml" || !type && ct.indexOf("xml") >= 0,

+			data = xml ? xhr.responseXML : xhr.responseText;

+

+		if ( xml && data.documentElement.nodeName === "parsererror" ) {

+			jQuery.error( "parsererror" );

+		}

+

+		// Allow a pre-filtering function to sanitize the response

+		// s is checked to keep backwards compatibility

+		if ( s && s.dataFilter ) {

+			data = s.dataFilter( data, type );

+		}

+

+		// The filter can actually parse the response

+		if ( typeof data === "string" ) {

+			// Get the JavaScript object, if JSON is used.

+			if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {

+				data = jQuery.parseJSON( data );

+

+			// If the type is "script", eval it in global context

+			} else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) {

+				jQuery.globalEval( data );

+			}

+		}

+

+		return data;

+	},

+

+	// Serialize an array of form elements or a set of

+	// key/values into a query string

+	param: function( a, traditional ) {

+		///	<summary>

+		///		Create a serialized representation of an array or object, suitable for use in a URL

+		///		query string or Ajax request.

+		///	</summary>

+		///	<param name="a" type="Object">

+		///		An array or object to serialize.

+		///	</param>

+		///	<param name="traditional" type="Boolean">

+		///		A Boolean indicating whether to perform a traditional "shallow" serialization.

+		///	</param>

+		///	<returns type="String" />

+

+		var s = [];

+		

+		// Set traditional to true for jQuery <= 1.3.2 behavior.

+		if ( traditional === undefined ) {

+			traditional = jQuery.ajaxSettings.traditional;

+		}

+		

+		// If an array was passed in, assume that it is an array of form elements.

+		if ( jQuery.isArray(a) || a.jquery ) {

+			// Serialize the form elements

+			jQuery.each( a, function() {

+				add( this.name, this.value );

+			});

+			

+		} else {

+			// If traditional, encode the "old" way (the way 1.3.2 or older

+			// did it), otherwise encode params recursively.

+			for ( var prefix in a ) {

+				buildParams( prefix, a[prefix] );

+			}

+		}

+

+		// Return the resulting serialization

+		return s.join("&").replace(r20, "+");

+

+		function buildParams( prefix, obj ) {

+			if ( jQuery.isArray(obj) ) {

+				// Serialize array item.

+				jQuery.each( obj, function( i, v ) {

+					if ( traditional ) {

+						// Treat each array item as a scalar.

+						add( prefix, v );

+					} else {

+						// If array item is non-scalar (array or object), encode its

+						// numeric index to resolve deserialization ambiguity issues.

+						// Note that rack (as of 1.0.0) can't currently deserialize

+						// nested arrays properly, and attempting to do so may cause

+						// a server error. Possible fixes are to modify rack's

+						// deserialization algorithm or to provide an option or flag

+						// to force array serialization to be shallow.

+						buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v );

+					}

+				});

+					

+			} else if ( !traditional && obj != null && typeof obj === "object" ) {

+				// Serialize object item.

+				jQuery.each( obj, function( k, v ) {

+					buildParams( prefix + "[" + k + "]", v );

+				});

+					

+			} else {

+				// Serialize scalar item.

+				add( prefix, obj );

+			}

+		}

+

+		function add( key, value ) {

+			// If value is a function, invoke it and return its value

+			value = jQuery.isFunction(value) ? value() : value;

+			s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);

+		}

+	}

+});

+var elemdisplay = {},

+	rfxtypes = /toggle|show|hide/,

+	rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/,

+	timerId,

+	fxAttrs = [

+		// height animations

+		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],

+		// width animations

+		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],

+		// opacity animations

+		[ "opacity" ]

+	];

+

+jQuery.fn.extend({

+	show: function( speed, callback ) {

+		///	<summary>

+		///		Show all matched elements using a graceful animation and firing an optional callback after completion.

+		///	</summary>

+		///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+		///		the number of milliseconds to run the animation</param>

+		///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+		///	<returns type="jQuery" />

+

+		if ( speed || speed === 0) {

+			return this.animate( genFx("show", 3), speed, callback);

+

+		} else {

+			for ( var i = 0, l = this.length; i < l; i++ ) {

+				var old = jQuery.data(this[i], "olddisplay");

+

+				this[i].style.display = old || "";

+

+				if ( jQuery.css(this[i], "display") === "none" ) {

+					var nodeName = this[i].nodeName, display;

+

+					if ( elemdisplay[ nodeName ] ) {

+						display = elemdisplay[ nodeName ];

+

+					} else {

+						var elem = jQuery("<" + nodeName + " />").appendTo("body");

+

+						display = elem.css("display");

+

+						if ( display === "none" ) {

+							display = "block";

+						}

+

+						elem.remove();

+

+						elemdisplay[ nodeName ] = display;

+					}

+

+					jQuery.data(this[i], "olddisplay", display);

+				}

+			}

+

+			// Set the display of the elements in a second loop

+			// to avoid the constant reflow

+			for ( var j = 0, k = this.length; j < k; j++ ) {

+				this[j].style.display = jQuery.data(this[j], "olddisplay") || "";

+			}

+

+			return this;

+		}

+	},

+

+	hide: function( speed, callback ) {

+		///	<summary>

+		///		Hides all matched elements using a graceful animation and firing an optional callback after completion.

+		///	</summary>

+		///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+		///		the number of milliseconds to run the animation</param>

+		///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+		///	<returns type="jQuery" />

+

+		if ( speed || speed === 0 ) {

+			return this.animate( genFx("hide", 3), speed, callback);

+

+		} else {

+			for ( var i = 0, l = this.length; i < l; i++ ) {

+				var old = jQuery.data(this[i], "olddisplay");

+				if ( !old && old !== "none" ) {

+					jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));

+				}

+			}

+

+			// Set the display of the elements in a second loop

+			// to avoid the constant reflow

+			for ( var j = 0, k = this.length; j < k; j++ ) {

+				this[j].style.display = "none";

+			}

+

+			return this;

+		}

+	},

+

+	// Save the old toggle function

+	_toggle: jQuery.fn.toggle,

+

+	toggle: function( fn, fn2 ) {

+		///	<summary>

+		///		Toggles displaying each of the set of matched elements.

+		///	</summary>

+		///	<returns type="jQuery" />

+

+		var bool = typeof fn === "boolean";

+

+		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {

+			this._toggle.apply( this, arguments );

+

+		} else if ( fn == null || bool ) {

+			this.each(function() {

+				var state = bool ? fn : jQuery(this).is(":hidden");

+				jQuery(this)[ state ? "show" : "hide" ]();

+			});

+

+		} else {

+			this.animate(genFx("toggle", 3), fn, fn2);

+		}

+

+		return this;

+	},

+

+	fadeTo: function( speed, to, callback ) {

+		///	<summary>

+		///		Fades the opacity of all matched elements to a specified opacity.

+		///	</summary>

+		///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+		///		the number of milliseconds to run the animation</param>

+		///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+		///	<returns type="jQuery" />

+

+		return this.filter(":hidden").css("opacity", 0).show().end()

+					.animate({opacity: to}, speed, callback);

+	},

+

+	animate: function( prop, speed, easing, callback ) {

+		///	<summary>

+		///		A function for making custom animations.

+		///	</summary>

+		///	<param name="prop" type="Options">A set of style attributes that you wish to animate and to what end.</param>

+		///	<param name="speed" optional="true" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+		///		the number of milliseconds to run the animation</param>

+		///	<param name="easing" optional="true" type="String">The name of the easing effect that you want to use.  There are two built-in values, 'linear' and 'swing'.</param>

+		///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+		///	<returns type="jQuery" />

+

+		var optall = jQuery.speed(speed, easing, callback);

+

+		if ( jQuery.isEmptyObject( prop ) ) {

+			return this.each( optall.complete );

+		}

+

+		return this[ optall.queue === false ? "each" : "queue" ](function() {

+			var opt = jQuery.extend({}, optall), p,

+				hidden = this.nodeType === 1 && jQuery(this).is(":hidden"),

+				self = this;

+

+			for ( p in prop ) {

+				var name = p.replace(rdashAlpha, fcamelCase);

+

+				if ( p !== name ) {

+					prop[ name ] = prop[ p ];

+					delete prop[ p ];

+					p = name;

+				}

+

+				if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {

+					return opt.complete.call(this);

+				}

+

+				if ( ( p === "height" || p === "width" ) && this.style ) {

+					// Store display property

+					opt.display = jQuery.css(this, "display");

+

+					// Make sure that nothing sneaks out

+					opt.overflow = this.style.overflow;

+				}

+

+				if ( jQuery.isArray( prop[p] ) ) {

+					// Create (if needed) and add to specialEasing

+					(opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1];

+					prop[p] = prop[p][0];

+				}

+			}

+

+			if ( opt.overflow != null ) {

+				this.style.overflow = "hidden";

+			}

+

+			opt.curAnim = jQuery.extend({}, prop);

+

+			jQuery.each( prop, function( name, val ) {

+				var e = new jQuery.fx( self, opt, name );

+

+				if ( rfxtypes.test(val) ) {

+					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop );

+

+				} else {

+					var parts = rfxnum.exec(val),

+						start = e.cur(true) || 0;

+

+					if ( parts ) {

+						var end = parseFloat( parts[2] ),

+							unit = parts[3] || "px";

+

+						// We need to compute starting value

+						if ( unit !== "px" ) {

+							self.style[ name ] = (end || 1) + unit;

+							start = ((end || 1) / e.cur(true)) * start;

+							self.style[ name ] = start + unit;

+						}

+

+						// If a +=/-= token was provided, we're doing a relative animation

+						if ( parts[1] ) {

+							end = ((parts[1] === "-=" ? -1 : 1) * end) + start;

+						}

+

+						e.custom( start, end, unit );

+

+					} else {

+						e.custom( start, val, "" );

+					}

+				}

+			});

+

+			// For JS strict compliance

+			return true;

+		});

+	},

+

+	stop: function( clearQueue, gotoEnd ) {

+		///	<summary>

+		///		Stops all currently animations on the specified elements.

+		///	</summary>

+		///	<param name="clearQueue" optional="true" type="Boolean">True to clear animations that are queued to run.</param>

+		///	<param name="gotoEnd" optional="true" type="Boolean">True to move the element value to the end of its animation target.</param>

+		///	<returns type="jQuery" />

+

+		var timers = jQuery.timers;

+

+		if ( clearQueue ) {

+			this.queue([]);

+		}

+

+		this.each(function() {

+			// go in reverse order so anything added to the queue during the loop is ignored

+			for ( var i = timers.length - 1; i >= 0; i-- ) {

+				if ( timers[i].elem === this ) {

+					if (gotoEnd) {

+						// force the next step to be the last

+						timers[i](true);

+					}

+

+					timers.splice(i, 1);

+				}

+			}

+		});

+

+		// start the next in the queue if the last step wasn't forced

+		if ( !gotoEnd ) {

+			this.dequeue();

+		}

+

+		return this;

+	}

+

+});

+

+// Generate shortcuts for custom animations

+//	jQuery.each({

+//		slideDown: genFx("show", 1),

+//		slideUp: genFx("hide", 1),

+//		slideToggle: genFx("toggle", 1),

+//		fadeIn: { opacity: "show" },

+//		fadeOut: { opacity: "hide" }

+//	}, function( name, props ) {

+//		jQuery.fn[ name ] = function( speed, callback ) {

+//			return this.animate( props, speed, callback );

+//		};

+//	});

+

+jQuery.fn[ "slideDown" ] = function( speed, callback ) {

+	///	<summary>

+	///		Reveal all matched elements by adjusting their height.

+	///	</summary>

+	///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+	///		the number of milliseconds to run the animation</param>

+	///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+	///	<returns type="jQuery" />

+

+	return this.animate( genFx("show", 1), speed, callback );

+};

+

+jQuery.fn[ "slideUp" ] = function( speed, callback ) {

+	///	<summary>

+	///		Hiding all matched elements by adjusting their height.

+	///	</summary>

+	///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+	///		the number of milliseconds to run the animation</param>

+	///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+	///	<returns type="jQuery" />

+

+	return this.animate( genFx("hide", 1), speed, callback );

+};

+

+jQuery.fn[ "slideToggle" ] = function( speed, callback ) {

+	///	<summary>

+	///		Toggles the visibility of all matched elements by adjusting their height.

+	///	</summary>

+	///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+	///		the number of milliseconds to run the animation</param>

+	///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+	///	<returns type="jQuery" />

+

+	return this.animate( genFx("toggle", 1), speed, callback );

+};

+

+jQuery.fn[ "fadeIn" ] = function( speed, callback ) {

+	///	<summary>

+	///		Fades in all matched elements by adjusting their opacity.

+	///	</summary>

+	///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+	///		the number of milliseconds to run the animation</param>

+	///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+	///	<returns type="jQuery" />

+

+	return this.animate( { opacity: "show" }, speed, callback );

+};

+

+jQuery.fn[ "fadeOut" ] = function( speed, callback ) {

+	///	<summary>

+	///		Fades the opacity of all matched elements to a specified opacity.

+	///	</summary>

+	///	<param name="speed" type="String">A string representing one of three predefined speeds ('slow', 'normal', or 'fast'), or

+	///		the number of milliseconds to run the animation</param>

+	///	<param name="callback" optional="true" type="Function">A function to be executed whenever the animation completes, once for each animated element.  It should map function callback() such that this is the DOM element being animated.</param>

+	///	<returns type="jQuery" />

+

+	return this.animate( { opacity: "hide" }, speed, callback );

+};

+

+jQuery.extend({

+	speed: function( speed, easing, fn ) {

+		///	<summary>

+		///		This member is internal.

+		///	</summary>

+		///	<private />

+

+		var opt = speed && typeof speed === "object" ? speed : {

+			complete: fn || !fn && easing ||

+				jQuery.isFunction( speed ) && speed,

+			duration: speed,

+			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing

+		};

+

+		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :

+			jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;

+

+		// Queueing

+		opt.old = opt.complete;

+		opt.complete = function() {

+			if ( opt.queue !== false ) {

+				jQuery(this).dequeue();

+			}

+			if ( jQuery.isFunction( opt.old ) ) {

+				opt.old.call( this );

+			}

+		};

+

+		return opt;

+	},

+

+	easing: {

+		linear: function( p, n, firstNum, diff ) {

+			///	<summary>

+			///		This member is internal.

+			///	</summary>

+			///	<private />

+

+			return firstNum + diff * p;

+		},

+		swing: function( p, n, firstNum, diff ) {

+			///	<summary>

+			///		This member is internal.

+			///	</summary>

+			///	<private />

+

+			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;

+		}

+	},

+

+	timers: [],

+

+	fx: function( elem, options, prop ) {

+		///	<summary>

+		///		This member is internal.

+		///	</summary>

+		///	<private />

+

+		this.options = options;

+		this.elem = elem;

+		this.prop = prop;

+

+		if ( !options.orig ) {

+			options.orig = {};

+		}

+	}

+

+});

+

+jQuery.fx.prototype = {

+	// Simple function for setting a style value

+	update: function() {

+		///	<summary>

+		///		This member is internal.

+		///	</summary>

+		///	<private />

+

+		if ( this.options.step ) {

+			this.options.step.call( this.elem, this.now, this );

+		}

+

+		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );

+

+		// Set display property to block for height/width animations

+		if ( ( this.prop === "height" || this.prop === "width" ) && this.elem.style ) {

+			this.elem.style.display = "block";

+		}

+	},

+

+	// Get the current size

+	cur: function( force ) {

+		///	<summary>

+		///		This member is internal.

+		///	</summary>

+		///	<private />

+

+		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {

+			return this.elem[ this.prop ];

+		}

+

+		var r = parseFloat(jQuery.css(this.elem, this.prop, force));

+		return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;

+	},

+

+	// Start an animation from one number to another

+	custom: function( from, to, unit ) {

+		this.startTime = now();

+		this.start = from;

+		this.end = to;

+		this.unit = unit || this.unit || "px";

+		this.now = this.start;

+		this.pos = this.state = 0;

+

+		var self = this;

+		function t( gotoEnd ) {

+			return self.step(gotoEnd);

+		}

+

+		t.elem = this.elem;

+

+		if ( t() && jQuery.timers.push(t) && !timerId ) {

+			timerId = setInterval(jQuery.fx.tick, 13);

+		}

+	},

+

+	// Simple 'show' function

+	show: function() {

+		///	<summary>

+		///		Displays each of the set of matched elements if they are hidden.

+		///	</summary>

+

+		// Remember where we started, so that we can go back to it later

+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );

+		this.options.show = true;

+

+		// Begin the animation

+		// Make sure that we start at a small width/height to avoid any

+		// flash of content

+		this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());

+

+		// Start by showing the element

+		jQuery( this.elem ).show();

+	},

+

+	// Simple 'hide' function

+	hide: function() {

+		///	<summary>

+		///		Hides each of the set of matched elements if they are shown.

+		///	</summary>

+

+		// Remember where we started, so that we can go back to it later

+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );

+		this.options.hide = true;

+

+		// Begin the animation

+		this.custom(this.cur(), 0);

+	},

+

+	// Each step of an animation

+	step: function( gotoEnd ) {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		var t = now(), done = true;

+

+		if ( gotoEnd || t >= this.options.duration + this.startTime ) {

+			this.now = this.end;

+			this.pos = this.state = 1;

+			this.update();

+

+			this.options.curAnim[ this.prop ] = true;

+

+			for ( var i in this.options.curAnim ) {

+				if ( this.options.curAnim[i] !== true ) {

+					done = false;

+				}

+			}

+

+			if ( done ) {

+				if ( this.options.display != null ) {

+					// Reset the overflow

+					this.elem.style.overflow = this.options.overflow;

+

+					// Reset the display

+					var old = jQuery.data(this.elem, "olddisplay");

+					this.elem.style.display = old ? old : this.options.display;

+

+					if ( jQuery.css(this.elem, "display") === "none" ) {

+						this.elem.style.display = "block";

+					}

+				}

+

+				// Hide the element if the "hide" operation was done

+				if ( this.options.hide ) {

+					jQuery(this.elem).hide();

+				}

+

+				// Reset the properties, if the item has been hidden or shown

+				if ( this.options.hide || this.options.show ) {

+					for ( var p in this.options.curAnim ) {

+						jQuery.style(this.elem, p, this.options.orig[p]);

+					}

+				}

+

+				// Execute the complete function

+				this.options.complete.call( this.elem );

+			}

+

+			return false;

+

+		} else {

+			var n = t - this.startTime;

+			this.state = n / this.options.duration;

+

+			// Perform the easing function, defaults to swing

+			var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop];

+			var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear");

+			this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);

+			this.now = this.start + ((this.end - this.start) * this.pos);

+

+			// Perform the next step of the animation

+			this.update();

+		}

+

+		return true;

+	}

+};

+

+jQuery.extend( jQuery.fx, {

+	tick: function() {

+		var timers = jQuery.timers;

+

+		for ( var i = 0; i < timers.length; i++ ) {

+			if ( !timers[i]() ) {

+				timers.splice(i--, 1);

+			}

+		}

+

+		if ( !timers.length ) {

+			jQuery.fx.stop();

+		}

+	},

+		

+	stop: function() {

+		clearInterval( timerId );

+		timerId = null;

+	},

+	

+	speeds: {

+		slow: 600,

+ 		fast: 200,

+ 		// Default speed

+ 		_default: 400

+	},

+

+	step: {

+		opacity: function( fx ) {

+			jQuery.style(fx.elem, "opacity", fx.now);

+		},

+

+		_default: function( fx ) {

+			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {

+				fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;

+			} else {

+				fx.elem[ fx.prop ] = fx.now;

+			}

+		}

+	}

+});

+

+if ( jQuery.expr && jQuery.expr.filters ) {

+	jQuery.expr.filters.animated = function( elem ) {

+		return jQuery.grep(jQuery.timers, function( fn ) {

+			return elem === fn.elem;

+		}).length;

+	};

+}

+

+function genFx( type, num ) {

+	var obj = {};

+

+	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {

+		obj[ this ] = type;

+	});

+

+	return obj;

+}

+if ( "getBoundingClientRect" in document.documentElement ) {

+	jQuery.fn.offset = function( options ) {

+		///	<summary>

+		///		Set the current coordinates of every element in the set of matched elements,

+		///		relative to the document.

+		///	</summary>

+		///	<param name="options" type="Object">

+		///		An object containing the properties top and left, which are integers indicating the

+		///		new top and left coordinates for the elements.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		var elem = this[0];

+

+		if ( options ) { 

+			return this.each(function( i ) {

+				jQuery.offset.setOffset( this, options, i );

+			});

+		}

+

+		if ( !elem || !elem.ownerDocument ) {

+			return null;

+		}

+

+		if ( elem === elem.ownerDocument.body ) {

+			return jQuery.offset.bodyOffset( elem );

+		}

+

+		var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement,

+			clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,

+			top  = box.top  + (self.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop ) - clientTop,

+			left = box.left + (self.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;

+

+		return { top: top, left: left };

+	};

+

+} else {

+	jQuery.fn.offset = function( options ) {

+		///	<summary>

+		///		Set the current coordinates of every element in the set of matched elements,

+		///		relative to the document.

+		///	</summary>

+		///	<param name="options" type="Object">

+		///		An object containing the properties top and left, which are integers indicating the

+		///		new top and left coordinates for the elements.

+		///	</param>

+		///	<returns type="jQuery" />

+

+		var elem = this[0];

+

+		if ( options ) { 

+			return this.each(function( i ) {

+				jQuery.offset.setOffset( this, options, i );

+			});

+		}

+

+		if ( !elem || !elem.ownerDocument ) {

+			return null;

+		}

+

+		if ( elem === elem.ownerDocument.body ) {

+			return jQuery.offset.bodyOffset( elem );

+		}

+

+		jQuery.offset.initialize();

+

+		var offsetParent = elem.offsetParent, prevOffsetParent = elem,

+			doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,

+			body = doc.body, defaultView = doc.defaultView,

+			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,

+			top = elem.offsetTop, left = elem.offsetLeft;

+

+		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {

+			if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {

+				break;

+			}

+

+			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;

+			top  -= elem.scrollTop;

+			left -= elem.scrollLeft;

+

+			if ( elem === offsetParent ) {

+				top  += elem.offsetTop;

+				left += elem.offsetLeft;

+

+				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.nodeName)) ) {

+					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;

+					left += parseFloat( computedStyle.borderLeftWidth ) || 0;

+				}

+

+				prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;

+			}

+

+			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {

+				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;

+				left += parseFloat( computedStyle.borderLeftWidth ) || 0;

+			}

+

+			prevComputedStyle = computedStyle;

+		}

+

+		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {

+			top  += body.offsetTop;

+			left += body.offsetLeft;

+		}

+

+		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {

+			top  += Math.max( docElem.scrollTop, body.scrollTop );

+			left += Math.max( docElem.scrollLeft, body.scrollLeft );

+		}

+

+		return { top: top, left: left };

+	};

+}

+

+jQuery.offset = {

+	initialize: function() {

+		var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0,

+			html = "<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>";

+

+		jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );

+

+		container.innerHTML = html;

+		body.insertBefore( container, body.firstChild );

+		innerDiv = container.firstChild;

+		checkDiv = innerDiv.firstChild;

+		td = innerDiv.nextSibling.firstChild.firstChild;

+

+		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);

+		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);

+

+		checkDiv.style.position = "fixed", checkDiv.style.top = "20px";

+		// safari subtracts parent border width here which is 5px

+		this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);

+		checkDiv.style.position = checkDiv.style.top = "";

+

+		innerDiv.style.overflow = "hidden", innerDiv.style.position = "relative";

+		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);

+

+		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);

+

+		body.removeChild( container );

+		body = container = innerDiv = checkDiv = table = td = null;

+		jQuery.offset.initialize = jQuery.noop;

+	},

+

+	bodyOffset: function( body ) {

+		var top = body.offsetTop, left = body.offsetLeft;

+

+		jQuery.offset.initialize();

+

+		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {

+			top  += parseFloat( jQuery.curCSS(body, "marginTop",  true) ) || 0;

+			left += parseFloat( jQuery.curCSS(body, "marginLeft", true) ) || 0;

+		}

+

+		return { top: top, left: left };

+	},

+	

+	setOffset: function( elem, options, i ) {

+		// set position first, in-case top/left are set even on static elem

+		if ( /static/.test( jQuery.curCSS( elem, "position" ) ) ) {

+			elem.style.position = "relative";

+		}

+		var curElem   = jQuery( elem ),

+			curOffset = curElem.offset(),

+			curTop    = parseInt( jQuery.curCSS( elem, "top",  true ), 10 ) || 0,

+			curLeft   = parseInt( jQuery.curCSS( elem, "left", true ), 10 ) || 0;

+

+		if ( jQuery.isFunction( options ) ) {

+			options = options.call( elem, i, curOffset );

+		}

+

+		var props = {

+			top:  (options.top  - curOffset.top)  + curTop,

+			left: (options.left - curOffset.left) + curLeft

+		};

+		

+		if ( "using" in options ) {

+			options.using.call( elem, props );

+		} else {

+			curElem.css( props );

+		}

+	}

+};

+

+

+jQuery.fn.extend({

+	position: function() {

+		///	<summary>

+		///		Gets the top and left positions of an element relative to its offset parent.

+		///	</summary>

+		///	<returns type="Object">An object with two integer properties, 'top' and 'left'.</returns>

+

+		if ( !this[0] ) {

+			return null;

+		}

+

+		var elem = this[0],

+

+		// Get *real* offsetParent

+		offsetParent = this.offsetParent(),

+

+		// Get correct offsets

+		offset       = this.offset(),

+		parentOffset = /^body|html$/i.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();

+

+		// Subtract element margins

+		// note: when an element has margin: auto the offsetLeft and marginLeft

+		// are the same in Safari causing offset.left to incorrectly be 0

+		offset.top  -= parseFloat( jQuery.curCSS(elem, "marginTop",  true) ) || 0;

+		offset.left -= parseFloat( jQuery.curCSS(elem, "marginLeft", true) ) || 0;

+

+		// Add offsetParent borders

+		parentOffset.top  += parseFloat( jQuery.curCSS(offsetParent[0], "borderTopWidth",  true) ) || 0;

+		parentOffset.left += parseFloat( jQuery.curCSS(offsetParent[0], "borderLeftWidth", true) ) || 0;

+

+		// Subtract the two offsets

+		return {

+			top:  offset.top  - parentOffset.top,

+			left: offset.left - parentOffset.left

+		};

+	},

+

+	offsetParent: function() {

+		///	<summary>

+		///		This method is internal.

+		///	</summary>

+		///	<private />

+

+		return this.map(function() {

+			var offsetParent = this.offsetParent || document.body;

+			while ( offsetParent && (!/^body|html$/i.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {

+				offsetParent = offsetParent.offsetParent;

+			}

+			return offsetParent;

+		});

+	}

+});

+

+

+// Create scrollLeft and scrollTop methods

+jQuery.each( ["Left", "Top"], function( i, name ) {

+	var method = "scroll" + name;

+

+	jQuery.fn[ method ] = function(val) {

+		///	<summary>

+		///		Gets and optionally sets the scroll left offset of the first matched element.

+		///	</summary>

+		///	<param name="val" type="Number" integer="true" optional="true">A positive number representing the desired scroll left offset.</param>

+		///	<returns type="Number" integer="true">The scroll left offset of the first matched element.</returns>

+

+		var elem = this[0], win;

+		

+		if ( !elem ) {

+			return null;

+		}

+

+		if ( val !== undefined ) {

+			// Set the scroll offset

+			return this.each(function() {

+				win = getWindow( this );

+

+				if ( win ) {

+					win.scrollTo(

+						!i ? val : jQuery(win).scrollLeft(),

+						 i ? val : jQuery(win).scrollTop()

+					);

+

+				} else {

+					this[ method ] = val;

+				}

+			});

+		} else {

+			win = getWindow( elem );

+

+			// Return the scroll offset

+			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :

+				jQuery.support.boxModel && win.document.documentElement[ method ] ||

+					win.document.body[ method ] :

+				elem[ method ];

+		}

+	};

+});

+

+// Create scrollLeft and scrollTop methods

+jQuery.each( ["Left", "Top"], function( i, name ) {

+	var method = "scroll" + name;

+

+	jQuery.fn[ method ] = function(val) {

+		///	<summary>

+		///		Gets and optionally sets the scroll top offset of the first matched element.

+		///	</summary>

+		///	<param name="val" type="Number" integer="true" optional="true">A positive number representing the desired scroll top offset.</param>

+		///	<returns type="Number" integer="true">The scroll top offset of the first matched element.</returns>

+

+		var elem = this[0], win;

+		

+		if ( !elem ) {

+			return null;

+		}

+

+		if ( val !== undefined ) {

+			// Set the scroll offset

+			return this.each(function() {

+				win = getWindow( this );

+

+				if ( win ) {

+					win.scrollTo(

+						!i ? val : jQuery(win).scrollLeft(),

+						 i ? val : jQuery(win).scrollTop()

+					);

+

+				} else {

+					this[ method ] = val;

+				}

+			});

+		} else {

+			win = getWindow( elem );

+

+			// Return the scroll offset

+			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :

+				jQuery.support.boxModel && win.document.documentElement[ method ] ||

+					win.document.body[ method ] :

+				elem[ method ];

+		}

+	};

+});

+

+function getWindow( elem ) {

+	return ("scrollTo" in elem && elem.document) ?

+		elem :

+		elem.nodeType === 9 ?

+			elem.defaultView || elem.parentWindow :

+			false;

+}

+

+// Create innerHeight, innerWidth, outerHeight and outerWidth methods

+jQuery.each([ "Height" ], function( i, name ) {

+

+	var type = name.toLowerCase();

+

+	// innerHeight and innerWidth

+	jQuery.fn["inner" + name] = function() {

+		///	<summary>

+		///		Gets the inner height of the first matched element, excluding border but including padding.

+		///	</summary>

+		///	<returns type="Number" integer="true">The outer height of the first matched element.</returns>

+

+		return this[0] ?

+			jQuery.css( this[0], type, false, "padding" ) :

+			null;

+	};

+

+	// outerHeight and outerWidth

+	jQuery.fn["outer" + name] = function( margin ) {

+		///	<summary>

+		///		Gets the outer height of the first matched element, including border and padding by default.

+		///	</summary>

+		///	<param name="margins" type="Map">A set of key/value pairs that specify the options for the method.</param>

+		///	<returns type="Number" integer="true">The outer height of the first matched element.</returns>

+

+		return this[0] ?

+			jQuery.css( this[0], type, false, margin ? "margin" : "border" ) :

+			null;

+	};

+

+	jQuery.fn[ type ] = function( size ) {

+		///	<summary>

+		///		Set the CSS height of every matched element. If no explicit unit

+		///		was specified (like 'em' or '%') then &quot;px&quot; is added to the width.  If no parameter is specified, it gets

+		///		the current computed pixel height of the first matched element.

+		///		Part of CSS

+		///	</summary>

+		///	<returns type="jQuery" type="jQuery" />

+		///	<param name="cssProperty" type="String">

+		///		Set the CSS property to the specified value. Omit to get the value of the first matched element.

+		///	</param>

+

+		// Get window width or height

+		var elem = this[0];

+		if ( !elem ) {

+			return size == null ? null : this;

+		}

+		

+		if ( jQuery.isFunction( size ) ) {

+			return this.each(function( i ) {

+				var self = jQuery( this );

+				self[ type ]( size.call( this, i, self[ type ]() ) );

+			});

+		}

+

+		return ("scrollTo" in elem && elem.document) ? // does it walk and quack like a window?

+			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode

+			elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||

+			elem.document.body[ "client" + name ] :

+

+			// Get document width or height

+			(elem.nodeType === 9) ? // is it a document

+				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater

+				Math.max(

+					elem.documentElement["client" + name],

+					elem.body["scroll" + name], elem.documentElement["scroll" + name],

+					elem.body["offset" + name], elem.documentElement["offset" + name]

+				) :

+

+				// Get or set width or height on the element

+				size === undefined ?

+					// Get width or height on the element

+					jQuery.css( elem, type ) :

+

+					// Set the width or height on the element (default to pixels if value is unitless)

+					this.css( type, typeof size === "string" ? size : size + "px" );

+	};

+

+});

+

+// Create innerHeight, innerWidth, outerHeight and outerWidth methods

+jQuery.each([ "Width" ], function( i, name ) {

+

+	var type = name.toLowerCase();

+

+	// innerHeight and innerWidth

+	jQuery.fn["inner" + name] = function() {

+		///	<summary>

+		///		Gets the inner width of the first matched element, excluding border but including padding.

+		///	</summary>

+		///	<returns type="Number" integer="true">The outer width of the first matched element.</returns>

+

+		return this[0] ?

+			jQuery.css( this[0], type, false, "padding" ) :

+			null;

+	};

+

+	// outerHeight and outerWidth

+	jQuery.fn["outer" + name] = function( margin ) {

+		///	<summary>

+		///		Gets the outer width of the first matched element, including border and padding by default.

+		///	</summary>

+		///	<param name="margin" type="Map">A set of key/value pairs that specify the options for the method.</param>

+		///	<returns type="Number" integer="true">The outer width of the first matched element.</returns>

+

+		return this[0] ?

+			jQuery.css( this[0], type, false, margin ? "margin" : "border" ) :

+			null;

+	};

+

+	jQuery.fn[ type ] = function( size ) {

+		///	<summary>

+		///		Set the CSS width of every matched element. If no explicit unit

+		///		was specified (like 'em' or '%') then &quot;px&quot; is added to the width.  If no parameter is specified, it gets

+		///		the current computed pixel width of the first matched element.

+		///		Part of CSS

+		///	</summary>

+		///	<returns type="jQuery" type="jQuery" />

+		///	<param name="cssProperty" type="String">

+		///		Set the CSS property to the specified value. Omit to get the value of the first matched element.

+		///	</param>

+

+		// Get window width or height

+		var elem = this[0];

+		if ( !elem ) {

+			return size == null ? null : this;

+		}

+		

+		if ( jQuery.isFunction( size ) ) {

+			return this.each(function( i ) {

+				var self = jQuery( this );

+				self[ type ]( size.call( this, i, self[ type ]() ) );

+			});

+		}

+

+		return ("scrollTo" in elem && elem.document) ? // does it walk and quack like a window?

+			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode

+			elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||

+			elem.document.body[ "client" + name ] :

+

+			// Get document width or height

+			(elem.nodeType === 9) ? // is it a document

+				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater

+				Math.max(

+					elem.documentElement["client" + name],

+					elem.body["scroll" + name], elem.documentElement["scroll" + name],

+					elem.body["offset" + name], elem.documentElement["offset" + name]

+				) :

+

+				// Get or set width or height on the element

+				size === undefined ?

+					// Get width or height on the element

+					jQuery.css( elem, type ) :

+

+					// Set the width or height on the element (default to pixels if value is unitless)

+					this.css( type, typeof size === "string" ? size : size + "px" );

+	};

+

+});

+

+// Expose jQuery to the global object

+window.jQuery = window.$ = jQuery;

+

+})(window);

diff --git a/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery-1.4.1.min.js b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery-1.4.1.min.js
new file mode 100644
index 0000000..675d7bf
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery-1.4.1.min.js
@@ -0,0 +1,167 @@
+/*!

+ * jQuery JavaScript Library v1.4.1

+ * http://jquery.com/

+ *

+ *

+ * Includes Sizzle.js

+ * http://sizzlejs.com/

+ * Copyright 2010, The Dojo Foundation

+ * 

+ * Permission is hereby granted, free of charge, to any person obtaining

+ * a copy of this software and associated documentation files (the

+ * "Software"), to deal in the Software without restriction, including

+ * without limitation the rights to use, copy, modify, merge, publish,

+ * distribute, sublicense, and/or sell copies of the Software, and to

+ * permit persons to whom the Software is furnished to do so, subject to

+ * the following conditions:

+ *

+ * The above copyright notice and this permission notice shall be

+ * included in all copies or substantial portions of the Software.

+ *

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND

+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE

+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION

+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION

+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ *

+ * Date: Mon Jan 25 19:43:33 2010 -0500

+ */

+(function(z,v){function la(){if(!c.isReady){try{r.documentElement.doScroll("left")}catch(a){setTimeout(la,1);return}c.ready()}}function Ma(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,i){var j=a.length;if(typeof b==="object"){for(var n in b)X(a,n,b[n],f,e,d);return a}if(d!==v){f=!i&&f&&c.isFunction(d);for(n=0;n<j;n++)e(a[n],b,f?d.call(a[n],n,e(a[n],b)):d,i);return a}return j?

+e(a[0],b):null}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function ma(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function na(a){var b,d=[],f=[],e=arguments,i,j,n,o,m,s,x=c.extend({},c.data(this,"events").live);if(!(a.button&&a.type==="click")){for(o in x){j=x[o];if(j.live===a.type||j.altLive&&c.inArray(a.type,j.altLive)>-1){i=j.data;i.beforeFilter&&i.beforeFilter[a.type]&&!i.beforeFilter[a.type](a)||f.push(j.selector)}else delete x[o]}i=c(a.target).closest(f,

+a.currentTarget);m=0;for(s=i.length;m<s;m++)for(o in x){j=x[o];n=i[m].elem;f=null;if(i[m].selector===j.selector){if(j.live==="mouseenter"||j.live==="mouseleave")f=c(a.relatedTarget).closest(j.selector)[0];if(!f||f!==n)d.push({elem:n,fn:j})}}m=0;for(s=d.length;m<s;m++){i=d[m];a.currentTarget=i.elem;a.data=i.fn.data;if(i.fn.apply(i.elem,e)===false){b=false;break}}return b}}function oa(a,b){return"live."+(a?a+".":"")+b.replace(/\./g,"`").replace(/ /g,"&")}function pa(a){return!a||!a.parentNode||a.parentNode.nodeType===

+11}function qa(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var i in f)for(var j in f[i])c.event.add(this,i,f[i][j],f[i][j].data)}}})}function ra(a,b,d){var f,e,i;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&a[0].indexOf("<option")<0&&(c.support.checkClone||!sa.test(a[0]))){e=true;if(i=c.fragments[a[0]])if(i!==1)f=i}if(!f){b=b&&b[0]?b[0].ownerDocument||b[0]:r;f=b.createDocumentFragment();

+c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=i?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(ta.concat.apply([],ta.slice(0,b)),function(){d[this]=a});return d}function ua(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Na=z.jQuery,Oa=z.$,r=z.document,S,Pa=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Qa=/^.[^:#\[\.,]*$/,Ra=/\S/,Sa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Ta=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,O=navigator.userAgent,

+va=false,P=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,Q=Array.prototype.slice,wa=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(typeof a==="string")if((d=Pa.exec(a))&&(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:r;if(a=Ta.exec(a))if(c.isPlainObject(b)){a=[r.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=ra([d[1]],

+[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}}else{if(b=r.getElementById(d[2])){if(b.id!==d[2])return S.find(a);this.length=1;this[0]=b}this.context=r;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=r;a=r.getElementsByTagName(a)}else return!b||b.jquery?(b||S).find(a):c(b).find(a);else if(c.isFunction(a))return S.ready(a);if(a.selector!==v){this.selector=a.selector;this.context=a.context}return c.isArray(a)?this.setArray(a):c.makeArray(a,

+this)},selector:"",jquery:"1.4.1",length:0,size:function(){return this.length},toArray:function(){return Q.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){a=c(a||null);a.prevObject=this;a.context=this.context;if(b==="find")a.selector=this.selector+(this.selector?" ":"")+d;else if(b)a.selector=this.selector+"."+b+"("+d+")";return a},setArray:function(a){this.length=0;ba.apply(this,a);return this},each:function(a,b){return c.each(this,

+a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(r,c);else P&&P.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(Q.apply(this,arguments),"slice",Q.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};

+c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,i,j,n;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(i in e){j=a[i];n=e[i];if(a!==n)if(f&&n&&(c.isPlainObject(n)||c.isArray(n))){j=j&&(c.isPlainObject(j)||c.isArray(j))?j:c.isArray(n)?[]:{};a[i]=c.extend(f,j,n)}else if(n!==v)a[i]=n}return a};c.extend({noConflict:function(a){z.$=

+Oa;if(a)z.jQuery=Na;return c},isReady:false,ready:function(){if(!c.isReady){if(!r.body)return setTimeout(c.ready,13);c.isReady=true;if(P){for(var a,b=0;a=P[b++];)a.call(r,c);P=null}c.fn.triggerHandler&&c(r).triggerHandler("ready")}},bindReady:function(){if(!va){va=true;if(r.readyState==="complete")return c.ready();if(r.addEventListener){r.addEventListener("DOMContentLoaded",L,false);z.addEventListener("load",c.ready,false)}else if(r.attachEvent){r.attachEvent("onreadystatechange",L);z.attachEvent("onload",

+c.ready);var a=false;try{a=z.frameElement==null}catch(b){}r.documentElement.doScroll&&a&&la()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,"isPrototypeOf"))return false;var b;for(b in a);return b===v||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;

+return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return z.JSON&&z.JSON.parse?z.JSON.parse(a):(new Function("return "+a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Ra.test(a)){var b=r.getElementsByTagName("head")[0]||

+r.documentElement,d=r.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(r.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,i=a.length,j=i===v||c.isFunction(a);if(d)if(j)for(f in a){if(b.apply(a[f],d)===false)break}else for(;e<i;){if(b.apply(a[e++],d)===false)break}else if(j)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=

+a[0];e<i&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Sa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==

+v;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,i=a.length;e<i;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,i=0,j=a.length;i<j;i++){e=b(a[i],i,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=v}else if(b&&!c.isFunction(b)){d=b;b=v}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},

+uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});O=c.uaMatch(O);if(O.browser){c.browser[O.browser]=true;c.browser.version=O.version}if(c.browser.webkit)c.browser.safari=true;if(wa)c.inArray=function(a,b){return wa.call(b,a)};S=c(r);if(r.addEventListener)L=function(){r.removeEventListener("DOMContentLoaded",

+L,false);c.ready()};else if(r.attachEvent)L=function(){if(r.readyState==="complete"){r.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=r.documentElement,b=r.createElement("script"),d=r.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var e=d.getElementsByTagName("*"),i=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!i)){c.support=

+{leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(i.getAttribute("style")),hrefNormalized:i.getAttribute("href")==="/a",opacity:/^0.55$/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:r.createElement("select").appendChild(r.createElement("option")).selected,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};

+b.type="text/javascript";try{b.appendChild(r.createTextNode("window."+f+"=1;"))}catch(j){}a.insertBefore(b,a.firstChild);if(z[f]){c.support.scriptEval=true;delete z[f]}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function n(){c.support.noCloneEvent=false;d.detachEvent("onclick",n)});d.cloneNode(true).fireEvent("onclick")}d=r.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=r.createDocumentFragment();a.appendChild(d.firstChild);

+c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var n=r.createElement("div");n.style.width=n.style.paddingLeft="1px";r.body.appendChild(n);c.boxModel=c.support.boxModel=n.offsetWidth===2;r.body.removeChild(n).style.display="none"});a=function(n){var o=r.createElement("div");n="on"+n;var m=n in o;if(!m){o.setAttribute(n,"return;");m=typeof o[n]==="function"}return m};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=i=null}})();c.props=

+{"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ua=0,xa={},Va={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==z?xa:a;var f=a[G],e=c.cache;if(!b&&!f)return null;f||(f=++Ua);if(typeof b==="object"){a[G]=f;e=e[f]=c.extend(true,

+{},b)}else e=e[f]?e[f]:typeof d==="undefined"?Va:(e[f]={});if(d!==v){a[G]=f;e[b]=d}return typeof b==="string"?e[b]:e}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==z?xa:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{try{delete a[G]}catch(i){a.removeAttribute&&a.removeAttribute(G)}delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,

+a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===v){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===v&&this.length)f=c.data(this[0],a);return f===v&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);

+return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===v)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||

+a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var ya=/[\n\t]/g,ca=/\s+/,Wa=/\r/g,Xa=/href|src|style/,Ya=/(button|input)/i,Za=/(button|input|object|select|textarea)/i,$a=/^(a|area)$/i,za=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(o){var m=

+c(this);m.addClass(a.call(this,o,m.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className)for(var i=" "+e.className+" ",j=0,n=b.length;j<n;j++){if(i.indexOf(" "+b[j]+" ")<0)e.className+=" "+b[j]}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var m=c(this);m.removeClass(a.call(this,o,m.attr("class")))});if(a&&typeof a==="string"||a===v)for(var b=(a||"").split(ca),

+d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var i=(" "+e.className+" ").replace(ya," "),j=0,n=b.length;j<n;j++)i=i.replace(" "+b[j]+" "," ");e.className=i.substring(1,i.length-1)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var i=c(this);i.toggleClass(a.call(this,e,i.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,i=0,j=c(this),n=b,o=

+a.split(ca);e=o[i++];){n=f?n:!j.hasClass(e);j[n?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(ya," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===v){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||

+{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var i=b?d:0;for(d=b?d+1:e.length;i<d;i++){var j=e[i];if(j.selected){a=c(j).val();if(b)return a;f.push(a)}}return f}if(za.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Wa,"")}return v}var n=c.isFunction(a);return this.each(function(o){var m=c(this),s=a;if(this.nodeType===1){if(n)s=a.call(this,o,m.val());

+if(typeof s==="number")s+="";if(c.isArray(s)&&za.test(this.type))this.checked=c.inArray(m.val(),s)>=0;else if(c.nodeName(this,"select")){var x=c.makeArray(s);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),x)>=0});if(!x.length)this.selectedIndex=-1}else this.value=s}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return v;if(f&&b in c.attrFn)return c(a)[b](d);

+f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==v;b=f&&c.props[b]||b;if(a.nodeType===1){var i=Xa.test(b);if(b in a&&f&&!i){if(e){b==="type"&&Ya.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:Za.test(a.nodeName)||$a.test(a.nodeName)&&a.href?0:v;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=

+""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&i?a.getAttribute(b,2):a.getAttribute(b);return a===null?v:a}return c.style(a,b,d)}});var ab=function(a){return a.replace(/[^\w\s\.\|`]/g,function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==z&&!a.frameElement)a=z;if(!d.guid)d.guid=c.guid++;if(f!==v){d=c.proxy(d);d.data=f}var e=c.data(a,"events")||c.data(a,"events",{}),i=c.data(a,"handle"),j;if(!i){j=

+function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(j.elem,arguments):v};i=c.data(a,"handle",j)}if(i){i.elem=a;b=b.split(/\s+/);for(var n,o=0;n=b[o++];){var m=n.split(".");n=m.shift();if(o>1){d=c.proxy(d);if(f!==v)d.data=f}d.type=m.slice(0).sort().join(".");var s=e[n],x=this.special[n]||{};if(!s){s=e[n]={};if(!x.setup||x.setup.call(a,f,m,d)===false)if(a.addEventListener)a.addEventListener(n,i,false);else a.attachEvent&&a.attachEvent("on"+n,i)}if(x.add)if((m=x.add.call(a,

+d,f,m,s))&&c.isFunction(m)){m.guid=m.guid||d.guid;m.data=m.data||d.data;m.type=m.type||d.type;d=m}s[d.guid]=d;this.global[n]=true}a=null}}},global:{},remove:function(a,b,d){if(!(a.nodeType===3||a.nodeType===8)){var f=c.data(a,"events"),e,i,j;if(f){if(b===v||typeof b==="string"&&b.charAt(0)===".")for(i in f)this.remove(a,i+(b||""));else{if(b.type){d=b.handler;b=b.type}b=b.split(/\s+/);for(var n=0;i=b[n++];){var o=i.split(".");i=o.shift();var m=!o.length,s=c.map(o.slice(0).sort(),ab);s=new RegExp("(^|\\.)"+

+s.join("\\.(?:.*\\.)?")+"(\\.|$)");var x=this.special[i]||{};if(f[i]){if(d){j=f[i][d.guid];delete f[i][d.guid]}else for(var A in f[i])if(m||s.test(f[i][A].type))delete f[i][A];x.remove&&x.remove.call(a,o,j);for(e in f[i])break;if(!e){if(!x.teardown||x.teardown.call(a,o)===false)if(a.removeEventListener)a.removeEventListener(i,c.data(a,"handle"),false);else a.detachEvent&&a.detachEvent("on"+i,c.data(a,"handle"));e=null;delete f[i]}}}}for(e in f)break;if(!e){if(A=c.data(a,"handle"))A.elem=null;c.removeData(a,

+"events");c.removeData(a,"handle")}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();this.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return v;a.result=v;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,

+b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(i){}if(!a.isPropagationStopped()&&f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){d=a.target;var j;if(!(c.nodeName(d,"a")&&e==="click")&&!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()])){try{if(d[e]){if(j=d["on"+e])d["on"+e]=null;this.triggered=true;d[e]()}}catch(n){}if(j)d["on"+e]=j;this.triggered=false}}},handle:function(a){var b,

+d;a=arguments[0]=c.event.fix(a||z.event);a.currentTarget=this;d=a.type.split(".");a.type=d.shift();b=!d.length&&!a.exclusive;var f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)");d=(c.data(this,"events")||{})[a.type];for(var e in d){var i=d[e];if(b||f.test(i.type)){a.handler=i;a.data=i.data;i=i.apply(this,arguments);if(i!==v){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}return a.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(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||r;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=r.documentElement;d=r.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||

+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==v)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a,b){c.extend(a,b||{});a.guid+=b.selector+b.live;b.liveProxy=a;c.event.add(this,b.live,na,b)},remove:function(a){if(a.length){var b=

+0,d=new RegExp("(^|\\.)"+a[0]+"(\\.|$)");c.each(c.data(this,"events").live||{},function(){d.test(this.type)&&b++});b<1&&c.event.remove(this,a[0],na)}},special:{}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};

+c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y};var Aa=function(a){for(var b=

+a.relatedTarget;b&&b!==this;)try{b=b.parentNode}catch(d){break}if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}},Ba=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ba:Aa,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ba:Aa)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(a,b,d){if(this.nodeName.toLowerCase()!==

+"form"){c.event.add(this,"click.specialSubmit."+d.guid,function(f){var e=f.target,i=e.type;if((i==="submit"||i==="image")&&c(e).closest("form").length)return ma("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit."+d.guid,function(f){var e=f.target,i=e.type;if((i==="text"||i==="password")&&c(e).closest("form").length&&f.keyCode===13)return ma("submit",this,arguments)})}else return false},remove:function(a,b){c.event.remove(this,"click.specialSubmit"+(b?"."+b.guid:""));c.event.remove(this,

+"keypress.specialSubmit"+(b?"."+b.guid:""))}};if(!c.support.changeBubbles){var da=/textarea|input|select/i;function Ca(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d}function ea(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Ca(d);if(a.type!=="focusout"||

+d.type!=="radio")c.data(d,"_change_data",e);if(!(f===v||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}}c.event.special.change={filters:{focusout:ea,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return ea.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return ea.call(this,a)},beforeactivate:function(a){a=

+a.target;a.nodeName.toLowerCase()==="input"&&a.type==="radio"&&c.data(a,"_change_data",Ca(a))}},setup:function(a,b,d){for(var f in T)c.event.add(this,f+".specialChange."+d.guid,T[f]);return da.test(this.nodeName)},remove:function(a,b){for(var d in T)c.event.remove(this,d+".specialChange"+(b?"."+b.guid:""),T[d]);return da.test(this.nodeName)}};var T=c.event.special.change.filters}r.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,

+f)}c.event.special[b]={setup:function(){this.addEventListener(a,d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var i in d)this[b](i,f,d[i],e);return this}if(c.isFunction(f)){e=f;f=v}var j=b==="one"?c.proxy(e,function(n){c(this).unbind(n,j);return e.apply(this,arguments)}):e;return d==="unload"&&b!=="one"?this.one(d,f,e):this.each(function(){c.event.add(this,d,j,f)})}});c.fn.extend({unbind:function(a,

+b){if(typeof a==="object"&&!a.preventDefault){for(var d in a)this.unbind(d,a[d]);return this}return this.each(function(){c.event.remove(this,a,b)})},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+

+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e){var i,j=0;if(c.isFunction(f)){e=f;f=v}for(d=(d||"").split(/\s+/);(i=d[j++])!=null;){i=i==="focus"?"focusin":i==="blur"?"focusout":i==="hover"?d.push("mouseleave")&&"mouseenter":i;b==="live"?c(this.context).bind(oa(i,this.selector),{data:f,selector:this.selector,

+live:i},e):c(this.context).unbind(oa(i,this.selector),e?{guid:e.guid+this.selector+i}:null)}return this}});c.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(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});z.attachEvent&&!z.addEventListener&&z.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});

+(function(){function a(g){for(var h="",k,l=0;g[l];l++){k=g[l];if(k.nodeType===3||k.nodeType===4)h+=k.nodeValue;else if(k.nodeType!==8)h+=a(k.childNodes)}return h}function b(g,h,k,l,q,p){q=0;for(var u=l.length;q<u;q++){var t=l[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===k){y=l[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=k;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}l[q]=y}}}function d(g,h,k,l,q,p){q=0;for(var u=l.length;q<u;q++){var t=l[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===

+k){y=l[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=k;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(o.filter(h,[t]).length>0){y=t;break}}t=t[g]}l[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,i=Object.prototype.toString,j=false,n=true;[0,0].sort(function(){n=false;return 0});var o=function(g,h,k,l){k=k||[];var q=h=h||r;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||

+typeof g!=="string")return k;for(var p=[],u,t,y,R,H=true,M=w(h),I=g;(f.exec(""),u=f.exec(I))!==null;){I=u[3];p.push(u[1]);if(u[2]){R=u[3];break}}if(p.length>1&&s.exec(g))if(p.length===2&&m.relative[p[0]])t=fa(p[0]+p[1],h);else for(t=m.relative[p[0]]?[h]:o(p.shift(),h);p.length;){g=p.shift();if(m.relative[g])g+=p.shift();t=fa(g,t)}else{if(!l&&p.length>1&&h.nodeType===9&&!M&&m.match.ID.test(p[0])&&!m.match.ID.test(p[p.length-1])){u=o.find(p.shift(),h,M);h=u.expr?o.filter(u.expr,u.set)[0]:u.set[0]}if(h){u=

+l?{expr:p.pop(),set:A(l)}:o.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=u.expr?o.filter(u.expr,u.set):u.set;if(p.length>0)y=A(t);else H=false;for(;p.length;){var D=p.pop();u=D;if(m.relative[D])u=p.pop();else D="";if(u==null)u=h;m.relative[D](y,u,M)}}else y=[]}y||(y=t);y||o.error(D||g);if(i.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))k.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&

+y[g].nodeType===1&&k.push(t[g]);else k.push.apply(k,y);else A(y,k);if(R){o(R,q,k,l);o.uniqueSort(k)}return k};o.uniqueSort=function(g){if(C){j=n;g.sort(C);if(j)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};o.matches=function(g,h){return o(g,null,null,h)};o.find=function(g,h,k){var l,q;if(!g)return[];for(var p=0,u=m.order.length;p<u;p++){var t=m.order[p];if(q=m.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");l=m.find[t](q,

+h,k);if(l!=null){g=g.replace(m.match[t],"");break}}}}l||(l=h.getElementsByTagName("*"));return{set:l,expr:g}};o.filter=function(g,h,k,l){for(var q=g,p=[],u=h,t,y,R=h&&h[0]&&w(h[0]);g&&h.length;){for(var H in m.filter)if((t=m.leftMatch[H].exec(g))!=null&&t[2]){var M=m.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(u===p)p=[];if(m.preFilter[H])if(t=m.preFilter[H](t,u,k,p,l,R)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=u[U])!=null;U++)if(D){I=M(D,t,U,u);var Da=

+l^!!I;if(k&&I!=null)if(Da)y=true;else u[U]=false;else if(Da){p.push(D);y=true}}if(I!==v){k||(u=p);g=g.replace(m.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)o.error(g);else break;q=g}return u};o.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var m=o.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(g){return g.getAttribute("href")}},relative:{"+":function(g,h){var k=typeof h==="string",l=k&&!/\W/.test(h);k=k&&!l;if(l)h=h.toLowerCase();l=0;for(var q=g.length,

+p;l<q;l++)if(p=g[l]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[l]=k||p&&p.nodeName.toLowerCase()===h?p||false:p===h}k&&o.filter(h,g,true)},">":function(g,h){var k=typeof h==="string";if(k&&!/\W/.test(h)){h=h.toLowerCase();for(var l=0,q=g.length;l<q;l++){var p=g[l];if(p){k=p.parentNode;g[l]=k.nodeName.toLowerCase()===h?k:false}}}else{l=0;for(q=g.length;l<q;l++)if(p=g[l])g[l]=k?p.parentNode:p.parentNode===h;k&&o.filter(h,g,true)}},"":function(g,h,k){var l=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=

+h=h.toLowerCase();q=b}q("parentNode",h,l,g,p,k)},"~":function(g,h,k){var l=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,l,g,p,k)}},find:{ID:function(g,h,k){if(typeof h.getElementById!=="undefined"&&!k)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var k=[];h=h.getElementsByName(g[1]);for(var l=0,q=h.length;l<q;l++)h[l].getAttribute("name")===g[1]&&k.push(h[l]);return k.length===0?null:k}},

+TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,k,l,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var u;(u=h[p])!=null;p++)if(u)if(q^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))k||l.push(u);else if(k)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&

+"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,k,l,q,p){h=g[1].replace(/\\/g,"");if(!p&&m.attrMap[h])g[1]=m.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,k,l,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=o(g[3],null,null,h);else{g=o.filter(g[3],h,k,true^q);k||l.push.apply(l,g);return false}else if(m.match.POS.test(g[0])||m.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);

+return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,k){return!!o(k[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===

+g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,h){return h===0},last:function(g,h,k,l){return h===l.length-1},even:function(g,h){return h%2===

+0},odd:function(g,h){return h%2===1},lt:function(g,h,k){return h<k[3]-0},gt:function(g,h,k){return h>k[3]-0},nth:function(g,h,k){return k[3]-0===h},eq:function(g,h,k){return k[3]-0===h}},filter:{PSEUDO:function(g,h,k,l){var q=h[1],p=m.filters[q];if(p)return p(g,k,h,l);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=h[3];k=0;for(l=h.length;k<l;k++)if(h[k]===g)return false;return true}else o.error("Syntax error, unrecognized expression: "+

+q)},CHILD:function(g,h){var k=h[1],l=g;switch(k){case "only":case "first":for(;l=l.previousSibling;)if(l.nodeType===1)return false;if(k==="first")return true;l=g;case "last":for(;l=l.nextSibling;)if(l.nodeType===1)return false;return true;case "nth":k=h[2];var q=h[3];if(k===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var u=0;for(l=p.firstChild;l;l=l.nextSibling)if(l.nodeType===1)l.nodeIndex=++u;p.sizcache=h}g=g.nodeIndex-q;return k===0?g===0:g%k===0&&g/k>=

+0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var k=h[1];g=m.attrHandle[k]?m.attrHandle[k](g):g[k]!=null?g[k]:g.getAttribute(k);k=g+"";var l=h[2];h=h[4];return g==null?l==="!=":l==="="?k===h:l==="*="?k.indexOf(h)>=0:l==="~="?(" "+k+" ").indexOf(h)>=0:!h?k&&g!==false:l==="!="?k!==h:l==="^="?

+k.indexOf(h)===0:l==="$="?k.substr(k.length-h.length)===h:l==="|="?k===h||k.substr(0,h.length+1)===h+"-":false},POS:function(g,h,k,l){var q=m.setFilters[h[2]];if(q)return q(g,k,h,l)}}},s=m.match.POS;for(var x in m.match){m.match[x]=new RegExp(m.match[x].source+/(?![^\[]*\])(?![^\(]*\))/.source);m.leftMatch[x]=new RegExp(/(^(?:.|\r|\n)*?)/.source+m.match[x].source.replace(/\\(\d+)/g,function(g,h){return"\\"+(h-0+1)}))}var A=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};

+try{Array.prototype.slice.call(r.documentElement.childNodes,0)}catch(B){A=function(g,h){h=h||[];if(i.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var k=0,l=g.length;k<l;k++)h.push(g[k]);else for(k=0;g[k];k++)h.push(g[k]);return h}}var C;if(r.documentElement.compareDocumentPosition)C=function(g,h){if(!g.compareDocumentPosition||!h.compareDocumentPosition){if(g==h)j=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===

+h?0:1;if(g===0)j=true;return g};else if("sourceIndex"in r.documentElement)C=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)j=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)j=true;return g};else if(r.createRange)C=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)j=true;return g.ownerDocument?-1:1}var k=g.ownerDocument.createRange(),l=h.ownerDocument.createRange();k.setStart(g,0);k.setEnd(g,0);l.setStart(h,0);l.setEnd(h,0);g=k.compareBoundaryPoints(Range.START_TO_END,

+l);if(g===0)j=true;return g};(function(){var g=r.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var k=r.documentElement;k.insertBefore(g,k.firstChild);if(r.getElementById(h)){m.find.ID=function(l,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(l[1]))?q.id===l[1]||typeof q.getAttributeNode!=="undefined"&&q.getAttributeNode("id").nodeValue===l[1]?[q]:v:[]};m.filter.ID=function(l,q){var p=typeof l.getAttributeNode!=="undefined"&&l.getAttributeNode("id");

+return l.nodeType===1&&p&&p.nodeValue===q}}k.removeChild(g);k=g=null})();(function(){var g=r.createElement("div");g.appendChild(r.createComment(""));if(g.getElementsByTagName("*").length>0)m.find.TAG=function(h,k){k=k.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var l=0;k[l];l++)k[l].nodeType===1&&h.push(k[l]);k=h}return k};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")m.attrHandle.href=function(h){return h.getAttribute("href",

+2)};g=null})();r.querySelectorAll&&function(){var g=o,h=r.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){o=function(l,q,p,u){q=q||r;if(!u&&q.nodeType===9&&!w(q))try{return A(q.querySelectorAll(l),p)}catch(t){}return g(l,q,p,u)};for(var k in g)o[k]=g[k];h=null}}();(function(){var g=r.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===

+0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){m.order.splice(1,0,"CLASS");m.find.CLASS=function(h,k,l){if(typeof k.getElementsByClassName!=="undefined"&&!l)return k.getElementsByClassName(h[1])};g=null}}})();var E=r.compareDocumentPosition?function(g,h){return g.compareDocumentPosition(h)&16}:function(g,h){return g!==h&&(g.contains?g.contains(h):true)},w=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},fa=function(g,h){var k=[],

+l="",q;for(h=h.nodeType?[h]:h;q=m.match.PSEUDO.exec(g);){l+=q[0];g=g.replace(m.match.PSEUDO,"")}g=m.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)o(g,h[q],k);return o.filter(l,k)};c.find=o;c.expr=o.selectors;c.expr[":"]=c.expr.filters;c.unique=o.uniqueSort;c.getText=a;c.isXMLDoc=w;c.contains=E})();var bb=/Until$/,cb=/^(?:parents|prevUntil|prevAll)/,db=/,/;Q=Array.prototype.slice;var Ea=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,i){return!!b.call(e,i,e)===d});else if(b.nodeType)return c.grep(a,

+function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Qa.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;c.find(a,this[f],b);if(f>0)for(var i=d;i<b.length;i++)for(var j=0;j<d;j++)if(b[j]===b[i]){b.splice(i--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=

+0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ea(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ea(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,i={},j;if(f&&a.length){e=0;for(var n=a.length;e<n;e++){j=a[e];i[j]||(i[j]=c.expr.match.POS.test(j)?c(j,b||this.context):j)}for(;f&&f.ownerDocument&&f!==b;){for(j in i){e=i[j];if(e.jquery?e.index(f)>

+-1:c(f).is(e)){d.push({selector:j,elem:f});delete i[j]}}f=f.parentNode}}return d}var o=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(m,s){for(;s&&s.ownerDocument&&s!==b;){if(o?o.index(s)>-1:c(s).is(a))return s;s=s.parentNode}return null})},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),

+a);return this.pushStack(pa(a[0])||pa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},

+nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);bb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):

+e;if((this.length>1||db.test(f))&&cb.test(a))e=e.reverse();return this.pushStack(e,a,Q.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===v||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==

+b&&d.push(a);return d}});var Fa=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ga=/(<([\w:]+)[^>]*?)\/>/g,eb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,Ha=/<([\w:]+)/,fb=/<tbody/i,gb=/<|&\w+;/,sa=/checked\s*(?:[^=]|=\s*.checked.)/i,Ia=function(a,b,d){return eb.test(d)?a:b+"></"+d+">"},F={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,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==v)return this.empty().append((this[0]&&this[0].ownerDocument||r).createTextNode(a));return c.getText(this)},

+wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?

+d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,

+false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&

+!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Fa,"").replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){qa(this,b);qa(this.find("*"),b.find("*"))}return b},html:function(a){if(a===v)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Fa,""):null;else if(typeof a==="string"&&!/<script/i.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(Ha.exec(a)||

+["",""])[1].toLowerCase()]){a=a.replace(Ga,Ia);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var i=c(this),j=i.html();i.empty().append(function(){return a.call(this,e,j)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,

+b,f))});else a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(s){return c.nodeName(s,"table")?s.getElementsByTagName("tbody")[0]||s.appendChild(s.ownerDocument.createElement("tbody")):s}var e,i,j=a[0],n=[];if(!c.support.checkClone&&arguments.length===3&&typeof j===

+"string"&&sa.test(j))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(j))return this.each(function(s){var x=c(this);a[0]=j.call(this,s,b?x.html():v);x.domManip(a,b,d)});if(this[0]){e=a[0]&&a[0].parentNode&&a[0].parentNode.nodeType===11?{fragment:a[0].parentNode}:ra(a,this,n);if(i=e.fragment.firstChild){b=b&&c.nodeName(i,"tr");for(var o=0,m=this.length;o<m;o++)d.call(b?f(this[o],i):this[o],e.cacheable||this.length>1||o>0?e.fragment.cloneNode(true):e.fragment)}n&&c.each(n,

+Ma)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);for(var e=0,i=d.length;e<i;e++){var j=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),j);f=f.concat(j)}return this.pushStack(f,a,d.selector)}});c.each({remove:function(a,b){if(!a||c.filter(a,[this]).length){if(!b&&this.nodeType===1){c.cleanData(this.getElementsByTagName("*"));c.cleanData([this])}this.parentNode&&

+this.parentNode.removeChild(this)}},empty:function(){for(this.nodeType===1&&c.cleanData(this.getElementsByTagName("*"));this.firstChild;)this.removeChild(this.firstChild)}},function(a,b){c.fn[a]=function(){return this.each(b,arguments)}});c.extend({clean:function(a,b,d,f){b=b||r;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||r;var e=[];c.each(a,function(i,j){if(typeof j==="number")j+="";if(j){if(typeof j==="string"&&!gb.test(j))j=b.createTextNode(j);else if(typeof j===

+"string"){j=j.replace(Ga,Ia);var n=(Ha.exec(j)||["",""])[1].toLowerCase(),o=F[n]||F._default,m=o[0];i=b.createElement("div");for(i.innerHTML=o[1]+j+o[2];m--;)i=i.lastChild;if(!c.support.tbody){m=fb.test(j);n=n==="table"&&!m?i.firstChild&&i.firstChild.childNodes:o[1]==="<table>"&&!m?i.childNodes:[];for(o=n.length-1;o>=0;--o)c.nodeName(n[o],"tbody")&&!n[o].childNodes.length&&n[o].parentNode.removeChild(n[o])}!c.support.leadingWhitespace&&V.test(j)&&i.insertBefore(b.createTextNode(V.exec(j)[0]),i.firstChild);

+j=c.makeArray(i.childNodes)}if(j.nodeType)e.push(j);else e=c.merge(e,j)}});if(d)for(a=0;e[a];a++)if(f&&c.nodeName(e[a],"script")&&(!e[a].type||e[a].type.toLowerCase()==="text/javascript"))f.push(e[a].parentNode?e[a].parentNode.removeChild(e[a]):e[a]);else{e[a].nodeType===1&&e.splice.apply(e,[a+1,0].concat(c.makeArray(e[a].getElementsByTagName("script"))));d.appendChild(e[a])}return e},cleanData:function(a){for(var b=0,d;(d=a[b])!=null;b++){c.event.remove(d);c.removeData(d)}}});var hb=/z-?index|font-?weight|opacity|zoom|line-?height/i,

+Ja=/alpha\([^)]*\)/,Ka=/opacity=([^)]*)/,ga=/float/i,ha=/-([a-z])/ig,ib=/([A-Z])/g,jb=/^-?\d+(?:px)?$/i,kb=/^-?\d/,lb={position:"absolute",visibility:"hidden",display:"block"},mb=["Left","Right"],nb=["Top","Bottom"],ob=r.defaultView&&r.defaultView.getComputedStyle,La=c.support.cssFloat?"cssFloat":"styleFloat",ia=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===v)return c.curCSS(d,f);if(typeof e==="number"&&!hb.test(f))e+="px";c.style(d,f,e)})};

+c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return v;if((b==="width"||b==="height")&&parseFloat(d)<0)d=v;var f=a.style||a,e=d!==v;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=Ja.test(a)?a.replace(Ja,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Ka.exec(f.filter)[1])/100+"":""}if(ga.test(b))b=La;b=b.replace(ha,ia);if(e)f[b]=d;return f[b]},css:function(a,

+b,d,f){if(b==="width"||b==="height"){var e,i=b==="width"?mb:nb;function j(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(i,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,"border"+this+"Width",true))||0})}a.offsetWidth!==0?j():c.swap(a,lb,j);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&

+a.currentStyle){f=Ka.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ga.test(b))b=La;if(!d&&e&&e[b])f=e[b];else if(ob){if(ga.test(b))b="float";b=b.replace(ib,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ha,ia);f=a.currentStyle[b]||a.currentStyle[d];if(!jb.test(f)&&kb.test(f)){b=e.left;var i=a.runtimeStyle.left;a.runtimeStyle.left=

+a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=i}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var pb=

+J(),qb=/<script(.|\s)*?\/script>/gi,rb=/select|textarea/i,sb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ja=/\?/,tb=/(\?|&)_=.*?(&|$)/,ub=/^(\w+:)?\/\/([^\/?#]+)/,vb=/%20/g;c.fn.extend({_load:c.fn.load,load:function(a,b,d){if(typeof a!=="string")return this._load(a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=

+c.param(b,c.ajaxSettings.traditional);f="POST"}var i=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(j,n){if(n==="success"||n==="notmodified")i.html(e?c("<div />").append(j.responseText.replace(qb,"")).find(e):j.responseText);d&&i.each(d,[j.responseText,n,j])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&

+(this.checked||rb.test(this.nodeName)||sb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,

+b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:z.XMLHttpRequest&&(z.location.protocol!=="file:"||!z.ActiveXObject)?function(){return new z.XMLHttpRequest}:

+function(){try{return new z.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},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(a){function b(){e.success&&e.success.call(o,n,j,w);e.global&&f("ajaxSuccess",[w,e])}function d(){e.complete&&e.complete.call(o,w,j);e.global&&f("ajaxComplete",[w,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}

+function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),i,j,n,o=a&&a.context||e,m=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(m==="GET")N.test(e.url)||(e.url+=(ja.test(e.url)?"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||

+N.test(e.url))){i=e.jsonpCallback||"jsonp"+pb++;if(e.data)e.data=(e.data+"").replace(N,"="+i+"$1");e.url=e.url.replace(N,"="+i+"$1");e.dataType="script";z[i]=z[i]||function(q){n=q;b();d();z[i]=v;try{delete z[i]}catch(p){}A&&A.removeChild(B)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===false&&m==="GET"){var s=J(),x=e.url.replace(tb,"$1_="+s+"$2");e.url=x+(x===e.url?(ja.test(e.url)?"&":"?")+"_="+s:"")}if(e.data&&m==="GET")e.url+=(ja.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&

+c.event.trigger("ajaxStart");s=(s=ub.exec(e.url))&&(s[1]&&s[1]!==location.protocol||s[2]!==location.host);if(e.dataType==="script"&&m==="GET"&&s){var A=r.getElementsByTagName("head")[0]||r.documentElement,B=r.createElement("script");B.src=e.url;if(e.scriptCharset)B.charset=e.scriptCharset;if(!i){var C=false;B.onload=B.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;b();d();B.onload=B.onreadystatechange=null;A&&B.parentNode&&

+A.removeChild(B)}}}A.insertBefore(B,A.firstChild);return v}var E=false,w=e.xhr();if(w){e.username?w.open(m,e.url,e.async,e.username,e.password):w.open(m,e.url,e.async);try{if(e.data||a&&a.contentType)w.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[e.url]);c.etag[e.url]&&w.setRequestHeader("If-None-Match",c.etag[e.url])}s||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",

+e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(fa){}if(e.beforeSend&&e.beforeSend.call(o,w,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");w.abort();return false}e.global&&f("ajaxSend",[w,e]);var g=w.onreadystatechange=function(q){if(!w||w.readyState===0||q==="abort"){E||d();E=true;if(w)w.onreadystatechange=c.noop}else if(!E&&w&&(w.readyState===4||q==="timeout")){E=true;w.onreadystatechange=c.noop;j=q==="timeout"?"timeout":!c.httpSuccess(w)?

+"error":e.ifModified&&c.httpNotModified(w,e.url)?"notmodified":"success";var p;if(j==="success")try{n=c.httpData(w,e.dataType,e)}catch(u){j="parsererror";p=u}if(j==="success"||j==="notmodified")i||b();else c.handleError(e,w,j,p);d();q==="timeout"&&w.abort();if(e.async)w=null}};try{var h=w.abort;w.abort=function(){w&&h.call(w);g("abort")}}catch(k){}e.async&&e.timeout>0&&setTimeout(function(){w&&!E&&g("timeout")},e.timeout);try{w.send(m==="POST"||m==="PUT"||m==="DELETE"?e.data:null)}catch(l){c.handleError(e,

+w,null,l);d()}e.async||g();return w}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=

+f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(j,n){if(c.isArray(n))c.each(n,

+function(o,m){b?f(j,m):d(j+"["+(typeof m==="object"||c.isArray(m)?o:"")+"]",m)});else!b&&n!=null&&typeof n==="object"?c.each(n,function(o,m){d(j+"["+o+"]",m)}):f(j,n)}function f(j,n){n=c.isFunction(n)?n():n;e[e.length]=encodeURIComponent(j)+"="+encodeURIComponent(n)}var e=[];if(b===v)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var i in a)d(i,a[i]);return e.join("&").replace(vb,"+")}});var ka={},wb=/toggle|show|hide/,xb=/^([+-]=)?([\d+-.]+)(.*)$/,

+W,ta=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(ka[d])f=ka[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();

+ka[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&

+c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var i=c.extend({},e),j,n=this.nodeType===1&&c(this).is(":hidden"),

+o=this;for(j in a){var m=j.replace(ha,ia);if(j!==m){a[m]=a[j];delete a[j];j=m}if(a[j]==="hide"&&n||a[j]==="show"&&!n)return i.complete.call(this);if((j==="height"||j==="width")&&this.style){i.display=c.css(this,"display");i.overflow=this.style.overflow}if(c.isArray(a[j])){(i.specialEasing=i.specialEasing||{})[j]=a[j][1];a[j]=a[j][0]}}if(i.overflow!=null)this.style.overflow="hidden";i.curAnim=c.extend({},a);c.each(a,function(s,x){var A=new c.fx(o,i,s);if(wb.test(x))A[x==="toggle"?n?"show":"hide":x](a);

+else{var B=xb.exec(x),C=A.cur(true)||0;if(B){x=parseFloat(B[2]);var E=B[3]||"px";if(E!=="px"){o.style[s]=(x||1)+E;C=(x||1)/A.cur(true)*C;o.style[s]=C+E}if(B[1])x=(B[1]==="-="?-1:1)*x+C;A.custom(C,x,E)}else A.custom(C,x,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",

+1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration==="number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,

+b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==

+null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(i){return e.step(i)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop===

+"width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=

+this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=

+c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=

+null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in r.documentElement?function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),

+f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(s){c.offset.setOffset(this,a,s)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=

+b,e=b.ownerDocument,i,j=e.documentElement,n=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var o=b.offsetTop,m=b.offsetLeft;(b=b.parentNode)&&b!==n&&b!==j;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;i=e?e.getComputedStyle(b,null):b.currentStyle;o-=b.scrollTop;m-=b.scrollLeft;if(b===d){o+=b.offsetTop;m+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){o+=parseFloat(i.borderTopWidth)||

+0;m+=parseFloat(i.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&i.overflow!=="visible"){o+=parseFloat(i.borderTopWidth)||0;m+=parseFloat(i.borderLeftWidth)||0}f=i}if(f.position==="relative"||f.position==="static"){o+=n.offsetTop;m+=n.offsetLeft}if(c.offset.supportsFixedPosition&&f.position==="fixed"){o+=Math.max(j.scrollTop,n.scrollTop);m+=Math.max(j.scrollLeft,n.scrollLeft)}return{top:o,left:m}};c.offset={initialize:function(){var a=r.body,b=r.createElement("div"),

+d,f,e,i=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.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>";a.insertBefore(b,a.firstChild);

+d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i;a.removeChild(b);c.offset.initialize=c.noop},

+bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),i=parseInt(c.curCSS(a,"top",true),10)||0,j=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,d,e);d={top:b.top-e.top+i,left:b.left-

+e.left+j};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=

+this.offsetParent||r.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],i;if(!e)return null;if(f!==v)return this.each(function(){if(i=ua(this))i.scrollTo(!a?f:c(i).scrollLeft(),a?f:c(i).scrollTop());else this[d]=f});else return(i=ua(e))?"pageXOffset"in i?i[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&i.document.documentElement[d]||i.document.body[d]:e[d]}});

+c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(i){var j=c(this);j[d](f.call(this,i,j[d]()))});return"scrollTo"in e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||

+e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===v?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});z.jQuery=z.$=c})(window);

diff --git a/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery.validate-vsdoc.js b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery.validate-vsdoc.js
new file mode 100644
index 0000000..b578431
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery.validate-vsdoc.js
@@ -0,0 +1,1292 @@
+/*

+* This file has been commented to support Visual Studio Intellisense.

+* You should not use this file at runtime inside the browser--it is only

+* intended to be used only for design-time IntelliSense.  Please use the

+* standard jQuery library for all production use.

+*

+* Comment version: 1.6

+*/

+

+/*

+ * jQuery validation plug-in 1.6

+ *

+ * http://bassistance.de/jquery-plugins/jquery-plugin-validation/

+ * http://docs.jquery.com/Plugins/Validation

+ *

+ * Copyright (c) 2006 - 2008 Jörn Zaefferer

+ *

+ * $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $

+ *

+ * Permission is hereby granted, free of charge, to any person obtaining

+ * a copy of this software and associated documentation files (the

+ * "Software"), to deal in the Software without restriction, including

+ * without limitation the rights to use, copy, modify, merge, publish,

+ * distribute, sublicense, and/or sell copies of the Software, and to

+ * permit persons to whom the Software is furnished to do so, subject to

+ * the following conditions:

+ *

+ * The above copyright notice and this permission notice shall be

+ * included in all copies or substantial portions of the Software.

+ *

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND

+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE

+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION

+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION

+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ */

+

+(function($) {

+

+$.extend($.fn, {

+	// http://docs.jquery.com/Plugins/Validation/validate

+	validate: function( options ) {

+		/// <summary>

+		/// Validates the selected form. This method sets up event handlers for submit, focus,

+		/// keyup, blur and click to trigger validation of the entire form or individual

+		/// elements. Each one can be disabled, see the onxxx options (onsubmit, onfocusout,

+		/// onkeyup, onclick). focusInvalid focuses elements when submitting a invalid form.

+		/// </summary>

+		/// <param name="options" type="Options">

+		/// A set of key/value pairs that configure the validate. All options are optional.

+		/// </param>

+		/// <returns type="Validator" />

+

+		// if nothing is selected, return nothing; can't chain anyway

+		if (!this.length) {

+			options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );

+			return;

+		}

+

+		// check if a validator for this form was already created

+		var validator = $.data(this[0], 'validator');

+		if ( validator ) {

+			return validator;

+		}

+		

+		validator = new $.validator( options, this[0] );

+		$.data(this[0], 'validator', validator); 

+		

+		if ( validator.settings.onsubmit ) {

+		

+			// allow suppresing validation by adding a cancel class to the submit button

+			this.find("input, button").filter(".cancel").click(function() {

+				validator.cancelSubmit = true;

+			});

+			

+			// when a submitHandler is used, capture the submitting button

+			if (validator.settings.submitHandler) {

+				this.find("input, button").filter(":submit").click(function() {

+					validator.submitButton = this;

+				});

+			}

+		

+			// validate the form on submit

+			this.submit( function( event ) {

+				if ( validator.settings.debug )

+					// prevent form submit to be able to see console output

+					event.preventDefault();

+					

+				function handle() {

+					if ( validator.settings.submitHandler ) {

+						if (validator.submitButton) {

+							// insert a hidden input as a replacement for the missing submit button

+							var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);

+						}

+						validator.settings.submitHandler.call( validator, validator.currentForm );

+						if (validator.submitButton) {

+							// and clean up afterwards; thanks to no-block-scope, hidden can be referenced

+							hidden.remove();

+						}

+						return false;

+					}

+					return true;

+				}

+					

+				// prevent submit for invalid forms or custom submit handlers

+				if ( validator.cancelSubmit ) {

+					validator.cancelSubmit = false;

+					return handle();

+				}

+				if ( validator.form() ) {

+					if ( validator.pendingRequest ) {

+						validator.formSubmitted = true;

+						return false;

+					}

+					return handle();

+				} else {

+					validator.focusInvalid();

+					return false;

+				}

+			});

+		}

+		

+		return validator;

+	},

+	// http://docs.jquery.com/Plugins/Validation/valid

+	valid: function() {

+		/// <summary>

+		/// Checks if the selected form is valid or if all selected elements are valid.

+		/// validate() needs to be called on the form before checking it using this method.

+		/// </summary>

+		/// <returns type="Boolean" />

+

+        if ( $(this[0]).is('form')) {

+            return this.validate().form();

+        } else {

+            var valid = true;

+            var validator = $(this[0].form).validate();

+            this.each(function() {

+				valid &= validator.element(this);

+            });

+            return valid;

+        }

+    },

+	// attributes: space seperated list of attributes to retrieve and remove

+	removeAttrs: function(attributes) {

+		/// <summary>

+		/// Remove the specified attributes from the first matched element and return them.

+		/// </summary>

+		/// <param name="attributes" type="String">

+		/// A space-seperated list of attribute names to remove.

+		/// </param>

+		/// <returns type="" />

+

+		var result = {},

+			$element = this;

+		$.each(attributes.split(/\s/), function(index, value) {

+			result[value] = $element.attr(value);

+			$element.removeAttr(value);

+		});

+		return result;

+	},

+	// http://docs.jquery.com/Plugins/Validation/rules

+	rules: function(command, argument) {

+		/// <summary>

+		/// Return the validations rules for the first selected element.

+		/// </summary>

+		/// <param name="command" type="String">

+		/// Can be either "add" or "remove".

+		/// </param>

+		/// <param name="argument" type="">

+		/// A list of rules to add or remove.

+		/// </param>

+		/// <returns type="" />

+

+		var element = this[0];

+		

+		if (command) {

+			var settings = $.data(element.form, 'validator').settings;

+			var staticRules = settings.rules;

+			var existingRules = $.validator.staticRules(element);

+			switch(command) {

+			case "add":

+				$.extend(existingRules, $.validator.normalizeRule(argument));

+				staticRules[element.name] = existingRules;

+				if (argument.messages)

+					settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );

+				break;

+			case "remove":

+				if (!argument) {

+					delete staticRules[element.name];

+					return existingRules;

+				}

+				var filtered = {};

+				$.each(argument.split(/\s/), function(index, method) {

+					filtered[method] = existingRules[method];

+					delete existingRules[method];

+				});

+				return filtered;

+			}

+		}

+		

+		var data = $.validator.normalizeRules(

+		$.extend(

+			{},

+			$.validator.metadataRules(element),

+			$.validator.classRules(element),

+			$.validator.attributeRules(element),

+			$.validator.staticRules(element)

+		), element);

+		

+		// make sure required is at front

+		if (data.required) {

+			var param = data.required;

+			delete data.required;

+			data = $.extend({required: param}, data);

+		}

+		

+		return data;

+	}

+});

+

+// Custom selectors

+$.extend($.expr[":"], {

+	// http://docs.jquery.com/Plugins/Validation/blank

+	blank: function(a) {return !$.trim("" + a.value);},

+	// http://docs.jquery.com/Plugins/Validation/filled

+	filled: function(a) {return !!$.trim("" + a.value);},

+	// http://docs.jquery.com/Plugins/Validation/unchecked

+	unchecked: function(a) {return !a.checked;}

+});

+

+// constructor for validator

+$.validator = function( options, form ) {

+	this.settings = $.extend( {}, $.validator.defaults, options );

+	this.currentForm = form;

+	this.init();

+};

+

+$.validator.format = function(source, params) {

+	/// <summary>

+	/// Replaces {n} placeholders with arguments.

+	/// One or more arguments can be passed, in addition to the string template itself, to insert

+	/// into the string.

+	/// </summary>

+	/// <param name="source" type="String">

+	/// The string to format.

+	/// </param>

+	/// <param name="params" type="String">

+	/// The first argument to insert, or an array of Strings to insert

+	/// </param>

+	/// <returns type="String" />

+

+	if ( arguments.length == 1 ) 

+		return function() {

+			var args = $.makeArray(arguments);

+			args.unshift(source);

+			return $.validator.format.apply( this, args );

+		};

+	if ( arguments.length > 2 && params.constructor != Array  ) {

+		params = $.makeArray(arguments).slice(1);

+	}

+	if ( params.constructor != Array ) {

+		params = [ params ];

+	}

+	$.each(params, function(i, n) {

+		source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);

+	});

+	return source;

+};

+

+$.extend($.validator, {

+	

+	defaults: {

+		messages: {},

+		groups: {},

+		rules: {},

+		errorClass: "error",

+		validClass: "valid",

+		errorElement: "label",

+		focusInvalid: true,

+		errorContainer: $( [] ),

+		errorLabelContainer: $( [] ),

+		onsubmit: true,

+		ignore: [],

+		ignoreTitle: false,

+		onfocusin: function(element) {

+			this.lastActive = element;

+				

+			// hide error label and remove error class on focus if enabled

+			if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {

+				this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );

+				this.errorsFor(element).hide();

+			}

+		},

+		onfocusout: function(element) {

+			if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {

+				this.element(element);

+			}

+		},

+		onkeyup: function(element) {

+			if ( element.name in this.submitted || element == this.lastElement ) {

+				this.element(element);

+			}

+		},

+		onclick: function(element) {

+			// click on selects, radiobuttons and checkboxes

+			if ( element.name in this.submitted )

+				this.element(element);

+			// or option elements, check parent select in that case

+			else if (element.parentNode.name in this.submitted)

+				this.element(element.parentNode)

+		},

+		highlight: function( element, errorClass, validClass ) {

+			$(element).addClass(errorClass).removeClass(validClass);

+		},

+		unhighlight: function( element, errorClass, validClass ) {

+			$(element).removeClass(errorClass).addClass(validClass);

+		}

+	},

+

+	// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults

+	setDefaults: function(settings) {

+		/// <summary>

+		/// Modify default settings for validation.

+		/// Accepts everything that Plugins/Validation/validate accepts.

+		/// </summary>

+		/// <param name="settings" type="Options">

+		/// Options to set as default.

+		/// </param>

+		/// <returns type="undefined" />

+

+		$.extend( $.validator.defaults, settings );

+	},

+

+	messages: {

+		required: "This field is required.",

+		remote: "Please fix this field.",

+		email: "Please enter a valid email address.",

+		url: "Please enter a valid URL.",

+		date: "Please enter a valid date.",

+		dateISO: "Please enter a valid date (ISO).",

+		number: "Please enter a valid number.",

+		digits: "Please enter only digits.",

+		creditcard: "Please enter a valid credit card number.",

+		equalTo: "Please enter the same value again.",

+		accept: "Please enter a value with a valid extension.",

+		maxlength: $.validator.format("Please enter no more than {0} characters."),

+		minlength: $.validator.format("Please enter at least {0} characters."),

+		rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),

+		range: $.validator.format("Please enter a value between {0} and {1}."),

+		max: $.validator.format("Please enter a value less than or equal to {0}."),

+		min: $.validator.format("Please enter a value greater than or equal to {0}.")

+	},

+	

+	autoCreateRanges: false,

+	

+	prototype: {

+		

+		init: function() {

+			this.labelContainer = $(this.settings.errorLabelContainer);

+			this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);

+			this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );

+			this.submitted = {};

+			this.valueCache = {};

+			this.pendingRequest = 0;

+			this.pending = {};

+			this.invalid = {};

+			this.reset();

+			

+			var groups = (this.groups = {});

+			$.each(this.settings.groups, function(key, value) {

+				$.each(value.split(/\s/), function(index, name) {

+					groups[name] = key;

+				});

+			});

+			var rules = this.settings.rules;

+			$.each(rules, function(key, value) {

+				rules[key] = $.validator.normalizeRule(value);

+			});

+			

+			function delegate(event) {

+				var validator = $.data(this[0].form, "validator");

+				validator.settings["on" + event.type] && validator.settings["on" + event.type].call(validator, this[0] );

+			}

+			$(this.currentForm)

+				.delegate("focusin focusout keyup", ":text, :password, :file, select, textarea", delegate)

+				.delegate("click", ":radio, :checkbox, select, option", delegate);

+

+			if (this.settings.invalidHandler)

+				$(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);

+		},

+

+		// http://docs.jquery.com/Plugins/Validation/Validator/form

+		form: function() {

+			/// <summary>

+			/// Validates the form, returns true if it is valid, false otherwise.

+			/// This behaves as a normal submit event, but returns the result.

+			/// </summary>

+			/// <returns type="Boolean" />

+

+			this.checkForm();

+			$.extend(this.submitted, this.errorMap);

+			this.invalid = $.extend({}, this.errorMap);

+			if (!this.valid())

+				$(this.currentForm).triggerHandler("invalid-form", [this]);

+			this.showErrors();

+			return this.valid();

+		},

+		

+		checkForm: function() {

+			this.prepareForm();

+			for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {

+				this.check( elements[i] );

+			}

+			return this.valid(); 

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Validator/element

+		element: function( element ) {

+			/// <summary>

+			/// Validates a single element, returns true if it is valid, false otherwise.

+			/// This behaves as validation on blur or keyup, but returns the result.

+			/// </summary>

+			/// <param name="element" type="Selector">

+			/// An element to validate, must be inside the validated form.

+			/// </param>

+			/// <returns type="Boolean" />

+

+			element = this.clean( element );

+			this.lastElement = element;

+			this.prepareElement( element );

+			this.currentElements = $(element);

+			var result = this.check( element );

+			if ( result ) {

+				delete this.invalid[element.name];

+			} else {

+				this.invalid[element.name] = true;

+			}

+			if ( !this.numberOfInvalids() ) {

+				// Hide error containers on last error

+				this.toHide = this.toHide.add( this.containers );

+			}

+			this.showErrors();

+			return result;

+		},

+

+		// http://docs.jquery.com/Plugins/Validation/Validator/showErrors

+		showErrors: function(errors) {

+			/// <summary>

+			/// Show the specified messages.

+			/// Keys have to refer to the names of elements, values are displayed for those elements, using the configured error placement.

+			/// </summary>

+			/// <param name="errors" type="Object">

+			/// One or more key/value pairs of input names and messages.

+			/// </param>

+			/// <returns type="undefined" />

+

+			if(errors) {

+				// add items to error list and map

+				$.extend( this.errorMap, errors );

+				this.errorList = [];

+				for ( var name in errors ) {

+					this.errorList.push({

+						message: errors[name],

+						element: this.findByName(name)[0]

+					});

+				}

+				// remove items from success list

+				this.successList = $.grep( this.successList, function(element) {

+					return !(element.name in errors);

+				});

+			}

+			this.settings.showErrors

+				? this.settings.showErrors.call( this, this.errorMap, this.errorList )

+				: this.defaultShowErrors();

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Validator/resetForm

+		resetForm: function() {

+			/// <summary>

+			/// Resets the controlled form.

+			/// Resets input fields to their original value (requires form plugin), removes classes

+			/// indicating invalid elements and hides error messages.

+			/// </summary>

+			/// <returns type="undefined" />

+

+			if ( $.fn.resetForm )

+				$( this.currentForm ).resetForm();

+			this.submitted = {};

+			this.prepareForm();

+			this.hideErrors();

+			this.elements().removeClass( this.settings.errorClass );

+		},

+		

+		numberOfInvalids: function() {

+			/// <summary>

+			/// Returns the number of invalid fields.

+			/// This depends on the internal validator state. It covers all fields only after

+			/// validating the complete form (on submit or via $("form").valid()). After validating

+			/// a single element, only that element is counted. Most useful in combination with the

+			/// invalidHandler-option.

+			/// </summary>

+			/// <returns type="Number" />

+

+			return this.objectLength(this.invalid);

+		},

+		

+		objectLength: function( obj ) {

+			var count = 0;

+			for ( var i in obj )

+				count++;

+			return count;

+		},

+		

+		hideErrors: function() {

+			this.addWrapper( this.toHide ).hide();

+		},

+		

+		valid: function() {

+			return this.size() == 0;

+		},

+		

+		size: function() {

+			return this.errorList.length;

+		},

+		

+		focusInvalid: function() {

+			if( this.settings.focusInvalid ) {

+				try {

+					$(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus();

+				} catch(e) {

+					// ignore IE throwing errors when focusing hidden elements

+				}

+			}

+		},

+		

+		findLastActive: function() {

+			var lastActive = this.lastActive;

+			return lastActive && $.grep(this.errorList, function(n) {

+				return n.element.name == lastActive.name;

+			}).length == 1 && lastActive;

+		},

+		

+		elements: function() {

+			var validator = this,

+				rulesCache = {};

+			

+			// select all valid inputs inside the form (no submit or reset buttons)

+			// workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved

+			return $([]).add(this.currentForm.elements)

+			.filter(":input")

+			.not(":submit, :reset, :image, [disabled]")

+			.not( this.settings.ignore )

+			.filter(function() {

+				!this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);

+			

+				// select only the first element for each name, and only those with rules specified

+				if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )

+					return false;

+				

+				rulesCache[this.name] = true;

+				return true;

+			});

+		},

+		

+		clean: function( selector ) {

+			return $( selector )[0];

+		},

+		

+		errors: function() {

+			return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );

+		},

+		

+		reset: function() {

+			this.successList = [];

+			this.errorList = [];

+			this.errorMap = {};

+			this.toShow = $([]);

+			this.toHide = $([]);

+			this.currentElements = $([]);

+		},

+		

+		prepareForm: function() {

+			this.reset();

+			this.toHide = this.errors().add( this.containers );

+		},

+		

+		prepareElement: function( element ) {

+			this.reset();

+			this.toHide = this.errorsFor(element);

+		},

+	

+		check: function( element ) {

+			element = this.clean( element );

+			

+			// if radio/checkbox, validate first element in group instead

+			if (this.checkable(element)) {

+				element = this.findByName( element.name )[0];

+			}

+			

+			var rules = $(element).rules();

+			var dependencyMismatch = false;

+			for( method in rules ) {

+				var rule = { method: method, parameters: rules[method] };

+				try {

+					var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );

+					

+					// if a method indicates that the field is optional and therefore valid,

+					// don't mark it as valid when there are no other rules

+					if ( result == "dependency-mismatch" ) {

+						dependencyMismatch = true;

+						continue;

+					}

+					dependencyMismatch = false;

+					

+					if ( result == "pending" ) {

+						this.toHide = this.toHide.not( this.errorsFor(element) );

+						return;

+					}

+					

+					if( !result ) {

+						this.formatAndAdd( element, rule );

+						return false;

+					}

+				} catch(e) {

+					this.settings.debug && window.console && console.log("exception occured when checking element " + element.id

+						 + ", check the '" + rule.method + "' method", e);

+					throw e;

+				}

+			}

+			if (dependencyMismatch)

+				return;

+			if ( this.objectLength(rules) )

+				this.successList.push(element);

+			return true;

+		},

+		

+		// return the custom message for the given element and validation method

+		// specified in the element's "messages" metadata

+		customMetaMessage: function(element, method) {

+			if (!$.metadata)

+				return;

+			

+			var meta = this.settings.meta

+				? $(element).metadata()[this.settings.meta]

+				: $(element).metadata();

+			

+			return meta && meta.messages && meta.messages[method];

+		},

+		

+		// return the custom message for the given element name and validation method

+		customMessage: function( name, method ) {

+			var m = this.settings.messages[name];

+			return m && (m.constructor == String

+				? m

+				: m[method]);

+		},

+		

+		// return the first defined argument, allowing empty strings

+		findDefined: function() {

+			for(var i = 0; i < arguments.length; i++) {

+				if (arguments[i] !== undefined)

+					return arguments[i];

+			}

+			return undefined;

+		},

+		

+		defaultMessage: function( element, method) {

+			return this.findDefined(

+				this.customMessage( element.name, method ),

+				this.customMetaMessage( element, method ),

+				// title is never undefined, so handle empty string as undefined

+				!this.settings.ignoreTitle && element.title || undefined,

+				$.validator.messages[method],

+				"<strong>Warning: No message defined for " + element.name + "</strong>"

+			);

+		},

+		

+		formatAndAdd: function( element, rule ) {

+			var message = this.defaultMessage( element, rule.method ),

+				theregex = /\$?\{(\d+)\}/g;

+			if ( typeof message == "function" ) {

+				message = message.call(this, rule.parameters, element);

+			} else if (theregex.test(message)) {

+				message = jQuery.format(message.replace(theregex, '{$1}'), rule.parameters);

+			}			

+			this.errorList.push({

+				message: message,

+				element: element

+			});

+			

+			this.errorMap[element.name] = message;

+			this.submitted[element.name] = message;

+		},

+		

+		addWrapper: function(toToggle) {

+			if ( this.settings.wrapper )

+				toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );

+			return toToggle;

+		},

+		

+		defaultShowErrors: function() {

+			for ( var i = 0; this.errorList[i]; i++ ) {

+				var error = this.errorList[i];

+				this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );

+				this.showLabel( error.element, error.message );

+			}

+			if( this.errorList.length ) {

+				this.toShow = this.toShow.add( this.containers );

+			}

+			if (this.settings.success) {

+				for ( var i = 0; this.successList[i]; i++ ) {

+					this.showLabel( this.successList[i] );

+				}

+			}

+			if (this.settings.unhighlight) {

+				for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {

+					this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );

+				}

+			}

+			this.toHide = this.toHide.not( this.toShow );

+			this.hideErrors();

+			this.addWrapper( this.toShow ).show();

+		},

+		

+		validElements: function() {

+			return this.currentElements.not(this.invalidElements());

+		},

+		

+		invalidElements: function() {

+			return $(this.errorList).map(function() {

+				return this.element;

+			});

+		},

+		

+		showLabel: function(element, message) {

+			var label = this.errorsFor( element );

+			if ( label.length ) {

+				// refresh error/success class

+				label.removeClass().addClass( this.settings.errorClass );

+			

+				// check if we have a generated label, replace the message then

+				label.attr("generated") && label.html(message);

+			} else {

+				// create label

+				label = $("<" + this.settings.errorElement + "/>")

+					.attr({"for":  this.idOrName(element), generated: true})

+					.addClass(this.settings.errorClass)

+					.html(message || "");

+				if ( this.settings.wrapper ) {

+					// make sure the element is visible, even in IE

+					// actually showing the wrapped element is handled elsewhere

+					label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();

+				}

+				if ( !this.labelContainer.append(label).length )

+					this.settings.errorPlacement

+						? this.settings.errorPlacement(label, $(element) )

+						: label.insertAfter(element);

+			}

+			if ( !message && this.settings.success ) {

+				label.text("");

+				typeof this.settings.success == "string"

+					? label.addClass( this.settings.success )

+					: this.settings.success( label );

+			}

+			this.toShow = this.toShow.add(label);

+		},

+		

+		errorsFor: function(element) {

+			var name = this.idOrName(element);

+    		return this.errors().filter(function() {

+				return $(this).attr('for') == name

+			});

+		},

+		

+		idOrName: function(element) {

+			return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);

+		},

+

+		checkable: function( element ) {

+			return /radio|checkbox/i.test(element.type);

+		},

+		

+		findByName: function( name ) {

+			// select by name and filter by form for performance over form.find("[name=...]")

+			var form = this.currentForm;

+			return $(document.getElementsByName(name)).map(function(index, element) {

+				return element.form == form && element.name == name && element  || null;

+			});

+		},

+		

+		getLength: function(value, element) {

+			switch( element.nodeName.toLowerCase() ) {

+			case 'select':

+				return $("option:selected", element).length;

+			case 'input':

+				if( this.checkable( element) )

+					return this.findByName(element.name).filter(':checked').length;

+			}

+			return value.length;

+		},

+	

+		depend: function(param, element) {

+			return this.dependTypes[typeof param]

+				? this.dependTypes[typeof param](param, element)

+				: true;

+		},

+	

+		dependTypes: {

+			"boolean": function(param, element) {

+				return param;

+			},

+			"string": function(param, element) {

+				return !!$(param, element.form).length;

+			},

+			"function": function(param, element) {

+				return param(element);

+			}

+		},

+		

+		optional: function(element) {

+			return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";

+		},

+		

+		startRequest: function(element) {

+			if (!this.pending[element.name]) {

+				this.pendingRequest++;

+				this.pending[element.name] = true;

+			}

+		},

+		

+		stopRequest: function(element, valid) {

+			this.pendingRequest--;

+			// sometimes synchronization fails, make sure pendingRequest is never < 0

+			if (this.pendingRequest < 0)

+				this.pendingRequest = 0;

+			delete this.pending[element.name];

+			if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {

+				$(this.currentForm).submit();

+				this.formSubmitted = false;

+			} else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {

+				$(this.currentForm).triggerHandler("invalid-form", [this]);

+				this.formSubmitted = false;

+			}

+		},

+		

+		previousValue: function(element) {

+			return $.data(element, "previousValue") || $.data(element, "previousValue", {

+				old: null,

+				valid: true,

+				message: this.defaultMessage( element, "remote" )

+			});

+		}

+		

+	},

+	

+	classRuleSettings: {

+		required: {required: true},

+		email: {email: true},

+		url: {url: true},

+		date: {date: true},

+		dateISO: {dateISO: true},

+		dateDE: {dateDE: true},

+		number: {number: true},

+		numberDE: {numberDE: true},

+		digits: {digits: true},

+		creditcard: {creditcard: true}

+	},

+	

+	// http://docs.jquery.com/Plugins/Validation/Validator/addClassRules#namerules

+	addClassRules: function(className, rules) {

+		/// <summary>

+		/// Add a compound class method - useful to refactor common combinations of rules into a single

+		/// class.

+		/// </summary>

+		/// <param name="name" type="String">

+		/// The name of the class rule to add

+		/// </param>

+		/// <param name="rules" type="Options">

+		/// The compound rules

+		/// </param>

+		/// <returns type="undefined" />

+

+		className.constructor == String ?

+			this.classRuleSettings[className] = rules :

+			$.extend(this.classRuleSettings, className);

+	},

+	

+	classRules: function(element) {

+		var rules = {};

+		var classes = $(element).attr('class');

+		classes && $.each(classes.split(' '), function() {

+			if (this in $.validator.classRuleSettings) {

+				$.extend(rules, $.validator.classRuleSettings[this]);

+			}

+		});

+		return rules;

+	},

+	

+	attributeRules: function(element) {

+		var rules = {};

+		var $element = $(element);

+		

+		for (method in $.validator.methods) {

+			var value = $element.attr(method);

+			if (value) {

+				rules[method] = value;

+			}

+		}

+		

+		// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs

+		if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {

+			delete rules.maxlength;

+		}

+		

+		return rules;

+	},

+	

+	metadataRules: function(element) {

+		if (!$.metadata) return {};

+		

+		var meta = $.data(element.form, 'validator').settings.meta;

+		return meta ?

+			$(element).metadata()[meta] :

+			$(element).metadata();

+	},

+	

+	staticRules: function(element) {

+		var rules = {};

+		var validator = $.data(element.form, 'validator');

+		if (validator.settings.rules) {

+			rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};

+		}

+		return rules;

+	},

+	

+	normalizeRules: function(rules, element) {

+		// handle dependency check

+		$.each(rules, function(prop, val) {

+			// ignore rule when param is explicitly false, eg. required:false

+			if (val === false) {

+				delete rules[prop];

+				return;

+			}

+			if (val.param || val.depends) {

+				var keepRule = true;

+				switch (typeof val.depends) {

+					case "string":

+						keepRule = !!$(val.depends, element.form).length;

+						break;

+					case "function":

+						keepRule = val.depends.call(element, element);

+						break;

+				}

+				if (keepRule) {

+					rules[prop] = val.param !== undefined ? val.param : true;

+				} else {

+					delete rules[prop];

+				}

+			}

+		});

+		

+		// evaluate parameters

+		$.each(rules, function(rule, parameter) {

+			rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;

+		});

+		

+		// clean number parameters

+		$.each(['minlength', 'maxlength', 'min', 'max'], function() {

+			if (rules[this]) {

+				rules[this] = Number(rules[this]);

+			}

+		});

+		$.each(['rangelength', 'range'], function() {

+			if (rules[this]) {

+				rules[this] = [Number(rules[this][0]), Number(rules[this][1])];

+			}

+		});

+		

+		if ($.validator.autoCreateRanges) {

+			// auto-create ranges

+			if (rules.min && rules.max) {

+				rules.range = [rules.min, rules.max];

+				delete rules.min;

+				delete rules.max;

+			}

+			if (rules.minlength && rules.maxlength) {

+				rules.rangelength = [rules.minlength, rules.maxlength];

+				delete rules.minlength;

+				delete rules.maxlength;

+			}

+		}

+		

+		// To support custom messages in metadata ignore rule methods titled "messages"

+		if (rules.messages) {

+			delete rules.messages

+		}

+		

+		return rules;

+	},

+	

+	// Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}

+	normalizeRule: function(data) {

+		if( typeof data == "string" ) {

+			var transformed = {};

+			$.each(data.split(/\s/), function() {

+				transformed[this] = true;

+			});

+			data = transformed;

+		}

+		return data;

+	},

+	

+	// http://docs.jquery.com/Plugins/Validation/Validator/addMethod

+	addMethod: function(name, method, message) {

+		/// <summary>

+		/// Add a custom validation method. It must consist of a name (must be a legal javascript 

+		/// identifier), a javascript based function and a default string message.

+		/// </summary>

+		/// <param name="name" type="String">

+		/// The name of the method, used to identify and referencing it, must be a valid javascript

+		/// identifier

+		/// </param>

+		/// <param name="method" type="Function">

+		/// The actual method implementation, returning true if an element is valid

+		/// </param>

+		/// <param name="message" type="String" optional="true">

+		/// (Optional) The default message to display for this method. Can be a function created by 

+		/// jQuery.validator.format(value). When undefined, an already existing message is used 

+		/// (handy for localization), otherwise the field-specific messages have to be defined.

+		/// </param>

+		/// <returns type="undefined" />

+

+		$.validator.methods[name] = method;

+		$.validator.messages[name] = message != undefined ? message : $.validator.messages[name];

+		if (method.length < 3) {

+			$.validator.addClassRules(name, $.validator.normalizeRule(name));

+		}

+	},

+

+	methods: {

+

+		// http://docs.jquery.com/Plugins/Validation/Methods/required

+		required: function(value, element, param) {

+			// check if dependency is met

+			if ( !this.depend(param, element) )

+				return "dependency-mismatch";

+			switch( element.nodeName.toLowerCase() ) {

+			case 'select':

+				// could be an array for select-multiple or a string, both are fine this way

+				var val = $(element).val();

+				return val && val.length > 0;

+			case 'input':

+				if ( this.checkable(element) )

+					return this.getLength(value, element) > 0;

+			default:

+				return $.trim(value).length > 0;

+			}

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/remote

+		remote: function(value, element, param) {

+			if ( this.optional(element) )

+				return "dependency-mismatch";

+			

+			var previous = this.previousValue(element);

+			if (!this.settings.messages[element.name] )

+				this.settings.messages[element.name] = {};

+			previous.originalMessage = this.settings.messages[element.name].remote;

+			this.settings.messages[element.name].remote = previous.message;

+			

+			param = typeof param == "string" && {url:param} || param; 

+			

+			if ( previous.old !== value ) {

+				previous.old = value;

+				var validator = this;

+				this.startRequest(element);

+				var data = {};

+				data[element.name] = value;

+				$.ajax($.extend(true, {

+					url: param,

+					mode: "abort",

+					port: "validate" + element.name,

+					dataType: "json",

+					data: data,

+					success: function(response) {

+						validator.settings.messages[element.name].remote = previous.originalMessage;

+						var valid = response === true;

+						if ( valid ) {

+							var submitted = validator.formSubmitted;

+							validator.prepareElement(element);

+							validator.formSubmitted = submitted;

+							validator.successList.push(element);

+							validator.showErrors();

+						} else {

+							var errors = {};

+							var message = (previous.message = response || validator.defaultMessage( element, "remote" ));

+							errors[element.name] = $.isFunction(message) ? message(value) : message;

+							validator.showErrors(errors);

+						}

+						previous.valid = valid;

+						validator.stopRequest(element, valid);

+					}

+				}, param));

+				return "pending";

+			} else if( this.pending[element.name] ) {

+				return "pending";

+			}

+			return previous.valid;

+		},

+

+		// http://docs.jquery.com/Plugins/Validation/Methods/minlength

+		minlength: function(value, element, param) {

+			return this.optional(element) || this.getLength($.trim(value), element) >= param;

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/maxlength

+		maxlength: function(value, element, param) {

+			return this.optional(element) || this.getLength($.trim(value), element) <= param;

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/rangelength

+		rangelength: function(value, element, param) {

+			var length = this.getLength($.trim(value), element);

+			return this.optional(element) || ( length >= param[0] && length <= param[1] );

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/min

+		min: function( value, element, param ) {

+			return this.optional(element) || value >= param;

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/max

+		max: function( value, element, param ) {

+			return this.optional(element) || value <= param;

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/range

+		range: function( value, element, param ) {

+			return this.optional(element) || ( value >= param[0] && value <= param[1] );

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/email

+		email: function(value, element) {

+			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/

+			return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);

+		},

+	

+		// http://docs.jquery.com/Plugins/Validation/Methods/url

+		url: function(value, element) {

+			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/

+			return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);

+		},

+        

+		// http://docs.jquery.com/Plugins/Validation/Methods/date

+		date: function(value, element) {

+			return this.optional(element) || !/Invalid|NaN/.test(new Date(value));

+		},

+	

+		// http://docs.jquery.com/Plugins/Validation/Methods/dateISO

+		dateISO: function(value, element) {

+			return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);

+		},

+	

+		// http://docs.jquery.com/Plugins/Validation/Methods/number

+		number: function(value, element) {

+			return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);

+		},

+	

+		// http://docs.jquery.com/Plugins/Validation/Methods/digits

+		digits: function(value, element) {

+			return this.optional(element) || /^\d+$/.test(value);

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/creditcard

+		// based on http://en.wikipedia.org/wiki/Luhn

+		creditcard: function(value, element) {

+			if ( this.optional(element) )

+				return "dependency-mismatch";

+			// accept only digits and dashes

+			if (/[^0-9-]+/.test(value))

+				return false;

+			var nCheck = 0,

+				nDigit = 0,

+				bEven = false;

+

+			value = value.replace(/\D/g, "");

+

+			for (var n = value.length - 1; n >= 0; n--) {

+				var cDigit = value.charAt(n);

+				var nDigit = parseInt(cDigit, 10);

+				if (bEven) {

+					if ((nDigit *= 2) > 9)

+						nDigit -= 9;

+				}

+				nCheck += nDigit;

+				bEven = !bEven;

+			}

+

+			return (nCheck % 10) == 0;

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/accept

+		accept: function(value, element, param) {

+			param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";

+			return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i")); 

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/equalTo

+		equalTo: function(value, element, param) {

+			// bind to the blur event of the target in order to revalidate whenever the target field is updated

+			// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead

+			var target = $(param).unbind(".validate-equalTo").bind("blur.validate-equalTo", function() {

+				$(element).valid();

+			});

+			return value == target.val();

+		}

+		

+	}

+	

+});

+

+// deprecated, use $.validator.format instead

+$.format = $.validator.format;

+

+})(jQuery);

+

+// ajax mode: abort

+// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});

+// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() 

+;(function($) {

+	var ajax = $.ajax;

+	var pendingRequests = {};

+	$.ajax = function(settings) {

+		// create settings for compatibility with ajaxSetup

+		settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));

+		var port = settings.port;

+		if (settings.mode == "abort") {

+			if ( pendingRequests[port] ) {

+				pendingRequests[port].abort();

+			}

+			return (pendingRequests[port] = ajax.apply(this, arguments));

+		}

+		return ajax.apply(this, arguments);

+	};

+})(jQuery);

+

+// provides cross-browser focusin and focusout events

+// IE has native support, in other browsers, use event caputuring (neither bubbles)

+

+// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation

+// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target 

+

+// provides triggerEvent(type: String, target: Element) to trigger delegated events

+;(function($) {

+	$.each({

+		focus: 'focusin',

+		blur: 'focusout'	

+	}, function( original, fix ){

+		$.event.special[fix] = {

+			setup:function() {

+				if ( $.browser.msie ) return false;

+				this.addEventListener( original, $.event.special[fix].handler, true );

+			},

+			teardown:function() {

+				if ( $.browser.msie ) return false;

+				this.removeEventListener( original,

+				$.event.special[fix].handler, true );

+			},

+			handler: function(e) {

+				arguments[0] = $.event.fix(e);

+				arguments[0].type = fix;

+				return $.event.handle.apply(this, arguments);

+			}

+		};

+	});

+	$.extend($.fn, {

+		delegate: function(type, delegate, handler) {

+			return this.bind(type, function(event) {

+				var target = $(event.target);

+				if (target.is(delegate)) {

+					return handler.apply(target, arguments);

+				}

+			});

+		},

+		triggerEvent: function(type, target) {

+			return this.triggerHandler(type, [$.event.fix({ type: type, target: target })]);

+		}

+	})

+})(jQuery);

diff --git a/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery.validate.js b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery.validate.js
new file mode 100644
index 0000000..b5bb72a
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery.validate.js
@@ -0,0 +1,1155 @@
+/*

+ * jQuery validation plug-in 1.6

+ *

+ * http://bassistance.de/jquery-plugins/jquery-plugin-validation/

+ * http://docs.jquery.com/Plugins/Validation

+ *

+ * Copyright (c) 2006 - 2008 Jörn Zaefferer

+ *

+ * $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $

+ *

+ * Permission is hereby granted, free of charge, to any person obtaining

+ * a copy of this software and associated documentation files (the

+ * "Software"), to deal in the Software without restriction, including

+ * without limitation the rights to use, copy, modify, merge, publish,

+ * distribute, sublicense, and/or sell copies of the Software, and to

+ * permit persons to whom the Software is furnished to do so, subject to

+ * the following conditions:

+ * 

+ * The above copyright notice and this permission notice shall be

+ * included in all copies or substantial portions of the Software.

+ * 

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND

+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE

+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION

+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION

+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ */

+

+(function($) {

+

+$.extend($.fn, {

+	// http://docs.jquery.com/Plugins/Validation/validate

+	validate: function( options ) {

+

+		// if nothing is selected, return nothing; can't chain anyway

+		if (!this.length) {

+			options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );

+			return;

+		}

+

+		// check if a validator for this form was already created

+		var validator = $.data(this[0], 'validator');

+		if ( validator ) {

+			return validator;

+		}

+		

+		validator = new $.validator( options, this[0] );

+		$.data(this[0], 'validator', validator); 

+		

+		if ( validator.settings.onsubmit ) {

+		

+			// allow suppresing validation by adding a cancel class to the submit button

+			this.find("input, button").filter(".cancel").click(function() {

+				validator.cancelSubmit = true;

+			});

+			

+			// when a submitHandler is used, capture the submitting button

+			if (validator.settings.submitHandler) {

+				this.find("input, button").filter(":submit").click(function() {

+					validator.submitButton = this;

+				});

+			}

+		

+			// validate the form on submit

+			this.submit( function( event ) {

+				if ( validator.settings.debug )

+					// prevent form submit to be able to see console output

+					event.preventDefault();

+					

+				function handle() {

+					if ( validator.settings.submitHandler ) {

+						if (validator.submitButton) {

+							// insert a hidden input as a replacement for the missing submit button

+							var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);

+						}

+						validator.settings.submitHandler.call( validator, validator.currentForm );

+						if (validator.submitButton) {

+							// and clean up afterwards; thanks to no-block-scope, hidden can be referenced

+							hidden.remove();

+						}

+						return false;

+					}

+					return true;

+				}

+					

+				// prevent submit for invalid forms or custom submit handlers

+				if ( validator.cancelSubmit ) {

+					validator.cancelSubmit = false;

+					return handle();

+				}

+				if ( validator.form() ) {

+					if ( validator.pendingRequest ) {

+						validator.formSubmitted = true;

+						return false;

+					}

+					return handle();

+				} else {

+					validator.focusInvalid();

+					return false;

+				}

+			});

+		}

+		

+		return validator;

+	},

+	// http://docs.jquery.com/Plugins/Validation/valid

+	valid: function() {

+        if ( $(this[0]).is('form')) {

+            return this.validate().form();

+        } else {

+            var valid = true;

+            var validator = $(this[0].form).validate();

+            this.each(function() {

+				valid &= validator.element(this);

+            });

+            return valid;

+        }

+    },

+	// attributes: space seperated list of attributes to retrieve and remove

+	removeAttrs: function(attributes) {

+		var result = {},

+			$element = this;

+		$.each(attributes.split(/\s/), function(index, value) {

+			result[value] = $element.attr(value);

+			$element.removeAttr(value);

+		});

+		return result;

+	},

+	// http://docs.jquery.com/Plugins/Validation/rules

+	rules: function(command, argument) {

+		var element = this[0];

+		

+		if (command) {

+			var settings = $.data(element.form, 'validator').settings;

+			var staticRules = settings.rules;

+			var existingRules = $.validator.staticRules(element);

+			switch(command) {

+			case "add":

+				$.extend(existingRules, $.validator.normalizeRule(argument));

+				staticRules[element.name] = existingRules;

+				if (argument.messages)

+					settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );

+				break;

+			case "remove":

+				if (!argument) {

+					delete staticRules[element.name];

+					return existingRules;

+				}

+				var filtered = {};

+				$.each(argument.split(/\s/), function(index, method) {

+					filtered[method] = existingRules[method];

+					delete existingRules[method];

+				});

+				return filtered;

+			}

+		}

+		

+		var data = $.validator.normalizeRules(

+		$.extend(

+			{},

+			$.validator.metadataRules(element),

+			$.validator.classRules(element),

+			$.validator.attributeRules(element),

+			$.validator.staticRules(element)

+		), element);

+		

+		// make sure required is at front

+		if (data.required) {

+			var param = data.required;

+			delete data.required;

+			data = $.extend({required: param}, data);

+		}

+		

+		return data;

+	}

+});

+

+// Custom selectors

+$.extend($.expr[":"], {

+	// http://docs.jquery.com/Plugins/Validation/blank

+	blank: function(a) {return !$.trim("" + a.value);},

+	// http://docs.jquery.com/Plugins/Validation/filled

+	filled: function(a) {return !!$.trim("" + a.value);},

+	// http://docs.jquery.com/Plugins/Validation/unchecked

+	unchecked: function(a) {return !a.checked;}

+});

+

+// constructor for validator

+$.validator = function( options, form ) {

+	this.settings = $.extend( {}, $.validator.defaults, options );

+	this.currentForm = form;

+	this.init();

+};

+

+$.validator.format = function(source, params) {

+	if ( arguments.length == 1 ) 

+		return function() {

+			var args = $.makeArray(arguments);

+			args.unshift(source);

+			return $.validator.format.apply( this, args );

+		};

+	if ( arguments.length > 2 && params.constructor != Array  ) {

+		params = $.makeArray(arguments).slice(1);

+	}

+	if ( params.constructor != Array ) {

+		params = [ params ];

+	}

+	$.each(params, function(i, n) {

+		source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);

+	});

+	return source;

+};

+

+$.extend($.validator, {

+	

+	defaults: {

+		messages: {},

+		groups: {},

+		rules: {},

+		errorClass: "error",

+		validClass: "valid",

+		errorElement: "label",

+		focusInvalid: true,

+		errorContainer: $( [] ),

+		errorLabelContainer: $( [] ),

+		onsubmit: true,

+		ignore: [],

+		ignoreTitle: false,

+		onfocusin: function(element) {

+			this.lastActive = element;

+				

+			// hide error label and remove error class on focus if enabled

+			if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {

+				this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );

+				this.errorsFor(element).hide();

+			}

+		},

+		onfocusout: function(element) {

+			if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {

+				this.element(element);

+			}

+		},

+		onkeyup: function(element) {

+			if ( element.name in this.submitted || element == this.lastElement ) {

+				this.element(element);

+			}

+		},

+		onclick: function(element) {

+			// click on selects, radiobuttons and checkboxes

+			if ( element.name in this.submitted )

+				this.element(element);

+			// or option elements, check parent select in that case

+			else if (element.parentNode.name in this.submitted)

+				this.element(element.parentNode)

+		},

+		highlight: function( element, errorClass, validClass ) {

+			$(element).addClass(errorClass).removeClass(validClass);

+		},

+		unhighlight: function( element, errorClass, validClass ) {

+			$(element).removeClass(errorClass).addClass(validClass);

+		}

+	},

+

+	// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults

+	setDefaults: function(settings) {

+		$.extend( $.validator.defaults, settings );

+	},

+

+	messages: {

+		required: "This field is required.",

+		remote: "Please fix this field.",

+		email: "Please enter a valid email address.",

+		url: "Please enter a valid URL.",

+		date: "Please enter a valid date.",

+		dateISO: "Please enter a valid date (ISO).",

+		number: "Please enter a valid number.",

+		digits: "Please enter only digits.",

+		creditcard: "Please enter a valid credit card number.",

+		equalTo: "Please enter the same value again.",

+		accept: "Please enter a value with a valid extension.",

+		maxlength: $.validator.format("Please enter no more than {0} characters."),

+		minlength: $.validator.format("Please enter at least {0} characters."),

+		rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),

+		range: $.validator.format("Please enter a value between {0} and {1}."),

+		max: $.validator.format("Please enter a value less than or equal to {0}."),

+		min: $.validator.format("Please enter a value greater than or equal to {0}.")

+	},

+	

+	autoCreateRanges: false,

+	

+	prototype: {

+		

+		init: function() {

+			this.labelContainer = $(this.settings.errorLabelContainer);

+			this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);

+			this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );

+			this.submitted = {};

+			this.valueCache = {};

+			this.pendingRequest = 0;

+			this.pending = {};

+			this.invalid = {};

+			this.reset();

+			

+			var groups = (this.groups = {});

+			$.each(this.settings.groups, function(key, value) {

+				$.each(value.split(/\s/), function(index, name) {

+					groups[name] = key;

+				});

+			});

+			var rules = this.settings.rules;

+			$.each(rules, function(key, value) {

+				rules[key] = $.validator.normalizeRule(value);

+			});

+			

+			function delegate(event) {

+				var validator = $.data(this[0].form, "validator");

+				validator.settings["on" + event.type] && validator.settings["on" + event.type].call(validator, this[0] );

+			}

+			$(this.currentForm)

+				.delegate("focusin focusout keyup", ":text, :password, :file, select, textarea", delegate)

+				.delegate("click", ":radio, :checkbox, select, option", delegate);

+

+			if (this.settings.invalidHandler)

+				$(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);

+		},

+

+		// http://docs.jquery.com/Plugins/Validation/Validator/form

+		form: function() {

+			this.checkForm();

+			$.extend(this.submitted, this.errorMap);

+			this.invalid = $.extend({}, this.errorMap);

+			if (!this.valid())

+				$(this.currentForm).triggerHandler("invalid-form", [this]);

+			this.showErrors();

+			return this.valid();

+		},

+		

+		checkForm: function() {

+			this.prepareForm();

+			for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {

+				this.check( elements[i] );

+			}

+			return this.valid(); 

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Validator/element

+		element: function( element ) {

+			element = this.clean( element );

+			this.lastElement = element;

+			this.prepareElement( element );

+			this.currentElements = $(element);

+			var result = this.check( element );

+			if ( result ) {

+				delete this.invalid[element.name];

+			} else {

+				this.invalid[element.name] = true;

+			}

+			if ( !this.numberOfInvalids() ) {

+				// Hide error containers on last error

+				this.toHide = this.toHide.add( this.containers );

+			}

+			this.showErrors();

+			return result;

+		},

+

+		// http://docs.jquery.com/Plugins/Validation/Validator/showErrors

+		showErrors: function(errors) {

+			if(errors) {

+				// add items to error list and map

+				$.extend( this.errorMap, errors );

+				this.errorList = [];

+				for ( var name in errors ) {

+					this.errorList.push({

+						message: errors[name],

+						element: this.findByName(name)[0]

+					});

+				}

+				// remove items from success list

+				this.successList = $.grep( this.successList, function(element) {

+					return !(element.name in errors);

+				});

+			}

+			this.settings.showErrors

+				? this.settings.showErrors.call( this, this.errorMap, this.errorList )

+				: this.defaultShowErrors();

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Validator/resetForm

+		resetForm: function() {

+			if ( $.fn.resetForm )

+				$( this.currentForm ).resetForm();

+			this.submitted = {};

+			this.prepareForm();

+			this.hideErrors();

+			this.elements().removeClass( this.settings.errorClass );

+		},

+		

+		numberOfInvalids: function() {

+			return this.objectLength(this.invalid);

+		},

+		

+		objectLength: function( obj ) {

+			var count = 0;

+			for ( var i in obj )

+				count++;

+			return count;

+		},

+		

+		hideErrors: function() {

+			this.addWrapper( this.toHide ).hide();

+		},

+		

+		valid: function() {

+			return this.size() == 0;

+		},

+		

+		size: function() {

+			return this.errorList.length;

+		},

+		

+		focusInvalid: function() {

+			if( this.settings.focusInvalid ) {

+				try {

+					$(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus();

+				} catch(e) {

+					// ignore IE throwing errors when focusing hidden elements

+				}

+			}

+		},

+		

+		findLastActive: function() {

+			var lastActive = this.lastActive;

+			return lastActive && $.grep(this.errorList, function(n) {

+				return n.element.name == lastActive.name;

+			}).length == 1 && lastActive;

+		},

+		

+		elements: function() {

+			var validator = this,

+				rulesCache = {};

+			

+			// select all valid inputs inside the form (no submit or reset buttons)

+			// workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved

+			return $([]).add(this.currentForm.elements)

+			.filter(":input")

+			.not(":submit, :reset, :image, [disabled]")

+			.not( this.settings.ignore )

+			.filter(function() {

+				!this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);

+			

+				// select only the first element for each name, and only those with rules specified

+				if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )

+					return false;

+				

+				rulesCache[this.name] = true;

+				return true;

+			});

+		},

+		

+		clean: function( selector ) {

+			return $( selector )[0];

+		},

+		

+		errors: function() {

+			return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );

+		},

+		

+		reset: function() {

+			this.successList = [];

+			this.errorList = [];

+			this.errorMap = {};

+			this.toShow = $([]);

+			this.toHide = $([]);

+			this.currentElements = $([]);

+		},

+		

+		prepareForm: function() {

+			this.reset();

+			this.toHide = this.errors().add( this.containers );

+		},

+		

+		prepareElement: function( element ) {

+			this.reset();

+			this.toHide = this.errorsFor(element);

+		},

+	

+		check: function( element ) {

+			element = this.clean( element );

+			

+			// if radio/checkbox, validate first element in group instead

+			if (this.checkable(element)) {

+				element = this.findByName( element.name )[0];

+			}

+			

+			var rules = $(element).rules();

+			var dependencyMismatch = false;

+			for( method in rules ) {

+				var rule = { method: method, parameters: rules[method] };

+				try {

+					var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );

+					

+					// if a method indicates that the field is optional and therefore valid,

+					// don't mark it as valid when there are no other rules

+					if ( result == "dependency-mismatch" ) {

+						dependencyMismatch = true;

+						continue;

+					}

+					dependencyMismatch = false;

+					

+					if ( result == "pending" ) {

+						this.toHide = this.toHide.not( this.errorsFor(element) );

+						return;

+					}

+					

+					if( !result ) {

+						this.formatAndAdd( element, rule );

+						return false;

+					}

+				} catch(e) {

+					this.settings.debug && window.console && console.log("exception occured when checking element " + element.id

+						 + ", check the '" + rule.method + "' method", e);

+					throw e;

+				}

+			}

+			if (dependencyMismatch)

+				return;

+			if ( this.objectLength(rules) )

+				this.successList.push(element);

+			return true;

+		},

+		

+		// return the custom message for the given element and validation method

+		// specified in the element's "messages" metadata

+		customMetaMessage: function(element, method) {

+			if (!$.metadata)

+				return;

+			

+			var meta = this.settings.meta

+				? $(element).metadata()[this.settings.meta]

+				: $(element).metadata();

+			

+			return meta && meta.messages && meta.messages[method];

+		},

+		

+		// return the custom message for the given element name and validation method

+		customMessage: function( name, method ) {

+			var m = this.settings.messages[name];

+			return m && (m.constructor == String

+				? m

+				: m[method]);

+		},

+		

+		// return the first defined argument, allowing empty strings

+		findDefined: function() {

+			for(var i = 0; i < arguments.length; i++) {

+				if (arguments[i] !== undefined)

+					return arguments[i];

+			}

+			return undefined;

+		},

+		

+		defaultMessage: function( element, method) {

+			return this.findDefined(

+				this.customMessage( element.name, method ),

+				this.customMetaMessage( element, method ),

+				// title is never undefined, so handle empty string as undefined

+				!this.settings.ignoreTitle && element.title || undefined,

+				$.validator.messages[method],

+				"<strong>Warning: No message defined for " + element.name + "</strong>"

+			);

+		},

+		

+		formatAndAdd: function( element, rule ) {

+			var message = this.defaultMessage( element, rule.method ),

+				theregex = /\$?\{(\d+)\}/g;

+			if ( typeof message == "function" ) {

+				message = message.call(this, rule.parameters, element);

+			} else if (theregex.test(message)) {

+				message = jQuery.format(message.replace(theregex, '{$1}'), rule.parameters);

+			}			

+			this.errorList.push({

+				message: message,

+				element: element

+			});

+			

+			this.errorMap[element.name] = message;

+			this.submitted[element.name] = message;

+		},

+		

+		addWrapper: function(toToggle) {

+			if ( this.settings.wrapper )

+				toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );

+			return toToggle;

+		},

+		

+		defaultShowErrors: function() {

+			for ( var i = 0; this.errorList[i]; i++ ) {

+				var error = this.errorList[i];

+				this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );

+				this.showLabel( error.element, error.message );

+			}

+			if( this.errorList.length ) {

+				this.toShow = this.toShow.add( this.containers );

+			}

+			if (this.settings.success) {

+				for ( var i = 0; this.successList[i]; i++ ) {

+					this.showLabel( this.successList[i] );

+				}

+			}

+			if (this.settings.unhighlight) {

+				for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {

+					this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );

+				}

+			}

+			this.toHide = this.toHide.not( this.toShow );

+			this.hideErrors();

+			this.addWrapper( this.toShow ).show();

+		},

+		

+		validElements: function() {

+			return this.currentElements.not(this.invalidElements());

+		},

+		

+		invalidElements: function() {

+			return $(this.errorList).map(function() {

+				return this.element;

+			});

+		},

+		

+		showLabel: function(element, message) {

+			var label = this.errorsFor( element );

+			if ( label.length ) {

+				// refresh error/success class

+				label.removeClass().addClass( this.settings.errorClass );

+			

+				// check if we have a generated label, replace the message then

+				label.attr("generated") && label.html(message);

+			} else {

+				// create label

+				label = $("<" + this.settings.errorElement + "/>")

+					.attr({"for":  this.idOrName(element), generated: true})

+					.addClass(this.settings.errorClass)

+					.html(message || "");

+				if ( this.settings.wrapper ) {

+					// make sure the element is visible, even in IE

+					// actually showing the wrapped element is handled elsewhere

+					label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();

+				}

+				if ( !this.labelContainer.append(label).length )

+					this.settings.errorPlacement

+						? this.settings.errorPlacement(label, $(element) )

+						: label.insertAfter(element);

+			}

+			if ( !message && this.settings.success ) {

+				label.text("");

+				typeof this.settings.success == "string"

+					? label.addClass( this.settings.success )

+					: this.settings.success( label );

+			}

+			this.toShow = this.toShow.add(label);

+		},

+		

+		errorsFor: function(element) {

+			var name = this.idOrName(element);

+    		return this.errors().filter(function() {

+				return $(this).attr('for') == name

+			});

+		},

+		

+		idOrName: function(element) {

+			return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);

+		},

+

+		checkable: function( element ) {

+			return /radio|checkbox/i.test(element.type);

+		},

+		

+		findByName: function( name ) {

+			// select by name and filter by form for performance over form.find("[name=...]")

+			var form = this.currentForm;

+			return $(document.getElementsByName(name)).map(function(index, element) {

+				return element.form == form && element.name == name && element  || null;

+			});

+		},

+		

+		getLength: function(value, element) {

+			switch( element.nodeName.toLowerCase() ) {

+			case 'select':

+				return $("option:selected", element).length;

+			case 'input':

+				if( this.checkable( element) )

+					return this.findByName(element.name).filter(':checked').length;

+			}

+			return value.length;

+		},

+	

+		depend: function(param, element) {

+			return this.dependTypes[typeof param]

+				? this.dependTypes[typeof param](param, element)

+				: true;

+		},

+	

+		dependTypes: {

+			"boolean": function(param, element) {

+				return param;

+			},

+			"string": function(param, element) {

+				return !!$(param, element.form).length;

+			},

+			"function": function(param, element) {

+				return param(element);

+			}

+		},

+		

+		optional: function(element) {

+			return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";

+		},

+		

+		startRequest: function(element) {

+			if (!this.pending[element.name]) {

+				this.pendingRequest++;

+				this.pending[element.name] = true;

+			}

+		},

+		

+		stopRequest: function(element, valid) {

+			this.pendingRequest--;

+			// sometimes synchronization fails, make sure pendingRequest is never < 0

+			if (this.pendingRequest < 0)

+				this.pendingRequest = 0;

+			delete this.pending[element.name];

+			if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {

+				$(this.currentForm).submit();

+				this.formSubmitted = false;

+			} else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {

+				$(this.currentForm).triggerHandler("invalid-form", [this]);

+				this.formSubmitted = false;

+			}

+		},

+		

+		previousValue: function(element) {

+			return $.data(element, "previousValue") || $.data(element, "previousValue", {

+				old: null,

+				valid: true,

+				message: this.defaultMessage( element, "remote" )

+			});

+		}

+		

+	},

+	

+	classRuleSettings: {

+		required: {required: true},

+		email: {email: true},

+		url: {url: true},

+		date: {date: true},

+		dateISO: {dateISO: true},

+		dateDE: {dateDE: true},

+		number: {number: true},

+		numberDE: {numberDE: true},

+		digits: {digits: true},

+		creditcard: {creditcard: true}

+	},

+	

+	addClassRules: function(className, rules) {

+		className.constructor == String ?

+			this.classRuleSettings[className] = rules :

+			$.extend(this.classRuleSettings, className);

+	},

+	

+	classRules: function(element) {

+		var rules = {};

+		var classes = $(element).attr('class');

+		classes && $.each(classes.split(' '), function() {

+			if (this in $.validator.classRuleSettings) {

+				$.extend(rules, $.validator.classRuleSettings[this]);

+			}

+		});

+		return rules;

+	},

+	

+	attributeRules: function(element) {

+		var rules = {};

+		var $element = $(element);

+		

+		for (method in $.validator.methods) {

+			var value = $element.attr(method);

+			if (value) {

+				rules[method] = value;

+			}

+		}

+		

+		// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs

+		if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {

+			delete rules.maxlength;

+		}

+		

+		return rules;

+	},

+	

+	metadataRules: function(element) {

+		if (!$.metadata) return {};

+		

+		var meta = $.data(element.form, 'validator').settings.meta;

+		return meta ?

+			$(element).metadata()[meta] :

+			$(element).metadata();

+	},

+	

+	staticRules: function(element) {

+		var rules = {};

+		var validator = $.data(element.form, 'validator');

+		if (validator.settings.rules) {

+			rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};

+		}

+		return rules;

+	},

+	

+	normalizeRules: function(rules, element) {

+		// handle dependency check

+		$.each(rules, function(prop, val) {

+			// ignore rule when param is explicitly false, eg. required:false

+			if (val === false) {

+				delete rules[prop];

+				return;

+			}

+			if (val.param || val.depends) {

+				var keepRule = true;

+				switch (typeof val.depends) {

+					case "string":

+						keepRule = !!$(val.depends, element.form).length;

+						break;

+					case "function":

+						keepRule = val.depends.call(element, element);

+						break;

+				}

+				if (keepRule) {

+					rules[prop] = val.param !== undefined ? val.param : true;

+				} else {

+					delete rules[prop];

+				}

+			}

+		});

+		

+		// evaluate parameters

+		$.each(rules, function(rule, parameter) {

+			rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;

+		});

+		

+		// clean number parameters

+		$.each(['minlength', 'maxlength', 'min', 'max'], function() {

+			if (rules[this]) {

+				rules[this] = Number(rules[this]);

+			}

+		});

+		$.each(['rangelength', 'range'], function() {

+			if (rules[this]) {

+				rules[this] = [Number(rules[this][0]), Number(rules[this][1])];

+			}

+		});

+		

+		if ($.validator.autoCreateRanges) {

+			// auto-create ranges

+			if (rules.min && rules.max) {

+				rules.range = [rules.min, rules.max];

+				delete rules.min;

+				delete rules.max;

+			}

+			if (rules.minlength && rules.maxlength) {

+				rules.rangelength = [rules.minlength, rules.maxlength];

+				delete rules.minlength;

+				delete rules.maxlength;

+			}

+		}

+		

+		// To support custom messages in metadata ignore rule methods titled "messages"

+		if (rules.messages) {

+			delete rules.messages

+		}

+		

+		return rules;

+	},

+	

+	// Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}

+	normalizeRule: function(data) {

+		if( typeof data == "string" ) {

+			var transformed = {};

+			$.each(data.split(/\s/), function() {

+				transformed[this] = true;

+			});

+			data = transformed;

+		}

+		return data;

+	},

+	

+	// http://docs.jquery.com/Plugins/Validation/Validator/addMethod

+	addMethod: function(name, method, message) {

+		$.validator.methods[name] = method;

+		$.validator.messages[name] = message != undefined ? message : $.validator.messages[name];

+		if (method.length < 3) {

+			$.validator.addClassRules(name, $.validator.normalizeRule(name));

+		}

+	},

+

+	methods: {

+

+		// http://docs.jquery.com/Plugins/Validation/Methods/required

+		required: function(value, element, param) {

+			// check if dependency is met

+			if ( !this.depend(param, element) )

+				return "dependency-mismatch";

+			switch( element.nodeName.toLowerCase() ) {

+			case 'select':

+				// could be an array for select-multiple or a string, both are fine this way

+				var val = $(element).val();

+				return val && val.length > 0;

+			case 'input':

+				if ( this.checkable(element) )

+					return this.getLength(value, element) > 0;

+			default:

+				return $.trim(value).length > 0;

+			}

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/remote

+		remote: function(value, element, param) {

+			if ( this.optional(element) )

+				return "dependency-mismatch";

+			

+			var previous = this.previousValue(element);

+			if (!this.settings.messages[element.name] )

+				this.settings.messages[element.name] = {};

+			previous.originalMessage = this.settings.messages[element.name].remote;

+			this.settings.messages[element.name].remote = previous.message;

+			

+			param = typeof param == "string" && {url:param} || param; 

+			

+			if ( previous.old !== value ) {

+				previous.old = value;

+				var validator = this;

+				this.startRequest(element);

+				var data = {};

+				data[element.name] = value;

+				$.ajax($.extend(true, {

+					url: param,

+					mode: "abort",

+					port: "validate" + element.name,

+					dataType: "json",

+					data: data,

+					success: function(response) {

+						validator.settings.messages[element.name].remote = previous.originalMessage;

+						var valid = response === true;

+						if ( valid ) {

+							var submitted = validator.formSubmitted;

+							validator.prepareElement(element);

+							validator.formSubmitted = submitted;

+							validator.successList.push(element);

+							validator.showErrors();

+						} else {

+							var errors = {};

+							var message = (previous.message = response || validator.defaultMessage( element, "remote" ));

+							errors[element.name] = $.isFunction(message) ? message(value) : message;

+							validator.showErrors(errors);

+						}

+						previous.valid = valid;

+						validator.stopRequest(element, valid);

+					}

+				}, param));

+				return "pending";

+			} else if( this.pending[element.name] ) {

+				return "pending";

+			}

+			return previous.valid;

+		},

+

+		// http://docs.jquery.com/Plugins/Validation/Methods/minlength

+		minlength: function(value, element, param) {

+			return this.optional(element) || this.getLength($.trim(value), element) >= param;

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/maxlength

+		maxlength: function(value, element, param) {

+			return this.optional(element) || this.getLength($.trim(value), element) <= param;

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/rangelength

+		rangelength: function(value, element, param) {

+			var length = this.getLength($.trim(value), element);

+			return this.optional(element) || ( length >= param[0] && length <= param[1] );

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/min

+		min: function( value, element, param ) {

+			return this.optional(element) || value >= param;

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/max

+		max: function( value, element, param ) {

+			return this.optional(element) || value <= param;

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/range

+		range: function( value, element, param ) {

+			return this.optional(element) || ( value >= param[0] && value <= param[1] );

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/email

+		email: function(value, element) {

+			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/

+			return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);

+		},

+	

+		// http://docs.jquery.com/Plugins/Validation/Methods/url

+		url: function(value, element) {

+			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/

+			return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);

+		},

+        

+		// http://docs.jquery.com/Plugins/Validation/Methods/date

+		date: function(value, element) {

+			return this.optional(element) || !/Invalid|NaN/.test(new Date(value));

+		},

+	

+		// http://docs.jquery.com/Plugins/Validation/Methods/dateISO

+		dateISO: function(value, element) {

+			return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);

+		},

+	

+		// http://docs.jquery.com/Plugins/Validation/Methods/number

+		number: function(value, element) {

+			return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);

+		},

+	

+		// http://docs.jquery.com/Plugins/Validation/Methods/digits

+		digits: function(value, element) {

+			return this.optional(element) || /^\d+$/.test(value);

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/creditcard

+		// based on http://en.wikipedia.org/wiki/Luhn

+		creditcard: function(value, element) {

+			if ( this.optional(element) )

+				return "dependency-mismatch";

+			// accept only digits and dashes

+			if (/[^0-9-]+/.test(value))

+				return false;

+			var nCheck = 0,

+				nDigit = 0,

+				bEven = false;

+

+			value = value.replace(/\D/g, "");

+

+			for (var n = value.length - 1; n >= 0; n--) {

+				var cDigit = value.charAt(n);

+				var nDigit = parseInt(cDigit, 10);

+				if (bEven) {

+					if ((nDigit *= 2) > 9)

+						nDigit -= 9;

+				}

+				nCheck += nDigit;

+				bEven = !bEven;

+			}

+

+			return (nCheck % 10) == 0;

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/accept

+		accept: function(value, element, param) {

+			param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";

+			return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i")); 

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/equalTo

+		equalTo: function(value, element, param) {

+			// bind to the blur event of the target in order to revalidate whenever the target field is updated

+			// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead

+			var target = $(param).unbind(".validate-equalTo").bind("blur.validate-equalTo", function() {

+				$(element).valid();

+			});

+			return value == target.val();

+		}

+		

+	}

+	

+});

+

+// deprecated, use $.validator.format instead

+$.format = $.validator.format;

+

+})(jQuery);

+

+// ajax mode: abort

+// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});

+// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() 

+;(function($) {

+	var ajax = $.ajax;

+	var pendingRequests = {};

+	$.ajax = function(settings) {

+		// create settings for compatibility with ajaxSetup

+		settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));

+		var port = settings.port;

+		if (settings.mode == "abort") {

+			if ( pendingRequests[port] ) {

+				pendingRequests[port].abort();

+			}

+			return (pendingRequests[port] = ajax.apply(this, arguments));

+		}

+		return ajax.apply(this, arguments);

+	};

+})(jQuery);

+

+// provides cross-browser focusin and focusout events

+// IE has native support, in other browsers, use event caputuring (neither bubbles)

+

+// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation

+// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target 

+

+// provides triggerEvent(type: String, target: Element) to trigger delegated events

+;(function($) {

+	$.each({

+		focus: 'focusin',

+		blur: 'focusout'	

+	}, function( original, fix ){

+		$.event.special[fix] = {

+			setup:function() {

+				if ( $.browser.msie ) return false;

+				this.addEventListener( original, $.event.special[fix].handler, true );

+			},

+			teardown:function() {

+				if ( $.browser.msie ) return false;

+				this.removeEventListener( original,

+				$.event.special[fix].handler, true );

+			},

+			handler: function(e) {

+				arguments[0] = $.event.fix(e);

+				arguments[0].type = fix;

+				return $.event.handle.apply(this, arguments);

+			}

+		};

+	});

+	$.extend($.fn, {

+		delegate: function(type, delegate, handler) {

+			return this.bind(type, function(event) {

+				var target = $(event.target);

+				if (target.is(delegate)) {

+					return handler.apply(target, arguments);

+				}

+			});

+		},

+		triggerEvent: function(type, target) {

+			return this.triggerHandler(type, [$.event.fix({ type: type, target: target })]);

+		}

+	})

+})(jQuery);

diff --git a/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery.validate.min-vsdoc.js b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery.validate.min-vsdoc.js
new file mode 100644
index 0000000..b578431
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery.validate.min-vsdoc.js
@@ -0,0 +1,1292 @@
+/*

+* This file has been commented to support Visual Studio Intellisense.

+* You should not use this file at runtime inside the browser--it is only

+* intended to be used only for design-time IntelliSense.  Please use the

+* standard jQuery library for all production use.

+*

+* Comment version: 1.6

+*/

+

+/*

+ * jQuery validation plug-in 1.6

+ *

+ * http://bassistance.de/jquery-plugins/jquery-plugin-validation/

+ * http://docs.jquery.com/Plugins/Validation

+ *

+ * Copyright (c) 2006 - 2008 Jörn Zaefferer

+ *

+ * $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $

+ *

+ * Permission is hereby granted, free of charge, to any person obtaining

+ * a copy of this software and associated documentation files (the

+ * "Software"), to deal in the Software without restriction, including

+ * without limitation the rights to use, copy, modify, merge, publish,

+ * distribute, sublicense, and/or sell copies of the Software, and to

+ * permit persons to whom the Software is furnished to do so, subject to

+ * the following conditions:

+ *

+ * The above copyright notice and this permission notice shall be

+ * included in all copies or substantial portions of the Software.

+ *

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND

+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE

+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION

+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION

+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ */

+

+(function($) {

+

+$.extend($.fn, {

+	// http://docs.jquery.com/Plugins/Validation/validate

+	validate: function( options ) {

+		/// <summary>

+		/// Validates the selected form. This method sets up event handlers for submit, focus,

+		/// keyup, blur and click to trigger validation of the entire form or individual

+		/// elements. Each one can be disabled, see the onxxx options (onsubmit, onfocusout,

+		/// onkeyup, onclick). focusInvalid focuses elements when submitting a invalid form.

+		/// </summary>

+		/// <param name="options" type="Options">

+		/// A set of key/value pairs that configure the validate. All options are optional.

+		/// </param>

+		/// <returns type="Validator" />

+

+		// if nothing is selected, return nothing; can't chain anyway

+		if (!this.length) {

+			options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );

+			return;

+		}

+

+		// check if a validator for this form was already created

+		var validator = $.data(this[0], 'validator');

+		if ( validator ) {

+			return validator;

+		}

+		

+		validator = new $.validator( options, this[0] );

+		$.data(this[0], 'validator', validator); 

+		

+		if ( validator.settings.onsubmit ) {

+		

+			// allow suppresing validation by adding a cancel class to the submit button

+			this.find("input, button").filter(".cancel").click(function() {

+				validator.cancelSubmit = true;

+			});

+			

+			// when a submitHandler is used, capture the submitting button

+			if (validator.settings.submitHandler) {

+				this.find("input, button").filter(":submit").click(function() {

+					validator.submitButton = this;

+				});

+			}

+		

+			// validate the form on submit

+			this.submit( function( event ) {

+				if ( validator.settings.debug )

+					// prevent form submit to be able to see console output

+					event.preventDefault();

+					

+				function handle() {

+					if ( validator.settings.submitHandler ) {

+						if (validator.submitButton) {

+							// insert a hidden input as a replacement for the missing submit button

+							var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);

+						}

+						validator.settings.submitHandler.call( validator, validator.currentForm );

+						if (validator.submitButton) {

+							// and clean up afterwards; thanks to no-block-scope, hidden can be referenced

+							hidden.remove();

+						}

+						return false;

+					}

+					return true;

+				}

+					

+				// prevent submit for invalid forms or custom submit handlers

+				if ( validator.cancelSubmit ) {

+					validator.cancelSubmit = false;

+					return handle();

+				}

+				if ( validator.form() ) {

+					if ( validator.pendingRequest ) {

+						validator.formSubmitted = true;

+						return false;

+					}

+					return handle();

+				} else {

+					validator.focusInvalid();

+					return false;

+				}

+			});

+		}

+		

+		return validator;

+	},

+	// http://docs.jquery.com/Plugins/Validation/valid

+	valid: function() {

+		/// <summary>

+		/// Checks if the selected form is valid or if all selected elements are valid.

+		/// validate() needs to be called on the form before checking it using this method.

+		/// </summary>

+		/// <returns type="Boolean" />

+

+        if ( $(this[0]).is('form')) {

+            return this.validate().form();

+        } else {

+            var valid = true;

+            var validator = $(this[0].form).validate();

+            this.each(function() {

+				valid &= validator.element(this);

+            });

+            return valid;

+        }

+    },

+	// attributes: space seperated list of attributes to retrieve and remove

+	removeAttrs: function(attributes) {

+		/// <summary>

+		/// Remove the specified attributes from the first matched element and return them.

+		/// </summary>

+		/// <param name="attributes" type="String">

+		/// A space-seperated list of attribute names to remove.

+		/// </param>

+		/// <returns type="" />

+

+		var result = {},

+			$element = this;

+		$.each(attributes.split(/\s/), function(index, value) {

+			result[value] = $element.attr(value);

+			$element.removeAttr(value);

+		});

+		return result;

+	},

+	// http://docs.jquery.com/Plugins/Validation/rules

+	rules: function(command, argument) {

+		/// <summary>

+		/// Return the validations rules for the first selected element.

+		/// </summary>

+		/// <param name="command" type="String">

+		/// Can be either "add" or "remove".

+		/// </param>

+		/// <param name="argument" type="">

+		/// A list of rules to add or remove.

+		/// </param>

+		/// <returns type="" />

+

+		var element = this[0];

+		

+		if (command) {

+			var settings = $.data(element.form, 'validator').settings;

+			var staticRules = settings.rules;

+			var existingRules = $.validator.staticRules(element);

+			switch(command) {

+			case "add":

+				$.extend(existingRules, $.validator.normalizeRule(argument));

+				staticRules[element.name] = existingRules;

+				if (argument.messages)

+					settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );

+				break;

+			case "remove":

+				if (!argument) {

+					delete staticRules[element.name];

+					return existingRules;

+				}

+				var filtered = {};

+				$.each(argument.split(/\s/), function(index, method) {

+					filtered[method] = existingRules[method];

+					delete existingRules[method];

+				});

+				return filtered;

+			}

+		}

+		

+		var data = $.validator.normalizeRules(

+		$.extend(

+			{},

+			$.validator.metadataRules(element),

+			$.validator.classRules(element),

+			$.validator.attributeRules(element),

+			$.validator.staticRules(element)

+		), element);

+		

+		// make sure required is at front

+		if (data.required) {

+			var param = data.required;

+			delete data.required;

+			data = $.extend({required: param}, data);

+		}

+		

+		return data;

+	}

+});

+

+// Custom selectors

+$.extend($.expr[":"], {

+	// http://docs.jquery.com/Plugins/Validation/blank

+	blank: function(a) {return !$.trim("" + a.value);},

+	// http://docs.jquery.com/Plugins/Validation/filled

+	filled: function(a) {return !!$.trim("" + a.value);},

+	// http://docs.jquery.com/Plugins/Validation/unchecked

+	unchecked: function(a) {return !a.checked;}

+});

+

+// constructor for validator

+$.validator = function( options, form ) {

+	this.settings = $.extend( {}, $.validator.defaults, options );

+	this.currentForm = form;

+	this.init();

+};

+

+$.validator.format = function(source, params) {

+	/// <summary>

+	/// Replaces {n} placeholders with arguments.

+	/// One or more arguments can be passed, in addition to the string template itself, to insert

+	/// into the string.

+	/// </summary>

+	/// <param name="source" type="String">

+	/// The string to format.

+	/// </param>

+	/// <param name="params" type="String">

+	/// The first argument to insert, or an array of Strings to insert

+	/// </param>

+	/// <returns type="String" />

+

+	if ( arguments.length == 1 ) 

+		return function() {

+			var args = $.makeArray(arguments);

+			args.unshift(source);

+			return $.validator.format.apply( this, args );

+		};

+	if ( arguments.length > 2 && params.constructor != Array  ) {

+		params = $.makeArray(arguments).slice(1);

+	}

+	if ( params.constructor != Array ) {

+		params = [ params ];

+	}

+	$.each(params, function(i, n) {

+		source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);

+	});

+	return source;

+};

+

+$.extend($.validator, {

+	

+	defaults: {

+		messages: {},

+		groups: {},

+		rules: {},

+		errorClass: "error",

+		validClass: "valid",

+		errorElement: "label",

+		focusInvalid: true,

+		errorContainer: $( [] ),

+		errorLabelContainer: $( [] ),

+		onsubmit: true,

+		ignore: [],

+		ignoreTitle: false,

+		onfocusin: function(element) {

+			this.lastActive = element;

+				

+			// hide error label and remove error class on focus if enabled

+			if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {

+				this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );

+				this.errorsFor(element).hide();

+			}

+		},

+		onfocusout: function(element) {

+			if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {

+				this.element(element);

+			}

+		},

+		onkeyup: function(element) {

+			if ( element.name in this.submitted || element == this.lastElement ) {

+				this.element(element);

+			}

+		},

+		onclick: function(element) {

+			// click on selects, radiobuttons and checkboxes

+			if ( element.name in this.submitted )

+				this.element(element);

+			// or option elements, check parent select in that case

+			else if (element.parentNode.name in this.submitted)

+				this.element(element.parentNode)

+		},

+		highlight: function( element, errorClass, validClass ) {

+			$(element).addClass(errorClass).removeClass(validClass);

+		},

+		unhighlight: function( element, errorClass, validClass ) {

+			$(element).removeClass(errorClass).addClass(validClass);

+		}

+	},

+

+	// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults

+	setDefaults: function(settings) {

+		/// <summary>

+		/// Modify default settings for validation.

+		/// Accepts everything that Plugins/Validation/validate accepts.

+		/// </summary>

+		/// <param name="settings" type="Options">

+		/// Options to set as default.

+		/// </param>

+		/// <returns type="undefined" />

+

+		$.extend( $.validator.defaults, settings );

+	},

+

+	messages: {

+		required: "This field is required.",

+		remote: "Please fix this field.",

+		email: "Please enter a valid email address.",

+		url: "Please enter a valid URL.",

+		date: "Please enter a valid date.",

+		dateISO: "Please enter a valid date (ISO).",

+		number: "Please enter a valid number.",

+		digits: "Please enter only digits.",

+		creditcard: "Please enter a valid credit card number.",

+		equalTo: "Please enter the same value again.",

+		accept: "Please enter a value with a valid extension.",

+		maxlength: $.validator.format("Please enter no more than {0} characters."),

+		minlength: $.validator.format("Please enter at least {0} characters."),

+		rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),

+		range: $.validator.format("Please enter a value between {0} and {1}."),

+		max: $.validator.format("Please enter a value less than or equal to {0}."),

+		min: $.validator.format("Please enter a value greater than or equal to {0}.")

+	},

+	

+	autoCreateRanges: false,

+	

+	prototype: {

+		

+		init: function() {

+			this.labelContainer = $(this.settings.errorLabelContainer);

+			this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);

+			this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );

+			this.submitted = {};

+			this.valueCache = {};

+			this.pendingRequest = 0;

+			this.pending = {};

+			this.invalid = {};

+			this.reset();

+			

+			var groups = (this.groups = {});

+			$.each(this.settings.groups, function(key, value) {

+				$.each(value.split(/\s/), function(index, name) {

+					groups[name] = key;

+				});

+			});

+			var rules = this.settings.rules;

+			$.each(rules, function(key, value) {

+				rules[key] = $.validator.normalizeRule(value);

+			});

+			

+			function delegate(event) {

+				var validator = $.data(this[0].form, "validator");

+				validator.settings["on" + event.type] && validator.settings["on" + event.type].call(validator, this[0] );

+			}

+			$(this.currentForm)

+				.delegate("focusin focusout keyup", ":text, :password, :file, select, textarea", delegate)

+				.delegate("click", ":radio, :checkbox, select, option", delegate);

+

+			if (this.settings.invalidHandler)

+				$(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);

+		},

+

+		// http://docs.jquery.com/Plugins/Validation/Validator/form

+		form: function() {

+			/// <summary>

+			/// Validates the form, returns true if it is valid, false otherwise.

+			/// This behaves as a normal submit event, but returns the result.

+			/// </summary>

+			/// <returns type="Boolean" />

+

+			this.checkForm();

+			$.extend(this.submitted, this.errorMap);

+			this.invalid = $.extend({}, this.errorMap);

+			if (!this.valid())

+				$(this.currentForm).triggerHandler("invalid-form", [this]);

+			this.showErrors();

+			return this.valid();

+		},

+		

+		checkForm: function() {

+			this.prepareForm();

+			for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {

+				this.check( elements[i] );

+			}

+			return this.valid(); 

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Validator/element

+		element: function( element ) {

+			/// <summary>

+			/// Validates a single element, returns true if it is valid, false otherwise.

+			/// This behaves as validation on blur or keyup, but returns the result.

+			/// </summary>

+			/// <param name="element" type="Selector">

+			/// An element to validate, must be inside the validated form.

+			/// </param>

+			/// <returns type="Boolean" />

+

+			element = this.clean( element );

+			this.lastElement = element;

+			this.prepareElement( element );

+			this.currentElements = $(element);

+			var result = this.check( element );

+			if ( result ) {

+				delete this.invalid[element.name];

+			} else {

+				this.invalid[element.name] = true;

+			}

+			if ( !this.numberOfInvalids() ) {

+				// Hide error containers on last error

+				this.toHide = this.toHide.add( this.containers );

+			}

+			this.showErrors();

+			return result;

+		},

+

+		// http://docs.jquery.com/Plugins/Validation/Validator/showErrors

+		showErrors: function(errors) {

+			/// <summary>

+			/// Show the specified messages.

+			/// Keys have to refer to the names of elements, values are displayed for those elements, using the configured error placement.

+			/// </summary>

+			/// <param name="errors" type="Object">

+			/// One or more key/value pairs of input names and messages.

+			/// </param>

+			/// <returns type="undefined" />

+

+			if(errors) {

+				// add items to error list and map

+				$.extend( this.errorMap, errors );

+				this.errorList = [];

+				for ( var name in errors ) {

+					this.errorList.push({

+						message: errors[name],

+						element: this.findByName(name)[0]

+					});

+				}

+				// remove items from success list

+				this.successList = $.grep( this.successList, function(element) {

+					return !(element.name in errors);

+				});

+			}

+			this.settings.showErrors

+				? this.settings.showErrors.call( this, this.errorMap, this.errorList )

+				: this.defaultShowErrors();

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Validator/resetForm

+		resetForm: function() {

+			/// <summary>

+			/// Resets the controlled form.

+			/// Resets input fields to their original value (requires form plugin), removes classes

+			/// indicating invalid elements and hides error messages.

+			/// </summary>

+			/// <returns type="undefined" />

+

+			if ( $.fn.resetForm )

+				$( this.currentForm ).resetForm();

+			this.submitted = {};

+			this.prepareForm();

+			this.hideErrors();

+			this.elements().removeClass( this.settings.errorClass );

+		},

+		

+		numberOfInvalids: function() {

+			/// <summary>

+			/// Returns the number of invalid fields.

+			/// This depends on the internal validator state. It covers all fields only after

+			/// validating the complete form (on submit or via $("form").valid()). After validating

+			/// a single element, only that element is counted. Most useful in combination with the

+			/// invalidHandler-option.

+			/// </summary>

+			/// <returns type="Number" />

+

+			return this.objectLength(this.invalid);

+		},

+		

+		objectLength: function( obj ) {

+			var count = 0;

+			for ( var i in obj )

+				count++;

+			return count;

+		},

+		

+		hideErrors: function() {

+			this.addWrapper( this.toHide ).hide();

+		},

+		

+		valid: function() {

+			return this.size() == 0;

+		},

+		

+		size: function() {

+			return this.errorList.length;

+		},

+		

+		focusInvalid: function() {

+			if( this.settings.focusInvalid ) {

+				try {

+					$(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus();

+				} catch(e) {

+					// ignore IE throwing errors when focusing hidden elements

+				}

+			}

+		},

+		

+		findLastActive: function() {

+			var lastActive = this.lastActive;

+			return lastActive && $.grep(this.errorList, function(n) {

+				return n.element.name == lastActive.name;

+			}).length == 1 && lastActive;

+		},

+		

+		elements: function() {

+			var validator = this,

+				rulesCache = {};

+			

+			// select all valid inputs inside the form (no submit or reset buttons)

+			// workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved

+			return $([]).add(this.currentForm.elements)

+			.filter(":input")

+			.not(":submit, :reset, :image, [disabled]")

+			.not( this.settings.ignore )

+			.filter(function() {

+				!this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);

+			

+				// select only the first element for each name, and only those with rules specified

+				if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )

+					return false;

+				

+				rulesCache[this.name] = true;

+				return true;

+			});

+		},

+		

+		clean: function( selector ) {

+			return $( selector )[0];

+		},

+		

+		errors: function() {

+			return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );

+		},

+		

+		reset: function() {

+			this.successList = [];

+			this.errorList = [];

+			this.errorMap = {};

+			this.toShow = $([]);

+			this.toHide = $([]);

+			this.currentElements = $([]);

+		},

+		

+		prepareForm: function() {

+			this.reset();

+			this.toHide = this.errors().add( this.containers );

+		},

+		

+		prepareElement: function( element ) {

+			this.reset();

+			this.toHide = this.errorsFor(element);

+		},

+	

+		check: function( element ) {

+			element = this.clean( element );

+			

+			// if radio/checkbox, validate first element in group instead

+			if (this.checkable(element)) {

+				element = this.findByName( element.name )[0];

+			}

+			

+			var rules = $(element).rules();

+			var dependencyMismatch = false;

+			for( method in rules ) {

+				var rule = { method: method, parameters: rules[method] };

+				try {

+					var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );

+					

+					// if a method indicates that the field is optional and therefore valid,

+					// don't mark it as valid when there are no other rules

+					if ( result == "dependency-mismatch" ) {

+						dependencyMismatch = true;

+						continue;

+					}

+					dependencyMismatch = false;

+					

+					if ( result == "pending" ) {

+						this.toHide = this.toHide.not( this.errorsFor(element) );

+						return;

+					}

+					

+					if( !result ) {

+						this.formatAndAdd( element, rule );

+						return false;

+					}

+				} catch(e) {

+					this.settings.debug && window.console && console.log("exception occured when checking element " + element.id

+						 + ", check the '" + rule.method + "' method", e);

+					throw e;

+				}

+			}

+			if (dependencyMismatch)

+				return;

+			if ( this.objectLength(rules) )

+				this.successList.push(element);

+			return true;

+		},

+		

+		// return the custom message for the given element and validation method

+		// specified in the element's "messages" metadata

+		customMetaMessage: function(element, method) {

+			if (!$.metadata)

+				return;

+			

+			var meta = this.settings.meta

+				? $(element).metadata()[this.settings.meta]

+				: $(element).metadata();

+			

+			return meta && meta.messages && meta.messages[method];

+		},

+		

+		// return the custom message for the given element name and validation method

+		customMessage: function( name, method ) {

+			var m = this.settings.messages[name];

+			return m && (m.constructor == String

+				? m

+				: m[method]);

+		},

+		

+		// return the first defined argument, allowing empty strings

+		findDefined: function() {

+			for(var i = 0; i < arguments.length; i++) {

+				if (arguments[i] !== undefined)

+					return arguments[i];

+			}

+			return undefined;

+		},

+		

+		defaultMessage: function( element, method) {

+			return this.findDefined(

+				this.customMessage( element.name, method ),

+				this.customMetaMessage( element, method ),

+				// title is never undefined, so handle empty string as undefined

+				!this.settings.ignoreTitle && element.title || undefined,

+				$.validator.messages[method],

+				"<strong>Warning: No message defined for " + element.name + "</strong>"

+			);

+		},

+		

+		formatAndAdd: function( element, rule ) {

+			var message = this.defaultMessage( element, rule.method ),

+				theregex = /\$?\{(\d+)\}/g;

+			if ( typeof message == "function" ) {

+				message = message.call(this, rule.parameters, element);

+			} else if (theregex.test(message)) {

+				message = jQuery.format(message.replace(theregex, '{$1}'), rule.parameters);

+			}			

+			this.errorList.push({

+				message: message,

+				element: element

+			});

+			

+			this.errorMap[element.name] = message;

+			this.submitted[element.name] = message;

+		},

+		

+		addWrapper: function(toToggle) {

+			if ( this.settings.wrapper )

+				toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );

+			return toToggle;

+		},

+		

+		defaultShowErrors: function() {

+			for ( var i = 0; this.errorList[i]; i++ ) {

+				var error = this.errorList[i];

+				this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );

+				this.showLabel( error.element, error.message );

+			}

+			if( this.errorList.length ) {

+				this.toShow = this.toShow.add( this.containers );

+			}

+			if (this.settings.success) {

+				for ( var i = 0; this.successList[i]; i++ ) {

+					this.showLabel( this.successList[i] );

+				}

+			}

+			if (this.settings.unhighlight) {

+				for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {

+					this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );

+				}

+			}

+			this.toHide = this.toHide.not( this.toShow );

+			this.hideErrors();

+			this.addWrapper( this.toShow ).show();

+		},

+		

+		validElements: function() {

+			return this.currentElements.not(this.invalidElements());

+		},

+		

+		invalidElements: function() {

+			return $(this.errorList).map(function() {

+				return this.element;

+			});

+		},

+		

+		showLabel: function(element, message) {

+			var label = this.errorsFor( element );

+			if ( label.length ) {

+				// refresh error/success class

+				label.removeClass().addClass( this.settings.errorClass );

+			

+				// check if we have a generated label, replace the message then

+				label.attr("generated") && label.html(message);

+			} else {

+				// create label

+				label = $("<" + this.settings.errorElement + "/>")

+					.attr({"for":  this.idOrName(element), generated: true})

+					.addClass(this.settings.errorClass)

+					.html(message || "");

+				if ( this.settings.wrapper ) {

+					// make sure the element is visible, even in IE

+					// actually showing the wrapped element is handled elsewhere

+					label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();

+				}

+				if ( !this.labelContainer.append(label).length )

+					this.settings.errorPlacement

+						? this.settings.errorPlacement(label, $(element) )

+						: label.insertAfter(element);

+			}

+			if ( !message && this.settings.success ) {

+				label.text("");

+				typeof this.settings.success == "string"

+					? label.addClass( this.settings.success )

+					: this.settings.success( label );

+			}

+			this.toShow = this.toShow.add(label);

+		},

+		

+		errorsFor: function(element) {

+			var name = this.idOrName(element);

+    		return this.errors().filter(function() {

+				return $(this).attr('for') == name

+			});

+		},

+		

+		idOrName: function(element) {

+			return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);

+		},

+

+		checkable: function( element ) {

+			return /radio|checkbox/i.test(element.type);

+		},

+		

+		findByName: function( name ) {

+			// select by name and filter by form for performance over form.find("[name=...]")

+			var form = this.currentForm;

+			return $(document.getElementsByName(name)).map(function(index, element) {

+				return element.form == form && element.name == name && element  || null;

+			});

+		},

+		

+		getLength: function(value, element) {

+			switch( element.nodeName.toLowerCase() ) {

+			case 'select':

+				return $("option:selected", element).length;

+			case 'input':

+				if( this.checkable( element) )

+					return this.findByName(element.name).filter(':checked').length;

+			}

+			return value.length;

+		},

+	

+		depend: function(param, element) {

+			return this.dependTypes[typeof param]

+				? this.dependTypes[typeof param](param, element)

+				: true;

+		},

+	

+		dependTypes: {

+			"boolean": function(param, element) {

+				return param;

+			},

+			"string": function(param, element) {

+				return !!$(param, element.form).length;

+			},

+			"function": function(param, element) {

+				return param(element);

+			}

+		},

+		

+		optional: function(element) {

+			return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";

+		},

+		

+		startRequest: function(element) {

+			if (!this.pending[element.name]) {

+				this.pendingRequest++;

+				this.pending[element.name] = true;

+			}

+		},

+		

+		stopRequest: function(element, valid) {

+			this.pendingRequest--;

+			// sometimes synchronization fails, make sure pendingRequest is never < 0

+			if (this.pendingRequest < 0)

+				this.pendingRequest = 0;

+			delete this.pending[element.name];

+			if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {

+				$(this.currentForm).submit();

+				this.formSubmitted = false;

+			} else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {

+				$(this.currentForm).triggerHandler("invalid-form", [this]);

+				this.formSubmitted = false;

+			}

+		},

+		

+		previousValue: function(element) {

+			return $.data(element, "previousValue") || $.data(element, "previousValue", {

+				old: null,

+				valid: true,

+				message: this.defaultMessage( element, "remote" )

+			});

+		}

+		

+	},

+	

+	classRuleSettings: {

+		required: {required: true},

+		email: {email: true},

+		url: {url: true},

+		date: {date: true},

+		dateISO: {dateISO: true},

+		dateDE: {dateDE: true},

+		number: {number: true},

+		numberDE: {numberDE: true},

+		digits: {digits: true},

+		creditcard: {creditcard: true}

+	},

+	

+	// http://docs.jquery.com/Plugins/Validation/Validator/addClassRules#namerules

+	addClassRules: function(className, rules) {

+		/// <summary>

+		/// Add a compound class method - useful to refactor common combinations of rules into a single

+		/// class.

+		/// </summary>

+		/// <param name="name" type="String">

+		/// The name of the class rule to add

+		/// </param>

+		/// <param name="rules" type="Options">

+		/// The compound rules

+		/// </param>

+		/// <returns type="undefined" />

+

+		className.constructor == String ?

+			this.classRuleSettings[className] = rules :

+			$.extend(this.classRuleSettings, className);

+	},

+	

+	classRules: function(element) {

+		var rules = {};

+		var classes = $(element).attr('class');

+		classes && $.each(classes.split(' '), function() {

+			if (this in $.validator.classRuleSettings) {

+				$.extend(rules, $.validator.classRuleSettings[this]);

+			}

+		});

+		return rules;

+	},

+	

+	attributeRules: function(element) {

+		var rules = {};

+		var $element = $(element);

+		

+		for (method in $.validator.methods) {

+			var value = $element.attr(method);

+			if (value) {

+				rules[method] = value;

+			}

+		}

+		

+		// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs

+		if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {

+			delete rules.maxlength;

+		}

+		

+		return rules;

+	},

+	

+	metadataRules: function(element) {

+		if (!$.metadata) return {};

+		

+		var meta = $.data(element.form, 'validator').settings.meta;

+		return meta ?

+			$(element).metadata()[meta] :

+			$(element).metadata();

+	},

+	

+	staticRules: function(element) {

+		var rules = {};

+		var validator = $.data(element.form, 'validator');

+		if (validator.settings.rules) {

+			rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};

+		}

+		return rules;

+	},

+	

+	normalizeRules: function(rules, element) {

+		// handle dependency check

+		$.each(rules, function(prop, val) {

+			// ignore rule when param is explicitly false, eg. required:false

+			if (val === false) {

+				delete rules[prop];

+				return;

+			}

+			if (val.param || val.depends) {

+				var keepRule = true;

+				switch (typeof val.depends) {

+					case "string":

+						keepRule = !!$(val.depends, element.form).length;

+						break;

+					case "function":

+						keepRule = val.depends.call(element, element);

+						break;

+				}

+				if (keepRule) {

+					rules[prop] = val.param !== undefined ? val.param : true;

+				} else {

+					delete rules[prop];

+				}

+			}

+		});

+		

+		// evaluate parameters

+		$.each(rules, function(rule, parameter) {

+			rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;

+		});

+		

+		// clean number parameters

+		$.each(['minlength', 'maxlength', 'min', 'max'], function() {

+			if (rules[this]) {

+				rules[this] = Number(rules[this]);

+			}

+		});

+		$.each(['rangelength', 'range'], function() {

+			if (rules[this]) {

+				rules[this] = [Number(rules[this][0]), Number(rules[this][1])];

+			}

+		});

+		

+		if ($.validator.autoCreateRanges) {

+			// auto-create ranges

+			if (rules.min && rules.max) {

+				rules.range = [rules.min, rules.max];

+				delete rules.min;

+				delete rules.max;

+			}

+			if (rules.minlength && rules.maxlength) {

+				rules.rangelength = [rules.minlength, rules.maxlength];

+				delete rules.minlength;

+				delete rules.maxlength;

+			}

+		}

+		

+		// To support custom messages in metadata ignore rule methods titled "messages"

+		if (rules.messages) {

+			delete rules.messages

+		}

+		

+		return rules;

+	},

+	

+	// Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}

+	normalizeRule: function(data) {

+		if( typeof data == "string" ) {

+			var transformed = {};

+			$.each(data.split(/\s/), function() {

+				transformed[this] = true;

+			});

+			data = transformed;

+		}

+		return data;

+	},

+	

+	// http://docs.jquery.com/Plugins/Validation/Validator/addMethod

+	addMethod: function(name, method, message) {

+		/// <summary>

+		/// Add a custom validation method. It must consist of a name (must be a legal javascript 

+		/// identifier), a javascript based function and a default string message.

+		/// </summary>

+		/// <param name="name" type="String">

+		/// The name of the method, used to identify and referencing it, must be a valid javascript

+		/// identifier

+		/// </param>

+		/// <param name="method" type="Function">

+		/// The actual method implementation, returning true if an element is valid

+		/// </param>

+		/// <param name="message" type="String" optional="true">

+		/// (Optional) The default message to display for this method. Can be a function created by 

+		/// jQuery.validator.format(value). When undefined, an already existing message is used 

+		/// (handy for localization), otherwise the field-specific messages have to be defined.

+		/// </param>

+		/// <returns type="undefined" />

+

+		$.validator.methods[name] = method;

+		$.validator.messages[name] = message != undefined ? message : $.validator.messages[name];

+		if (method.length < 3) {

+			$.validator.addClassRules(name, $.validator.normalizeRule(name));

+		}

+	},

+

+	methods: {

+

+		// http://docs.jquery.com/Plugins/Validation/Methods/required

+		required: function(value, element, param) {

+			// check if dependency is met

+			if ( !this.depend(param, element) )

+				return "dependency-mismatch";

+			switch( element.nodeName.toLowerCase() ) {

+			case 'select':

+				// could be an array for select-multiple or a string, both are fine this way

+				var val = $(element).val();

+				return val && val.length > 0;

+			case 'input':

+				if ( this.checkable(element) )

+					return this.getLength(value, element) > 0;

+			default:

+				return $.trim(value).length > 0;

+			}

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/remote

+		remote: function(value, element, param) {

+			if ( this.optional(element) )

+				return "dependency-mismatch";

+			

+			var previous = this.previousValue(element);

+			if (!this.settings.messages[element.name] )

+				this.settings.messages[element.name] = {};

+			previous.originalMessage = this.settings.messages[element.name].remote;

+			this.settings.messages[element.name].remote = previous.message;

+			

+			param = typeof param == "string" && {url:param} || param; 

+			

+			if ( previous.old !== value ) {

+				previous.old = value;

+				var validator = this;

+				this.startRequest(element);

+				var data = {};

+				data[element.name] = value;

+				$.ajax($.extend(true, {

+					url: param,

+					mode: "abort",

+					port: "validate" + element.name,

+					dataType: "json",

+					data: data,

+					success: function(response) {

+						validator.settings.messages[element.name].remote = previous.originalMessage;

+						var valid = response === true;

+						if ( valid ) {

+							var submitted = validator.formSubmitted;

+							validator.prepareElement(element);

+							validator.formSubmitted = submitted;

+							validator.successList.push(element);

+							validator.showErrors();

+						} else {

+							var errors = {};

+							var message = (previous.message = response || validator.defaultMessage( element, "remote" ));

+							errors[element.name] = $.isFunction(message) ? message(value) : message;

+							validator.showErrors(errors);

+						}

+						previous.valid = valid;

+						validator.stopRequest(element, valid);

+					}

+				}, param));

+				return "pending";

+			} else if( this.pending[element.name] ) {

+				return "pending";

+			}

+			return previous.valid;

+		},

+

+		// http://docs.jquery.com/Plugins/Validation/Methods/minlength

+		minlength: function(value, element, param) {

+			return this.optional(element) || this.getLength($.trim(value), element) >= param;

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/maxlength

+		maxlength: function(value, element, param) {

+			return this.optional(element) || this.getLength($.trim(value), element) <= param;

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/rangelength

+		rangelength: function(value, element, param) {

+			var length = this.getLength($.trim(value), element);

+			return this.optional(element) || ( length >= param[0] && length <= param[1] );

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/min

+		min: function( value, element, param ) {

+			return this.optional(element) || value >= param;

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/max

+		max: function( value, element, param ) {

+			return this.optional(element) || value <= param;

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/range

+		range: function( value, element, param ) {

+			return this.optional(element) || ( value >= param[0] && value <= param[1] );

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/email

+		email: function(value, element) {

+			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/

+			return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);

+		},

+	

+		// http://docs.jquery.com/Plugins/Validation/Methods/url

+		url: function(value, element) {

+			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/

+			return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);

+		},

+        

+		// http://docs.jquery.com/Plugins/Validation/Methods/date

+		date: function(value, element) {

+			return this.optional(element) || !/Invalid|NaN/.test(new Date(value));

+		},

+	

+		// http://docs.jquery.com/Plugins/Validation/Methods/dateISO

+		dateISO: function(value, element) {

+			return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);

+		},

+	

+		// http://docs.jquery.com/Plugins/Validation/Methods/number

+		number: function(value, element) {

+			return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);

+		},

+	

+		// http://docs.jquery.com/Plugins/Validation/Methods/digits

+		digits: function(value, element) {

+			return this.optional(element) || /^\d+$/.test(value);

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/creditcard

+		// based on http://en.wikipedia.org/wiki/Luhn

+		creditcard: function(value, element) {

+			if ( this.optional(element) )

+				return "dependency-mismatch";

+			// accept only digits and dashes

+			if (/[^0-9-]+/.test(value))

+				return false;

+			var nCheck = 0,

+				nDigit = 0,

+				bEven = false;

+

+			value = value.replace(/\D/g, "");

+

+			for (var n = value.length - 1; n >= 0; n--) {

+				var cDigit = value.charAt(n);

+				var nDigit = parseInt(cDigit, 10);

+				if (bEven) {

+					if ((nDigit *= 2) > 9)

+						nDigit -= 9;

+				}

+				nCheck += nDigit;

+				bEven = !bEven;

+			}

+

+			return (nCheck % 10) == 0;

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/accept

+		accept: function(value, element, param) {

+			param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";

+			return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i")); 

+		},

+		

+		// http://docs.jquery.com/Plugins/Validation/Methods/equalTo

+		equalTo: function(value, element, param) {

+			// bind to the blur event of the target in order to revalidate whenever the target field is updated

+			// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead

+			var target = $(param).unbind(".validate-equalTo").bind("blur.validate-equalTo", function() {

+				$(element).valid();

+			});

+			return value == target.val();

+		}

+		

+	}

+	

+});

+

+// deprecated, use $.validator.format instead

+$.format = $.validator.format;

+

+})(jQuery);

+

+// ajax mode: abort

+// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});

+// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() 

+;(function($) {

+	var ajax = $.ajax;

+	var pendingRequests = {};

+	$.ajax = function(settings) {

+		// create settings for compatibility with ajaxSetup

+		settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));

+		var port = settings.port;

+		if (settings.mode == "abort") {

+			if ( pendingRequests[port] ) {

+				pendingRequests[port].abort();

+			}

+			return (pendingRequests[port] = ajax.apply(this, arguments));

+		}

+		return ajax.apply(this, arguments);

+	};

+})(jQuery);

+

+// provides cross-browser focusin and focusout events

+// IE has native support, in other browsers, use event caputuring (neither bubbles)

+

+// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation

+// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target 

+

+// provides triggerEvent(type: String, target: Element) to trigger delegated events

+;(function($) {

+	$.each({

+		focus: 'focusin',

+		blur: 'focusout'	

+	}, function( original, fix ){

+		$.event.special[fix] = {

+			setup:function() {

+				if ( $.browser.msie ) return false;

+				this.addEventListener( original, $.event.special[fix].handler, true );

+			},

+			teardown:function() {

+				if ( $.browser.msie ) return false;

+				this.removeEventListener( original,

+				$.event.special[fix].handler, true );

+			},

+			handler: function(e) {

+				arguments[0] = $.event.fix(e);

+				arguments[0].type = fix;

+				return $.event.handle.apply(this, arguments);

+			}

+		};

+	});

+	$.extend($.fn, {

+		delegate: function(type, delegate, handler) {

+			return this.bind(type, function(event) {

+				var target = $(event.target);

+				if (target.is(delegate)) {

+					return handler.apply(target, arguments);

+				}

+			});

+		},

+		triggerEvent: function(type, target) {

+			return this.triggerHandler(type, [$.event.fix({ type: type, target: target })]);

+		}

+	})

+})(jQuery);

diff --git a/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery.validate.min.js b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery.validate.min.js
new file mode 100644
index 0000000..e2d616a
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Scripts/jquery.validate.min.js
@@ -0,0 +1,31 @@
+/*

+ * jQuery validation plug-in 1.6

+ *

+ * http://bassistance.de/jquery-plugins/jquery-plugin-validation/

+ * http://docs.jquery.com/Plugins/Validation

+ *

+ * Copyright (c) 2006 - 2008 Jörn Zaefferer

+ *

+ * $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $

+ *

+ * Permission is hereby granted, free of charge, to any person obtaining

+ * a copy of this software and associated documentation files (the

+ * "Software"), to deal in the Software without restriction, including

+ * without limitation the rights to use, copy, modify, merge, publish,

+ * distribute, sublicense, and/or sell copies of the Software, and to

+ * permit persons to whom the Software is furnished to do so, subject to

+ * the following conditions:

+ * 

+ * The above copyright notice and this permission notice shall be

+ * included in all copies or substantial portions of the Software.

+ * 

+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND

+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE

+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION

+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION

+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ */

+(function($){$.extend($.fn,{validate:function(options){if(!this.length){options&&options.debug&&window.console&&console.warn("nothing selected, can't validate, returning nothing");return;}var validator=$.data(this[0],'validator');if(validator){return validator;}validator=new $.validator(options,this[0]);$.data(this[0],'validator',validator);if(validator.settings.onsubmit){this.find("input, button").filter(".cancel").click(function(){validator.cancelSubmit=true;});if(validator.settings.submitHandler){this.find("input, button").filter(":submit").click(function(){validator.submitButton=this;});}this.submit(function(event){if(validator.settings.debug)event.preventDefault();function handle(){if(validator.settings.submitHandler){if(validator.submitButton){var hidden=$("<input type='hidden'/>").attr("name",validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);}validator.settings.submitHandler.call(validator,validator.currentForm);if(validator.submitButton){hidden.remove();}return false;}return true;}if(validator.cancelSubmit){validator.cancelSubmit=false;return handle();}if(validator.form()){if(validator.pendingRequest){validator.formSubmitted=true;return false;}return handle();}else{validator.focusInvalid();return false;}});}return validator;},valid:function(){if($(this[0]).is('form')){return this.validate().form();}else{var valid=true;var validator=$(this[0].form).validate();this.each(function(){valid&=validator.element(this);});return valid;}},removeAttrs:function(attributes){var result={},$element=this;$.each(attributes.split(/\s/),function(index,value){result[value]=$element.attr(value);$element.removeAttr(value);});return result;},rules:function(command,argument){var element=this[0];if(command){var settings=$.data(element.form,'validator').settings;var staticRules=settings.rules;var existingRules=$.validator.staticRules(element);switch(command){case"add":$.extend(existingRules,$.validator.normalizeRule(argument));staticRules[element.name]=existingRules;if(argument.messages)settings.messages[element.name]=$.extend(settings.messages[element.name],argument.messages);break;case"remove":if(!argument){delete staticRules[element.name];return existingRules;}var filtered={};$.each(argument.split(/\s/),function(index,method){filtered[method]=existingRules[method];delete existingRules[method];});return filtered;}}var data=$.validator.normalizeRules($.extend({},$.validator.metadataRules(element),$.validator.classRules(element),$.validator.attributeRules(element),$.validator.staticRules(element)),element);if(data.required){var param=data.required;delete data.required;data=$.extend({required:param},data);}return data;}});$.extend($.expr[":"],{blank:function(a){return!$.trim(""+a.value);},filled:function(a){return!!$.trim(""+a.value);},unchecked:function(a){return!a.checked;}});$.validator=function(options,form){this.settings=$.extend({},$.validator.defaults,options);this.currentForm=form;this.init();};$.validator.format=function(source,params){if(arguments.length==1)return function(){var args=$.makeArray(arguments);args.unshift(source);return $.validator.format.apply(this,args);};if(arguments.length>2&&params.constructor!=Array){params=$.makeArray(arguments).slice(1);}if(params.constructor!=Array){params=[params];}$.each(params,function(i,n){source=source.replace(new RegExp("\\{"+i+"\\}","g"),n);});return source;};$.extend($.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusInvalid:true,errorContainer:$([]),errorLabelContainer:$([]),onsubmit:true,ignore:[],ignoreTitle:false,onfocusin:function(element){this.lastActive=element;if(this.settings.focusCleanup&&!this.blockFocusCleanup){this.settings.unhighlight&&this.settings.unhighlight.call(this,element,this.settings.errorClass,this.settings.validClass);this.errorsFor(element).hide();}},onfocusout:function(element){if(!this.checkable(element)&&(element.name in this.submitted||!this.optional(element))){this.element(element);}},onkeyup:function(element){if(element.name in this.submitted||element==this.lastElement){this.element(element);}},onclick:function(element){if(element.name in this.submitted)this.element(element);else if(element.parentNode.name in this.submitted)this.element(element.parentNode)},highlight:function(element,errorClass,validClass){$(element).addClass(errorClass).removeClass(validClass);},unhighlight:function(element,errorClass,validClass){$(element).removeClass(errorClass).addClass(validClass);}},setDefaults:function(settings){$.extend($.validator.defaults,settings);},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",accept:"Please enter a value with a valid extension.",maxlength:$.validator.format("Please enter no more than {0} characters."),minlength:$.validator.format("Please enter at least {0} characters."),rangelength:$.validator.format("Please enter a value between {0} and {1} characters long."),range:$.validator.format("Please enter a value between {0} and {1}."),max:$.validator.format("Please enter a value less than or equal to {0}."),min:$.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:false,prototype:{init:function(){this.labelContainer=$(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&this.labelContainer||$(this.currentForm);this.containers=$(this.settings.errorContainer).add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var groups=(this.groups={});$.each(this.settings.groups,function(key,value){$.each(value.split(/\s/),function(index,name){groups[name]=key;});});var rules=this.settings.rules;$.each(rules,function(key,value){rules[key]=$.validator.normalizeRule(value);});function delegate(event){var validator=$.data(this[0].form,"validator");validator.settings["on"+event.type]&&validator.settings["on"+event.type].call(validator,this[0]);}$(this.currentForm).delegate("focusin focusout keyup",":text, :password, :file, select, textarea",delegate).delegate("click",":radio, :checkbox, select, option",delegate);if(this.settings.invalidHandler)$(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler);},form:function(){this.checkForm();$.extend(this.submitted,this.errorMap);this.invalid=$.extend({},this.errorMap);if(!this.valid())$(this.currentForm).triggerHandler("invalid-form",[this]);this.showErrors();return this.valid();},checkForm:function(){this.prepareForm();for(var i=0,elements=(this.currentElements=this.elements());elements[i];i++){this.check(elements[i]);}return this.valid();},element:function(element){element=this.clean(element);this.lastElement=element;this.prepareElement(element);this.currentElements=$(element);var result=this.check(element);if(result){delete this.invalid[element.name];}else{this.invalid[element.name]=true;}if(!this.numberOfInvalids()){this.toHide=this.toHide.add(this.containers);}this.showErrors();return result;},showErrors:function(errors){if(errors){$.extend(this.errorMap,errors);this.errorList=[];for(var name in errors){this.errorList.push({message:errors[name],element:this.findByName(name)[0]});}this.successList=$.grep(this.successList,function(element){return!(element.name in errors);});}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors();},resetForm:function(){if($.fn.resetForm)$(this.currentForm).resetForm();this.submitted={};this.prepareForm();this.hideErrors();this.elements().removeClass(this.settings.errorClass);},numberOfInvalids:function(){return this.objectLength(this.invalid);},objectLength:function(obj){var count=0;for(var i in obj)count++;return count;},hideErrors:function(){this.addWrapper(this.toHide).hide();},valid:function(){return this.size()==0;},size:function(){return this.errorList.length;},focusInvalid:function(){if(this.settings.focusInvalid){try{$(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus();}catch(e){}}},findLastActive:function(){var lastActive=this.lastActive;return lastActive&&$.grep(this.errorList,function(n){return n.element.name==lastActive.name;}).length==1&&lastActive;},elements:function(){var validator=this,rulesCache={};return $([]).add(this.currentForm.elements).filter(":input").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){!this.name&&validator.settings.debug&&window.console&&console.error("%o has no name assigned",this);if(this.name in rulesCache||!validator.objectLength($(this).rules()))return false;rulesCache[this.name]=true;return true;});},clean:function(selector){return $(selector)[0];},errors:function(){return $(this.settings.errorElement+"."+this.settings.errorClass,this.errorContext);},reset:function(){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=$([]);this.toHide=$([]);this.currentElements=$([]);},prepareForm:function(){this.reset();this.toHide=this.errors().add(this.containers);},prepareElement:function(element){this.reset();this.toHide=this.errorsFor(element);},check:function(element){element=this.clean(element);if(this.checkable(element)){element=this.findByName(element.name)[0];}var rules=$(element).rules();var dependencyMismatch=false;for(method in rules){var rule={method:method,parameters:rules[method]};try{var result=$.validator.methods[method].call(this,element.value.replace(/\r/g,""),element,rule.parameters);if(result=="dependency-mismatch"){dependencyMismatch=true;continue;}dependencyMismatch=false;if(result=="pending"){this.toHide=this.toHide.not(this.errorsFor(element));return;}if(!result){this.formatAndAdd(element,rule);return false;}}catch(e){this.settings.debug&&window.console&&console.log("exception occured when checking element "+element.id

++", check the '"+rule.method+"' method",e);throw e;}}if(dependencyMismatch)return;if(this.objectLength(rules))this.successList.push(element);return true;},customMetaMessage:function(element,method){if(!$.metadata)return;var meta=this.settings.meta?$(element).metadata()[this.settings.meta]:$(element).metadata();return meta&&meta.messages&&meta.messages[method];},customMessage:function(name,method){var m=this.settings.messages[name];return m&&(m.constructor==String?m:m[method]);},findDefined:function(){for(var i=0;i<arguments.length;i++){if(arguments[i]!==undefined)return arguments[i];}return undefined;},defaultMessage:function(element,method){return this.findDefined(this.customMessage(element.name,method),this.customMetaMessage(element,method),!this.settings.ignoreTitle&&element.title||undefined,$.validator.messages[method],"<strong>Warning: No message defined for "+element.name+"</strong>");},formatAndAdd:function(element,rule){var message=this.defaultMessage(element,rule.method),theregex=/\$?\{(\d+)\}/g;if(typeof message=="function"){message=message.call(this,rule.parameters,element);}else if(theregex.test(message)){message=jQuery.format(message.replace(theregex,'{$1}'),rule.parameters);}this.errorList.push({message:message,element:element});this.errorMap[element.name]=message;this.submitted[element.name]=message;},addWrapper:function(toToggle){if(this.settings.wrapper)toToggle=toToggle.add(toToggle.parent(this.settings.wrapper));return toToggle;},defaultShowErrors:function(){for(var i=0;this.errorList[i];i++){var error=this.errorList[i];this.settings.highlight&&this.settings.highlight.call(this,error.element,this.settings.errorClass,this.settings.validClass);this.showLabel(error.element,error.message);}if(this.errorList.length){this.toShow=this.toShow.add(this.containers);}if(this.settings.success){for(var i=0;this.successList[i];i++){this.showLabel(this.successList[i]);}}if(this.settings.unhighlight){for(var i=0,elements=this.validElements();elements[i];i++){this.settings.unhighlight.call(this,elements[i],this.settings.errorClass,this.settings.validClass);}}this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show();},validElements:function(){return this.currentElements.not(this.invalidElements());},invalidElements:function(){return $(this.errorList).map(function(){return this.element;});},showLabel:function(element,message){var label=this.errorsFor(element);if(label.length){label.removeClass().addClass(this.settings.errorClass);label.attr("generated")&&label.html(message);}else{label=$("<"+this.settings.errorElement+"/>").attr({"for":this.idOrName(element),generated:true}).addClass(this.settings.errorClass).html(message||"");if(this.settings.wrapper){label=label.hide().show().wrap("<"+this.settings.wrapper+"/>").parent();}if(!this.labelContainer.append(label).length)this.settings.errorPlacement?this.settings.errorPlacement(label,$(element)):label.insertAfter(element);}if(!message&&this.settings.success){label.text("");typeof this.settings.success=="string"?label.addClass(this.settings.success):this.settings.success(label);}this.toShow=this.toShow.add(label);},errorsFor:function(element){var name=this.idOrName(element);return this.errors().filter(function(){return $(this).attr('for')==name});},idOrName:function(element){return this.groups[element.name]||(this.checkable(element)?element.name:element.id||element.name);},checkable:function(element){return/radio|checkbox/i.test(element.type);},findByName:function(name){var form=this.currentForm;return $(document.getElementsByName(name)).map(function(index,element){return element.form==form&&element.name==name&&element||null;});},getLength:function(value,element){switch(element.nodeName.toLowerCase()){case'select':return $("option:selected",element).length;case'input':if(this.checkable(element))return this.findByName(element.name).filter(':checked').length;}return value.length;},depend:function(param,element){return this.dependTypes[typeof param]?this.dependTypes[typeof param](param,element):true;},dependTypes:{"boolean":function(param,element){return param;},"string":function(param,element){return!!$(param,element.form).length;},"function":function(param,element){return param(element);}},optional:function(element){return!$.validator.methods.required.call(this,$.trim(element.value),element)&&"dependency-mismatch";},startRequest:function(element){if(!this.pending[element.name]){this.pendingRequest++;this.pending[element.name]=true;}},stopRequest:function(element,valid){this.pendingRequest--;if(this.pendingRequest<0)this.pendingRequest=0;delete this.pending[element.name];if(valid&&this.pendingRequest==0&&this.formSubmitted&&this.form()){$(this.currentForm).submit();this.formSubmitted=false;}else if(!valid&&this.pendingRequest==0&&this.formSubmitted){$(this.currentForm).triggerHandler("invalid-form",[this]);this.formSubmitted=false;}},previousValue:function(element){return $.data(element,"previousValue")||$.data(element,"previousValue",{old:null,valid:true,message:this.defaultMessage(element,"remote")});}},classRuleSettings:{required:{required:true},email:{email:true},url:{url:true},date:{date:true},dateISO:{dateISO:true},dateDE:{dateDE:true},number:{number:true},numberDE:{numberDE:true},digits:{digits:true},creditcard:{creditcard:true}},addClassRules:function(className,rules){className.constructor==String?this.classRuleSettings[className]=rules:$.extend(this.classRuleSettings,className);},classRules:function(element){var rules={};var classes=$(element).attr('class');classes&&$.each(classes.split(' '),function(){if(this in $.validator.classRuleSettings){$.extend(rules,$.validator.classRuleSettings[this]);}});return rules;},attributeRules:function(element){var rules={};var $element=$(element);for(method in $.validator.methods){var value=$element.attr(method);if(value){rules[method]=value;}}if(rules.maxlength&&/-1|2147483647|524288/.test(rules.maxlength)){delete rules.maxlength;}return rules;},metadataRules:function(element){if(!$.metadata)return{};var meta=$.data(element.form,'validator').settings.meta;return meta?$(element).metadata()[meta]:$(element).metadata();},staticRules:function(element){var rules={};var validator=$.data(element.form,'validator');if(validator.settings.rules){rules=$.validator.normalizeRule(validator.settings.rules[element.name])||{};}return rules;},normalizeRules:function(rules,element){$.each(rules,function(prop,val){if(val===false){delete rules[prop];return;}if(val.param||val.depends){var keepRule=true;switch(typeof val.depends){case"string":keepRule=!!$(val.depends,element.form).length;break;case"function":keepRule=val.depends.call(element,element);break;}if(keepRule){rules[prop]=val.param!==undefined?val.param:true;}else{delete rules[prop];}}});$.each(rules,function(rule,parameter){rules[rule]=$.isFunction(parameter)?parameter(element):parameter;});$.each(['minlength','maxlength','min','max'],function(){if(rules[this]){rules[this]=Number(rules[this]);}});$.each(['rangelength','range'],function(){if(rules[this]){rules[this]=[Number(rules[this][0]),Number(rules[this][1])];}});if($.validator.autoCreateRanges){if(rules.min&&rules.max){rules.range=[rules.min,rules.max];delete rules.min;delete rules.max;}if(rules.minlength&&rules.maxlength){rules.rangelength=[rules.minlength,rules.maxlength];delete rules.minlength;delete rules.maxlength;}}if(rules.messages){delete rules.messages}return rules;},normalizeRule:function(data){if(typeof data=="string"){var transformed={};$.each(data.split(/\s/),function(){transformed[this]=true;});data=transformed;}return data;},addMethod:function(name,method,message){$.validator.methods[name]=method;$.validator.messages[name]=message!=undefined?message:$.validator.messages[name];if(method.length<3){$.validator.addClassRules(name,$.validator.normalizeRule(name));}},methods:{required:function(value,element,param){if(!this.depend(param,element))return"dependency-mismatch";switch(element.nodeName.toLowerCase()){case'select':var val=$(element).val();return val&&val.length>0;case'input':if(this.checkable(element))return this.getLength(value,element)>0;default:return $.trim(value).length>0;}},remote:function(value,element,param){if(this.optional(element))return"dependency-mismatch";var previous=this.previousValue(element);if(!this.settings.messages[element.name])this.settings.messages[element.name]={};previous.originalMessage=this.settings.messages[element.name].remote;this.settings.messages[element.name].remote=previous.message;param=typeof param=="string"&&{url:param}||param;if(previous.old!==value){previous.old=value;var validator=this;this.startRequest(element);var data={};data[element.name]=value;$.ajax($.extend(true,{url:param,mode:"abort",port:"validate"+element.name,dataType:"json",data:data,success:function(response){validator.settings.messages[element.name].remote=previous.originalMessage;var valid=response===true;if(valid){var submitted=validator.formSubmitted;validator.prepareElement(element);validator.formSubmitted=submitted;validator.successList.push(element);validator.showErrors();}else{var errors={};var message=(previous.message=response||validator.defaultMessage(element,"remote"));errors[element.name]=$.isFunction(message)?message(value):message;validator.showErrors(errors);}previous.valid=valid;validator.stopRequest(element,valid);}},param));return"pending";}else if(this.pending[element.name]){return"pending";}return previous.valid;},minlength:function(value,element,param){return this.optional(element)||this.getLength($.trim(value),element)>=param;},maxlength:function(value,element,param){return this.optional(element)||this.getLength($.trim(value),element)<=param;},rangelength:function(value,element,param){var length=this.getLength($.trim(value),element);return this.optional(element)||(length>=param[0]&&length<=param[1]);},min:function(value,element,param){return this.optional(element)||value>=param;},max:function(value,element,param){return this.optional(element)||value<=param;},range:function(value,element,param){return this.optional(element)||(value>=param[0]&&value<=param[1]);},email:function(value,element){return this.optional(element)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);},url:function(value,element){return this.optional(element)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);},date:function(value,element){return this.optional(element)||!/Invalid|NaN/.test(new Date(value));},dateISO:function(value,element){return this.optional(element)||/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);},number:function(value,element){return this.optional(element)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);},digits:function(value,element){return this.optional(element)||/^\d+$/.test(value);},creditcard:function(value,element){if(this.optional(element))return"dependency-mismatch";if(/[^0-9-]+/.test(value))return false;var nCheck=0,nDigit=0,bEven=false;value=value.replace(/\D/g,"");for(var n=value.length-1;n>=0;n--){var cDigit=value.charAt(n);var nDigit=parseInt(cDigit,10);if(bEven){if((nDigit*=2)>9)nDigit-=9;}nCheck+=nDigit;bEven=!bEven;}return(nCheck%10)==0;},accept:function(value,element,param){param=typeof param=="string"?param.replace(/,/g,'|'):"png|jpe?g|gif";return this.optional(element)||value.match(new RegExp(".("+param+")$","i"));},equalTo:function(value,element,param){var target=$(param).unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){$(element).valid();});return value==target.val();}}});$.format=$.validator.format;})(jQuery);;(function($){var ajax=$.ajax;var pendingRequests={};$.ajax=function(settings){settings=$.extend(settings,$.extend({},$.ajaxSettings,settings));var port=settings.port;if(settings.mode=="abort"){if(pendingRequests[port]){pendingRequests[port].abort();}return(pendingRequests[port]=ajax.apply(this,arguments));}return ajax.apply(this,arguments);};})(jQuery);;(function($){$.each({focus:'focusin',blur:'focusout'},function(original,fix){$.event.special[fix]={setup:function(){if($.browser.msie)return false;this.addEventListener(original,$.event.special[fix].handler,true);},teardown:function(){if($.browser.msie)return false;this.removeEventListener(original,$.event.special[fix].handler,true);},handler:function(e){arguments[0]=$.event.fix(e);arguments[0].type=fix;return $.event.handle.apply(this,arguments);}};});$.extend($.fn,{delegate:function(type,delegate,handler){return this.bind(type,function(event){var target=$(event.target);if(target.is(delegate)){return handler.apply(target,arguments);}});},triggerEvent:function(type,target){return this.triggerHandler(type,[$.event.fix({type:type,target:target})]);}})})(jQuery);
\ No newline at end of file
diff --git a/src/test/resources/NPanday11480/NPanday11480/Views/Account/ChangePassword.aspx b/src/test/resources/NPanday11480/NPanday11480/Views/Account/ChangePassword.aspx
new file mode 100644
index 0000000..3eeb4d3
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Views/Account/ChangePassword.aspx
@@ -0,0 +1,52 @@
+<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<NPanday11480.Models.ChangePasswordModel>" %>

+

+<asp:Content ID="changePasswordTitle" ContentPlaceHolderID="TitleContent" runat="server">

+    Change Password

+</asp:Content>

+

+<asp:Content ID="changePasswordContent" ContentPlaceHolderID="MainContent" runat="server">

+    <h2>Change Password</h2>

+    <p>

+        Use the form below to change your password. 

+    </p>

+    <p>

+        New passwords are required to be a minimum of <%= Html.Encode(ViewData["PasswordLength"]) %> characters in length.

+    </p>

+

+    <% using (Html.BeginForm()) { %>

+        <%= Html.ValidationSummary(true, "Password change was unsuccessful. Please correct the errors and try again.") %>

+        <div>

+            <fieldset>

+                <legend>Account Information</legend>

+                

+                <div class="editor-label">

+                    <%= Html.LabelFor(m => m.OldPassword) %>

+                </div>

+                <div class="editor-field">

+                    <%= Html.PasswordFor(m => m.OldPassword) %>

+                    <%= Html.ValidationMessageFor(m => m.OldPassword) %>

+                </div>

+                

+                <div class="editor-label">

+                    <%= Html.LabelFor(m => m.NewPassword) %>

+                </div>

+                <div class="editor-field">

+                    <%= Html.PasswordFor(m => m.NewPassword) %>

+                    <%= Html.ValidationMessageFor(m => m.NewPassword) %>

+                </div>

+                

+                <div class="editor-label">

+                    <%= Html.LabelFor(m => m.ConfirmPassword) %>

+                </div>

+                <div class="editor-field">

+                    <%= Html.PasswordFor(m => m.ConfirmPassword) %>

+                    <%= Html.ValidationMessageFor(m => m.ConfirmPassword) %>

+                </div>

+                

+                <p>

+                    <input type="submit" value="Change Password" />

+                </p>

+            </fieldset>

+        </div>

+    <% } %>

+</asp:Content>

diff --git a/src/test/resources/NPanday11480/NPanday11480/Views/Account/ChangePasswordSuccess.aspx b/src/test/resources/NPanday11480/NPanday11480/Views/Account/ChangePasswordSuccess.aspx
new file mode 100644
index 0000000..04a1853
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Views/Account/ChangePasswordSuccess.aspx
@@ -0,0 +1,12 @@
+<%@Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

+

+<asp:Content ID="changePasswordTitle" ContentPlaceHolderID="TitleContent" runat="server">

+    Change Password

+</asp:Content>

+

+<asp:Content ID="changePasswordSuccessContent" ContentPlaceHolderID="MainContent" runat="server">

+    <h2>Change Password</h2>

+    <p>

+        Your password has been changed successfully.

+    </p>

+</asp:Content>

diff --git a/src/test/resources/NPanday11480/NPanday11480/Views/Account/LogOn.aspx b/src/test/resources/NPanday11480/NPanday11480/Views/Account/LogOn.aspx
new file mode 100644
index 0000000..226372c
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Views/Account/LogOn.aspx
@@ -0,0 +1,46 @@
+<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<NPanday11480.Models.LogOnModel>" %>

+

+<asp:Content ID="loginTitle" ContentPlaceHolderID="TitleContent" runat="server">

+    Log On

+</asp:Content>

+

+<asp:Content ID="loginContent" ContentPlaceHolderID="MainContent" runat="server">

+    <h2>Log On</h2>

+    <p>

+        Please enter your username and password. <%= Html.ActionLink("Register", "Register") %> if you don't have an account.

+    </p>

+

+    <% using (Html.BeginForm()) { %>

+        <%= Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.") %>

+        <div>

+            <fieldset>

+                <legend>Account Information</legend>

+                

+                <div class="editor-label">

+                    <%= Html.LabelFor(m => m.UserName) %>

+                </div>

+                <div class="editor-field">

+                    <%= Html.TextBoxFor(m => m.UserName) %>

+                    <%= Html.ValidationMessageFor(m => m.UserName) %>

+                </div>

+                

+                <div class="editor-label">

+                    <%= Html.LabelFor(m => m.Password) %>

+                </div>

+                <div class="editor-field">

+                    <%= Html.PasswordFor(m => m.Password) %>

+                    <%= Html.ValidationMessageFor(m => m.Password) %>

+                </div>

+                

+                <div class="editor-label">

+                    <%= Html.CheckBoxFor(m => m.RememberMe) %>

+                    <%= Html.LabelFor(m => m.RememberMe) %>

+                </div>

+                

+                <p>

+                    <input type="submit" value="Log On" />

+                </p>

+            </fieldset>

+        </div>

+    <% } %>

+</asp:Content>

diff --git a/src/test/resources/NPanday11480/NPanday11480/Views/Account/Register.aspx b/src/test/resources/NPanday11480/NPanday11480/Views/Account/Register.aspx
new file mode 100644
index 0000000..7d55f46
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Views/Account/Register.aspx
@@ -0,0 +1,60 @@
+<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<NPanday11480.Models.RegisterModel>" %>

+

+<asp:Content ID="registerTitle" ContentPlaceHolderID="TitleContent" runat="server">

+    Register

+</asp:Content>

+

+<asp:Content ID="registerContent" ContentPlaceHolderID="MainContent" runat="server">

+    <h2>Create a New Account</h2>

+    <p>

+        Use the form below to create a new account. 

+    </p>

+    <p>

+        Passwords are required to be a minimum of <%= Html.Encode(ViewData["PasswordLength"]) %> characters in length.

+    </p>

+

+    <% using (Html.BeginForm()) { %>

+        <%= Html.ValidationSummary(true, "Account creation was unsuccessful. Please correct the errors and try again.") %>

+        <div>

+            <fieldset>

+                <legend>Account Information</legend>

+                

+                <div class="editor-label">

+                    <%= Html.LabelFor(m => m.UserName) %>

+                </div>

+                <div class="editor-field">

+                    <%= Html.TextBoxFor(m => m.UserName) %>

+                    <%= Html.ValidationMessageFor(m => m.UserName) %>

+                </div>

+                

+                <div class="editor-label">

+                    <%= Html.LabelFor(m => m.Email) %>

+                </div>

+                <div class="editor-field">

+                    <%= Html.TextBoxFor(m => m.Email) %>

+                    <%= Html.ValidationMessageFor(m => m.Email) %>

+                </div>

+                

+                <div class="editor-label">

+                    <%= Html.LabelFor(m => m.Password) %>

+                </div>

+                <div class="editor-field">

+                    <%= Html.PasswordFor(m => m.Password) %>

+                    <%= Html.ValidationMessageFor(m => m.Password) %>

+                </div>

+                

+                <div class="editor-label">

+                    <%= Html.LabelFor(m => m.ConfirmPassword) %>

+                </div>

+                <div class="editor-field">

+                    <%= Html.PasswordFor(m => m.ConfirmPassword) %>

+                    <%= Html.ValidationMessageFor(m => m.ConfirmPassword) %>

+                </div>

+                

+                <p>

+                    <input type="submit" value="Register" />

+                </p>

+            </fieldset>

+        </div>

+    <% } %>

+</asp:Content>

diff --git a/src/test/resources/NPanday11480/NPanday11480/Views/Home/About.aspx b/src/test/resources/NPanday11480/NPanday11480/Views/Home/About.aspx
new file mode 100644
index 0000000..aed22f9
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Views/Home/About.aspx
@@ -0,0 +1,12 @@
+<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

+

+<asp:Content ID="aboutTitle" ContentPlaceHolderID="TitleContent" runat="server">

+    About Us

+</asp:Content>

+

+<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">

+    <h2>About</h2>

+    <p>

+        Put content here.

+    </p>

+</asp:Content>

diff --git a/src/test/resources/NPanday11480/NPanday11480/Views/Home/Index.aspx b/src/test/resources/NPanday11480/NPanday11480/Views/Home/Index.aspx
new file mode 100644
index 0000000..1f416f6
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Views/Home/Index.aspx
@@ -0,0 +1,12 @@
+<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

+

+<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">

+    Home Page

+</asp:Content>

+

+<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

+    <h2><%= Html.Encode(ViewData["Message"]) %></h2>

+    <p>

+        To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.

+    </p>

+</asp:Content>

diff --git a/src/test/resources/NPanday11480/NPanday11480/Views/Shared/Error.aspx b/src/test/resources/NPanday11480/NPanday11480/Views/Shared/Error.aspx
new file mode 100644
index 0000000..9311a17
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Views/Shared/Error.aspx
@@ -0,0 +1,11 @@
+<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>" %>

+

+<asp:Content ID="errorTitle" ContentPlaceHolderID="TitleContent" runat="server">

+    Error

+</asp:Content>

+

+<asp:Content ID="errorContent" ContentPlaceHolderID="MainContent" runat="server">

+    <h2>

+        Sorry, an error occurred while processing your request.

+    </h2>

+</asp:Content>

diff --git a/src/test/resources/NPanday11480/NPanday11480/Views/Shared/LogOnUserControl.ascx b/src/test/resources/NPanday11480/NPanday11480/Views/Shared/LogOnUserControl.ascx
new file mode 100644
index 0000000..a2bb600
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Views/Shared/LogOnUserControl.ascx
@@ -0,0 +1,14 @@
+<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>

+<%

+    if (Request.IsAuthenticated) {

+%>

+        Welcome <b><%= Html.Encode(Page.User.Identity.Name) %></b>!

+        [ <%= Html.ActionLink("Log Off", "LogOff", "Account") %> ]

+<%

+    }

+    else {

+%> 

+        [ <%= Html.ActionLink("Log On", "LogOn", "Account") %> ]

+<%

+    }

+%>

diff --git a/src/test/resources/NPanday11480/NPanday11480/Views/Shared/Site.Master b/src/test/resources/NPanday11480/NPanday11480/Views/Shared/Site.Master
new file mode 100644
index 0000000..8a80983
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Views/Shared/Site.Master
@@ -0,0 +1,40 @@
+<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>

+

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head runat="server">

+    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>

+    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" />

+</head>

+

+<body>

+    <div class="page">

+

+        <div id="header">

+            <div id="title">

+                <h1>My MVC Application</h1>

+            </div>

+              

+            <div id="logindisplay">

+                <% Html.RenderPartial("LogOnUserControl"); %>

+            </div> 

+            

+            <div id="menucontainer">

+            

+                <ul id="menu">              

+                    <li><%= Html.ActionLink("Home", "Index", "Home")%></li>

+                    <li><%= Html.ActionLink("About", "About", "Home")%></li>

+                </ul>

+            

+            </div>

+        </div>

+

+        <div id="main">

+            <asp:ContentPlaceHolder ID="MainContent" runat="server" />

+

+            <div id="footer">

+            </div>

+        </div>

+    </div>

+</body>

+</html>

diff --git a/src/test/resources/NPanday11480/NPanday11480/Views/Web.config b/src/test/resources/NPanday11480/NPanday11480/Views/Web.config
new file mode 100644
index 0000000..7022197
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Views/Web.config
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>

+<configuration>

+  <system.web>

+    <httpHandlers>

+      <add path="*" verb="*"

+          type="System.Web.HttpNotFoundHandler"/>

+    </httpHandlers>

+

+    <!--

+        Enabling request validation in view pages would cause validation to occur

+        after the input has already been processed by the controller. By default

+        MVC performs request validation before a controller processes the input.

+        To change this behavior apply the ValidateInputAttribute to a

+        controller or action.

+    -->

+    <pages

+        validateRequest="false"

+        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"

+        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"

+        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

+      <controls>

+        <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />

+      </controls>

+    </pages>

+  </system.web>

+

+  <system.webServer>

+    <validation validateIntegratedModeConfiguration="false"/>

+    <handlers>

+      <remove name="BlockViewHandler"/>

+      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/>

+    </handlers>

+  </system.webServer>

+</configuration>

diff --git a/src/test/resources/NPanday11480/NPanday11480/Web.config b/src/test/resources/NPanday11480/NPanday11480/Web.config
new file mode 100644
index 0000000..e4659ea
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/Web.config
@@ -0,0 +1,202 @@
+<?xml version="1.0"?>

+<!-- 

+    Note: As an alternative to hand editing this file you can use the 

+    web admin tool to configure settings for your application. Use

+    the Website->Asp.Net Configuration option in Visual Studio.

+    A full list of settings and comments can be found in 

+    machine.config.comments usually located in 

+    \Windows\Microsoft.Net\Framework\v2.x\Config 

+-->

+<configuration>

+

+  <configSections>

+    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

+      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

+        <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>

+        <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

+          <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />

+          <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />

+          <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />

+          <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />

+        </sectionGroup>

+      </sectionGroup>

+    </sectionGroup>

+  </configSections>

+

+  <appSettings/>

+

+  <connectionStrings>

+    <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>

+  </connectionStrings>

+

+  <system.web>

+

+    <!-- 

+            Set compilation debug="true" to insert debugging 

+            symbols into the compiled page. Because this 

+            affects performance, set this value to true only 

+            during development.

+    -->

+    <compilation debug="false">

+      <assemblies>

+        <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

+        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+        <add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+        <add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+        <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+        <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

+        <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

+        <add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />

+      </assemblies>

+    </compilation>

+

+    <!--

+            The <authentication> section enables configuration 

+            of the security authentication mode used by 

+            ASP.NET to identify an incoming user. 

+    -->

+    <authentication mode="Forms">

+      <forms loginUrl="~/Account/LogOn" timeout="2880" />

+    </authentication>

+

+    <membership>

+      <providers>

+        <clear/>

+        <add name="AspNetSqlMembershipProvider"

+             type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

+             connectionStringName="ApplicationServices"

+             enablePasswordRetrieval="false"

+             enablePasswordReset="true"

+             requiresQuestionAndAnswer="false"

+             requiresUniqueEmail="false"

+             passwordFormat="Hashed"

+             maxInvalidPasswordAttempts="5"

+             minRequiredPasswordLength="6"

+             minRequiredNonalphanumericCharacters="0"

+             passwordAttemptWindow="10"

+             passwordStrengthRegularExpression=""

+             applicationName="/"

+                />

+      </providers>

+    </membership>

+

+    <profile>

+      <providers>

+        <clear/>

+        <add name="AspNetSqlProfileProvider"

+             type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

+             connectionStringName="ApplicationServices"

+             applicationName="/"

+                />

+      </providers>

+    </profile>

+

+    <roleManager enabled="false">

+      <providers>

+        <clear />

+        <add connectionStringName="ApplicationServices" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

+        <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

+      </providers>

+    </roleManager>

+

+    <!--

+            The <customErrors> section enables configuration 

+            of what to do if/when an unhandled error occurs 

+            during the execution of a request. Specifically, 

+            it enables developers to configure html error pages 

+            to be displayed in place of a error stack trace.

+

+        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">

+            <error statusCode="403" redirect="NoAccess.htm" />

+            <error statusCode="404" redirect="FileNotFound.htm" />

+        </customErrors>

+    -->

+

+    <pages>

+      <controls>

+        <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+        <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+      </controls>

+

+      <namespaces>

+        <add namespace="System.Web.Mvc"/>

+        <add namespace="System.Web.Mvc.Ajax"/>

+        <add namespace="System.Web.Mvc.Html"/>

+        <add namespace="System.Web.Routing"/>

+        <add namespace="System.Linq"/>

+        <add namespace="System.Collections.Generic"/>

+      </namespaces>

+    </pages>

+

+    <httpHandlers>

+      <remove verb="*" path="*.asmx"/>

+      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+      <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+      <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>

+    </httpHandlers>

+

+    <httpModules>

+      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

+    </httpModules>

+

+  </system.web>

+

+  <system.codedom>

+    <compilers>

+      <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"

+                type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

+        <providerOption name="CompilerVersion" value="v3.5"/>

+        <providerOption name="WarnAsError" value="false"/>

+      </compiler>

+

+      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4"

+                type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

+        <providerOption name="CompilerVersion" value="v3.5"/>

+        <providerOption name="OptionInfer" value="true"/>

+        <providerOption name="WarnAsError" value="false"/>

+      </compiler>

+    </compilers>

+  </system.codedom>

+

+  <system.web.extensions/>

+

+  <!-- 

+        The system.webServer section is required for running ASP.NET AJAX under Internet

+        Information Services 7.0.  It is not necessary for previous version of IIS.

+  -->

+  <system.webServer>

+    <validation validateIntegratedModeConfiguration="false"/>

+

+    <modules runAllManagedModulesForAllRequests="true">

+      <remove name="ScriptModule" />

+      <remove name="UrlRoutingModule" />

+      <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

+    </modules>

+

+    <handlers>

+      <remove name="WebServiceHandlerFactory-Integrated"/>

+      <remove name="ScriptHandlerFactory" />

+      <remove name="ScriptHandlerFactoryAppServices" />

+      <remove name="ScriptResource" />

+      <remove name="UrlRoutingHandler" />

+      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"

+           type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"

+           type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+      <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

+      <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

+    </handlers>

+  </system.webServer>

+

+  <runtime>

+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

+      <dependentAssembly>

+        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>

+        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>

+      </dependentAssembly>

+    </assemblyBinding>

+  </runtime>

+

+</configuration>
\ No newline at end of file
diff --git a/src/test/resources/NPanday11480/NPanday11480/pom.xml b/src/test/resources/NPanday11480/NPanday11480/pom.xml
new file mode 100644
index 0000000..b90c8f6
--- /dev/null
+++ b/src/test/resources/NPanday11480/NPanday11480/pom.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://maven.apache.org/POM/4.0.0">

+  <parent>

+    <artifactId>NPanday11480-parent</artifactId>

+    <groupId>NPanday.IT</groupId>

+    <version>1.0-SNAPSHOT</version>

+    <relativePath>..\pom.xml</relativePath>

+  </parent>

+  <modelVersion>4.0.0</modelVersion>

+  <artifactId>NPanday11480</artifactId>

+  <packaging>library</packaging>

+  <name>NPanday.IT : NPanday11480</name>

+  <build>

+    <sourceDirectory>./</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <extensions>true</extensions>

+        <configuration>

+          <frameworkVersion>3.5</frameworkVersion>

+          <includeSources>

+            <includeSource>Controllers\AccountController.cs</includeSource>

+            <includeSource>Controllers\HomeController.cs</includeSource>

+            <includeSource>Global.asax.cs</includeSource>

+            <includeSource>Models\AccountModels.cs</includeSource>

+            <includeSource>Properties\AssemblyInfo.cs</includeSource>

+          </includeSources>

+        </configuration>

+      </plugin>

+    </plugins>

+  </build>

+  <dependencies>

+    <dependency>

+      <groupId>System.ComponentModel.DataAnnotations</groupId>

+      <artifactId>System.ComponentModel.DataAnnotations</artifactId>

+      <version>3.5.0.0</version>

+      <type>gac_msil</type>

+      <classifier>31bf3856ad364e35</classifier>

+    </dependency>

+    <dependency>

+      <groupId>System.Web.Mvc</groupId>

+      <artifactId>System.Web.Mvc</artifactId>

+      <version>2.0.0.0</version>

+      <type>gac_msil</type>

+      <classifier>31bf3856ad364e35</classifier>

+    </dependency>

+    <dependency>

+      <groupId>System.Web.Abstractions</groupId>

+      <artifactId>System.Web.Abstractions</artifactId>

+      <version>3.5.0.0</version>

+      <type>gac_msil</type>

+      <classifier>31bf3856ad364e35</classifier>

+    </dependency>

+    <dependency>

+      <groupId>System.Web.Routing</groupId>

+      <artifactId>System.Web.Routing</artifactId>

+      <version>3.5.0.0</version>

+      <type>gac_msil</type>

+      <classifier>31bf3856ad364e35</classifier>

+    </dependency>

+  </dependencies>

+</project>
\ No newline at end of file
diff --git a/src/test/resources/NPanday11480/pom.xml b/src/test/resources/NPanday11480/pom.xml
new file mode 100644
index 0000000..0336093
--- /dev/null
+++ b/src/test/resources/NPanday11480/pom.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://maven.apache.org/POM/4.0.0">

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <groupId>NPanday.IT</groupId>

+  <artifactId>NPanday11480-parent</artifactId>

+  <packaging>pom</packaging>

+  <name>NPanday.IT : NPanday11480-parent</name>

+  <version>1.0-SNAPSHOT</version>

+  <modules>

+    <module>NPanday11480</module>

+  </modules>

+</project>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT0001/pom.xml b/src/test/resources/NPandayIT0001/pom.xml
new file mode 100644
index 0000000..fba21dc
--- /dev/null
+++ b/src/test/resources/NPandayIT0001/pom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  ~ Copyright 2010
+  ~
+  ~ 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.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+  </parent>
+  <groupId>NPandayIT0001</groupId>
+  <artifactId>NPandayIT0001</artifactId>
+  <packaging>library</packaging>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <extensions>true</extensions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/NPandayIT0001/src/main/csharp/It0001.cs b/src/test/resources/NPandayIT0001/src/main/csharp/It0001.cs
new file mode 100755
index 0000000..83bb787
--- /dev/null
+++ b/src/test/resources/NPandayIT0001/src/main/csharp/It0001.cs
@@ -0,0 +1,8 @@
+namespace NPandayIT0001 {
+
+public class It0001 {
+	public static void Main () { 
+		System.Console.Write("Hello World!"); 
+	} 
+}
+}
diff --git a/src/test/resources/NPandayIT0004/pom.xml b/src/test/resources/NPandayIT0004/pom.xml
new file mode 100644
index 0000000..7a0b71b
--- /dev/null
+++ b/src/test/resources/NPandayIT0004/pom.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>

+

+<project>

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <groupId>NPandayIT0004</groupId>

+  <artifactId>NPandayIT0004</artifactId>

+  <version>1.0-SNAPSHOT</version>

+  <packaging>library</packaging>

+  <dependencies>

+    <dependency>

+      <groupId>NUnit</groupId>

+      <artifactId>NUnit.Framework</artifactId>

+      <version>2.2.8.0</version>

+      <type>library</type>

+    </dependency>

+  </dependencies>

+  <build>

+    <testSourceDirectory>src/test/csharp</testSourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <extensions>true</extensions>

+      </plugin>

+    </plugins>

+  </build>

+</project>

diff --git a/src/test/resources/NPandayIT0004/src/test/csharp/It0003-Test1.cs b/src/test/resources/NPandayIT0004/src/test/csharp/It0003-Test1.cs
new file mode 100755
index 0000000..a71183f
--- /dev/null
+++ b/src/test/resources/NPandayIT0004/src/test/csharp/It0003-Test1.cs
@@ -0,0 +1,21 @@
+
+namespace NPanday.IT {
+	using NUnit.Framework;
+	using System;
+
+	[TestFixture]
+	public class It0003Test1  {
+		private String hello = "hello";
+
+		[SetUp]
+		protected void SetUp() {
+		}
+
+		[Test]
+		public void TestSample() {
+			Assert.AreEqual("hello", hello);
+		}
+		
+	}
+
+}
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT0004/src/test/csharp/It0003-Test2.cs b/src/test/resources/NPandayIT0004/src/test/csharp/It0003-Test2.cs
new file mode 100755
index 0000000..270fd7c
--- /dev/null
+++ b/src/test/resources/NPandayIT0004/src/test/csharp/It0003-Test2.cs
@@ -0,0 +1,21 @@
+
+namespace NPanday.IT {
+	using NUnit.Framework;
+	using System;
+
+	[TestFixture]
+	public class It0003Test2  {
+		private String hello = "hello";
+
+		[SetUp]
+		protected void SetUp() {
+		}
+
+		[Test]
+		public void TestSample() {
+			Assert.AreEqual("hello", hello);	
+		}
+		
+	}
+
+}
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT0006/StockingHandlers_1_0.xsd b/src/test/resources/NPandayIT0006/StockingHandlers_1_0.xsd
new file mode 100644
index 0000000..56d7c53
--- /dev/null
+++ b/src/test/resources/NPandayIT0006/StockingHandlers_1_0.xsd
@@ -0,0 +1,135 @@
+<?xml version = "1.0" encoding = "UTF-8"?>
+
+<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
+            targetNamespace="http://jvending.org/xsd/jvending-cp"
+            xmlns:jvending-cp="http://jvending.org/xsd/jvending-cp"
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            elementFormDefault="qualified"
+            attributeFormDefault="unqualified"
+            version="1.0">
+
+  <xsd:element name="stocking-handlers" type="jvending-cp:stockingHandlersType"/>
+  <xsd:element name="stocking-handler" type="jvending-cp:stockingHandlerType"/>
+  <xsd:element name="stocking-handler-name" type="xsd:string"/>
+
+  <xsd:element name="white-list" type="jvending-cp:whiteListType"/>
+  <xsd:element name="black-list" type="jvending-cp:blackListType"/>
+  <xsd:element name="mime-accept" type="jvending-cp:mimeAcceptType"/>
+  <xsd:element name="mime-block" type="jvending-cp:mimeBlockType"/>
+
+  <xsd:element name="stocking-policy" type="jvending-cp:stockingPolicyType"/>
+  <xsd:element name="stocking-filters" type="jvending-cp:stockingFiltersType"/>
+  <xsd:element name="descriptor-handlers" type="jvending-cp:descriptorHandlersType"/>
+  <xsd:element name="descriptor-handler" type="jvending-cp:descriptorHandlerType"/>
+
+  <xsd:element name="content-policy" type="jvending-cp:policyType"/>
+  <xsd:element name="descriptor-policy" type="jvending-cp:policyType"/>
+  <xsd:element name="icon-policy" type="jvending-cp:policyType"/>
+  <xsd:element name="preview-policy" type="jvending-cp:policyType"/>
+  <xsd:element name="copyright-policy" type="jvending-cp:policyType"/>
+  <xsd:element name="global-policy" type="jvending-cp:policyType"/>
+  <xsd:element name="init-param" type="jvending-cp:initParamType"/>
+
+  <xsd:element name="mime-type" type="xsd:string"/>
+  <xsd:element name="fetch-content" type="xsd:boolean"/>
+  <xsd:element name="local-max-size" type="xsd:integer"/>
+  <xsd:element name="remote-max-size" type="xsd:integer"/>
+  <xsd:element name="uri" type="xsd:anyURI"/>
+  <xsd:element name="stocking-policy-class" type="xsd:string"/>
+  <xsd:element name="stocking-filter" type="xsd:string"/>
+  <xsd:element name="data-sink" type="xsd:string"/>
+  <xsd:element name="param-name" type="xsd:string"/>
+  <xsd:element name="param-value" type="xsd:string"/>
+  <xsd:element name="descriptor-handler-class" type="xsd:string"/>
+
+  <xsd:complexType name="stockingHandlersType">
+    <xsd:sequence>
+      <xsd:element ref="jvending-cp:stocking-handler" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="descriptorHandlersType">
+    <xsd:sequence>
+      <xsd:element ref="jvending-cp:descriptor-handler" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="descriptorHandlerType">
+    <xsd:sequence>
+      <xsd:element ref="jvending-cp:mime-type" minOccurs="1" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:descriptor-handler-class" minOccurs="1" maxOccurs="1"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="stockingFiltersType">
+    <xsd:sequence>
+      <xsd:element ref="jvending-cp:stocking-filter" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="initParamType">
+    <xsd:sequence>
+      <xsd:element ref="jvending-cp:param-name" minOccurs="1" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:param-value" minOccurs="1" maxOccurs="1"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+
+  <xsd:complexType name="stockingHandlerType">
+    <xsd:sequence>
+      <xsd:element ref="jvending-cp:stocking-handler-name" minOccurs="1" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:descriptor-handlers" minOccurs="0" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:stocking-filters" minOccurs="0" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:data-sink" minOccurs="1" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:stocking-policy" minOccurs="0" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:init-param" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="stockingPolicyType">
+    <xsd:sequence>
+      <xsd:element ref="jvending-cp:global-policy" minOccurs="0" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:content-policy" minOccurs="0" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:descriptor-policy" minOccurs="0" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:icon-policy" minOccurs="0" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:preview-policy" minOccurs="0" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:copyright-policy" minOccurs="0" maxOccurs="1"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="policyType">
+    <xsd:sequence>
+      <xsd:element ref="jvending-cp:remote-max-size" minOccurs="0" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:local-max-size" minOccurs="0" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:fetch-content" minOccurs="0" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:mime-accept" minOccurs="0" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:mime-block" minOccurs="0" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:white-list" minOccurs="0" maxOccurs="1"/>
+      <xsd:element ref="jvending-cp:black-list" minOccurs="0" maxOccurs="1"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="whiteListType">
+    <xsd:sequence>
+      <xsd:element ref="jvending-cp:uri" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="blackListType">
+    <xsd:sequence>
+      <xsd:element ref="jvending-cp:uri" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="mimeAcceptType">
+    <xsd:sequence>
+      <xsd:element ref="jvending-cp:mime-type" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="mimeBlockType">
+    <xsd:sequence>
+      <xsd:element ref="jvending-cp:mime-type" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+</xsd:schema>
diff --git a/src/test/resources/NPandayIT0006/pom.xml b/src/test/resources/NPandayIT0006/pom.xml
new file mode 100644
index 0000000..d657681
--- /dev/null
+++ b/src/test/resources/NPandayIT0006/pom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+  </parent>
+  <groupId>NPandayIT0006</groupId>
+  <artifactId>NPandayIT0006</artifactId>
+  <packaging>library</packaging>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <extensions>true</extensions>
+      </plugin>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-xsd-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>xsd</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <xsdFile>StockingHandlers_1_0.xsd</xsdFile>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/NPandayIT0007/pom.xml b/src/test/resources/NPandayIT0007/pom.xml
new file mode 100644
index 0000000..0616ab2
--- /dev/null
+++ b/src/test/resources/NPandayIT0007/pom.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project> 
+  <modelVersion>4.0.0</modelVersion>  
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+  </parent>    
+  <groupId>NPandayIT0007</groupId>  
+  <artifactId>NPandayIT0007</artifactId>  
+  <packaging>library</packaging>  
+  <build> 
+    <sourceDirectory>src/main/csharp</sourceDirectory>  
+    <testSourceDirectory>src/test/csharp</testSourceDirectory>  
+    <plugins> 
+      <plugin> 
+        <groupId>npanday.plugin</groupId>  
+        <artifactId>maven-compile-plugin</artifactId>  
+        <extensions>true</extensions> 
+      </plugin>  
+      <plugin> 
+        <groupId>npanday.plugin</groupId>  
+        <artifactId>maven-xsd-plugin</artifactId>  
+        <executions> 
+          <execution> 
+            <goals> 
+              <goal>xml</goal>  
+              <goal>xsd</goal> 
+            </goals> 
+          </execution> 
+        </executions>  
+        <configuration> 
+          <xmlFiles> 
+            <xmlFile>${basedir}/registry-config.xml</xmlFile> 
+          </xmlFiles>  
+          <xsdFile>${project.build.directory}/generated-resources/registry-config.xsd</xsdFile> 
+        </configuration> 
+      </plugin> 
+    </plugins> 
+  </build> 
+</project>
diff --git a/src/test/resources/NPandayIT0007/registry-config.xml b/src/test/resources/NPandayIT0007/registry-config.xml
new file mode 100644
index 0000000..c796c9c
--- /dev/null
+++ b/src/test/resources/NPandayIT0007/registry-config.xml
@@ -0,0 +1,3 @@
+<registry-config>
+  <repositories>test</repositories>
+</registry-config>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT0010/pom.xml b/src/test/resources/NPandayIT0010/pom.xml
new file mode 100644
index 0000000..7bf298b
--- /dev/null
+++ b/src/test/resources/NPandayIT0010/pom.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>

+

+<project> 

+  <modelVersion>4.0.0</modelVersion>  

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent> 

+  <groupId>NPandayIT0010</groupId>  

+  <artifactId>NPandayIT0010</artifactId>  

+  <packaging>library</packaging>  

+  <build> 

+    <sourceDirectory>src/main/vb</sourceDirectory>  

+    <plugins> 

+      <plugin> 

+        <groupId>npanday.plugin</groupId>  

+        <artifactId>maven-compile-plugin</artifactId>  

+        <extensions>true</extensions>  

+        <configuration> 

+          <language>VB</language> 

+        </configuration> 

+      </plugin> 

+    </plugins> 

+  </build> 

+</project>

diff --git a/src/test/resources/NPandayIT0010/src/main/vb/HelloWorld.vb b/src/test/resources/NPandayIT0010/src/main/vb/HelloWorld.vb
new file mode 100644
index 0000000..3c764b9
--- /dev/null
+++ b/src/test/resources/NPandayIT0010/src/main/vb/HelloWorld.vb
@@ -0,0 +1,7 @@
+NameSpace NPanday.IT

+Public Class HelloWorld

+	Public Sub New()

+       

+	End Sub

+End Class

+End NameSpace

diff --git a/src/test/resources/NPandayIT0020/pom.xml b/src/test/resources/NPandayIT0020/pom.xml
new file mode 100644
index 0000000..786651f
--- /dev/null
+++ b/src/test/resources/NPandayIT0020/pom.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+  </parent>
+  <groupId>NPandayIT0020</groupId>
+  <artifactId>NPandayIT0020</artifactId>
+  <packaging>library</packaging>
+  <version>1.1-SNAPSHOT</version>
+  <name>it0020</name>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <extensions>true</extensions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/NPandayIT0020/src/main/csharp/It0020.cs b/src/test/resources/NPandayIT0020/src/main/csharp/It0020.cs
new file mode 100644
index 0000000..e29c3a1
--- /dev/null
+++ b/src/test/resources/NPandayIT0020/src/main/csharp/It0020.cs
@@ -0,0 +1,8 @@
+namespace org.apache.maven.it {
+
+public class It0020 {
+	public static void Main () { 
+		System.Console.Write("Hello World!"); 
+	} 
+}
+}
diff --git a/src/test/resources/NPandayIT0020/src/main/resources/resgen/fix.gif b/src/test/resources/NPandayIT0020/src/main/resources/resgen/fix.gif
new file mode 100644
index 0000000..2585f13
--- /dev/null
+++ b/src/test/resources/NPandayIT0020/src/main/resources/resgen/fix.gif
Binary files differ
diff --git a/src/test/resources/NPandayIT0020/src/main/resources/resgen/my-prop.x-properties b/src/test/resources/NPandayIT0020/src/main/resources/resgen/my-prop.x-properties
new file mode 100644
index 0000000..3fc8cf4
--- /dev/null
+++ b/src/test/resources/NPandayIT0020/src/main/resources/resgen/my-prop.x-properties
@@ -0,0 +1,4 @@
+prop0=v1

+prop1=v2

+prop2=v3

+

diff --git a/src/test/resources/NPandayIT0022/pom.xml b/src/test/resources/NPandayIT0022/pom.xml
new file mode 100644
index 0000000..f3ade8e
--- /dev/null
+++ b/src/test/resources/NPandayIT0022/pom.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>

+

+<project> 

+  <modelVersion>4.0.0</modelVersion>  

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>    

+  <groupId>NPandayIT0022</groupId>  

+  <artifactId>NPandayIT0022</artifactId>  

+  <packaging>library</packaging>  

+  <build> 

+    <sourceDirectory>src/main/csharp</sourceDirectory>  

+    <plugins> 

+      <plugin> 

+        <groupId>npanday.plugin</groupId>  

+        <artifactId>maven-compile-plugin</artifactId>  

+        <extensions>true</extensions>  

+        <configuration> 

+          <keyfile>sample.snk</keyfile> 

+        </configuration> 

+      </plugin> 

+    </plugins> 

+  </build> 

+</project>

diff --git a/src/test/resources/NPandayIT0022/sample.snk b/src/test/resources/NPandayIT0022/sample.snk
new file mode 100644
index 0000000..fc988c5
--- /dev/null
+++ b/src/test/resources/NPandayIT0022/sample.snk
Binary files differ
diff --git a/src/test/resources/NPandayIT0022/src/main/csharp/It0022.cs b/src/test/resources/NPandayIT0022/src/main/csharp/It0022.cs
new file mode 100755
index 0000000..15a0cd4
--- /dev/null
+++ b/src/test/resources/NPandayIT0022/src/main/csharp/It0022.cs
@@ -0,0 +1,8 @@
+namespace NPanday.IT {
+
+public class It0022 {
+	public static void Main () { 
+		System.Console.Write("Hello World!"); 
+	} 
+}
+}
diff --git a/src/test/resources/NPandayIT0028/pom.xml b/src/test/resources/NPandayIT0028/pom.xml
new file mode 100644
index 0000000..a264927
--- /dev/null
+++ b/src/test/resources/NPandayIT0028/pom.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>

+

+<project>

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <groupId>NPandayIT0028</groupId>

+  <artifactId>NPandayIT0028</artifactId>

+  <version>1.0-SNAPSHOT</version>

+  <packaging>library</packaging>

+  <build>

+    <sourceDirectory>src/main/csharp</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <extensions>true</extensions>

+      </plugin>

+    </plugins>

+  </build>

+  <distributionManagement>

+    <snapshotRepository>

+      <uniqueVersion>false</uniqueVersion>

+      <id>snapshot repo</id>

+      <name>snapshot repo</name>

+      <url>file://${basedir}/target/remoteSnapshotRepo/snapshots</url>

+      <layout>default</layout>

+    </snapshotRepository>

+  </distributionManagement>

+</project>

diff --git a/src/test/resources/NPandayIT0028/src/main/csharp/It0028.cs b/src/test/resources/NPandayIT0028/src/main/csharp/It0028.cs
new file mode 100644
index 0000000..95b5a42
--- /dev/null
+++ b/src/test/resources/NPandayIT0028/src/main/csharp/It0028.cs
@@ -0,0 +1,8 @@
+namespace NPanday.IT {
+
+public class It0028 {
+	public static void Main () { 
+		System.Console.Write("Hello World!"); 
+	} 
+}
+}
diff --git a/src/test/resources/NPandayIT0029/pom.xml b/src/test/resources/NPandayIT0029/pom.xml
new file mode 100644
index 0000000..d49f10d
--- /dev/null
+++ b/src/test/resources/NPandayIT0029/pom.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>

+

+<project>

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <groupId>NPandayIT0029</groupId>

+  <artifactId>NPandayIT0029</artifactId>

+  <version>1.0</version>

+  <packaging>library</packaging>

+  <build>

+    <sourceDirectory>src/main/csharp</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <extensions>true</extensions>

+      </plugin>

+    </plugins>

+  </build>

+  <distributionManagement>

+    <repository>

+      <id>regular repo</id>

+      <name>regular repo</name>

+      <url>file://${basedir}/target/remoteRepo</url>

+      <layout>default</layout>

+    </repository>

+  </distributionManagement>

+</project>

diff --git a/src/test/resources/NPandayIT0029/src/main/csharp/It0029.cs b/src/test/resources/NPandayIT0029/src/main/csharp/It0029.cs
new file mode 100755
index 0000000..862ca23
--- /dev/null
+++ b/src/test/resources/NPandayIT0029/src/main/csharp/It0029.cs
@@ -0,0 +1,8 @@
+namespace NPanday.IT {
+
+public class It0029 {
+    public static void Main () { 
+            System.Console.Write("Hello World!"); 
+    } 
+}
+}
diff --git a/src/test/resources/NPandayIT0032/pom.xml b/src/test/resources/NPandayIT0032/pom.xml
new file mode 100644
index 0000000..7a7b4ba
--- /dev/null
+++ b/src/test/resources/NPandayIT0032/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+  </parent>
+  <groupId>NPandayIT0032</groupId>
+  <artifactId>NPandayIT0032</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>library</packaging>
+  <dependencies>
+    <dependency>
+      <groupId>NUnit</groupId>
+      <artifactId>NUnit.Framework</artifactId>
+      <version>2.2.8.0</version>
+      <type>library</type>
+    </dependency>
+  </dependencies>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <testSourceDirectory>src/test</testSourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <extensions>true</extensions>
+        <configuration>
+          <excludes>
+            <exclude>**/notToBeIncluded.cs</exclude>
+          </excludes>
+          <testExcludes>
+            <exclude>**/noTouchy.cs</exclude>
+          </testExcludes>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-test-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/NPandayIT0032/src/main/csharp/It0032.cs b/src/test/resources/NPandayIT0032/src/main/csharp/It0032.cs
new file mode 100755
index 0000000..a78f9c9
--- /dev/null
+++ b/src/test/resources/NPandayIT0032/src/main/csharp/It0032.cs
@@ -0,0 +1,8 @@
+namespace org.apache.maven.it {
+
+public class It0032 {
+	public static void Main () { 
+		System.Console.Write("Hello World!"); 
+	} 
+}
+}
diff --git a/src/test/resources/NPandayIT0032/src/main/csharp/notToBeIncluded.cs b/src/test/resources/NPandayIT0032/src/main/csharp/notToBeIncluded.cs
new file mode 100755
index 0000000..55f2d26
--- /dev/null
+++ b/src/test/resources/NPandayIT0032/src/main/csharp/notToBeIncluded.cs
@@ -0,0 +1 @@
+This file should not be included in the dll
diff --git a/src/test/resources/NPandayIT0032/src/test/It0032-Test1.cs b/src/test/resources/NPandayIT0032/src/test/It0032-Test1.cs
new file mode 100644
index 0000000..6694044
--- /dev/null
+++ b/src/test/resources/NPandayIT0032/src/test/It0032-Test1.cs
@@ -0,0 +1,23 @@
+
+namespace org.apache.maven.it.unit {
+	using NUnit.Framework;
+	using System;
+	using org.apache.maven.it;
+
+	[TestFixture]
+	public class It0032Test1  {
+		private String hello = "hello";
+
+		[SetUp]
+		protected void SetUp() {
+			new It0032();
+		}
+
+		[Test]
+		public void TestSample() {
+			Assert.AreEqual("hello", hello);
+		}
+		
+	}
+
+}
diff --git a/src/test/resources/NPandayIT0032/src/test/noTouchy.cs b/src/test/resources/NPandayIT0032/src/test/noTouchy.cs
new file mode 100644
index 0000000..d1704f6
--- /dev/null
+++ b/src/test/resources/NPandayIT0032/src/test/noTouchy.cs
@@ -0,0 +1 @@
+this file should not be included in the test dll
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT0033/pom.xml b/src/test/resources/NPandayIT0033/pom.xml
new file mode 100644
index 0000000..14b7f6a
--- /dev/null
+++ b/src/test/resources/NPandayIT0033/pom.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

+         xmlns="http://maven.apache.org/POM/4.0.0">

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <groupId>NPandayIT0033</groupId>

+  <artifactId>NPandayIT0033</artifactId>

+  <version>1.0-SNAPSHOT</version>

+  <packaging>library</packaging>

+  <build>

+    <sourceDirectory>src/main/vb</sourceDirectory>

+    <testSourceDirectory>src/test/csharp</testSourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <extensions>true</extensions>

+        <configuration>

+          <language>VB</language>

+          <testLanguage>C_SHARP</testLanguage>

+          <vendor>MICROSOFT</vendor>

+        </configuration>

+      </plugin>

+    </plugins>

+  </build>

+  <dependencies>

+    <dependency>

+      <groupId>NUnit</groupId>

+      <artifactId>NUnit.Framework</artifactId>

+      <version>2.2.8.0</version>

+      <type>library</type>

+    </dependency>

+  </dependencies>

+</project>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT0033/src/main/vb/Module1.vb b/src/test/resources/NPandayIT0033/src/main/vb/Module1.vb
new file mode 100644
index 0000000..d4af27d
--- /dev/null
+++ b/src/test/resources/NPandayIT0033/src/main/vb/Module1.vb
@@ -0,0 +1,2 @@
+Public Class VBClass

+End Class

diff --git a/src/test/resources/NPandayIT0033/src/test/csharp/Class1.cs b/src/test/resources/NPandayIT0033/src/test/csharp/Class1.cs
new file mode 100755
index 0000000..36dd63d
--- /dev/null
+++ b/src/test/resources/NPandayIT0033/src/test/csharp/Class1.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using NUnit.Framework;
+
+namespace NPanday.IT
+{
+[TestFixture]
+    public class Class1
+    {  
+       [Test]
+        public void testd()
+        {
+            new Module1.VBClass();
+            Assert.AreEqual(10, 10);
+        }
+    }
+}
diff --git a/src/test/resources/NPandayIT0035/pom.xml b/src/test/resources/NPandayIT0035/pom.xml
new file mode 100644
index 0000000..2de1afb
--- /dev/null
+++ b/src/test/resources/NPandayIT0035/pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

+         xmlns="http://maven.apache.org/POM/4.0.0">

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <artifactId>NPandayIT0035</artifactId>

+  <groupId>NPandayIT0035</groupId>

+  <packaging>exe</packaging>

+  <build>

+    <sourceDirectory>src/main/vb</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <extensions>true</extensions>

+        <configuration>

+          <language>VB</language>

+          <rootNamespace>it0035</rootNamespace>

+          <main>it0035.Module1</main>

+          <imports>

+            <import>Microsoft.VisualBasic</import>

+            <import>System</import>

+            <import>System.Collections</import>

+            <import>System.Collections.Generic</import>

+            <import>System.Data</import>

+            <import>System.Diagnostics</import>

+          </imports>

+          <includeSources>

+            <includeSource>Module1.vb</includeSource>

+          </includeSources>

+          <define>_MyType="Console",PLATFORM="AnyCPU"</define>

+        </configuration>

+      </plugin>

+    </plugins>

+  </build>

+</project>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT0035/src/main/vb/Module1.vb b/src/test/resources/NPandayIT0035/src/main/vb/Module1.vb
new file mode 100644
index 0000000..5b0dda9
--- /dev/null
+++ b/src/test/resources/NPandayIT0035/src/main/vb/Module1.vb
@@ -0,0 +1,7 @@
+Module Module1

+

+    Sub Main()

+

+    End Sub

+

+End Module

diff --git a/src/test/resources/NPandayIT0036/pom.xml b/src/test/resources/NPandayIT0036/pom.xml
new file mode 100644
index 0000000..ccc0fc9
--- /dev/null
+++ b/src/test/resources/NPandayIT0036/pom.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

+         xmlns="http://maven.apache.org/POM/4.0.0">

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <artifactId>NPandayIT0036</artifactId>

+  <groupId>NPandayIT0036</groupId>

+  <version>1.0-SNAPSHOT</version>

+  <packaging>exe</packaging>

+  <build>

+    <sourceDirectory>src/main/vb</sourceDirectory>

+    <testSourceDirectory>src/test/vb</testSourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <extensions>true</extensions>

+        <configuration>

+          <language>VB</language>

+          <rootNamespace>it0036</rootNamespace>

+          <main>it0036.Module1</main>

+          <doc>it0036.xml</doc>

+          <imports>

+            <import>Microsoft.VisualBasic</import>

+            <import>System</import>

+            <import>System.Collections</import>

+            <import>System.Collections.Generic</import>

+            <import>System.Data</import>

+            <import>System.Diagnostics</import>

+          </imports>

+          <includeSources>

+          </includeSources>

+          <define>_MyType="Console",PLATFORM="AnyCPU"</define>

+        </configuration>

+      </plugin>

+    </plugins>

+  </build>

+  <dependencies>

+    <dependency>

+      <groupId>NUnit</groupId>

+      <artifactId>NUnit.Framework</artifactId>

+      <version>2.2.8.0</version>

+      <type>library</type>

+    </dependency>

+  </dependencies>

+</project>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT0036/src/main/vb/Module1.vb b/src/test/resources/NPandayIT0036/src/main/vb/Module1.vb
new file mode 100644
index 0000000..5b0dda9
--- /dev/null
+++ b/src/test/resources/NPandayIT0036/src/main/vb/Module1.vb
@@ -0,0 +1,7 @@
+Module Module1

+

+    Sub Main()

+

+    End Sub

+

+End Module

diff --git a/src/test/resources/NPandayIT0036/src/main/vb/folder/Module2.vb b/src/test/resources/NPandayIT0036/src/main/vb/folder/Module2.vb
new file mode 100644
index 0000000..d31a4a1
--- /dev/null
+++ b/src/test/resources/NPandayIT0036/src/main/vb/folder/Module2.vb
@@ -0,0 +1,7 @@
+Module Module2

+

+    Public Sub MyFunction()

+

+    End Sub

+

+End Module

diff --git a/src/test/resources/NPandayIT0036/src/main/vb/folder/should-not-be-copied-2.txt b/src/test/resources/NPandayIT0036/src/main/vb/folder/should-not-be-copied-2.txt
new file mode 100644
index 0000000..4e1f171
--- /dev/null
+++ b/src/test/resources/NPandayIT0036/src/main/vb/folder/should-not-be-copied-2.txt
@@ -0,0 +1 @@
+should not be copied
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT0036/src/main/vb/folder/should-not-be-copied-2.xml b/src/test/resources/NPandayIT0036/src/main/vb/folder/should-not-be-copied-2.xml
new file mode 100644
index 0000000..42c1bdf
--- /dev/null
+++ b/src/test/resources/NPandayIT0036/src/main/vb/folder/should-not-be-copied-2.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT0036/src/main/vb/should-not-be-copied.txt b/src/test/resources/NPandayIT0036/src/main/vb/should-not-be-copied.txt
new file mode 100644
index 0000000..4e1f171
--- /dev/null
+++ b/src/test/resources/NPandayIT0036/src/main/vb/should-not-be-copied.txt
@@ -0,0 +1 @@
+should not be copied
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT0036/src/main/vb/should-not-be-copied.xml b/src/test/resources/NPandayIT0036/src/main/vb/should-not-be-copied.xml
new file mode 100644
index 0000000..42c1bdf
--- /dev/null
+++ b/src/test/resources/NPandayIT0036/src/main/vb/should-not-be-copied.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT0036/src/test/vb/Module1.vb b/src/test/resources/NPandayIT0036/src/test/vb/Module1.vb
new file mode 100644
index 0000000..c392faa
--- /dev/null
+++ b/src/test/resources/NPandayIT0036/src/test/vb/Module1.vb
@@ -0,0 +1,11 @@
+Imports NUnit.Framework

+<TestFixture()> _

+Module Module1

+

+    <Test()> _

+    Sub Main()

+        Assert.IsTrue(True)

+

+    End Sub

+

+End Module

diff --git a/src/test/resources/NPandayIT0036/src/test/vb/folder/Module2.vb b/src/test/resources/NPandayIT0036/src/test/vb/folder/Module2.vb
new file mode 100644
index 0000000..6e4d761
--- /dev/null
+++ b/src/test/resources/NPandayIT0036/src/test/vb/folder/Module2.vb
@@ -0,0 +1,11 @@
+Imports NUnit.Framework

+<TestFixture()> _

+Module Module2

+

+    <Test()> _

+    Sub Main()

+        Assert.IsTrue(True)

+

+    End Sub

+

+End Module

diff --git a/src/test/resources/NPandayIT0036/src/test/vb/folder/should-not-be-copied--test-2.xml b/src/test/resources/NPandayIT0036/src/test/vb/folder/should-not-be-copied--test-2.xml
new file mode 100644
index 0000000..42c1bdf
--- /dev/null
+++ b/src/test/resources/NPandayIT0036/src/test/vb/folder/should-not-be-copied--test-2.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT0036/src/test/vb/folder/should-not-be-copied-test-2.txt b/src/test/resources/NPandayIT0036/src/test/vb/folder/should-not-be-copied-test-2.txt
new file mode 100644
index 0000000..4e1f171
--- /dev/null
+++ b/src/test/resources/NPandayIT0036/src/test/vb/folder/should-not-be-copied-test-2.txt
@@ -0,0 +1 @@
+should not be copied
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT0036/src/test/vb/should-not-be-copied-test.txt b/src/test/resources/NPandayIT0036/src/test/vb/should-not-be-copied-test.txt
new file mode 100644
index 0000000..4e1f171
--- /dev/null
+++ b/src/test/resources/NPandayIT0036/src/test/vb/should-not-be-copied-test.txt
@@ -0,0 +1 @@
+should not be copied
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT0036/src/test/vb/should-not-be-copied-test.xml b/src/test/resources/NPandayIT0036/src/test/vb/should-not-be-copied-test.xml
new file mode 100644
index 0000000..42c1bdf
--- /dev/null
+++ b/src/test/resources/NPandayIT0036/src/test/vb/should-not-be-copied-test.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT10276/flex-project/pom.xml b/src/test/resources/NPandayIT10276/flex-project/pom.xml
new file mode 100644
index 0000000..b5312d4
--- /dev/null
+++ b/src/test/resources/NPandayIT10276/flex-project/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>NPandayIT10276</artifactId>
+    <groupId>NPandayIT10276</groupId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>flex-project</artifactId>
+  <packaging>swc</packaging>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.servebox.flex</groupId>
+        <artifactId>flex-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+    <dependency>
+      <groupId>com.adobe.flash.core</groupId>
+      <artifactId>playerglobal</artifactId>
+      <scope>provided</scope>
+      <type>swc</type>
+    </dependency>
+    <dependency>
+      <groupId>com.adobe.flex.sdkcore</groupId>
+      <artifactId>framework</artifactId>
+      <type>swc</type>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/src/test/resources/NPandayIT10276/flex-project/src/main/flex/com/aworldforus/ArrayUtils.as b/src/test/resources/NPandayIT10276/flex-project/src/main/flex/com/aworldforus/ArrayUtils.as
new file mode 100644
index 0000000..5a4df33
--- /dev/null
+++ b/src/test/resources/NPandayIT10276/flex-project/src/main/flex/com/aworldforus/ArrayUtils.as
@@ -0,0 +1,37 @@
+package com.aworldforus

+{

+	import mx.utils.ArrayUtil;

+	

+	public class ArrayUtils

+	{

+		public static function difference( array1: Array, array2: Array ) : Array

+		{		  				

+			var eltOnlyInFirst : Array = new Array();

+	        var eltOnlyInSecond: Array = new Array();

+	        

+	        if( array2 == null )

+	        {

+                if( array1 != null )

+                    eltOnlyInFirst = array1;

+	        }

+	        else if( array1 == null )

+	        {

+	           eltOnlyInSecond = array2;

+	        } 

+	        else

+	        {

+	            for each( var elt1: Object in array1 )

+	            {

+	                if( ArrayUtil.getItemIndex( elt1, array2 ) == -1 )

+	                    eltOnlyInFirst.push( elt1 );

+	            }

+	            for each( var elt2: Object in array2 )

+	            {

+	                if( ArrayUtil.getItemIndex( elt2, array1 ) == -1 )

+	                    eltOnlyInSecond.push( elt2 );                             

+	            }

+	        }

+	        return new Array( eltOnlyInFirst, eltOnlyInSecond );

+	    }        

+	}

+}
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT10276/npanday-project/pom.xml b/src/test/resources/NPandayIT10276/npanday-project/pom.xml
new file mode 100644
index 0000000..9b18a38
--- /dev/null
+++ b/src/test/resources/NPandayIT10276/npanday-project/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>NPandayIT10276</artifactId>
+    <groupId>NPandayIT10276</groupId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>npanday-project</artifactId>
+  <packaging>library</packaging>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <testSourceDirectory>src/test/csharp</testSourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <extensions>true</extensions>
+      </plugin>
+    </plugins>
+  </build>
+  <dependencies>
+    <dependency>
+      <groupId>NUnit</groupId>
+      <artifactId>NUnit.Framework</artifactId>
+      <version>2.2.8.0</version>
+      <type>library</type>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/src/test/resources/NPandayIT10276/npanday-project/src/main/csharp/Sample/MyApp.cs b/src/test/resources/NPandayIT10276/npanday-project/src/main/csharp/Sample/MyApp.cs
new file mode 100644
index 0000000..794e960
--- /dev/null
+++ b/src/test/resources/NPandayIT10276/npanday-project/src/main/csharp/Sample/MyApp.cs
@@ -0,0 +1,13 @@
+using System;

+using System.IO;

+

+namespace Sample

+{

+    public class MyApp

+    {

+        public MyApp()

+        {

+            Console.WriteLine("Hello");

+        }

+    }

+}

diff --git a/src/test/resources/NPandayIT10276/npanday-project/src/test/csharp/Sample/MyAppTest.cs b/src/test/resources/NPandayIT10276/npanday-project/src/test/csharp/Sample/MyAppTest.cs
new file mode 100644
index 0000000..dce4b06
--- /dev/null
+++ b/src/test/resources/NPandayIT10276/npanday-project/src/test/csharp/Sample/MyAppTest.cs
@@ -0,0 +1,23 @@
+using System;

+using NUnit.Framework;

+

+namespace Sample

+{

+

+	[TestFixture]

+	public class MyAppTest

+	{

+

+		[SetUp]

+		protected void SetUp()

+		{

+		}

+

+		[Test]

+		public void TestSample()

+		{

+

+		}

+	}

+}

+

diff --git a/src/test/resources/NPandayIT10276/pom.xml b/src/test/resources/NPandayIT10276/pom.xml
new file mode 100644
index 0000000..de85f96
--- /dev/null
+++ b/src/test/resources/NPandayIT10276/pom.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2010
+  ~
+  ~ 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.
+  --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+  </parent>
+  <groupId>NPandayIT10276</groupId>
+  <artifactId>NPandayIT10276</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+  <modules>
+    <module>npanday-project</module>
+    <module>flex-project</module>
+  </modules>
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.servebox.flex</groupId>
+          <artifactId>flex-plugin</artifactId>
+          <version>2.3.0</version>
+          <extensions>true</extensions>
+          <inherited>true</inherited>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>com.adobe.flash.core</groupId>
+        <artifactId>playerglobal</artifactId>
+        <version>2.0</version>
+        <type>swc</type>
+      </dependency>
+      <dependency>
+        <groupId>com.adobe.flex.sdkcore</groupId>
+        <artifactId>framework</artifactId>
+        <version>3.2.0.3958</version>
+        <type>swc</type>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+</project>
diff --git a/src/test/resources/NPandayIT11637/Class1.cs b/src/test/resources/NPandayIT11637/Class1.cs
new file mode 100755
index 0000000..5308658
--- /dev/null
+++ b/src/test/resources/NPandayIT11637/Class1.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace NPandayIT11637
+{
+    public class Class1
+    {
+        I refuse to compile!
+    }
+}
diff --git a/src/test/resources/NPandayIT11637/NPandayIT11637.csproj b/src/test/resources/NPandayIT11637/NPandayIT11637.csproj
new file mode 100644
index 0000000..dde967c
--- /dev/null
+++ b/src/test/resources/NPandayIT11637/NPandayIT11637.csproj
@@ -0,0 +1,47 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>8.0.50727</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{C3A66995-6F59-4387-A460-D317C3688D0D}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>NPandayIT11637</RootNamespace>

+    <AssemblyName>NPandayIT11637</AssemblyName>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\Debug\</OutputPath>

+    <DefineConstants>DEBUG;TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\Release\</OutputPath>

+    <DefineConstants>TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="System" />

+    <Reference Include="System.Data" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="Class1.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT11637/Properties/AssemblyInfo.cs b/src/test/resources/NPandayIT11637/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..24d8b3f
--- /dev/null
+++ b/src/test/resources/NPandayIT11637/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("NPandayIT11637")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("NPandayIT11637")]
+[assembly: AssemblyCopyright("Copyright ©  2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("70f3f159-3b81-4063-a692-cf77319558be")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/test/resources/NPandayIT11637/pom.xml b/src/test/resources/NPandayIT11637/pom.xml
new file mode 100644
index 0000000..277f6ad
--- /dev/null
+++ b/src/test/resources/NPandayIT11637/pom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2010
+  ~
+  ~ 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.
+  --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+  </parent>
+  <groupId>NPandayIT11637</groupId>
+  <artifactId>NPandayIT11637</artifactId>
+  <packaging>pom</packaging>
+  <build>
+    <sourceDirectory>./</sourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>NPanday.Plugin.Msbuild.JavaBinding</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>compile</goal>
+            </goals>
+            <phase>validate</phase>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
+
diff --git a/src/test/resources/NPandayIT11695/Class1.cs b/src/test/resources/NPandayIT11695/Class1.cs
new file mode 100755
index 0000000..c446fa6
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/Class1.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace NPandayIT11695
+{
+    public class Class1
+    {
+    }
+}
diff --git a/src/test/resources/NPandayIT11695/NPandayIT11695.csproj b/src/test/resources/NPandayIT11695/NPandayIT11695.csproj
new file mode 100755
index 0000000..e0fc42e
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/NPandayIT11695.csproj
@@ -0,0 +1,54 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>8.0.50727</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{69AD220F-118C-4D92-9285-4A58E4A50C0A}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>NPandayIT11695</RootNamespace>

+    <AssemblyName>NPandayIT11695</AssemblyName>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\Debug\</OutputPath>

+    <DefineConstants>DEBUG;TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\Release\</OutputPath>

+    <DefineConstants>TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="System" />

+    <Reference Include="System.Data" />

+    <Reference Include="System.Xml" />

+    <Reference Include="test-snapshot, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>.references\test\test-snapshot-1.0-SNAPSHOT\test-snapshot.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="Class1.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <WebReferences Include="Web References\" />

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT11695/Properties/AssemblyInfo.cs b/src/test/resources/NPandayIT11695/Properties/AssemblyInfo.cs
new file mode 100755
index 0000000..6200fc1
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("NPandayIT11695")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("NPandayIT11695")]
+[assembly: AssemblyCopyright("Copyright ©  2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("86689d20-4c11-410a-8ef3-b9372b31ba57")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/test/resources/NPandayIT11695/pom.xml b/src/test/resources/NPandayIT11695/pom.xml
new file mode 100755
index 0000000..14e3c52
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/pom.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  ~ Copyright 2010

+  ~

+  ~ 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.

+  -->

+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+         xmlns:xsd="http://www.w3.org/2001/XMLSchema">

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <groupId>NPanday.IT11695</groupId>

+  <artifactId>NPandayIT11695</artifactId>

+  <version>1.0-SNAPSHOT</version>

+  <packaging>pom</packaging>

+  <build>

+    <sourceDirectory>./</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>NPanday.Plugin.Msbuild.JavaBinding</artifactId>

+        <executions>

+          <execution>

+            <goals>

+              <goal>compile</goal>

+            </goals>

+            <phase>validate</phase>

+          </execution>

+        </executions>

+      </plugin>

+    </plugins>

+  </build>

+  <dependencies>

+    <dependency>

+      <groupId>test</groupId>

+      <artifactId>test-snapshot</artifactId>

+      <version>1.0-SNAPSHOT</version>

+      <type>library</type>

+    </dependency>

+  </dependencies>

+  <repositories>

+    <repository>

+      <id>test</id>

+      <url>file:${basedir}/test-repo</url>

+    </repository>

+  </repositories>

+</project>

diff --git a/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 0000000..18b5d83
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>test</groupId>
+  <artifactId>test-snapshot</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <snapshot>
+      <timestamp>20100121.135725</timestamp>
+      <buildNumber>1</buildNumber>
+    </snapshot>
+    <lastUpdated>20100121135725</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.md5 b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.md5
new file mode 100644
index 0000000..3d87600
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.md5
@@ -0,0 +1 @@
+25df2916329b478ff135779d73cf21f6
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.sha1 b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.sha1
new file mode 100644
index 0000000..a84feb1
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+e3dd190621ba98e38e4accb701b3f8299ef82296
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll
new file mode 100755
index 0000000..ebbff33
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll
Binary files differ
diff --git a/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll.md5 b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll.md5
new file mode 100644
index 0000000..03d4f1c
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll.md5
@@ -0,0 +1 @@
+b50e42808d9b10c6ee58a7cdd2675c8e
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll.sha1 b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll.sha1
new file mode 100644
index 0000000..895ae1e
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll.sha1
@@ -0,0 +1 @@
+42ddef2d29b2a0d1a6b8d856daaad6fdd96ace79
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom
new file mode 100644
index 0000000..fecfe99
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>test</groupId>
+  <artifactId>test-snapshot</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>library</packaging>
+  <dependencies>
+    <dependency>
+      <groupId>NUnit</groupId>
+      <artifactId>NUnit.Framework</artifactId>
+      <version>2.2.8.0</version>
+      <type>library</type>
+    </dependency>
+  </dependencies>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <testSourceDirectory>src/test/csharp</testSourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <extensions>true</extensions>
+      </plugin>
+    </plugins>
+  </build>
+  <distributionManagement>
+    <repository>
+      <id>test</id>
+      <url>file:${basedir}/target/test-repo</url>
+    </repository>
+  </distributionManagement>
+</project>
diff --git a/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom.md5 b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom.md5
new file mode 100644
index 0000000..6b9ba80
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom.md5
@@ -0,0 +1 @@
+6b41d5430c2852fc5c32c990925dd549
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom.sha1 b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom.sha1
new file mode 100644
index 0000000..93d0f77
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom.sha1
@@ -0,0 +1 @@
+e8ed60e76392a59c97f3769ec685560080c2f9b1
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/maven-metadata.xml b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/maven-metadata.xml
new file mode 100644
index 0000000..8c2e4a6
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>test</groupId>
+  <artifactId>test-snapshot</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <versions>
+      <version>1.0-SNAPSHOT</version>
+    </versions>
+    <lastUpdated>20100121135725</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/maven-metadata.xml.md5 b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/maven-metadata.xml.md5
new file mode 100644
index 0000000..20bed92
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/maven-metadata.xml.md5
@@ -0,0 +1 @@
+1ad00d36607cb36879c142ce746d3e12
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/maven-metadata.xml.sha1 b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/maven-metadata.xml.sha1
new file mode 100644
index 0000000..a2c4ba7
--- /dev/null
+++ b/src/test/resources/NPandayIT11695/test-repo/test/test-snapshot/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+b28e4f701f54eccee991daf35f5acc5fec91e0a4
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT12549/App.xaml b/src/test/resources/NPandayIT12549/App.xaml
new file mode 100644
index 0000000..b0ef092
--- /dev/null
+++ b/src/test/resources/NPandayIT12549/App.xaml
@@ -0,0 +1,8 @@
+<Application x:Class="NPandayIT12549.App"

+    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

+    StartupUri="Window1.xaml">

+    <Application.Resources>

+         

+    </Application.Resources>

+</Application>

diff --git a/src/test/resources/NPandayIT12549/App.xaml.cs b/src/test/resources/NPandayIT12549/App.xaml.cs
new file mode 100644
index 0000000..09be33b
--- /dev/null
+++ b/src/test/resources/NPandayIT12549/App.xaml.cs
@@ -0,0 +1,16 @@
+using System;

+using System.Collections.Generic;

+using System.Configuration;

+using System.Data;

+using System.Linq;

+using System.Windows;

+

+namespace NPandayIT12549

+{

+    /// <summary>

+    /// Interaction logic for App.xaml

+    /// </summary>

+    public partial class App : Application

+    {

+    }

+}

diff --git a/src/test/resources/NPandayIT12549/NPandayIT12549.csproj b/src/test/resources/NPandayIT12549/NPandayIT12549.csproj
new file mode 100644
index 0000000..f1c22ae
--- /dev/null
+++ b/src/test/resources/NPandayIT12549/NPandayIT12549.csproj
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6482F3E4-BDC6-48FE-9CD1-E3C27AA4F57B}</ProjectGuid>

+    <OutputType>WinExe</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>NPandayIT12549</RootNamespace>

+    <AssemblyName>NPandayIT12549</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <WarningLevel>4</WarningLevel>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\Debug\</OutputPath>

+    <DefineConstants>DEBUG;TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\Release\</OutputPath>

+    <DefineConstants>TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="System" />

+    <Reference Include="System.Core">

+      <RequiredTargetFramework>3.5</RequiredTargetFramework>

+    </Reference>

+    <Reference Include="System.Xml.Linq">

+      <RequiredTargetFramework>3.5</RequiredTargetFramework>

+    </Reference>

+    <Reference Include="System.Data.DataSetExtensions">

+      <RequiredTargetFramework>3.5</RequiredTargetFramework>

+    </Reference>

+    <Reference Include="System.Data" />

+    <Reference Include="System.Xml" />

+    <Reference Include="WindowsBase" />

+    <Reference Include="PresentationCore" />

+    <Reference Include="PresentationFramework" />

+  </ItemGroup>

+  <ItemGroup>

+    <ApplicationDefinition Include="App.xaml">

+      <Generator>MSBuild:Compile</Generator>

+      <SubType>Designer</SubType>

+    </ApplicationDefinition>

+    <Page Include="Window1.xaml">

+      <Generator>MSBuild:Compile</Generator>

+      <SubType>Designer</SubType>

+    </Page>

+    <Compile Include="App.xaml.cs">

+      <DependentUpon>App.xaml</DependentUpon>

+      <SubType>Code</SubType>

+    </Compile>

+    <Compile Include="Window1.xaml.cs">

+      <DependentUpon>Window1.xaml</DependentUpon>

+      <SubType>Code</SubType>

+    </Compile>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="Properties\AssemblyInfo.cs">

+      <SubType>Code</SubType>

+    </Compile>

+    <Compile Include="Properties\Resources.Designer.cs">

+      <AutoGen>True</AutoGen>

+      <DesignTime>True</DesignTime>

+      <DependentUpon>Resources.resx</DependentUpon>

+    </Compile>

+    <Compile Include="Properties\Settings.Designer.cs">

+      <AutoGen>True</AutoGen>

+      <DependentUpon>Settings.settings</DependentUpon>

+      <DesignTimeSharedInput>True</DesignTimeSharedInput>

+    </Compile>

+    <EmbeddedResource Include="Properties\Resources.resx">

+      <Generator>ResXFileCodeGenerator</Generator>

+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>

+    </EmbeddedResource>

+    <None Include="Properties\Settings.settings">

+      <Generator>SettingsSingleFileGenerator</Generator>

+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>

+    </None>

+    <AppDesigner Include="Properties\" />

+  </ItemGroup>

+  <ItemGroup>

+    <WebReferences Include="Web References\" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT12549/Properties/AssemblyInfo.cs b/src/test/resources/NPandayIT12549/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..59c0f3f
--- /dev/null
+++ b/src/test/resources/NPandayIT12549/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;

+using System.Resources;

+using System.Runtime.CompilerServices;

+using System.Runtime.InteropServices;

+using System.Windows;

+

+// General Information about an assembly is controlled through the following 

+// set of attributes. Change these attribute values to modify the information

+// associated with an assembly.

+[assembly: AssemblyTitle("NPandayIT12549")]

+[assembly: AssemblyDescription("")]

+[assembly: AssemblyConfiguration("")]

+[assembly: AssemblyCompany("")]

+[assembly: AssemblyProduct("NPandayIT12549")]

+[assembly: AssemblyCopyright("Copyright ©  2010")]

+[assembly: AssemblyTrademark("")]

+[assembly: AssemblyCulture("")]

+

+// Setting ComVisible to false makes the types in this assembly not visible 

+// to COM components.  If you need to access a type in this assembly from 

+// COM, set the ComVisible attribute to true on that type.

+[assembly: ComVisible(false)]

+

+//In order to begin building localizable applications, set 

+//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file

+//inside a <PropertyGroup>.  For example, if you are using US english

+//in your source files, set the <UICulture> to en-US.  Then uncomment

+//the NeutralResourceLanguage attribute below.  Update the "en-US" in

+//the line below to match the UICulture setting in the project file.

+

+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]

+

+

+[assembly: ThemeInfo(

+    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located

+    //(used if a resource is not found in the page, 

+    // or application resource dictionaries)

+    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located

+    //(used if a resource is not found in the page, 

+    // app, or any theme specific resource dictionaries)

+)]

+

+

+// Version information for an assembly consists of the following four values:

+//

+//      Major Version

+//      Minor Version 

+//      Build Number

+//      Revision

+//

+// You can specify all the values or you can default the Build and Revision Numbers 

+// by using the '*' as shown below:

+// [assembly: AssemblyVersion("1.0.*")]

+[assembly: AssemblyVersion("1.0.0.0")]

+[assembly: AssemblyFileVersion("1.0.0.0")]

diff --git a/src/test/resources/NPandayIT12549/Properties/Resources.Designer.cs b/src/test/resources/NPandayIT12549/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..a88c297
--- /dev/null
+++ b/src/test/resources/NPandayIT12549/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------

+// <auto-generated>

+//     This code was generated by a tool.

+//     Runtime Version:2.0.50727.4927

+//

+//     Changes to this file may cause incorrect behavior and will be lost if

+//     the code is regenerated.

+// </auto-generated>

+//------------------------------------------------------------------------------

+

+namespace NPandayIT12549.Properties

+{

+

+

+    /// <summary>

+    ///   A strongly-typed resource class, for looking up localized strings, etc.

+    /// </summary>

+    // This class was auto-generated by the StronglyTypedResourceBuilder

+    // class via a tool like ResGen or Visual Studio.

+    // To add or remove a member, edit your .ResX file then rerun ResGen

+    // with the /str option, or rebuild your VS project.

+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+    internal class Resources

+    {

+

+        private static global::System.Resources.ResourceManager resourceMan;

+

+        private static global::System.Globalization.CultureInfo resourceCulture;

+

+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]

+        internal Resources()

+        {

+        }

+

+        /// <summary>

+        ///   Returns the cached ResourceManager instance used by this class.

+        /// </summary>

+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]

+        internal static global::System.Resources.ResourceManager ResourceManager

+        {

+            get

+            {

+                if ((resourceMan == null))

+                {

+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NPandayIT12549.Properties.Resources", typeof(Resources).Assembly);

+                    resourceMan = temp;

+                }

+                return resourceMan;

+            }

+        }

+

+        /// <summary>

+        ///   Overrides the current thread's CurrentUICulture property for all

+        ///   resource lookups using this strongly typed resource class.

+        /// </summary>

+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]

+        internal static global::System.Globalization.CultureInfo Culture

+        {

+            get

+            {

+                return resourceCulture;

+            }

+            set

+            {

+                resourceCulture = value;

+            }

+        }

+    }

+}

diff --git a/src/test/resources/NPandayIT12549/Properties/Resources.resx b/src/test/resources/NPandayIT12549/Properties/Resources.resx
new file mode 100644
index 0000000..ffecec8
--- /dev/null
+++ b/src/test/resources/NPandayIT12549/Properties/Resources.resx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>

+<root>

+  <!-- 

+    Microsoft ResX Schema 

+    

+    Version 2.0

+    

+    The primary goals of this format is to allow a simple XML format 

+    that is mostly human readable. The generation and parsing of the 

+    various data types are done through the TypeConverter classes 

+    associated with the data types.

+    

+    Example:

+    

+    ... ado.net/XML headers & schema ...

+    <resheader name="resmimetype">text/microsoft-resx</resheader>

+    <resheader name="version">2.0</resheader>

+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>

+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>

+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>

+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>

+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">

+        <value>[base64 mime encoded serialized .NET Framework object]</value>

+    </data>

+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">

+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>

+        <comment>This is a comment</comment>

+    </data>

+                

+    There are any number of "resheader" rows that contain simple 

+    name/value pairs.

+    

+    Each data row contains a name, and value. The row also contains a 

+    type or mimetype. Type corresponds to a .NET class that support 

+    text/value conversion through the TypeConverter architecture. 

+    Classes that don't support this are serialized and stored with the 

+    mimetype set.

+    

+    The mimetype is used for serialized objects, and tells the 

+    ResXResourceReader how to depersist the object. This is currently not 

+    extensible. For a given mimetype the value must be set accordingly:

+    

+    Note - application/x-microsoft.net.object.binary.base64 is the format 

+    that the ResXResourceWriter will generate, however the reader can 

+    read any of the formats listed below.

+    

+    mimetype: application/x-microsoft.net.object.binary.base64

+    value   : The object must be serialized with 

+            : System.Serialization.Formatters.Binary.BinaryFormatter

+            : and then encoded with base64 encoding.

+    

+    mimetype: application/x-microsoft.net.object.soap.base64

+    value   : The object must be serialized with 

+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter

+            : and then encoded with base64 encoding.

+

+    mimetype: application/x-microsoft.net.object.bytearray.base64

+    value   : The object must be serialized into a byte array 

+            : using a System.ComponentModel.TypeConverter

+            : and then encoded with base64 encoding.

+    -->

+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

+    <xsd:element name="root" msdata:IsDataSet="true">

+      <xsd:complexType>

+        <xsd:choice maxOccurs="unbounded">

+          <xsd:element name="metadata">

+            <xsd:complexType>

+              <xsd:sequence>

+                <xsd:element name="value" type="xsd:string" minOccurs="0" />

+              </xsd:sequence>

+              <xsd:attribute name="name" type="xsd:string" />

+              <xsd:attribute name="type" type="xsd:string" />

+              <xsd:attribute name="mimetype" type="xsd:string" />

+            </xsd:complexType>

+          </xsd:element>

+          <xsd:element name="assembly">

+            <xsd:complexType>

+              <xsd:attribute name="alias" type="xsd:string" />

+              <xsd:attribute name="name" type="xsd:string" />

+            </xsd:complexType>

+          </xsd:element>

+          <xsd:element name="data">

+            <xsd:complexType>

+              <xsd:sequence>

+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />

+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />

+              </xsd:sequence>

+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />

+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />

+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />

+            </xsd:complexType>

+          </xsd:element>

+          <xsd:element name="resheader">

+            <xsd:complexType>

+              <xsd:sequence>

+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />

+              </xsd:sequence>

+              <xsd:attribute name="name" type="xsd:string" use="required" />

+            </xsd:complexType>

+          </xsd:element>

+        </xsd:choice>

+      </xsd:complexType>

+    </xsd:element>

+  </xsd:schema>

+  <resheader name="resmimetype">

+    <value>text/microsoft-resx</value>

+  </resheader>

+  <resheader name="version">

+    <value>2.0</value>

+  </resheader>

+  <resheader name="reader">

+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

+  </resheader>

+  <resheader name="writer">

+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

+  </resheader>

+</root>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT12549/Properties/Settings.Designer.cs b/src/test/resources/NPandayIT12549/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..e8b2e61
--- /dev/null
+++ b/src/test/resources/NPandayIT12549/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------

+// <auto-generated>

+//     This code was generated by a tool.

+//     Runtime Version:2.0.50727.4927

+//

+//     Changes to this file may cause incorrect behavior and will be lost if

+//     the code is regenerated.

+// </auto-generated>

+//------------------------------------------------------------------------------

+

+namespace NPandayIT12549.Properties

+{

+

+

+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]

+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase

+    {

+

+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

+

+        public static Settings Default

+        {

+            get

+            {

+                return defaultInstance;

+            }

+        }

+    }

+}

diff --git a/src/test/resources/NPandayIT12549/Properties/Settings.settings b/src/test/resources/NPandayIT12549/Properties/Settings.settings
new file mode 100644
index 0000000..8f2fd95
--- /dev/null
+++ b/src/test/resources/NPandayIT12549/Properties/Settings.settings
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>

+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">

+  <Profiles>

+    <Profile Name="(Default)" />

+  </Profiles>

+  <Settings />

+</SettingsFile>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT12549/Window1.xaml b/src/test/resources/NPandayIT12549/Window1.xaml
new file mode 100644
index 0000000..f3220ca
--- /dev/null
+++ b/src/test/resources/NPandayIT12549/Window1.xaml
@@ -0,0 +1,8 @@
+<Window x:Class="NPandayIT12549.Window1"

+    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

+    Title="Window1" Height="300" Width="300">

+    <Grid>

+        

+    </Grid>

+</Window>

diff --git a/src/test/resources/NPandayIT12549/Window1.xaml.cs b/src/test/resources/NPandayIT12549/Window1.xaml.cs
new file mode 100644
index 0000000..20f94b1
--- /dev/null
+++ b/src/test/resources/NPandayIT12549/Window1.xaml.cs
@@ -0,0 +1,27 @@
+using System;

+using System.Collections.Generic;

+using System.Linq;

+using System.Text;

+using System.Windows;

+using System.Windows.Controls;

+using System.Windows.Data;

+using System.Windows.Documents;

+using System.Windows.Input;

+using System.Windows.Media;

+using System.Windows.Media.Imaging;

+using System.Windows.Navigation;

+using System.Windows.Shapes;

+

+namespace NPandayIT12549

+{

+    /// <summary>

+    /// Interaction logic for Window1.xaml

+    /// </summary>

+    public partial class Window1 : Window

+    {

+        public Window1()

+        {

+            InitializeComponent();

+        }

+    }

+}

diff --git a/src/test/resources/NPandayIT12549/pom.xml b/src/test/resources/NPandayIT12549/pom.xml
new file mode 100644
index 0000000..d8dc17d
--- /dev/null
+++ b/src/test/resources/NPandayIT12549/pom.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://maven.apache.org/POM/4.0.0">

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <groupId>NPanday.ITs.NPandayIT12549</groupId>

+  <artifactId>NPandayIT12549</artifactId>

+  <packaging>winexe</packaging>

+  <name>NPanday.ITs.NPandayIT12549 : NPandayIT12549</name>

+  <version>1.0-SNAPSHOT</version>

+  <build>

+    <sourceDirectory>./</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <extensions>true</extensions>

+        <configuration>

+          <frameworkVersion>3.5</frameworkVersion>

+          <includeSources>

+            <includeSource>App.xaml.cs</includeSource>

+            <includeSource>obj\Debug\App.g.cs</includeSource>

+            <includeSource>Window1.xaml.cs</includeSource>

+            <includeSource>obj\Debug\Window1.g.cs</includeSource>

+            <includeSource>Properties\AssemblyInfo.cs</includeSource>

+            <includeSource>Properties\Resources.Designer.cs</includeSource>

+            <includeSource>Properties\Settings.Designer.cs</includeSource>

+          </includeSources>

+        </configuration>

+      </plugin>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>NPanday.Plugin.Msbuild.JavaBinding</artifactId>

+        <extensions>true</extensions>

+        <executions>

+          <execution>

+            <goals>

+              <goal>compile</goal>

+            </goals>

+          </execution>

+        </executions>

+      </plugin>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-resgen-plugin</artifactId>

+        <extensions>true</extensions>

+        <configuration>

+          <embeddedResources>

+            <embeddedResource>

+              <sourceFile>Properties\Resources.resx</sourceFile>

+              <name>NPandayIT12549.Properties.Resources</name>

+            </embeddedResource>

+          </embeddedResources>

+        </configuration>

+      </plugin>

+    </plugins>

+  </build>

+  <dependencies>

+    <dependency>

+      <groupId>WindowsBase</groupId>

+      <artifactId>WindowsBase</artifactId>

+      <version>3.0.0.0</version>

+      <type>gac_msil</type>

+      <classifier>31bf3856ad364e35</classifier>

+    </dependency>

+    <dependency>

+      <groupId>PresentationCore</groupId>

+      <artifactId>PresentationCore</artifactId>

+      <version>3.0.0.0</version>

+      <type>gac_32</type>

+      <classifier>31bf3856ad364e35</classifier>

+    </dependency>

+    <dependency>

+      <groupId>PresentationFramework</groupId>

+      <artifactId>PresentationFramework</artifactId>

+      <version>3.0.0.0</version>

+      <type>gac_msil</type>

+      <classifier>31bf3856ad364e35</classifier>

+    </dependency>

+  </dependencies>

+</project>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT12940/pom.xml b/src/test/resources/NPandayIT12940/pom.xml
new file mode 100644
index 0000000..377e437
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/pom.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  ~ Copyright 2010
+  ~
+  ~ 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.
+  -->
+
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+  </parent>
+  <artifactId>test-mixed-versions</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>library</packaging>
+  <dependencies>
+    <dependency>
+      <groupId>test</groupId>
+      <artifactId>test-snapshot</artifactId>
+      <version>1.0-SNAPSHOT</version>
+      <type>library</type>
+    </dependency>
+    <dependency>
+      <groupId>test</groupId>
+      <artifactId>TestLibrary</artifactId>
+      <version>1.0.0.0</version>
+      <type>library</type>
+    </dependency>
+    <dependency>
+      <groupId>NUnit</groupId>
+      <artifactId>NUnit.Framework</artifactId>
+      <version>2.2.8.0</version>
+      <type>library</type>
+    </dependency>
+  </dependencies>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <testSourceDirectory>src/test/csharp</testSourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <version>${npanday.version}</version>
+        <extensions>true</extensions>
+      </plugin>
+    </plugins>
+  </build>
+  <repositories>
+    <repository>
+      <id>test</id>
+      <url>file:${basedir}/test-repo</url>
+    </repository>
+  </repositories>
+</project>
diff --git a/src/test/resources/NPandayIT12940/src/main/csharp/Sample/MyApp.cs b/src/test/resources/NPandayIT12940/src/main/csharp/Sample/MyApp.cs
new file mode 100644
index 0000000..2ce213a
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/src/main/csharp/Sample/MyApp.cs
@@ -0,0 +1,14 @@
+using System;
+using System.IO;
+using TestLibrary;
+
+namespace Sample
+{
+    public class MyApp
+    {
+        public MyApp()
+        {
+            Console.WriteLine("Hello");
+        }
+    }
+}
diff --git a/src/test/resources/NPandayIT12940/src/test/csharp/Sample/MyAppTest.cs b/src/test/resources/NPandayIT12940/src/test/csharp/Sample/MyAppTest.cs
new file mode 100644
index 0000000..919990d
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/src/test/csharp/Sample/MyAppTest.cs
@@ -0,0 +1,23 @@
+using System;
+using NUnit.Framework;
+
+namespace Sample
+{
+
+	[TestFixture]
+	public class MyAppTest
+	{
+
+		[SetUp]
+		protected void SetUp()
+		{
+		}
+
+		[Test]
+		public void TestSample()
+		{
+
+		}
+	}
+}
+
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.dll b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.dll
new file mode 100644
index 0000000..9dcbf47
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.dll
Binary files differ
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.dll.md5 b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.dll.md5
new file mode 100644
index 0000000..821fcb8
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.dll.md5
@@ -0,0 +1 @@
+7beb29d4bd351913c2d07fe62760a09d
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.dll.sha1 b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.dll.sha1
new file mode 100644
index 0000000..4352a71
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.dll.sha1
@@ -0,0 +1 @@
+08fdebe83dee25306ff2a6269161b6d839529545
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.pom b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.pom
new file mode 100644
index 0000000..f99244b
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.pom
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
+  <modelVersion>4.0.0</modelVersion>  
+  <groupId>test</groupId>  
+  <artifactId>TestLibrary</artifactId>  
+  <version>1.0.0.0</version>
+  <packaging>library</packaging>
+    <dependencies>
+    <dependency>
+      <groupId>NUnit</groupId>
+      <artifactId>NUnit.Framework</artifactId>
+      <version>2.2.8.0</version>
+      <type>library</type>
+    </dependency>
+  </dependencies>  
+  <build> 
+    <sourceDirectory>src/main/csharp</sourceDirectory>  
+    <testSourceDirectory>src/test/csharp</testSourceDirectory>  
+    <plugins> 
+      <plugin> 
+        <groupId>npanday.plugin</groupId>  
+        <artifactId>maven-compile-plugin</artifactId>  
+        <extensions>true</extensions> 
+      </plugin>
+    </plugins> 
+  </build> 
+</project>
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.pom.md5 b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.pom.md5
new file mode 100644
index 0000000..48413e0
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.pom.md5
@@ -0,0 +1 @@
+de3654fd62f3cac74df6feb1b66405f1
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.pom.sha1 b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.pom.sha1
new file mode 100644
index 0000000..f5264b4
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/1.0.0.0/TestLibrary-1.0.0.0.pom.sha1
@@ -0,0 +1 @@
+a4c03516949d39e9215f08d4bbd130e6152a65b7
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/maven-metadata.xml b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/maven-metadata.xml
new file mode 100644
index 0000000..e617f44
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>test</groupId>
+  <artifactId>TestLibrary</artifactId>
+  <version>1.0.0.0</version>
+  <versioning>
+    <versions>
+      <version>1.0.0.0</version>
+    </versions>
+    <lastUpdated>20100514054932</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/maven-metadata.xml.md5 b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/maven-metadata.xml.md5
new file mode 100644
index 0000000..d3e4025
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/maven-metadata.xml.md5
@@ -0,0 +1 @@
+487c9aff7f3292c5ff8b3c53efbbe173
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/maven-metadata.xml.sha1 b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/maven-metadata.xml.sha1
new file mode 100644
index 0000000..879872f
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/TestLibrary/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+8ff973ab1e131ffcb7cbb175a5e60dd2d0913d26
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 0000000..4edfea7
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>test</groupId>
+  <artifactId>test-snapshot</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <snapshot>
+      <buildNumber>1</buildNumber>
+      <timestamp>20100511.043228</timestamp>
+    </snapshot>
+    <lastUpdated>20100121140327</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.md5 b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.md5
new file mode 100644
index 0000000..4cd4eeb
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.md5
@@ -0,0 +1 @@
+72760049d0dda823afecafecd0508865
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.sha1 b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.sha1
new file mode 100644
index 0000000..21eb1d4
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+6498da12891e028ef8171aedfc22ca2967109fcc
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.dll b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.dll
new file mode 100644
index 0000000..8211a04
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.dll
Binary files differ
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.dll.md5 b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.dll.md5
new file mode 100644
index 0000000..c99ae85
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.dll.md5
@@ -0,0 +1 @@
+e5a4f86ecc8577c5815ef506a200fc98
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.dll.sha1 b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.dll.sha1
new file mode 100644
index 0000000..8a77539
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.dll.sha1
@@ -0,0 +1 @@
+9a5dbcffe21119a3f9b70578f04f83ccd18650cb
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.pom b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.pom
new file mode 100644
index 0000000..5954d0e
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.pom
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
+  <modelVersion>4.0.0</modelVersion>  
+  <groupId>test</groupId>  
+  <artifactId>test-snapshot</artifactId>  
+  <version>1.0-SNAPSHOT</version>
+  <packaging>library</packaging>
+    <dependencies>
+    <dependency>
+      <groupId>NUnit</groupId>
+      <artifactId>NUnit.Framework</artifactId>
+      <version>2.2.8.0</version>
+      <type>library</type>
+    </dependency>
+  </dependencies>  
+  <build> 
+    <sourceDirectory>src/main/csharp</sourceDirectory>  
+    <testSourceDirectory>src/test/csharp</testSourceDirectory>  
+    <plugins> 
+      <plugin> 
+        <groupId>npanday.plugin</groupId>  
+        <artifactId>maven-compile-plugin</artifactId>  
+        <extensions>true</extensions> 
+      </plugin>
+    </plugins> 
+  </build> 
+<distributionManagement>
+  <repository>
+    <id>id</id>
+    <url>file://localhost/Users/brett/scm/codeplex/npanday-its/src/test/resources/NPandayIT12940/test-repo</url>
+  </repository>
+</distributionManagement>
+</project>
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.pom.md5 b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.pom.md5
new file mode 100644
index 0000000..8a61dda
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.pom.md5
@@ -0,0 +1 @@
+16f724939ce9224c6e45aa743ed9f4c2
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.pom.sha1 b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.pom.sha1
new file mode 100644
index 0000000..1a12343
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100511.043228-1.pom.sha1
@@ -0,0 +1 @@
+034eb027df0aaff9fda5e6ef1625f4d0716711d0
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/maven-metadata.xml b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/maven-metadata.xml
new file mode 100644
index 0000000..3d7b7c1
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>test</groupId>
+  <artifactId>test-snapshot</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <versions>
+      <version>1.0-SNAPSHOT</version>
+    </versions>
+    <lastUpdated>20100511043228</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/maven-metadata.xml.md5 b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/maven-metadata.xml.md5
new file mode 100644
index 0000000..1b29b7e
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/maven-metadata.xml.md5
@@ -0,0 +1 @@
+9d77c11b79199818b44e563720830bbc
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/maven-metadata.xml.sha1 b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/maven-metadata.xml.sha1
new file mode 100644
index 0000000..3cd495b
--- /dev/null
+++ b/src/test/resources/NPandayIT12940/test-repo/test/test-snapshot/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+1ca5d101e87ca7f7b96f267249ef12485a8ba90e
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13018/LadderBuild.zip b/src/test/resources/NPandayIT13018/LadderBuild.zip
new file mode 100644
index 0000000..15e8eb7
--- /dev/null
+++ b/src/test/resources/NPandayIT13018/LadderBuild.zip
Binary files differ
diff --git a/src/test/resources/NPandayIT13018/TransDependency.zip b/src/test/resources/NPandayIT13018/TransDependency.zip
new file mode 100644
index 0000000..12687e5
--- /dev/null
+++ b/src/test/resources/NPandayIT13018/TransDependency.zip
Binary files differ
diff --git a/src/test/resources/NPandayIT13542/CL1.vb b/src/test/resources/NPandayIT13542/CL1.vb
new file mode 100644
index 0000000..807bbee
--- /dev/null
+++ b/src/test/resources/NPandayIT13542/CL1.vb
@@ -0,0 +1,6 @@
+Public Class CL1
+    Public Function DllFromClassLibrary1() As String
+        Dim sMessage As String = "From ClassLibrary1"
+        Return (sMessage)
+    End Function
+End Class
diff --git a/src/test/resources/NPandayIT13542/pom.xml b/src/test/resources/NPandayIT13542/pom.xml
new file mode 100644
index 0000000..6973760
--- /dev/null
+++ b/src/test/resources/NPandayIT13542/pom.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://maven.apache.org/POM/4.0.0">
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>OptionInfer</artifactId>
+  <packaging>library</packaging>
+  <version>1.0.0.0</version>
+  <name>NPandayIT : OptionInfer</name>
+  <build>
+    <sourceDirectory>./</sourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <extensions>true</extensions>
+        <configuration>
+          <language>VB</language>
+          <rootNamespace>ClassLibrary1</rootNamespace>
+          <define>_MyType="Windows",PLATFORM="AnyCPU"</define>
+          <doc>ClassLibrary1.xml</doc>
+          <imports>
+            <import>Microsoft.VisualBasic</import>
+            <import>System</import>
+            <import>System.Collections</import>
+            <import>System.Collections.Generic</import>
+            <import>System.Data</import>
+            <import>System.Diagnostics</import>
+          </imports>
+          <parameters>
+            <parameter>/optioninfer-</parameter>
+          </parameters>
+          <includeSources>
+            <includeSource>CL1.vb</includeSource>
+          </includeSources>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+ </project>
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example1/pom.xml b/src/test/resources/NPandayIT13635/example1/pom.xml
new file mode 100644
index 0000000..cebe64a
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example1/pom.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>

+

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  

+  <modelVersion>4.0.0</modelVersion>  

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <artifactId>NPanday.IT13635.Project</artifactId>  

+  <version>1.0-SNAPSHOT</version>

+  <packaging>library</packaging>

+  <build> 

+    <sourceDirectory>src/main/csharp</sourceDirectory>  

+    <plugins> 

+      <plugin> 

+        <groupId>npanday.plugin</groupId>  

+        <artifactId>maven-compile-plugin</artifactId>  

+        <extensions>true</extensions> 

+      </plugin>

+    </plugins> 

+  </build> 

+  <dependencies>

+    <dependency>

+      <groupId>NPanday.ITs</groupId>

+      <artifactId>NPanday.IT13635.Dependency</artifactId>

+      <version>1.0-SNAPSHOT</version>

+      <type>library</type>

+    </dependency>

+  </dependencies>

+  <repositories>

+    <repository>

+      <id>test</id>

+      <url>file:${basedir}/test-repo</url>

+    </repository>

+  </repositories>

+</project>

diff --git a/src/test/resources/NPandayIT13635/example1/src/main/csharp/Sample/MyApp.cs b/src/test/resources/NPandayIT13635/example1/src/main/csharp/Sample/MyApp.cs
new file mode 100644
index 0000000..72488d6
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example1/src/main/csharp/Sample/MyApp.cs
@@ -0,0 +1,15 @@
+using System;

+using System.IO;

+

+namespace Sample

+{

+    public class MyApp

+    {

+        NPanday.Class1 class1;

+

+        public MyApp()

+        {

+            Console.WriteLine("Hello");

+        }

+    }

+}

diff --git a/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll
new file mode 100644
index 0000000..88dce5e
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll
Binary files differ
diff --git a/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll.md5 b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll.md5
new file mode 100644
index 0000000..5ff94d3
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll.md5
@@ -0,0 +1 @@
+f5a4017d3e5d77087fb3c0805f2bf69f
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll.sha1 b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll.sha1
new file mode 100644
index 0000000..27350ff
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll.sha1
@@ -0,0 +1 @@
+a6bfdd0daca4f50ca2201398a42ff285f53e13e7
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom
new file mode 100644
index 0000000..97df58a
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>

+

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  

+  <modelVersion>4.0.0</modelVersion>  

+  <groupId>NPanday.ITs</groupId>  

+  <artifactId>NPanday.IT13635.Dependency</artifactId>  

+  <version>1.0-SNAPSHOT</version>

+  <packaging>library</packaging>

+  <build> 

+    <sourceDirectory>src/main/csharp</sourceDirectory>  

+    <plugins> 

+      <plugin> 

+        <groupId>npanday.plugin</groupId>  

+        <artifactId>maven-compile-plugin</artifactId>  

+        <version>1.2</version>

+        <extensions>true</extensions> 

+      </plugin>

+    </plugins> 

+  </build> 

+  <distributionManagement>

+    <repository>

+      <id>test</id>

+      <url>file:${basedir}/test-repo</url>

+    </repository>

+  </distributionManagement>

+</project>

diff --git a/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom.md5 b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom.md5
new file mode 100644
index 0000000..de32a1d
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom.md5
@@ -0,0 +1 @@
+6a7a1b707e1f422fbf0a0557ae591e58
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom.sha1 b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom.sha1
new file mode 100644
index 0000000..ec1aa86
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom.sha1
@@ -0,0 +1 @@
+aeb2a14a179bcb160c3b390f88b4e713ad721044
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 0000000..ff9803a
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>NPanday.ITs</groupId>
+  <artifactId>NPanday.IT13635.Dependency</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <snapshot>
+      <timestamp>20100630.044917</timestamp>
+      <buildNumber>1</buildNumber>
+    </snapshot>
+    <lastUpdated>20100630044917</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml.md5 b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml.md5
new file mode 100644
index 0000000..efc9e80
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml.md5
@@ -0,0 +1 @@
+3d371e6f10055ac95ad2cb9b3702a244
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml.sha1 b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml.sha1
new file mode 100644
index 0000000..0e58b2a
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+f010f9aaa382bcd0d21a616c80d52a998914c6dc
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml
new file mode 100644
index 0000000..5b68502
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>NPanday.ITs</groupId>
+  <artifactId>NPanday.IT13635.Dependency</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <versions>
+      <version>1.0-SNAPSHOT</version>
+    </versions>
+    <lastUpdated>20100630044917</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml.md5 b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml.md5
new file mode 100644
index 0000000..bda3fd2
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml.md5
@@ -0,0 +1 @@
+e6db817c7af1f5f184303b54beb0fd9e
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml.sha1 b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml.sha1
new file mode 100644
index 0000000..d24a1c0
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example1/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+9c8857eb74657d18499d6a57977ee643709ae46a
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example2/pom.xml b/src/test/resources/NPandayIT13635/example2/pom.xml
new file mode 100644
index 0000000..2b2e9f9
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>

+

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  

+  <modelVersion>4.0.0</modelVersion>  

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <artifactId>NPanday.IT13635.Project</artifactId>  

+  <version>1.0-SNAPSHOT</version>

+  <packaging>library</packaging>

+  <build> 

+    <sourceDirectory>src/main/csharp</sourceDirectory>  

+    <plugins> 

+      <plugin> 

+        <groupId>npanday.plugin</groupId>  

+        <artifactId>maven-compile-plugin</artifactId>  

+        <extensions>true</extensions> 

+      </plugin>

+    </plugins> 

+  </build> 

+  <dependencies>

+    <dependency>

+      <groupId>NPanday.ITs</groupId>

+      <artifactId>NPanday.IT13635.Dependency</artifactId>

+      <version>1.0-SNAPSHOT</version>

+      <type>library</type>

+    </dependency>

+  </dependencies>

+  <repositories>

+    <repository>

+      <id>test</id>

+      <url>file:${basedir}/test-repo</url>

+      <snapshots>

+        <updatePolicy>always</updatePolicy>

+      </snapshots>

+    </repository>

+  </repositories>

+</project>

diff --git a/src/test/resources/NPandayIT13635/example2/src/main/csharp/Sample/MyApp.cs b/src/test/resources/NPandayIT13635/example2/src/main/csharp/Sample/MyApp.cs
new file mode 100644
index 0000000..7f0b837
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/src/main/csharp/Sample/MyApp.cs
@@ -0,0 +1,16 @@
+using System;

+using System.IO;

+

+namespace Sample

+{

+    public class MyApp

+    {

+        NPanday.Class1 class1;

+        NPanday.Class2 class2;

+

+        public MyApp()

+        {

+            Console.WriteLine("Hello");

+        }

+    }

+}

diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll
new file mode 100644
index 0000000..88dce5e
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll
Binary files differ
diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll.md5 b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll.md5
new file mode 100644
index 0000000..5ff94d3
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll.md5
@@ -0,0 +1 @@
+f5a4017d3e5d77087fb3c0805f2bf69f
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll.sha1 b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll.sha1
new file mode 100644
index 0000000..27350ff
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.dll.sha1
@@ -0,0 +1 @@
+a6bfdd0daca4f50ca2201398a42ff285f53e13e7
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom
new file mode 100644
index 0000000..97df58a
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>

+

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  

+  <modelVersion>4.0.0</modelVersion>  

+  <groupId>NPanday.ITs</groupId>  

+  <artifactId>NPanday.IT13635.Dependency</artifactId>  

+  <version>1.0-SNAPSHOT</version>

+  <packaging>library</packaging>

+  <build> 

+    <sourceDirectory>src/main/csharp</sourceDirectory>  

+    <plugins> 

+      <plugin> 

+        <groupId>npanday.plugin</groupId>  

+        <artifactId>maven-compile-plugin</artifactId>  

+        <version>1.2</version>

+        <extensions>true</extensions> 

+      </plugin>

+    </plugins> 

+  </build> 

+  <distributionManagement>

+    <repository>

+      <id>test</id>

+      <url>file:${basedir}/test-repo</url>

+    </repository>

+  </distributionManagement>

+</project>

diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom.md5 b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom.md5
new file mode 100644
index 0000000..de32a1d
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom.md5
@@ -0,0 +1 @@
+6a7a1b707e1f422fbf0a0557ae591e58
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom.sha1 b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom.sha1
new file mode 100644
index 0000000..ec1aa86
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.044917-1.pom.sha1
@@ -0,0 +1 @@
+aeb2a14a179bcb160c3b390f88b4e713ad721044
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.dll b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.dll
new file mode 100644
index 0000000..2e3fc40
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.dll
Binary files differ
diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.dll.md5 b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.dll.md5
new file mode 100644
index 0000000..714aa49
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.dll.md5
@@ -0,0 +1 @@
+c8501730f80992a815388590a363b37d
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.dll.sha1 b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.dll.sha1
new file mode 100644
index 0000000..d35577c
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.dll.sha1
@@ -0,0 +1 @@
+4bce218e25af156c3bf26faa9796f6dd67ff1977
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.pom b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.pom
new file mode 100644
index 0000000..97df58a
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.pom
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>

+

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  

+  <modelVersion>4.0.0</modelVersion>  

+  <groupId>NPanday.ITs</groupId>  

+  <artifactId>NPanday.IT13635.Dependency</artifactId>  

+  <version>1.0-SNAPSHOT</version>

+  <packaging>library</packaging>

+  <build> 

+    <sourceDirectory>src/main/csharp</sourceDirectory>  

+    <plugins> 

+      <plugin> 

+        <groupId>npanday.plugin</groupId>  

+        <artifactId>maven-compile-plugin</artifactId>  

+        <version>1.2</version>

+        <extensions>true</extensions> 

+      </plugin>

+    </plugins> 

+  </build> 

+  <distributionManagement>

+    <repository>

+      <id>test</id>

+      <url>file:${basedir}/test-repo</url>

+    </repository>

+  </distributionManagement>

+</project>

diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.pom.md5 b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.pom.md5
new file mode 100644
index 0000000..de32a1d
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.pom.md5
@@ -0,0 +1 @@
+6a7a1b707e1f422fbf0a0557ae591e58
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.pom.sha1 b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.pom.sha1
new file mode 100644
index 0000000..ec1aa86
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/NPanday.IT13635.Dependency-1.0-20100630.045127-2.pom.sha1
@@ -0,0 +1 @@
+aeb2a14a179bcb160c3b390f88b4e713ad721044
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 0000000..c8edf64
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>NPanday.ITs</groupId>
+  <artifactId>NPanday.IT13635.Dependency</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <snapshot>
+      <timestamp>20100630.045127</timestamp>
+      <buildNumber>2</buildNumber>
+    </snapshot>
+    <lastUpdated>20100630045127</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml.md5 b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml.md5
new file mode 100644
index 0000000..991a0cb
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml.md5
@@ -0,0 +1 @@
+fc35dc01a297878458533aff09c605c1
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml.sha1 b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml.sha1
new file mode 100644
index 0000000..4b0e56c
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/1.0-SNAPSHOT/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+5efc2efe6d20606f3a8a17be38fda54d6e6e92fd
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml
new file mode 100644
index 0000000..ec3d3cb
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>NPanday.ITs</groupId>
+  <artifactId>NPanday.IT13635.Dependency</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <versions>
+      <version>1.0-SNAPSHOT</version>
+    </versions>
+    <lastUpdated>20100630045127</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml.md5 b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml.md5
new file mode 100644
index 0000000..aebe319
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml.md5
@@ -0,0 +1 @@
+fc1aa2ef7703b6086fb0084365e41091
\ No newline at end of file
diff --git a/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml.sha1 b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml.sha1
new file mode 100644
index 0000000..0f70207
--- /dev/null
+++ b/src/test/resources/NPandayIT13635/example2/test-repo/NPanday/ITs/NPanday.IT13635.Dependency/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+dbdcd7b3e83f7c453dd09851333765462b45442a
\ No newline at end of file
diff --git a/src/test/resources/NPandayITCompilerWithArgs/pom.xml b/src/test/resources/NPandayITCompilerWithArgs/pom.xml
new file mode 100644
index 0000000..862bf61
--- /dev/null
+++ b/src/test/resources/NPandayITCompilerWithArgs/pom.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+  </parent>
+  <groupId>NPandayITCompilerWithArgs</groupId>
+  <artifactId>NPandayITCompilerWithArgs</artifactId>
+  <packaging>library</packaging>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <extensions>true</extensions>
+        <configuration>
+          <includeSources>
+            <includeSource>src/main/csharp/It0001.cs</includeSource>
+          </includeSources>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/NPandayITCompilerWithArgs/src/main/csharp/It0001.cs b/src/test/resources/NPandayITCompilerWithArgs/src/main/csharp/It0001.cs
new file mode 100755
index 0000000..83bb787
--- /dev/null
+++ b/src/test/resources/NPandayITCompilerWithArgs/src/main/csharp/It0001.cs
@@ -0,0 +1,8 @@
+namespace NPandayIT0001 {
+
+public class It0001 {
+	public static void Main () { 
+		System.Console.Write("Hello World!"); 
+	} 
+}
+}
diff --git a/src/test/resources/NPandayITCompilerWithArgs/src/main/csharp/It0002.cs b/src/test/resources/NPandayITCompilerWithArgs/src/main/csharp/It0002.cs
new file mode 100755
index 0000000..2313e72
--- /dev/null
+++ b/src/test/resources/NPandayITCompilerWithArgs/src/main/csharp/It0002.cs
@@ -0,0 +1,8 @@
+namespace NPandayIT0001 {
+
+public class It0002 {
+	public static void Main () { 
+		System.Console.Write("Hello World!"); 
+	} 
+}
+}
diff --git a/src/test/resources/NPandayITNetModuleDependency/dependency/pom.xml b/src/test/resources/NPandayITNetModuleDependency/dependency/pom.xml
new file mode 100644
index 0000000..b8f1abe
--- /dev/null
+++ b/src/test/resources/NPandayITNetModuleDependency/dependency/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  ~ Copyright 2010
+  ~
+  ~ 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.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+    <relativePath>../../pom.xml</relativePath>
+  </parent>
+  <groupId>NPandayITNetModuleDependency</groupId>
+  <artifactId>dependency</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>module</packaging>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <extensions>true</extensions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/NPandayITNetModuleDependency/dependency/src/main/csharp/It0002.cs b/src/test/resources/NPandayITNetModuleDependency/dependency/src/main/csharp/It0002.cs
new file mode 100755
index 0000000..7295c88
--- /dev/null
+++ b/src/test/resources/NPandayITNetModuleDependency/dependency/src/main/csharp/It0002.cs
@@ -0,0 +1,8 @@
+namespace NPanday.IT {
+
+public class It0002 {
+	public static void Main () { 
+		System.Console.Write("Hello!!!"); 
+	} 
+}
+}
diff --git a/src/test/resources/NPandayITNetModuleDependency/library/pom.xml b/src/test/resources/NPandayITNetModuleDependency/library/pom.xml
new file mode 100644
index 0000000..fa856ab
--- /dev/null
+++ b/src/test/resources/NPandayITNetModuleDependency/library/pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  ~ Copyright 2010
+  ~
+  ~ 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.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+    <relativePath>../../pom.xml</relativePath>
+  </parent>
+  <groupId>NPandayITNetModuleDependency</groupId>
+  <version>1.0-SNAPSHOT</version>
+  <artifactId>library</artifactId>
+  <packaging>library</packaging>
+  <dependencies>
+    <dependency>
+      <groupId>NPandayITNetModuleDependency</groupId>
+      <artifactId>dependency</artifactId>
+      <version>1.0-SNAPSHOT</version>
+      <type>module</type>
+    </dependency>
+  </dependencies>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <extensions>true</extensions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/NPandayITNetModuleDependency/library/src/main/csharp/Main.cs b/src/test/resources/NPandayITNetModuleDependency/library/src/main/csharp/Main.cs
new file mode 100755
index 0000000..3acd546
--- /dev/null
+++ b/src/test/resources/NPandayITNetModuleDependency/library/src/main/csharp/Main.cs
@@ -0,0 +1,6 @@
+namespace NPanday.IT {
+
+public class Main {
+    private It0002 it;
+}
+}
diff --git a/src/test/resources/NPandayITNetModuleTransitiveDependency/cli-fail-transitive/pom.xml b/src/test/resources/NPandayITNetModuleTransitiveDependency/cli-fail-transitive/pom.xml
new file mode 100644
index 0000000..86bde59
--- /dev/null
+++ b/src/test/resources/NPandayITNetModuleTransitiveDependency/cli-fail-transitive/pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  ~ Copyright 2010
+  ~
+  ~ 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.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+    <relativePath>../../pom.xml</relativePath>
+  </parent>
+  <groupId>NPandayITNetModuleTransitiveDependency</groupId>
+  <version>1.0-SNAPSHOT</version>
+  <artifactId>cli-fail-transitive</artifactId>
+  <packaging>winexe</packaging>
+  <dependencies>
+    <dependency>
+      <groupId>NPandayITNetModuleTransitiveDependency</groupId>
+      <artifactId>library</artifactId>
+      <version>1.0-SNAPSHOT</version>
+      <type>library</type>
+    </dependency>
+  </dependencies>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <extensions>true</extensions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/NPandayITNetModuleTransitiveDependency/cli-fail-transitive/src/main/csharp/Cli.cs b/src/test/resources/NPandayITNetModuleTransitiveDependency/cli-fail-transitive/src/main/csharp/Cli.cs
new file mode 100755
index 0000000..abb751f
--- /dev/null
+++ b/src/test/resources/NPandayITNetModuleTransitiveDependency/cli-fail-transitive/src/main/csharp/Cli.cs
@@ -0,0 +1,11 @@
+namespace NPanday.IT {
+
+public class Cli {
+    // compile time transitivity should not be supported for .netmodules, causing this to fail
+    private It0002 it;
+
+	public static void Main () { 
+		System.Console.Write("Hello!!!");
+	}
+}
+}
diff --git a/src/test/resources/NPandayITNetModuleTransitiveDependency/cli/pom.xml b/src/test/resources/NPandayITNetModuleTransitiveDependency/cli/pom.xml
new file mode 100644
index 0000000..413906a
--- /dev/null
+++ b/src/test/resources/NPandayITNetModuleTransitiveDependency/cli/pom.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  ~ Copyright 2010
+  ~
+  ~ 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.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+    <relativePath>../../pom.xml</relativePath>
+  </parent>
+  <groupId>NPandayITNetModuleTransitiveDependency</groupId>
+  <version>1.0-SNAPSHOT</version>
+  <artifactId>cli</artifactId>
+  <packaging>winexe</packaging>
+  <dependencies>
+    <dependency>
+      <groupId>NPandayITNetModuleTransitiveDependency</groupId>
+      <artifactId>library</artifactId>
+      <version>1.0-SNAPSHOT</version>
+      <type>library</type>
+    </dependency>
+    <dependency>
+      <groupId>NUnit</groupId>
+      <artifactId>NUnit.Framework</artifactId>
+      <version>2.2.8.0</version>
+      <type>library</type>
+    </dependency>
+  </dependencies>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <testSourceDirectory>src/test/csharp</testSourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <extensions>true</extensions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/NPandayITNetModuleTransitiveDependency/cli/src/main/csharp/Cli.cs b/src/test/resources/NPandayITNetModuleTransitiveDependency/cli/src/main/csharp/Cli.cs
new file mode 100755
index 0000000..3f2b15a
--- /dev/null
+++ b/src/test/resources/NPandayITNetModuleTransitiveDependency/cli/src/main/csharp/Cli.cs
@@ -0,0 +1,10 @@
+namespace NPanday.IT {
+
+public class Cli {
+    private Lib lib;
+
+	public static void Main () { 
+		System.Console.Write("Hello!!! Value = " + lib.getItValue());
+	}
+}
+}
diff --git a/src/test/resources/NPandayITNetModuleTransitiveDependency/cli/src/test/csharp/ItTest.cs b/src/test/resources/NPandayITNetModuleTransitiveDependency/cli/src/test/csharp/ItTest.cs
new file mode 100644
index 0000000..c01fe0f
--- /dev/null
+++ b/src/test/resources/NPandayITNetModuleTransitiveDependency/cli/src/test/csharp/ItTest.cs
@@ -0,0 +1,21 @@
+
+namespace NPanday.IT {
+	using NUnit.Framework;
+	using System;
+
+	[TestFixture]
+	public class ItTest  {
+		private Lib lib = new Lib();
+
+		[SetUp]
+		protected void SetUp() {
+		}
+
+		[Test]
+		public void TestSample() {
+			Assert.AreEqual("it0002", lib.getItValue());
+		}
+
+	}
+
+}
\ No newline at end of file
diff --git a/src/test/resources/NPandayITNetModuleTransitiveDependency/dependency/pom.xml b/src/test/resources/NPandayITNetModuleTransitiveDependency/dependency/pom.xml
new file mode 100644
index 0000000..fc542c5
--- /dev/null
+++ b/src/test/resources/NPandayITNetModuleTransitiveDependency/dependency/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  ~ Copyright 2010
+  ~
+  ~ 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.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+    <relativePath>../../pom.xml</relativePath>
+  </parent>
+  <groupId>NPandayITNetModuleTransitiveDependency</groupId>
+  <artifactId>dependency</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>module</packaging>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <extensions>true</extensions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/NPandayITNetModuleTransitiveDependency/dependency/src/main/csharp/It0002.cs b/src/test/resources/NPandayITNetModuleTransitiveDependency/dependency/src/main/csharp/It0002.cs
new file mode 100755
index 0000000..615ecf5
--- /dev/null
+++ b/src/test/resources/NPandayITNetModuleTransitiveDependency/dependency/src/main/csharp/It0002.cs
@@ -0,0 +1,12 @@
+namespace NPanday.IT {
+
+public class It0002 {
+	public static void Main () { 
+		System.Console.Write("Hello!!!"); 
+ 	}
+
+ 	 public string getValue() {
+ 	    return "it0002";
+ 	 }
+}
+}
diff --git a/src/test/resources/NPandayITNetModuleTransitiveDependency/library/pom.xml b/src/test/resources/NPandayITNetModuleTransitiveDependency/library/pom.xml
new file mode 100644
index 0000000..0bb0212
--- /dev/null
+++ b/src/test/resources/NPandayITNetModuleTransitiveDependency/library/pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  ~ Copyright 2010
+  ~
+  ~ 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.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+    <relativePath>../../pom.xml</relativePath>
+  </parent>
+  <groupId>NPandayITNetModuleTransitiveDependency</groupId>
+  <version>1.0-SNAPSHOT</version>
+  <artifactId>library</artifactId>
+  <packaging>library</packaging>
+  <dependencies>
+    <dependency>
+      <groupId>NPandayITNetModuleTransitiveDependency</groupId>
+      <artifactId>dependency</artifactId>
+      <version>1.0-SNAPSHOT</version>
+      <type>module</type>
+    </dependency>
+  </dependencies>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <extensions>true</extensions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/NPandayITNetModuleTransitiveDependency/library/src/main/csharp/Lib.cs b/src/test/resources/NPandayITNetModuleTransitiveDependency/library/src/main/csharp/Lib.cs
new file mode 100644
index 0000000..39ccaf1
--- /dev/null
+++ b/src/test/resources/NPandayITNetModuleTransitiveDependency/library/src/main/csharp/Lib.cs
@@ -0,0 +1,13 @@
+namespace NPanday.IT {
+
+public class Lib {
+    // test that we can have a compile-time dependency on a .netmodule
+    private It0002 it;
+
+    // used to test that a runtime dependency on a .netmodule works
+    public string getItValue()
+    {
+        return it.getValue();
+    }
+}
+}
diff --git a/src/test/resources/NPandayITVBWebAppTest/Default.aspx b/src/test/resources/NPandayITVBWebAppTest/Default.aspx
new file mode 100644
index 0000000..e1857fa
--- /dev/null
+++ b/src/test/resources/NPandayITVBWebAppTest/Default.aspx
@@ -0,0 +1,16 @@
+<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="VBWebAppTest._Default" %>

+

+<!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 runat="server">

+    <title></title>

+</head>

+<body>

+    <form id="form1" runat="server">

+    <div>

+    

+    </div>

+    </form>

+</body>

+</html>

diff --git a/src/test/resources/NPandayITVBWebAppTest/Default.aspx.designer.vb b/src/test/resources/NPandayITVBWebAppTest/Default.aspx.designer.vb
new file mode 100644
index 0000000..b70c442
--- /dev/null
+++ b/src/test/resources/NPandayITVBWebAppTest/Default.aspx.designer.vb
@@ -0,0 +1,26 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:2.0.50727.42
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+
+Partial Public Class _Default
+
+    '''<summary>
+    '''form1 control.
+    '''</summary>
+    '''<remarks>
+    '''Auto-generated field.
+    '''To modify move field declaration from designer file to code-behind file.
+    '''</remarks>
+    Protected WithEvents form1 As Global.System.Web.UI.HtmlControls.HtmlForm
+End Class
diff --git a/src/test/resources/NPandayITVBWebAppTest/Default.aspx.vb b/src/test/resources/NPandayITVBWebAppTest/Default.aspx.vb
new file mode 100644
index 0000000..66e2183
--- /dev/null
+++ b/src/test/resources/NPandayITVBWebAppTest/Default.aspx.vb
@@ -0,0 +1,8 @@
+Partial Public Class _Default
+    Inherits System.Web.UI.Page
+
+    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
+
+    End Sub
+
+End Class
\ No newline at end of file
diff --git a/src/test/resources/NPandayITVBWebAppTest/My Project/Application.Designer.vb b/src/test/resources/NPandayITVBWebAppTest/My Project/Application.Designer.vb
new file mode 100644
index 0000000..8a621ae
--- /dev/null
+++ b/src/test/resources/NPandayITVBWebAppTest/My Project/Application.Designer.vb
@@ -0,0 +1,13 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:2.0.50727.42
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
diff --git a/src/test/resources/NPandayITVBWebAppTest/My Project/Application.myapp b/src/test/resources/NPandayITVBWebAppTest/My Project/Application.myapp
new file mode 100644
index 0000000..0167050
--- /dev/null
+++ b/src/test/resources/NPandayITVBWebAppTest/My Project/Application.myapp
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>

+<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

+  <MySubMain>false</MySubMain>

+  <SingleInstance>false</SingleInstance>

+  <ShutdownMode>0</ShutdownMode>

+  <EnableVisualStyles>true</EnableVisualStyles>

+  <AuthenticationMode>0</AuthenticationMode>

+  <ApplicationType>1</ApplicationType>

+  <SaveMySettingsOnExit>true</SaveMySettingsOnExit>

+</MyApplicationData>

diff --git a/src/test/resources/NPandayITVBWebAppTest/My Project/AssemblyInfo.vb b/src/test/resources/NPandayITVBWebAppTest/My Project/AssemblyInfo.vb
new file mode 100644
index 0000000..8199ca9
--- /dev/null
+++ b/src/test/resources/NPandayITVBWebAppTest/My Project/AssemblyInfo.vb
@@ -0,0 +1,34 @@
+Imports System
+Imports System.Reflection
+Imports System.Runtime.InteropServices
+
+' General Information about an assembly is controlled through the following 
+' set of attributes. Change these attribute values to modify the information
+' associated with an assembly.
+
+' Review the values of the assembly attributes
+<Assembly: AssemblyTitle("VBWebAppTest")> 
+<Assembly: AssemblyDescription("")> 
+<Assembly: AssemblyCompany("g2ix")> 
+<Assembly: AssemblyProduct("VBWebAppTest")> 
+<Assembly: AssemblyCopyright("Copyright © g2ix 2010")> 
+<Assembly: AssemblyTrademark("")> 
+
+<Assembly: ComVisible(False)>
+
+'The following GUID is for the ID of the typelib if this project is exposed to COM
+<Assembly: Guid("334e9cee-0d47-4d70-924b-b5098a3432cb")> 
+
+' Version information for an assembly consists of the following four values:
+'
+'      Major Version
+'      Minor Version 
+'      Build Number
+'      Revision
+'
+' You can specify all the values or you can default the Build and Revision Numbers 
+' by using the '*' as shown below:
+' <Assembly: AssemblyVersion("1.0.*")> 
+
+<Assembly: AssemblyVersion("1.0.0.0")> 
+<Assembly: AssemblyFileVersion("1.0.0.0")> 
diff --git a/src/test/resources/NPandayITVBWebAppTest/My Project/MyExtensions/MyWebExtension.vb b/src/test/resources/NPandayITVBWebAppTest/My Project/MyExtensions/MyWebExtension.vb
new file mode 100644
index 0000000..78c7c19
--- /dev/null
+++ b/src/test/resources/NPandayITVBWebAppTest/My Project/MyExtensions/MyWebExtension.vb
@@ -0,0 +1,73 @@
+#If _MyType <> "Empty" Then
+
+Namespace My
+    ''' <summary>
+    ''' Module used to define the properties that are available in the My Namespace for Web projects.
+    ''' </summary>
+    ''' <remarks></remarks>
+    <Global.Microsoft.VisualBasic.HideModuleName()> _
+    Module MyWebExtension
+        Private s_Computer As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Devices.ServerComputer)
+        Private s_User As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.ApplicationServices.WebUser)
+        Private s_Log As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Logging.AspLog)
+        ''' <summary>
+        ''' Returns information about the host computer.
+        ''' </summary>
+        <Global.System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")> _
+        Friend ReadOnly Property Computer() As Global.Microsoft.VisualBasic.Devices.ServerComputer
+            Get
+                Return s_Computer.GetInstance()
+            End Get
+        End Property
+        ''' <summary>
+        ''' Returns information for the current Web user.
+        ''' </summary>
+        <Global.System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")> _
+        Friend ReadOnly Property User() As Global.Microsoft.VisualBasic.ApplicationServices.WebUser
+            Get
+                Return s_User.GetInstance()
+            End Get
+        End Property
+        ''' <summary>
+        ''' Returns Request object.
+        ''' </summary>
+        <Global.System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")> _
+        <Global.System.ComponentModel.Design.HelpKeyword("My.Request")> _
+        Friend ReadOnly Property Request() As Global.System.Web.HttpRequest
+            <Global.System.Diagnostics.DebuggerHidden()> _
+            Get
+                Dim CurrentContext As Global.System.Web.HttpContext = Global.System.Web.HttpContext.Current
+                If CurrentContext IsNot Nothing Then
+                    Return CurrentContext.Request
+                End If
+                Return Nothing
+            End Get
+        End Property
+        ''' <summary>
+        ''' Returns Response object.
+        ''' </summary>
+        <Global.System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")> _
+         <Global.System.ComponentModel.Design.HelpKeyword("My.Response")> _
+         Friend ReadOnly Property Response() As Global.System.Web.HttpResponse
+            <Global.System.Diagnostics.DebuggerHidden()> _
+            Get
+                Dim CurrentContext As Global.System.Web.HttpContext = Global.System.Web.HttpContext.Current
+                If CurrentContext IsNot Nothing Then
+                    Return CurrentContext.Response
+                End If
+                Return Nothing
+            End Get
+        End Property
+        ''' <summary>
+        ''' Returns the Asp log object.
+        ''' </summary>
+        <Global.System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")> _
+        Friend ReadOnly Property Log() As Global.Microsoft.VisualBasic.Logging.AspLog
+            Get
+                Return s_Log.GetInstance()
+            End Get
+        End Property
+     End Module
+End Namespace
+
+#End If
\ No newline at end of file
diff --git a/src/test/resources/NPandayITVBWebAppTest/My Project/Resources.Designer.vb b/src/test/resources/NPandayITVBWebAppTest/My Project/Resources.Designer.vb
new file mode 100644
index 0000000..48a7d6d
--- /dev/null
+++ b/src/test/resources/NPandayITVBWebAppTest/My Project/Resources.Designer.vb
@@ -0,0 +1,62 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:2.0.50727.42
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My.Resources
+    
+    'This class was auto-generated by the StronglyTypedResourceBuilder
+    'class via a tool like ResGen or Visual Studio.
+    'To add or remove a member, edit your .ResX file then rerun ResGen
+    'with the /str option, or rebuild your VS project.
+    '<summary>
+    '  A strongly-typed resource class, for looking up localized strings, etc.
+    '</summary>
+    <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0"),  _
+     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
+     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(),  _
+     Global.Microsoft.VisualBasic.HideModuleNameAttribute()>  _
+    Friend Module Resources
+        
+        Private resourceMan As Global.System.Resources.ResourceManager
+        
+        Private resourceCulture As Global.System.Globalization.CultureInfo
+        
+        '<summary>
+        '  Returns the cached ResourceManager instance used by this class.
+        '</summary>
+        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _
+        Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
+            Get
+                If Object.ReferenceEquals(resourceMan, Nothing) Then
+                    Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("VBWebAppTest.Resources", GetType(Resources).Assembly)
+                    resourceMan = temp
+                End If
+                Return resourceMan
+            End Get
+        End Property
+        
+        '<summary>
+        '  Overrides the current thread's CurrentUICulture property for all
+        '  resource lookups using this strongly typed resource class.
+        '</summary>
+        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _
+        Friend Property Culture() As Global.System.Globalization.CultureInfo
+            Get
+                Return resourceCulture
+            End Get
+            Set(ByVal value As Global.System.Globalization.CultureInfo)
+                resourceCulture = value
+            End Set
+        End Property
+    End Module
+End Namespace
diff --git a/src/test/resources/NPandayITVBWebAppTest/My Project/Resources.resx b/src/test/resources/NPandayITVBWebAppTest/My Project/Resources.resx
new file mode 100644
index 0000000..ffecec8
--- /dev/null
+++ b/src/test/resources/NPandayITVBWebAppTest/My Project/Resources.resx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>

+<root>

+  <!-- 

+    Microsoft ResX Schema 

+    

+    Version 2.0

+    

+    The primary goals of this format is to allow a simple XML format 

+    that is mostly human readable. The generation and parsing of the 

+    various data types are done through the TypeConverter classes 

+    associated with the data types.

+    

+    Example:

+    

+    ... ado.net/XML headers & schema ...

+    <resheader name="resmimetype">text/microsoft-resx</resheader>

+    <resheader name="version">2.0</resheader>

+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>

+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>

+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>

+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>

+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">

+        <value>[base64 mime encoded serialized .NET Framework object]</value>

+    </data>

+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">

+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>

+        <comment>This is a comment</comment>

+    </data>

+                

+    There are any number of "resheader" rows that contain simple 

+    name/value pairs.

+    

+    Each data row contains a name, and value. The row also contains a 

+    type or mimetype. Type corresponds to a .NET class that support 

+    text/value conversion through the TypeConverter architecture. 

+    Classes that don't support this are serialized and stored with the 

+    mimetype set.

+    

+    The mimetype is used for serialized objects, and tells the 

+    ResXResourceReader how to depersist the object. This is currently not 

+    extensible. For a given mimetype the value must be set accordingly:

+    

+    Note - application/x-microsoft.net.object.binary.base64 is the format 

+    that the ResXResourceWriter will generate, however the reader can 

+    read any of the formats listed below.

+    

+    mimetype: application/x-microsoft.net.object.binary.base64

+    value   : The object must be serialized with 

+            : System.Serialization.Formatters.Binary.BinaryFormatter

+            : and then encoded with base64 encoding.

+    

+    mimetype: application/x-microsoft.net.object.soap.base64

+    value   : The object must be serialized with 

+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter

+            : and then encoded with base64 encoding.

+

+    mimetype: application/x-microsoft.net.object.bytearray.base64

+    value   : The object must be serialized into a byte array 

+            : using a System.ComponentModel.TypeConverter

+            : and then encoded with base64 encoding.

+    -->

+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

+    <xsd:element name="root" msdata:IsDataSet="true">

+      <xsd:complexType>

+        <xsd:choice maxOccurs="unbounded">

+          <xsd:element name="metadata">

+            <xsd:complexType>

+              <xsd:sequence>

+                <xsd:element name="value" type="xsd:string" minOccurs="0" />

+              </xsd:sequence>

+              <xsd:attribute name="name" type="xsd:string" />

+              <xsd:attribute name="type" type="xsd:string" />

+              <xsd:attribute name="mimetype" type="xsd:string" />

+            </xsd:complexType>

+          </xsd:element>

+          <xsd:element name="assembly">

+            <xsd:complexType>

+              <xsd:attribute name="alias" type="xsd:string" />

+              <xsd:attribute name="name" type="xsd:string" />

+            </xsd:complexType>

+          </xsd:element>

+          <xsd:element name="data">

+            <xsd:complexType>

+              <xsd:sequence>

+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />

+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />

+              </xsd:sequence>

+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />

+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />

+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />

+            </xsd:complexType>

+          </xsd:element>

+          <xsd:element name="resheader">

+            <xsd:complexType>

+              <xsd:sequence>

+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />

+              </xsd:sequence>

+              <xsd:attribute name="name" type="xsd:string" use="required" />

+            </xsd:complexType>

+          </xsd:element>

+        </xsd:choice>

+      </xsd:complexType>

+    </xsd:element>

+  </xsd:schema>

+  <resheader name="resmimetype">

+    <value>text/microsoft-resx</value>

+  </resheader>

+  <resheader name="version">

+    <value>2.0</value>

+  </resheader>

+  <resheader name="reader">

+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

+  </resheader>

+  <resheader name="writer">

+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

+  </resheader>

+</root>
\ No newline at end of file
diff --git a/src/test/resources/NPandayITVBWebAppTest/My Project/Settings.Designer.vb b/src/test/resources/NPandayITVBWebAppTest/My Project/Settings.Designer.vb
new file mode 100644
index 0000000..add566e
--- /dev/null
+++ b/src/test/resources/NPandayITVBWebAppTest/My Project/Settings.Designer.vb
@@ -0,0 +1,73 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:2.0.50727.42
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My
+
+    <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(),  _
+     Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0"),  _
+     Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _
+    Partial Friend NotInheritable Class MySettings
+        Inherits Global.System.Configuration.ApplicationSettingsBase
+        
+        Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings)
+        
+#Region "My.Settings Auto-Save Functionality"
+#If _MyType = "WindowsForms" Then
+        Private Shared addedHandler As Boolean
+
+        Private Shared addedHandlerLockObject As New Object
+
+        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
+        Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
+            If My.Application.SaveMySettingsOnExit Then
+                My.Settings.Save()
+            End If
+        End Sub
+#End If
+#End Region
+        
+        Public Shared ReadOnly Property [Default]() As MySettings
+            Get
+                
+#If _MyType = "WindowsForms" Then
+                   If Not addedHandler Then
+                        SyncLock addedHandlerLockObject
+                            If Not addedHandler Then
+                                AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
+                                addedHandler = True
+                            End If
+                        End SyncLock
+                    End If
+#End If
+                Return defaultInstance
+            End Get
+        End Property
+    End Class
+End Namespace
+
+Namespace My
+    
+    <Global.Microsoft.VisualBasic.HideModuleNameAttribute(),  _
+     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
+     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()>  _
+    Friend Module MySettingsProperty
+        
+        <Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")>  _
+        Friend ReadOnly Property Settings() As Global.VBWebAppTest.My.MySettings
+            Get
+                Return Global.VBWebAppTest.My.MySettings.Default
+            End Get
+        End Property
+    End Module
+End Namespace
diff --git a/src/test/resources/NPandayITVBWebAppTest/My Project/Settings.settings b/src/test/resources/NPandayITVBWebAppTest/My Project/Settings.settings
new file mode 100644
index 0000000..377f56d
--- /dev/null
+++ b/src/test/resources/NPandayITVBWebAppTest/My Project/Settings.settings
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>

+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">

+  <Profiles>

+    <Profile Name="(Default)" />

+  </Profiles>

+  <Settings />

+</SettingsFile>

diff --git a/src/test/resources/NPandayITVBWebAppTest/Web.config b/src/test/resources/NPandayITVBWebAppTest/Web.config
new file mode 100644
index 0000000..8fe47b1
--- /dev/null
+++ b/src/test/resources/NPandayITVBWebAppTest/Web.config
@@ -0,0 +1,154 @@
+<?xml version="1.0"?>
+
+<configuration>
+  
+
+    <configSections>
+      <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
+        <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
+          <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
+          <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
+            <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
+            <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
+            <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
+            <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
+          </sectionGroup>
+        </sectionGroup>
+      </sectionGroup>
+    </configSections>  
+
+
+    <appSettings/>
+    <connectionStrings/>
+  
+    <system.web>
+        <!-- 
+            Set compilation debug="true" to insert debugging 
+            symbols into the compiled page. Because this 
+            affects performance, set this value to true only 
+            during development.
+
+            Visual Basic options:
+            Set strict="true" to disallow all data type conversions 
+            where data loss can occur. 
+            Set explicit="true" to force declaration of all variables.
+        -->
+        <compilation debug="false" strict="false" explicit="true">
+
+          <assemblies>
+            <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
+            <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
+            <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+            <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
+          </assemblies>
+
+        </compilation>
+        <pages>
+          <namespaces>
+            <clear />
+            <add namespace="System" />
+            <add namespace="System.Collections" />
+            <add namespace="System.Collections.Generic" />
+            <add namespace="System.Collections.Specialized" />
+            <add namespace="System.Configuration" />
+            <add namespace="System.Text" />
+            <add namespace="System.Text.RegularExpressions" />
+            <add namespace="System.Linq" />
+            <add namespace="System.Xml.Linq" />
+            <add namespace="System.Web" />
+            <add namespace="System.Web.Caching" />
+            <add namespace="System.Web.SessionState" />
+            <add namespace="System.Web.Security" />
+            <add namespace="System.Web.Profile" />
+            <add namespace="System.Web.UI" />
+            <add namespace="System.Web.UI.WebControls" />
+            <add namespace="System.Web.UI.WebControls.WebParts" />
+            <add namespace="System.Web.UI.HtmlControls" />
+          </namespaces>
+
+          <controls>
+            <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+            <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+          </controls>
+
+        </pages>
+        <!--
+            The <authentication> section enables configuration 
+            of the security authentication mode used by 
+            ASP.NET to identify an incoming user. 
+        -->
+        <authentication mode="Windows" />
+        <!--
+            The <customErrors> section enables configuration 
+            of what to do if/when an unhandled error occurs 
+            during the execution of a request. Specifically, 
+            it enables developers to configure html error pages 
+            to be displayed in place of a error stack trace.
+
+        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
+            <error statusCode="403" redirect="NoAccess.htm" />
+            <error statusCode="404" redirect="FileNotFound.htm" />
+        </customErrors>
+        -->
+
+      <httpHandlers>
+        <remove verb="*" path="*.asmx"/>
+        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
+      </httpHandlers>
+      <httpModules>
+        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+      </httpModules>
+
+
+    </system.web>
+
+    <system.codedom>
+      <compilers>
+        <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4"
+                  type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <providerOption name="CompilerVersion" value="v3.5"/>
+          <providerOption name="OptionInfer" value="true"/>
+          <providerOption name="WarnAsError" value="false"/>
+        </compiler>
+      </compilers>
+    </system.codedom>
+
+    <!-- 
+        The system.webServer section is required for running ASP.NET AJAX under Internet
+        Information Services 7.0.  It is not necessary for previous version of IIS.
+    -->
+    <system.webServer>
+      <validation validateIntegratedModeConfiguration="false"/>
+      <modules>
+        <remove name="ScriptModule" />
+        <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+      </modules>
+      <handlers>
+        <remove name="WebServiceHandlerFactory-Integrated"/>
+        <remove name="ScriptHandlerFactory" />
+        <remove name="ScriptHandlerFactoryAppServices" />
+        <remove name="ScriptResource" />
+        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
+             type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+        <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
+             type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+        <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
+      </handlers>
+    </system.webServer>
+
+    <runtime>
+      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+        <dependentAssembly>
+          <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
+          <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
+        </dependentAssembly>
+        <dependentAssembly>
+          <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
+          <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
+        </dependentAssembly>
+      </assemblyBinding>
+    </runtime>
+
+</configuration>
diff --git a/src/test/resources/NPandayITVBWebAppTest/pom.xml b/src/test/resources/NPandayITVBWebAppTest/pom.xml
new file mode 100644
index 0000000..6bfad22
--- /dev/null
+++ b/src/test/resources/NPandayITVBWebAppTest/pom.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://maven.apache.org/POM/4.0.0">
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>VBWebAppTest</artifactId>
+  <packaging>asp</packaging>
+  <name>G2ix.VBWebAppTest : VBWebAppTest</name>
+  <build>
+    <sourceDirectory>.</sourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <version>${npanday.version}</version>
+		<extensions>true</extensions>
+        <configuration>
+          <frameworkVersion>3.0</frameworkVersion>
+          <language>VB</language>
+          <rootNamespace>VBWebAppTest</rootNamespace>
+          <define>_MyType="Custom",PLATFORM="AnyCPU"</define>
+          <doc>VBWebAppTest.xml</doc>
+          <imports>
+            <import>Microsoft.VisualBasic</import>
+            <import>System</import>
+            <import>System.Collections</import>
+            <import>System.Collections.Generic</import>
+            <import>System.Data</import>
+            <import>System.Linq</import>
+            <import>System.Xml.Linq</import>
+            <import>System.Diagnostics</import>
+            <import>System.Collections.Specialized</import>
+            <import>System.Configuration</import>
+            <import>System.Text</import>
+            <import>System.Text.RegularExpressions</import>
+            <import>System.Web</import>
+            <import>System.Web.Caching</import>
+            <import>System.Web.SessionState</import>
+            <import>System.Web.Security</import>
+            <import>System.Web.Profile</import>
+            <import>System.Web.UI</import>
+            <import>System.Web.UI.WebControls</import>
+            <import>System.Web.UI.WebControls.WebParts</import>
+            <import>System.Web.UI.HtmlControls</import>
+          </imports>
+          <includeSources>
+            <includeSource>Default.aspx.vb</includeSource>
+            <includeSource>Default.aspx.designer.vb</includeSource>
+            <includeSource>My Project\AssemblyInfo.vb</includeSource>
+            <includeSource>My Project\Application.Designer.vb</includeSource>
+            <includeSource>My Project\MyExtensions\MyWebExtension.vb</includeSource>
+            <includeSource>My Project\Resources.Designer.vb</includeSource>
+            <includeSource>My Project\Settings.Designer.vb</includeSource>
+          </includeSources>
+          <outputDirectory>bin</outputDirectory>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-resgen-plugin</artifactId>
+        <extensions>true</extensions>
+        <configuration>
+          <embeddedResources>
+            <embeddedResource>
+              <sourceFile>My Project\Resources.resx</sourceFile>
+              <name>VBWebAppTest.Resources</name>
+            </embeddedResource>
+          </embeddedResources>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
\ No newline at end of file
diff --git a/src/test/resources/Net35Project/ClassLibrary1/Class1.cs b/src/test/resources/Net35Project/ClassLibrary1/Class1.cs
new file mode 100755
index 0000000..4d41fc7
--- /dev/null
+++ b/src/test/resources/Net35Project/ClassLibrary1/Class1.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace ClassLibrary1
+{
+    public class Class1
+    {
+    }
+}
diff --git a/src/test/resources/Net35Project/ClassLibrary1/Properties/AssemblyInfo.cs b/src/test/resources/Net35Project/ClassLibrary1/Properties/AssemblyInfo.cs
new file mode 100755
index 0000000..ff05646
--- /dev/null
+++ b/src/test/resources/Net35Project/ClassLibrary1/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ClassLibrary1")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ClassLibrary1")]
+[assembly: AssemblyCopyright("Copyright ©  2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("b5d4983f-deea-4ce1-9839-6ff46b9f2eee")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/test/resources/Net35Project/ClassLibrary1/pom.xml b/src/test/resources/Net35Project/ClassLibrary1/pom.xml
new file mode 100644
index 0000000..ba91866
--- /dev/null
+++ b/src/test/resources/Net35Project/ClassLibrary1/pom.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://maven.apache.org/POM/4.0.0">

+  <parent>

+    <artifactId>Net35Project-parent</artifactId>

+    <groupId>NPanday.ITs.Net35Project</groupId>

+    <version>1.0-SNAPSHOT</version>

+    <relativePath>..\pom.xml</relativePath>

+  </parent>

+  <modelVersion>4.0.0</modelVersion>

+  <artifactId>ClassLibrary1</artifactId>

+  <packaging>library</packaging>

+  <name>NPanday.ITs.Net35Project : ClassLibrary1</name>

+  <build>

+    <sourceDirectory>./</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <extensions>true</extensions>

+        <configuration>

+          <frameworkVersion>3.5</frameworkVersion>

+          <includeSources>

+            <includeSource>Class1.cs</includeSource>

+            <includeSource>Properties\AssemblyInfo.cs</includeSource>

+          </includeSources>

+        </configuration>

+      </plugin>

+    </plugins>

+  </build>

+</project>
\ No newline at end of file
diff --git a/src/test/resources/Net35Project/pom.xml b/src/test/resources/Net35Project/pom.xml
new file mode 100644
index 0000000..c024410
--- /dev/null
+++ b/src/test/resources/Net35Project/pom.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

+         xmlns="http://maven.apache.org/POM/4.0.0">

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <groupId>NPanday.ITs.Net35Project</groupId>

+  <artifactId>Net35Project-parent</artifactId>

+  <packaging>pom</packaging>

+  <name>NPanday.ITs.Net35Project : Net35Project-parent</name>

+  <version>1.0-SNAPSHOT</version>

+  <modules>

+    <module>ClassLibrary1</module>

+  </modules>

+</project>
\ No newline at end of file
diff --git a/src/test/resources/WebAppExample/Default.aspx b/src/test/resources/WebAppExample/Default.aspx
new file mode 100644
index 0000000..1018053
--- /dev/null
+++ b/src/test/resources/WebAppExample/Default.aspx
@@ -0,0 +1,19 @@
+<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebAppExample._Default" %>

+

+<!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 runat="server">

+    <title></title>

+</head>

+<body>

+    <form id="form1" runat="server">

+    <div>

+        <asp:Label ID="Label1" runat="server" Text="Hello World!"></asp:Label>

+        <br />

+        <br />

+        <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>    

+    </div>

+     </form>

+</body>

+</html>

diff --git a/src/test/resources/WebAppExample/Default.aspx.cs b/src/test/resources/WebAppExample/Default.aspx.cs
new file mode 100755
index 0000000..3dcb112
--- /dev/null
+++ b/src/test/resources/WebAppExample/Default.aspx.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Web;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+
+namespace WebAppExample
+{
+    public partial class _Default : System.Web.UI.Page
+    {
+        protected void Page_Load(object sender, EventArgs e)
+        {
+
+        }
+    }
+}
diff --git a/src/test/resources/WebAppExample/Default.aspx.designer.cs b/src/test/resources/WebAppExample/Default.aspx.designer.cs
new file mode 100755
index 0000000..89d3a3a
--- /dev/null
+++ b/src/test/resources/WebAppExample/Default.aspx.designer.cs
@@ -0,0 +1,43 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3603
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace WebAppExample {
+    
+    
+    public partial class _Default {
+        
+        /// <summary>
+        /// form1 control.
+        /// </summary>
+        /// <remarks>
+        /// Auto-generated field.
+        /// To modify move field declaration from designer file to code-behind file.
+        /// </remarks>
+        protected global::System.Web.UI.HtmlControls.HtmlForm form1;
+        
+        /// <summary>
+        /// Label1 control.
+        /// </summary>
+        /// <remarks>
+        /// Auto-generated field.
+        /// To modify move field declaration from designer file to code-behind file.
+        /// </remarks>
+        protected global::System.Web.UI.WebControls.Label Label1;
+        
+        /// <summary>
+        /// Calendar1 control.
+        /// </summary>
+        /// <remarks>
+        /// Auto-generated field.
+        /// To modify move field declaration from designer file to code-behind file.
+        /// </remarks>
+        protected global::System.Web.UI.WebControls.Calendar Calendar1;
+    }
+}
diff --git a/src/test/resources/WebAppExample/Web.config b/src/test/resources/WebAppExample/Web.config
new file mode 100644
index 0000000..2537a86
--- /dev/null
+++ b/src/test/resources/WebAppExample/Web.config
@@ -0,0 +1,125 @@
+<?xml version="1.0"?>

+

+<configuration>

+

+

+    <configSections>

+      <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

+        <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

+          <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>

+          <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

+            <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />

+            <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />

+            <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />

+            <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />

+          </sectionGroup>

+        </sectionGroup>

+      </sectionGroup>

+    </configSections>  

+

+  

+    <appSettings/>

+    <connectionStrings/>

+  

+    <system.web>

+        <!-- 

+            Set compilation debug="true" to insert debugging 

+            symbols into the compiled page. Because this 

+            affects performance, set this value to true only 

+            during development.

+        -->

+        <compilation debug="true">

+

+          <assemblies>

+            <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

+            <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

+            <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+            <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

+          </assemblies>

+

+        </compilation>

+        <!--

+            The <authentication> section enables configuration 

+            of the security authentication mode used by 

+            ASP.NET to identify an incoming user. 

+        -->

+        <authentication mode="Windows" />

+        <!--

+            The <customErrors> section enables configuration 

+            of what to do if/when an unhandled error occurs 

+            during the execution of a request. Specifically, 

+            it enables developers to configure html error pages 

+            to be displayed in place of a error stack trace.

+

+        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">

+            <error statusCode="403" redirect="NoAccess.htm" />

+            <error statusCode="404" redirect="FileNotFound.htm" />

+        </customErrors>

+        -->

+

+      <pages>

+        <controls>

+          <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+          <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+        </controls>

+      </pages>

+

+      <httpHandlers>

+        <remove verb="*" path="*.asmx"/>

+        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>

+      </httpHandlers>

+      <httpModules>

+        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+      </httpModules>

+

+    </system.web>

+

+    <system.codedom>

+      <compilers>

+        <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"

+                  type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

+          <providerOption name="CompilerVersion" value="v3.5"/>

+          <providerOption name="WarnAsError" value="false"/>

+        </compiler>

+     </compilers>

+    </system.codedom>

+    

+    <!-- 

+        The system.webServer section is required for running ASP.NET AJAX under Internet

+        Information Services 7.0.  It is not necessary for previous version of IIS.

+    -->

+    <system.webServer>

+      <validation validateIntegratedModeConfiguration="false"/>

+      <modules>

+        <remove name="ScriptModule" />

+        <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+      </modules>

+      <handlers>

+        <remove name="WebServiceHandlerFactory-Integrated"/>

+        <remove name="ScriptHandlerFactory" />

+        <remove name="ScriptHandlerFactoryAppServices" />

+        <remove name="ScriptResource" />

+        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"

+             type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+        <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"

+             type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

+        <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

+      </handlers>

+    </system.webServer>

+

+    <runtime>

+      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

+        <dependentAssembly>

+          <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>

+          <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>

+        </dependentAssembly>

+        <dependentAssembly>

+          <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>

+          <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>

+        </dependentAssembly>

+      </assemblyBinding>

+    </runtime>

+

+</configuration>

diff --git a/src/test/resources/WebAppExample/pom.xml b/src/test/resources/WebAppExample/pom.xml
new file mode 100644
index 0000000..7d88756
--- /dev/null
+++ b/src/test/resources/WebAppExample/pom.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

+         xmlns="http://maven.apache.org/POM/4.0.0">

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <modelVersion>4.0.0</modelVersion>

+  <artifactId>WebAppExample</artifactId>

+  <packaging>asp</packaging>

+  <name>NPanday.IT : WebAppExample</name>

+  <build>

+    <sourceDirectory>.</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <version>${npanday.version}</version>

+        <extensions>true</extensions>

+        <configuration>

+          <frameworkVersion>2.0.50727</frameworkVersion>

+          <includeSources>

+            <includeSource>Default.aspx.cs</includeSource>

+            <includeSource>Default.aspx.designer.cs</includeSource>

+            <includeSource>Properties\AssemblyInfo.cs</includeSource>

+          </includeSources>

+          <outputDirectory>bin</outputDirectory>

+        </configuration>

+      </plugin>

+    </plugins>

+  </build>

+</project>

diff --git a/src/test/resources/WithResourceFile/ClassLibrary1/Class1.cs b/src/test/resources/WithResourceFile/ClassLibrary1/Class1.cs
new file mode 100755
index 0000000..160180d
--- /dev/null
+++ b/src/test/resources/WithResourceFile/ClassLibrary1/Class1.cs
@@ -0,0 +1,18 @@
+using System.Reflection;
+using System.Resources;
+using NUnit.Framework;
+
+namespace ClassLibrary1
+{
+    [TestFixture]
+    public class Class1
+    {
+        [Test]
+        public void test()
+        {
+            ResourceManager resman = new ResourceManager( "ClassLibrary1.Resource1", Assembly.GetExecutingAssembly() );
+            Assert.AreEqual("Value1", resman.GetString( "Key1" ) );
+            Assert.AreEqual("Value2", resman.GetString( "Key2" ) );
+        }
+    }
+}
diff --git a/src/test/resources/WithResourceFile/ClassLibrary1/Properties/AssemblyInfo.cs b/src/test/resources/WithResourceFile/ClassLibrary1/Properties/AssemblyInfo.cs
new file mode 100755
index 0000000..370a41a
--- /dev/null
+++ b/src/test/resources/WithResourceFile/ClassLibrary1/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ClassLibrary1")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Exist Global")]
+[assembly: AssemblyProduct("ClassLibrary1")]
+[assembly: AssemblyCopyright("Copyright © Exist Global 2009")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("681fe482-14fa-49b4-b8b9-af7a32407cac")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/test/resources/WithResourceFile/ClassLibrary1/Resource1.Designer.cs b/src/test/resources/WithResourceFile/ClassLibrary1/Resource1.Designer.cs
new file mode 100755
index 0000000..52401f8
--- /dev/null
+++ b/src/test/resources/WithResourceFile/ClassLibrary1/Resource1.Designer.cs
@@ -0,0 +1,81 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3603
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ClassLibrary1 {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resource1 {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resource1() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ClassLibrary1.Resource1", typeof(Resource1).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Value1.
+        /// </summary>
+        internal static string Key1 {
+            get {
+                return ResourceManager.GetString("Key1", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Value2.
+        /// </summary>
+        internal static string Key2 {
+            get {
+                return ResourceManager.GetString("Key2", resourceCulture);
+            }
+        }
+    }
+}
diff --git a/src/test/resources/WithResourceFile/ClassLibrary1/Resource1.resx b/src/test/resources/WithResourceFile/ClassLibrary1/Resource1.resx
new file mode 100644
index 0000000..e3f1dbb
--- /dev/null
+++ b/src/test/resources/WithResourceFile/ClassLibrary1/Resource1.resx
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>

+<root>

+  <!-- 

+    Microsoft ResX Schema 

+    

+    Version 2.0

+    

+    The primary goals of this format is to allow a simple XML format 

+    that is mostly human readable. The generation and parsing of the 

+    various data types are done through the TypeConverter classes 

+    associated with the data types.

+    

+    Example:

+    

+    ... ado.net/XML headers & schema ...

+    <resheader name="resmimetype">text/microsoft-resx</resheader>

+    <resheader name="version">2.0</resheader>

+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>

+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>

+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>

+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>

+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">

+        <value>[base64 mime encoded serialized .NET Framework object]</value>

+    </data>

+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">

+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>

+        <comment>This is a comment</comment>

+    </data>

+                

+    There are any number of "resheader" rows that contain simple 

+    name/value pairs.

+    

+    Each data row contains a name, and value. The row also contains a 

+    type or mimetype. Type corresponds to a .NET class that support 

+    text/value conversion through the TypeConverter architecture. 

+    Classes that don't support this are serialized and stored with the 

+    mimetype set.

+    

+    The mimetype is used for serialized objects, and tells the 

+    ResXResourceReader how to depersist the object. This is currently not 

+    extensible. For a given mimetype the value must be set accordingly:

+    

+    Note - application/x-microsoft.net.object.binary.base64 is the format 

+    that the ResXResourceWriter will generate, however the reader can 

+    read any of the formats listed below.

+    

+    mimetype: application/x-microsoft.net.object.binary.base64

+    value   : The object must be serialized with 

+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter

+            : and then encoded with base64 encoding.

+    

+    mimetype: application/x-microsoft.net.object.soap.base64

+    value   : The object must be serialized with 

+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter

+            : and then encoded with base64 encoding.

+

+    mimetype: application/x-microsoft.net.object.bytearray.base64

+    value   : The object must be serialized into a byte array 

+            : using a System.ComponentModel.TypeConverter

+            : and then encoded with base64 encoding.

+    -->

+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />

+    <xsd:element name="root" msdata:IsDataSet="true">

+      <xsd:complexType>

+        <xsd:choice maxOccurs="unbounded">

+          <xsd:element name="metadata">

+            <xsd:complexType>

+              <xsd:sequence>

+                <xsd:element name="value" type="xsd:string" minOccurs="0" />

+              </xsd:sequence>

+              <xsd:attribute name="name" use="required" type="xsd:string" />

+              <xsd:attribute name="type" type="xsd:string" />

+              <xsd:attribute name="mimetype" type="xsd:string" />

+              <xsd:attribute ref="xml:space" />

+            </xsd:complexType>

+          </xsd:element>

+          <xsd:element name="assembly">

+            <xsd:complexType>

+              <xsd:attribute name="alias" type="xsd:string" />

+              <xsd:attribute name="name" type="xsd:string" />

+            </xsd:complexType>

+          </xsd:element>

+          <xsd:element name="data">

+            <xsd:complexType>

+              <xsd:sequence>

+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />

+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />

+              </xsd:sequence>

+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />

+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />

+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />

+              <xsd:attribute ref="xml:space" />

+            </xsd:complexType>

+          </xsd:element>

+          <xsd:element name="resheader">

+            <xsd:complexType>

+              <xsd:sequence>

+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />

+              </xsd:sequence>

+              <xsd:attribute name="name" type="xsd:string" use="required" />

+            </xsd:complexType>

+          </xsd:element>

+        </xsd:choice>

+      </xsd:complexType>

+    </xsd:element>

+  </xsd:schema>

+  <resheader name="resmimetype">

+    <value>text/microsoft-resx</value>

+  </resheader>

+  <resheader name="version">

+    <value>2.0</value>

+  </resheader>

+  <resheader name="reader">

+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

+  </resheader>

+  <resheader name="writer">

+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

+  </resheader>

+  <data name="Key1" xml:space="preserve">

+    <value>Value1</value>

+  </data>

+  <data name="Key2" xml:space="preserve">

+    <value>Value2</value>

+  </data>

+</root>
\ No newline at end of file
diff --git a/src/test/resources/WithResourceFile/ClassLibrary1/pom.xml b/src/test/resources/WithResourceFile/ClassLibrary1/pom.xml
new file mode 100644
index 0000000..cf3205c
--- /dev/null
+++ b/src/test/resources/WithResourceFile/ClassLibrary1/pom.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://maven.apache.org/POM/4.0.0">

+  <parent>

+    <artifactId>WithResourceFile-parent</artifactId>

+    <groupId>NPanday.IT</groupId>

+    <version>1.0-SNAPSHOT</version>

+    <relativePath>..\pom.xml</relativePath>

+  </parent>

+  <modelVersion>4.0.0</modelVersion>

+  <artifactId>ClassLibrary1</artifactId>

+  <packaging>library</packaging>

+  <name>NPanday.IT : ClassLibrary1</name>

+  <build>

+    <sourceDirectory>./</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <version>${npanday.version}</version>

+        <extensions>true</extensions>

+        <configuration>

+          <includeSources>

+            <includeSource>Class1.cs</includeSource>

+            <includeSource>Properties\AssemblyInfo.cs</includeSource>

+            <includeSource>Resource1.Designer.cs</includeSource>

+          </includeSources>

+        </configuration>

+      </plugin>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-test-plugin</artifactId>

+        <version>${npanday.version}</version>

+        <extensions>true</extensions>

+        <configuration>

+          <integrationTest>true</integrationTest>

+        </configuration>

+      </plugin>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-resgen-plugin</artifactId>

+        <version>${npanday.version}</version>

+        <extensions>true</extensions>

+        <configuration>

+          <embeddedResources>

+            <embeddedResource>

+              <sourceFile>Resource1.resx</sourceFile>

+              <name>ClassLibrary1.Resource1</name>

+            </embeddedResource>

+          </embeddedResources>

+        </configuration>

+      </plugin>

+    </plugins>

+  </build>

+  <dependencies>

+    <dependency>

+      <groupId>NUnit</groupId>

+      <artifactId>NUnit.Framework</artifactId>

+      <version>2.2.8.0</version>

+      <type>library</type>

+    </dependency>

+  </dependencies>

+</project>

diff --git a/src/test/resources/WithResourceFile/pom.xml b/src/test/resources/WithResourceFile/pom.xml
new file mode 100644
index 0000000..f5ffa19
--- /dev/null
+++ b/src/test/resources/WithResourceFile/pom.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

+         xmlns="http://maven.apache.org/POM/4.0.0">

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <groupId>NPanday.IT</groupId>

+  <artifactId>WithResourceFile-parent</artifactId>

+  <packaging>pom</packaging>

+  <name>NPanday.IT : WithResourceFile-parent</name>

+  <version>1.0-SNAPSHOT</version>

+  <modules>

+    <module>ClassLibrary1</module>

+  </modules>

+</project>
\ No newline at end of file
diff --git a/src/test/resources/bootstrap/pom.xml b/src/test/resources/bootstrap/pom.xml
new file mode 100644
index 0000000..15b3d32
--- /dev/null
+++ b/src/test/resources/bootstrap/pom.xml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  ~ Copyright 2010

+  ~

+  ~ 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.

+  --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

+  <modelVersion>4.0.0</modelVersion>

+  <groupId>NPanday.ITs</groupId>

+  <artifactId>NPanday.ITs.Parent</artifactId>

+  <version>1-SNAPSHOT</version>

+  <packaging>pom</packaging>

+  <build>

+    <plugins>

+      <!-- all projects need the extensions loaded -->

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <extensions>true</extensions>

+      </plugin>

+    </plugins>

+    <pluginManagement>

+      <plugins>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>NPanday.Plugin.Addin.JavaBinding</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>NPanday.Plugin.Devenv.JavaBinding</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>NPanday.Plugin.Settings.JavaBinding</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>NPanday.Plugin.SysRef.JavaBinding</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>NPanday.Plugin.Msbuild.JavaBinding</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>maven-compile-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>maven-aspx-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>maven-fxcop-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>maven-install-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>maven-link-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>maven-mojo-generator-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>maven-resgen-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>maven-repository-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>maven-resolver-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>maven-test-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>maven-vsinstaller-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>maven-webapp-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>maven-xsd-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>maven-xsp-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>maven-wsdl-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+        <plugin>

+          <groupId>npanday.plugin</groupId>

+          <artifactId>wix-maven-plugin</artifactId>

+          <version>${npanday.version}</version>

+        </plugin>

+      </plugins>

+    </pluginManagement>

+  </build>

+</project>

diff --git a/src/test/resources/npanday-9903/npanday-9903.sln b/src/test/resources/npanday-9903/npanday-9903.sln
new file mode 100644
index 0000000..faafddb
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903.sln
@@ -0,0 +1,24 @@
+

+Microsoft Visual Studio Solution File, Format Version 9.00

+# Visual Studio 2005

+Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "npanday-9903", "npanday-9903\npanday-9903.vbproj", "{62ED77C3-2DA6-4078-ADC7-D2C11017ACE4}"

+	ProjectSection(WebsiteProperties) = preProject

+		Debug.AspNetCompiler.Debug = "True"

+		Release.AspNetCompiler.Debug = "False"

+	EndProjectSection

+EndProject

+Global

+	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+		Debug|Any CPU = Debug|Any CPU

+		Release|Any CPU = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(ProjectConfigurationPlatforms) = postSolution

+		{62ED77C3-2DA6-4078-ADC7-D2C11017ACE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{62ED77C3-2DA6-4078-ADC7-D2C11017ACE4}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{62ED77C3-2DA6-4078-ADC7-D2C11017ACE4}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{62ED77C3-2DA6-4078-ADC7-D2C11017ACE4}.Release|Any CPU.Build.0 = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(SolutionProperties) = preSolution

+		HideSolutionNode = FALSE

+	EndGlobalSection

+EndGlobal

diff --git a/src/test/resources/npanday-9903/npanday-9903/Default.aspx b/src/test/resources/npanday-9903/npanday-9903/Default.aspx
new file mode 100644
index 0000000..55eda69
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/Default.aspx
@@ -0,0 +1,16 @@
+<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="npanday_9903._Default" %>

+

+<!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 runat="server">

+    <title>Untitled Page</title>

+</head>

+<body>

+    <form id="form1" runat="server">

+    <div>

+    

+    </div>

+    </form>

+</body>

+</html>

diff --git a/src/test/resources/npanday-9903/npanday-9903/Default.aspx.designer.vb b/src/test/resources/npanday-9903/npanday-9903/Default.aspx.designer.vb
new file mode 100644
index 0000000..f439015
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/Default.aspx.designer.vb
@@ -0,0 +1,17 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:2.0.50727.42
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict Off
+Option Explicit On
+
+
+Partial Public Class _Default
+    Protected WithEvents form1 As System.Web.UI.HtmlControls.HtmlForm
+End Class
diff --git a/src/test/resources/npanday-9903/npanday-9903/Default.aspx.vb b/src/test/resources/npanday-9903/npanday-9903/Default.aspx.vb
new file mode 100644
index 0000000..9852af2
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/Default.aspx.vb
@@ -0,0 +1,8 @@
+Partial Public Class _Default
+    Inherits System.Web.UI.Page
+
+    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
+
+    End Sub
+
+End Class
\ No newline at end of file
diff --git a/src/test/resources/npanday-9903/npanday-9903/My Project/Application.Designer.vb b/src/test/resources/npanday-9903/npanday-9903/My Project/Application.Designer.vb
new file mode 100644
index 0000000..8a621ae
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/My Project/Application.Designer.vb
@@ -0,0 +1,13 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:2.0.50727.42
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
diff --git a/src/test/resources/npanday-9903/npanday-9903/My Project/Application.myapp b/src/test/resources/npanday-9903/npanday-9903/My Project/Application.myapp
new file mode 100644
index 0000000..0167050
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/My Project/Application.myapp
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>

+<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

+  <MySubMain>false</MySubMain>

+  <SingleInstance>false</SingleInstance>

+  <ShutdownMode>0</ShutdownMode>

+  <EnableVisualStyles>true</EnableVisualStyles>

+  <AuthenticationMode>0</AuthenticationMode>

+  <ApplicationType>1</ApplicationType>

+  <SaveMySettingsOnExit>true</SaveMySettingsOnExit>

+</MyApplicationData>

diff --git a/src/test/resources/npanday-9903/npanday-9903/My Project/AssemblyInfo.vb b/src/test/resources/npanday-9903/npanday-9903/My Project/AssemblyInfo.vb
new file mode 100644
index 0000000..1144fb5
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/My Project/AssemblyInfo.vb
@@ -0,0 +1,34 @@
+Imports System
+Imports System.Reflection
+Imports System.Runtime.InteropServices
+
+' General Information about an assembly is controlled through the following 
+' set of attributes. Change these attribute values to modify the information
+' associated with an assembly.
+
+' Review the values of the assembly attributes
+<Assembly: AssemblyTitle("npanday_9903")> 
+<Assembly: AssemblyDescription("")> 
+<Assembly: AssemblyCompany("")> 
+<Assembly: AssemblyProduct("npanday_9903")> 
+<Assembly: AssemblyCopyright("Copyright ©  2009")> 
+<Assembly: AssemblyTrademark("")> 
+
+<Assembly: ComVisible(False)>
+
+'The following GUID is for the ID of the typelib if this project is exposed to COM
+<Assembly: Guid("334e9cee-0d47-4d70-924b-b5098a3432cb")> 
+
+' Version information for an assembly consists of the following four values:
+'
+'      Major Version
+'      Minor Version 
+'      Build Number
+'      Revision
+'
+' You can specify all the values or you can default the Build and Revision Numbers 
+' by using the '*' as shown below:
+' <Assembly: AssemblyVersion("1.0.*")> 
+
+<Assembly: AssemblyVersion("1.0.0.0")> 
+<Assembly: AssemblyFileVersion("1.0.0.0")> 
diff --git a/src/test/resources/npanday-9903/npanday-9903/My Project/Resources.Designer.vb b/src/test/resources/npanday-9903/npanday-9903/My Project/Resources.Designer.vb
new file mode 100644
index 0000000..4a8125d
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/My Project/Resources.Designer.vb
@@ -0,0 +1,62 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:2.0.50727.42
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My.Resources
+    
+    'This class was auto-generated by the StronglyTypedResourceBuilder
+    'class via a tool like ResGen or Visual Studio.
+    'To add or remove a member, edit your .ResX file then rerun ResGen
+    'with the /str option, or rebuild your VS project.
+    '<summary>
+    '  A strongly-typed resource class, for looking up localized strings, etc.
+    '</summary>
+    <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0"),  _
+     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
+     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(),  _
+     Global.Microsoft.VisualBasic.HideModuleNameAttribute()>  _
+    Friend Module Resources
+        
+        Private resourceMan As Global.System.Resources.ResourceManager
+        
+        Private resourceCulture As Global.System.Globalization.CultureInfo
+        
+        '<summary>
+        '  Returns the cached ResourceManager instance used by this class.
+        '</summary>
+        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _
+        Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
+            Get
+                If Object.ReferenceEquals(resourceMan, Nothing) Then
+                    Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("npanday_9903.Resources", GetType(Resources).Assembly)
+                    resourceMan = temp
+                End If
+                Return resourceMan
+            End Get
+        End Property
+        
+        '<summary>
+        '  Overrides the current thread's CurrentUICulture property for all
+        '  resource lookups using this strongly typed resource class.
+        '</summary>
+        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _
+        Friend Property Culture() As Global.System.Globalization.CultureInfo
+            Get
+                Return resourceCulture
+            End Get
+            Set(ByVal value As Global.System.Globalization.CultureInfo)
+                resourceCulture = value
+            End Set
+        End Property
+    End Module
+End Namespace
diff --git a/src/test/resources/npanday-9903/npanday-9903/My Project/Resources.resx b/src/test/resources/npanday-9903/npanday-9903/My Project/Resources.resx
new file mode 100644
index 0000000..ffecec8
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/My Project/Resources.resx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>

+<root>

+  <!-- 

+    Microsoft ResX Schema 

+    

+    Version 2.0

+    

+    The primary goals of this format is to allow a simple XML format 

+    that is mostly human readable. The generation and parsing of the 

+    various data types are done through the TypeConverter classes 

+    associated with the data types.

+    

+    Example:

+    

+    ... ado.net/XML headers & schema ...

+    <resheader name="resmimetype">text/microsoft-resx</resheader>

+    <resheader name="version">2.0</resheader>

+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>

+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>

+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>

+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>

+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">

+        <value>[base64 mime encoded serialized .NET Framework object]</value>

+    </data>

+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">

+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>

+        <comment>This is a comment</comment>

+    </data>

+                

+    There are any number of "resheader" rows that contain simple 

+    name/value pairs.

+    

+    Each data row contains a name, and value. The row also contains a 

+    type or mimetype. Type corresponds to a .NET class that support 

+    text/value conversion through the TypeConverter architecture. 

+    Classes that don't support this are serialized and stored with the 

+    mimetype set.

+    

+    The mimetype is used for serialized objects, and tells the 

+    ResXResourceReader how to depersist the object. This is currently not 

+    extensible. For a given mimetype the value must be set accordingly:

+    

+    Note - application/x-microsoft.net.object.binary.base64 is the format 

+    that the ResXResourceWriter will generate, however the reader can 

+    read any of the formats listed below.

+    

+    mimetype: application/x-microsoft.net.object.binary.base64

+    value   : The object must be serialized with 

+            : System.Serialization.Formatters.Binary.BinaryFormatter

+            : and then encoded with base64 encoding.

+    

+    mimetype: application/x-microsoft.net.object.soap.base64

+    value   : The object must be serialized with 

+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter

+            : and then encoded with base64 encoding.

+

+    mimetype: application/x-microsoft.net.object.bytearray.base64

+    value   : The object must be serialized into a byte array 

+            : using a System.ComponentModel.TypeConverter

+            : and then encoded with base64 encoding.

+    -->

+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

+    <xsd:element name="root" msdata:IsDataSet="true">

+      <xsd:complexType>

+        <xsd:choice maxOccurs="unbounded">

+          <xsd:element name="metadata">

+            <xsd:complexType>

+              <xsd:sequence>

+                <xsd:element name="value" type="xsd:string" minOccurs="0" />

+              </xsd:sequence>

+              <xsd:attribute name="name" type="xsd:string" />

+              <xsd:attribute name="type" type="xsd:string" />

+              <xsd:attribute name="mimetype" type="xsd:string" />

+            </xsd:complexType>

+          </xsd:element>

+          <xsd:element name="assembly">

+            <xsd:complexType>

+              <xsd:attribute name="alias" type="xsd:string" />

+              <xsd:attribute name="name" type="xsd:string" />

+            </xsd:complexType>

+          </xsd:element>

+          <xsd:element name="data">

+            <xsd:complexType>

+              <xsd:sequence>

+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />

+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />

+              </xsd:sequence>

+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />

+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />

+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />

+            </xsd:complexType>

+          </xsd:element>

+          <xsd:element name="resheader">

+            <xsd:complexType>

+              <xsd:sequence>

+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />

+              </xsd:sequence>

+              <xsd:attribute name="name" type="xsd:string" use="required" />

+            </xsd:complexType>

+          </xsd:element>

+        </xsd:choice>

+      </xsd:complexType>

+    </xsd:element>

+  </xsd:schema>

+  <resheader name="resmimetype">

+    <value>text/microsoft-resx</value>

+  </resheader>

+  <resheader name="version">

+    <value>2.0</value>

+  </resheader>

+  <resheader name="reader">

+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

+  </resheader>

+  <resheader name="writer">

+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

+  </resheader>

+</root>
\ No newline at end of file
diff --git a/src/test/resources/npanday-9903/npanday-9903/My Project/Settings.Designer.vb b/src/test/resources/npanday-9903/npanday-9903/My Project/Settings.Designer.vb
new file mode 100644
index 0000000..56b0d2e
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/My Project/Settings.Designer.vb
@@ -0,0 +1,73 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:2.0.50727.42
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My
+
+    <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(),  _
+     Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0"),  _
+     Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _
+    Partial Friend NotInheritable Class MySettings
+        Inherits Global.System.Configuration.ApplicationSettingsBase
+        
+        Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings)
+        
+#Region "My.Settings Auto-Save Functionality"
+#If _MyType = "WindowsForms" Then
+        Private Shared addedHandler As Boolean
+
+        Private Shared addedHandlerLockObject As New Object
+
+        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
+        Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
+            If My.Application.SaveMySettingsOnExit Then
+                My.Settings.Save()
+            End If
+        End Sub
+#End If
+#End Region
+        
+        Public Shared ReadOnly Property [Default]() As MySettings
+            Get
+                
+#If _MyType = "WindowsForms" Then
+                   If Not addedHandler Then
+                        SyncLock addedHandlerLockObject
+                            If Not addedHandler Then
+                                AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
+                                addedHandler = True
+                            End If
+                        End SyncLock
+                    End If
+#End If
+                Return defaultInstance
+            End Get
+        End Property
+    End Class
+End Namespace
+
+Namespace My
+    
+    <Global.Microsoft.VisualBasic.HideModuleNameAttribute(),  _
+     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
+     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()>  _
+    Friend Module MySettingsProperty
+        
+        <Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")>  _
+        Friend ReadOnly Property Settings() As Global.npanday_9903.My.MySettings
+            Get
+                Return Global.npanday_9903.My.MySettings.Default
+            End Get
+        End Property
+    End Module
+End Namespace
diff --git a/src/test/resources/npanday-9903/npanday-9903/My Project/Settings.settings b/src/test/resources/npanday-9903/npanday-9903/My Project/Settings.settings
new file mode 100644
index 0000000..377f56d
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/My Project/Settings.settings
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>

+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">

+  <Profiles>

+    <Profile Name="(Default)" />

+  </Profiles>

+  <Settings />

+</SettingsFile>

diff --git a/src/test/resources/npanday-9903/npanday-9903/Web.config b/src/test/resources/npanday-9903/npanday-9903/Web.config
new file mode 100644
index 0000000..51467f2
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/Web.config
@@ -0,0 +1,60 @@
+<?xml version="1.0"?>

+

+<configuration>

+  

+    <appSettings/>

+    <connectionStrings/>

+  

+    <system.web>

+        <!-- 

+            Set compilation debug="true" to insert debugging 

+            symbols into the compiled page. Because this 

+            affects performance, set this value to true only 

+            during development.

+

+            Visual Basic options:

+            Set strict="true" to disallow all data type conversions 

+            where data loss can occur. 

+            Set explicit="true" to force declaration of all variables.

+        -->

+        <compilation debug="true" strict="false" explicit="true" />

+        <pages>

+            <namespaces>

+                <clear />

+                <add namespace="System" />

+                <add namespace="System.Collections" />

+                <add namespace="System.Collections.Specialized" />

+                <add namespace="System.Configuration" />

+                <add namespace="System.Text" />

+                <add namespace="System.Text.RegularExpressions" />

+                <add namespace="System.Web" />

+                <add namespace="System.Web.Caching" />

+                <add namespace="System.Web.SessionState" />

+                <add namespace="System.Web.Security" />

+                <add namespace="System.Web.Profile" />

+                <add namespace="System.Web.UI" />

+                <add namespace="System.Web.UI.WebControls" />

+                <add namespace="System.Web.UI.WebControls.WebParts" />

+                <add namespace="System.Web.UI.HtmlControls" />

+            </namespaces>

+        </pages>

+        <!--

+            The <authentication> section enables configuration 

+            of the security authentication mode used by 

+            ASP.NET to identify an incoming user. 

+        -->

+        <authentication mode="Windows" />

+        <!--

+            The <customErrors> section enables configuration 

+            of what to do if/when an unhandled error occurs 

+            during the execution of a request. Specifically, 

+            it enables developers to configure html error pages 

+            to be displayed in place of a error stack trace.

+

+        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">

+            <error statusCode="403" redirect="NoAccess.htm" />

+            <error statusCode="404" redirect="FileNotFound.htm" />

+        </customErrors>

+        -->

+    </system.web>

+</configuration>

diff --git a/src/test/resources/npanday-9903/npanday-9903/error.asp.Designer.vb b/src/test/resources/npanday-9903/npanday-9903/error.asp.Designer.vb
new file mode 100644
index 0000000..f2ae0f2
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/error.asp.Designer.vb
@@ -0,0 +1,67 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:2.0.50727.1434
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+Imports System
+
+Namespace My.Resources
+    
+    'This class was auto-generated by the StronglyTypedResourceBuilder
+    'class via a tool like ResGen or Visual Studio.
+    'To add or remove a member, edit your .ResX file then rerun ResGen
+    'with the /str option, or rebuild your VS project.
+    '''<summary>
+    '''  A strongly-typed resource class, for looking up localized strings, etc.
+    '''</summary>
+    <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0"),  _
+     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
+     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()>  _
+    Friend Class error_asp
+        
+        Private Shared resourceMan As Global.System.Resources.ResourceManager
+        
+        Private Shared resourceCulture As Global.System.Globalization.CultureInfo
+        
+        <Global.System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")>  _
+        Friend Sub New()
+            MyBase.New
+        End Sub
+        
+        '''<summary>
+        '''  Returns the cached ResourceManager instance used by this class.
+        '''</summary>
+        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _
+        Friend Shared ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
+            Get
+                If Object.ReferenceEquals(resourceMan, Nothing) Then
+                    Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("npanday_9903.error.asp", GetType(error_asp).Assembly)
+                    resourceMan = temp
+                End If
+                Return resourceMan
+            End Get
+        End Property
+        
+        '''<summary>
+        '''  Overrides the current thread's CurrentUICulture property for all
+        '''  resource lookups using this strongly typed resource class.
+        '''</summary>
+        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _
+        Friend Shared Property Culture() As Global.System.Globalization.CultureInfo
+            Get
+                Return resourceCulture
+            End Get
+            Set
+                resourceCulture = value
+            End Set
+        End Property
+    End Class
+End Namespace
diff --git a/src/test/resources/npanday-9903/npanday-9903/error.asp.resx b/src/test/resources/npanday-9903/npanday-9903/error.asp.resx
new file mode 100644
index 0000000..7f17a91
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/error.asp.resx
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>

+<root>

+  <!-- 

+    Microsoft ResX Schema 

+    

+    Version 2.0

+    

+    The primary goals of this format is to allow a simple XML format 

+    that is mostly human readable. The generation and parsing of the 

+    various data types are done through the TypeConverter classes 

+    associated with the data types.

+    

+    Example:

+    

+    ... ado.net/XML headers & schema ...

+    <resheader name="resmimetype">text/microsoft-resx</resheader>

+    <resheader name="version">2.0</resheader>

+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>

+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>

+    <data name="Name1">this is my long string</data>

+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>

+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">

+        [base64 mime encoded serialized .NET Framework object]

+    </data>

+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">

+        [base64 mime encoded string representing a byte array form of the .NET Framework object]

+    </data>

+                

+    There are any number of "resheader" rows that contain simple 

+    name/value pairs.

+    

+    Each data row contains a name, and value. The row also contains a 

+    type or mimetype. Type corresponds to a .NET class that support 

+    text/value conversion through the TypeConverter architecture. 

+    Classes that don't support this are serialized and stored with the 

+    mimetype set.

+    

+    The mimetype is used for serialized objects, and tells the 

+    ResXResourceReader how to depersist the object. This is currently not 

+    extensible. For a given mimetype the value must be set accordingly:

+    

+    Note - application/x-microsoft.net.object.binary.base64 is the format 

+    that the ResXResourceWriter will generate, however the reader can 

+    read any of the formats listed below.

+    

+    mimetype: application/x-microsoft.net.object.binary.base64

+    value   : The object must be serialized with 

+            : System.Serialization.Formatters.Binary.BinaryFormatter

+            : and then encoded with base64 encoding.

+    

+    mimetype: application/x-microsoft.net.object.soap.base64

+    value   : The object must be serialized with 

+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter

+            : and then encoded with base64 encoding.

+

+    mimetype: application/x-microsoft.net.object.bytearray.base64

+    value   : The object must be serialized into a byte array 

+            : using a System.ComponentModel.TypeConverter

+            : and then encoded with base64 encoding.

+    -->

+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

+    <xsd:element name="root" msdata:IsDataSet="true">

+      <xsd:complexType>

+        <xsd:choice maxOccurs="unbounded">

+          <xsd:element name="metadata">

+            <xsd:complexType>

+              <xsd:sequence>

+                <xsd:element name="value" type="xsd:string" minOccurs="0" />

+              </xsd:sequence>

+              <xsd:attribute name="name" type="xsd:string" />

+              <xsd:attribute name="type" type="xsd:string" />

+              <xsd:attribute name="mimetype" type="xsd:string" />

+            </xsd:complexType>

+          </xsd:element>

+          <xsd:element name="data">

+            <xsd:complexType>

+              <xsd:sequence>

+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />

+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />

+              </xsd:sequence>

+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />

+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />

+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />

+            </xsd:complexType>

+          </xsd:element>

+          <xsd:element name="resheader">

+            <xsd:complexType>

+              <xsd:sequence>

+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />

+              </xsd:sequence>

+              <xsd:attribute name="name" type="xsd:string" use="required" />

+            </xsd:complexType>

+          </xsd:element>

+        </xsd:choice>

+      </xsd:complexType>

+    </xsd:element>

+  </xsd:schema>

+  <resheader name="resmimetype">

+    <value>text/microsoft-resx</value>

+  </resheader>

+  <resheader name="version">

+    <value>2.0</value>

+  </resheader>

+  <resheader name="reader">

+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

+  </resheader>

+  <resheader name="writer">

+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>

+  </resheader>

+</root>
\ No newline at end of file
diff --git a/src/test/resources/npanday-9903/npanday-9903/error.aspx b/src/test/resources/npanday-9903/npanday-9903/error.aspx
new file mode 100644
index 0000000..44ec5a4
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/error.aspx
@@ -0,0 +1,16 @@
+<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="error.aspx.vb" Inherits="npanday_9903._error" %>

+

+<!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 runat="server">

+    <title>Untitled Page</title>

+</head>

+<body>

+    <form id="form1" runat="server">

+    <div>

+    

+    </div>

+    </form>

+</body>

+</html>

diff --git a/src/test/resources/npanday-9903/npanday-9903/error.aspx.designer.vb b/src/test/resources/npanday-9903/npanday-9903/error.aspx.designer.vb
new file mode 100644
index 0000000..94198af
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/error.aspx.designer.vb
@@ -0,0 +1,17 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:2.0.50727.42
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict Off
+Option Explicit On
+
+
+Partial Public Class _error
+    Protected WithEvents form1 As System.Web.UI.HtmlControls.HtmlForm
+End Class
diff --git a/src/test/resources/npanday-9903/npanday-9903/error.aspx.vb b/src/test/resources/npanday-9903/npanday-9903/error.aspx.vb
new file mode 100644
index 0000000..a9496ed
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/error.aspx.vb
@@ -0,0 +1,8 @@
+Public Partial Class _error
+    Inherits System.Web.UI.Page
+
+    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
+
+    End Sub
+
+End Class
\ No newline at end of file
diff --git a/src/test/resources/npanday-9903/npanday-9903/npanday-9903.vbproj b/src/test/resources/npanday-9903/npanday-9903/npanday-9903.vbproj
new file mode 100644
index 0000000..a566238
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/npanday-9903.vbproj
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>8.0.50727</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{62ED77C3-2DA6-4078-ADC7-D2C11017ACE4}</ProjectGuid>

+    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>

+    <OutputType>Library</OutputType>

+    <RootNamespace>npanday_9903</RootNamespace>

+    <AssemblyName>npanday-9903</AssemblyName>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <DefineDebug>true</DefineDebug>

+    <DefineTrace>true</DefineTrace>

+    <OutputPath>bin\</OutputPath>

+    <DocumentationFile>npanday-9903.xml</DocumentationFile>

+    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <DefineDebug>false</DefineDebug>

+    <DefineTrace>true</DefineTrace>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\</OutputPath>

+    <DocumentationFile>npanday-9903.xml</DocumentationFile>

+    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="System" />

+    <Reference Include="System.Data" />

+    <Reference Include="System.Drawing" />

+    <Reference Include="System.Web" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Configuration" />

+    <Reference Include="System.Web.Services" />

+    <Reference Include="System.EnterpriseServices" />

+    <Reference Include="System.Web.Mobile" />

+  </ItemGroup>

+  <ItemGroup>

+    <Import Include="Microsoft.VisualBasic" />

+    <Import Include="System" />

+    <Import Include="System.Collections" />

+    <Import Include="System.Collections.Generic" />

+    <Import Include="System.Data" />

+    <Import Include="System.Diagnostics" />

+    <Import Include="System.Collections.Specialized" />

+    <Import Include="System.Configuration" />

+    <Import Include="System.Text" />

+    <Import Include="System.Text.RegularExpressions" />

+    <Import Include="System.Web" />

+    <Import Include="System.Web.Caching" />

+    <Import Include="System.Web.SessionState" />

+    <Import Include="System.Web.Security" />

+    <Import Include="System.Web.Profile" />

+    <Import Include="System.Web.UI" />

+    <Import Include="System.Web.UI.WebControls" />

+    <Import Include="System.Web.UI.WebControls.WebParts" />

+    <Import Include="System.Web.UI.HtmlControls" />

+  </ItemGroup>

+  <ItemGroup>

+    <Content Include="Default.aspx" />

+    <Content Include="error.aspx" />

+    <Content Include="Web.config" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="Default.aspx.vb">

+      <SubType>ASPXCodeBehind</SubType>

+      <DependentUpon>Default.aspx</DependentUpon>

+    </Compile>

+    <Compile Include="Default.aspx.designer.vb">

+      <DependentUpon>Default.aspx</DependentUpon>

+    </Compile>

+    <Compile Include="error.asp.Designer.vb">

+      <AutoGen>True</AutoGen>

+      <DesignTime>True</DesignTime>

+      <DependentUpon>error.asp.resx</DependentUpon>

+    </Compile>

+    <Compile Include="error.aspx.designer.vb">

+      <DependentUpon>error.aspx</DependentUpon>

+    </Compile>

+    <Compile Include="error.aspx.vb">

+      <SubType>ASPXCodebehind</SubType>

+      <DependentUpon>error.aspx</DependentUpon>

+    </Compile>

+    <Compile Include="My Project\AssemblyInfo.vb" />

+    <Compile Include="My Project\Application.Designer.vb">

+      <AutoGen>True</AutoGen>

+      <DependentUpon>Application.myapp</DependentUpon>

+    </Compile>

+    <Compile Include="My Project\Resources.Designer.vb">

+      <AutoGen>True</AutoGen>

+      <DesignTime>True</DesignTime>

+      <DependentUpon>Resources.resx</DependentUpon>

+    </Compile>

+    <Compile Include="My Project\Settings.Designer.vb">

+      <AutoGen>True</AutoGen>

+      <DependentUpon>Settings.settings</DependentUpon>

+      <DesignTimeSharedInput>True</DesignTimeSharedInput>

+    </Compile>

+  </ItemGroup>

+  <ItemGroup>

+    <EmbeddedResource Include="error.asp.resx">

+      <SubType>Designer</SubType>

+      <CustomToolNamespace>My.Resources</CustomToolNamespace>

+      <Generator>ResXFileCodeGenerator</Generator>

+      <LastGenOutput>error.asp.Designer.vb</LastGenOutput>

+    </EmbeddedResource>

+    <EmbeddedResource Include="My Project\Resources.resx">

+      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>

+      <LastGenOutput>Resources.Designer.vb</LastGenOutput>

+      <CustomToolNamespace>My.Resources</CustomToolNamespace>

+      <SubType>Designer</SubType>

+    </EmbeddedResource>

+  </ItemGroup>

+  <ItemGroup>

+    <None Include="My Project\Application.myapp">

+      <Generator>MyApplicationCodeGenerator</Generator>

+      <LastGenOutput>Application.Designer.vb</LastGenOutput>

+    </None>

+    <None Include="My Project\Settings.settings">

+      <Generator>SettingsSingleFileGenerator</Generator>

+      <CustomToolNamespace>My</CustomToolNamespace>

+      <LastGenOutput>Settings.Designer.vb</LastGenOutput>

+    </None>

+  </ItemGroup>

+  <ItemGroup>

+    <WebReferences Include="Web References\" />

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />

+  <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v8.0\WebApplications\Microsoft.WebApplication.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">

+        <WebProjectProperties>

+          <UseIIS>False</UseIIS>

+          <AutoAssignPort>True</AutoAssignPort>

+          <DevelopmentServerPort>0</DevelopmentServerPort>

+          <DevelopmentServerVPath>/</DevelopmentServerVPath>

+          <IISUrl>

+          </IISUrl>

+          <NTLMAuthentication>False</NTLMAuthentication>

+        </WebProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+</Project>
\ No newline at end of file
diff --git a/src/test/resources/npanday-9903/npanday-9903/npanday-9903.vbproj.user b/src/test/resources/npanday-9903/npanday-9903/npanday-9903.vbproj.user
new file mode 100644
index 0000000..19abc04
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/npanday-9903.vbproj.user
@@ -0,0 +1,30 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">

+        <WebProjectProperties>

+          <StartPageUrl>

+          </StartPageUrl>

+          <StartAction>CurrentPage</StartAction>

+          <AspNetDebugging>True</AspNetDebugging>

+          <NativeDebugging>False</NativeDebugging>

+          <SQLDebugging>False</SQLDebugging>

+          <PublishCopyOption>RunFiles</PublishCopyOption>

+          <PublishTargetLocation>

+          </PublishTargetLocation>

+          <PublishDeleteAllFiles>False</PublishDeleteAllFiles>

+          <PublishCopyAppData>True</PublishCopyAppData>

+          <ExternalProgram>

+          </ExternalProgram>

+          <StartExternalURL>

+          </StartExternalURL>

+          <StartCmdLineArguments>

+          </StartCmdLineArguments>

+          <StartWorkingDirectory>

+          </StartWorkingDirectory>

+          <EnableENC>False</EnableENC>

+        </WebProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+</Project>
\ No newline at end of file
diff --git a/src/test/resources/npanday-9903/npanday-9903/pom.xml b/src/test/resources/npanday-9903/npanday-9903/pom.xml
new file mode 100644
index 0000000..9f8271e
--- /dev/null
+++ b/src/test/resources/npanday-9903/npanday-9903/pom.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://maven.apache.org/POM/4.0.0">

+  <parent>

+    <artifactId>Npanday-9903-parent</artifactId>

+    <groupId>NPanday.IT</groupId>

+    <version>1.0-SNAPSHOT</version>

+    <relativePath>..\pom.xml</relativePath>

+  </parent>

+  <modelVersion>4.0.0</modelVersion>

+  <artifactId>npanday-9903</artifactId>

+  <packaging>asp</packaging>

+  <name>NPanday.IT : npanday-9903</name>

+  <build>

+    <sourceDirectory>.</sourceDirectory>

+    <plugins>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-compile-plugin</artifactId>

+        <version>${npanday.version}</version>

+        <extensions>true</extensions>

+        <configuration>

+          <language>VB</language>

+          <rootNamespace>npanday_9903</rootNamespace>

+          <define>PLATFORM="AnyCPU"</define>

+          <doc>npanday-9903.xml</doc>

+          <imports>

+            <import>Microsoft.VisualBasic</import>

+            <import>System</import>

+            <import>System.Collections</import>

+            <import>System.Collections.Generic</import>

+            <import>System.Data</import>

+            <import>System.Diagnostics</import>

+            <import>System.Collections.Specialized</import>

+            <import>System.Configuration</import>

+            <import>System.Text</import>

+            <import>System.Text.RegularExpressions</import>

+            <import>System.Web</import>

+            <import>System.Web.Caching</import>

+            <import>System.Web.SessionState</import>

+            <import>System.Web.Security</import>

+            <import>System.Web.Profile</import>

+            <import>System.Web.UI</import>

+            <import>System.Web.UI.WebControls</import>

+            <import>System.Web.UI.WebControls.WebParts</import>

+            <import>System.Web.UI.HtmlControls</import>

+          </imports>

+          <includeSources>

+            <includeSource>Default.aspx.vb</includeSource>

+            <includeSource>Default.aspx.designer.vb</includeSource>

+            <includeSource>error.asp.Designer.vb</includeSource>

+            <includeSource>error.aspx.designer.vb</includeSource>

+            <includeSource>error.aspx.vb</includeSource>

+            <includeSource>My Project\AssemblyInfo.vb</includeSource>

+            <includeSource>My Project\Application.Designer.vb</includeSource>

+            <includeSource>My Project\Resources.Designer.vb</includeSource>

+            <includeSource>My Project\Settings.Designer.vb</includeSource>

+          </includeSources>

+          <outputDirectory>bin</outputDirectory>

+        </configuration>

+      </plugin>

+      <plugin>

+        <groupId>npanday.plugin</groupId>

+        <artifactId>maven-resgen-plugin</artifactId>

+        <version>${npanday.version}</version>

+        <extensions>true</extensions>

+        <configuration>

+          <embeddedResources>

+            <embeddedResource>

+              <sourceFile>error.asp.resx</sourceFile>

+              <name>npanday_9903.error.asp</name>

+            </embeddedResource>

+            <embeddedResource>

+              <sourceFile>My Project\Resources.resx</sourceFile>

+              <name>npanday_9903.Resources</name>

+            </embeddedResource>

+          </embeddedResources>

+        </configuration>

+      </plugin>

+    </plugins>

+  </build>

+</project>

diff --git a/src/test/resources/npanday-9903/pom.xml b/src/test/resources/npanday-9903/pom.xml
new file mode 100644
index 0000000..412de24
--- /dev/null
+++ b/src/test/resources/npanday-9903/pom.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

+         xmlns="http://maven.apache.org/POM/4.0.0">

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>NPanday.ITs</groupId>

+    <artifactId>NPanday.ITs.Parent</artifactId>

+    <version>1-SNAPSHOT</version>

+  </parent>

+  <groupId>NPanday.IT</groupId>

+  <artifactId>Npanday-9903-parent</artifactId>

+  <packaging>pom</packaging>

+  <name>NPanday.IT : Npanday-9903-parent</name>

+  <version>1.0-SNAPSHOT</version>

+  <modules>

+    <module>npanday-9903</module>

+  </modules>

+</project>
\ No newline at end of file
diff --git a/src/test/resources/test-non-unique-snapshot/pom.xml b/src/test/resources/test-non-unique-snapshot/pom.xml
new file mode 100644
index 0000000..d451ae4
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/pom.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  ~ Copyright 2010
+  ~
+  ~ 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.
+  -->
+
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+  </parent>
+  <groupId>npanday.its</groupId>
+  <artifactId>test-non-unique-snapshot</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>library</packaging>
+  <dependencies>
+    <dependency>
+      <groupId>test</groupId>
+      <artifactId>test-snapshot</artifactId>
+      <version>1.0-SNAPSHOT</version>
+      <type>library</type>
+    </dependency>
+	<dependency>
+      <groupId>NUnit</groupId>
+      <artifactId>NUnit.Framework</artifactId>
+      <version>2.2.8.0</version>
+      <type>library</type>
+    </dependency>
+  </dependencies>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <testSourceDirectory>src/test/csharp</testSourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <version>${npanday.version}</version>
+        <extensions>true</extensions>
+      </plugin>
+    </plugins>
+  </build>
+  <repositories>
+    <repository>
+      <id>test</id>
+      <url>file:${basedir}/test-repo</url>
+    </repository>
+  </repositories>
+</project>
diff --git a/src/test/resources/test-non-unique-snapshot/src/main/csharp/App/MyApp.cs b/src/test/resources/test-non-unique-snapshot/src/main/csharp/App/MyApp.cs
new file mode 100644
index 0000000..2d058c8
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/src/main/csharp/App/MyApp.cs
@@ -0,0 +1,16 @@
+using System;
+using System.IO;
+using Sample;
+
+namespace App
+{
+    public class MyApp
+    {
+        private Sample.MyApp myOtherApp;
+
+        public MyApp()
+        {
+            Console.WriteLine("Hello");
+        }
+    }
+}
diff --git a/src/test/resources/test-non-unique-snapshot/src/test/csharp/App/MyAppTest.cs b/src/test/resources/test-non-unique-snapshot/src/test/csharp/App/MyAppTest.cs
new file mode 100644
index 0000000..97e9124
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/src/test/csharp/App/MyAppTest.cs
@@ -0,0 +1,23 @@
+using System;
+using NUnit.Framework;
+
+namespace App
+{
+
+	[TestFixture]
+	public class MyAppTest
+	{
+
+		[SetUp]
+		protected void SetUp()
+		{
+		}
+
+		[Test]
+		public void TestSample()
+		{
+
+		}
+	}
+}
+
diff --git a/src/test/resources/test-non-unique-snapshot/src/test/csharp/Sample/MyAppTest.cs b/src/test/resources/test-non-unique-snapshot/src/test/csharp/Sample/MyAppTest.cs
new file mode 100755
index 0000000..919990d
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/src/test/csharp/Sample/MyAppTest.cs
@@ -0,0 +1,23 @@
+using System;
+using NUnit.Framework;
+
+namespace Sample
+{
+
+	[TestFixture]
+	public class MyAppTest
+	{
+
+		[SetUp]
+		protected void SetUp()
+		{
+		}
+
+		[Test]
+		public void TestSample()
+		{
+
+		}
+	}
+}
+
diff --git a/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 0000000..20838af
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>test</groupId>
+  <artifactId>test-snapshot</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <snapshot>
+      <buildNumber>1</buildNumber>
+    </snapshot>
+    <lastUpdated>20100121140327</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.md5 b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.md5
new file mode 100644
index 0000000..1cbb38b
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.md5
@@ -0,0 +1 @@
+5534b8704501fe7e391e594def3460a6
\ No newline at end of file
diff --git a/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.sha1 b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.sha1
new file mode 100644
index 0000000..7a07cc7
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+4f01affb3f669cec8143427af45e05f721fc0011
\ No newline at end of file
diff --git a/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.dll b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.dll
new file mode 100644
index 0000000..e4c04d6
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.dll
Binary files differ
diff --git a/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.dll.md5 b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.dll.md5
new file mode 100644
index 0000000..82bb9b8
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.dll.md5
@@ -0,0 +1 @@
+34e030ec51947b9c16ab7bf28df77b55
\ No newline at end of file
diff --git a/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.dll.sha1 b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.dll.sha1
new file mode 100644
index 0000000..f705a4b
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.dll.sha1
@@ -0,0 +1 @@
+64167b8e2f888cd2abc8e0dd7eaaccddcaab34e1
\ No newline at end of file
diff --git a/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.pom b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.pom
new file mode 100644
index 0000000..c894eab
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.pom
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
+  <modelVersion>4.0.0</modelVersion>  
+  <groupId>test</groupId>  
+  <artifactId>test-snapshot</artifactId>  
+  <version>1.0-SNAPSHOT</version>
+  <packaging>library</packaging>
+    <dependencies>
+    <dependency>
+      <groupId>NUnit</groupId>
+      <artifactId>NUnit.Framework</artifactId>
+      <version>2.2.8.0</version>
+      <type>library</type>
+    </dependency>
+  </dependencies>  
+  <build> 
+    <sourceDirectory>src/main/csharp</sourceDirectory>  
+    <testSourceDirectory>src/test/csharp</testSourceDirectory>  
+    <plugins> 
+      <plugin> 
+        <groupId>npanday.plugin</groupId>  
+        <artifactId>maven-compile-plugin</artifactId>  
+        <extensions>true</extensions> 
+      </plugin>
+    </plugins> 
+  </build> 
+  <distributionManagement>
+    <repository>
+      <id>test</id>
+      <url>file:${basedir}/target/test-repo</url>
+      <uniqueVersion>false</uniqueVersion>
+    </repository>
+  </distributionManagement>
+</project>
diff --git a/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.pom.md5 b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.pom.md5
new file mode 100644
index 0000000..68c1b4d
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.pom.md5
@@ -0,0 +1 @@
+d2d8bb619bd89e6b30fd2e2b07f0151d
\ No newline at end of file
diff --git a/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.pom.sha1 b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.pom.sha1
new file mode 100644
index 0000000..661b8d4
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-SNAPSHOT.pom.sha1
@@ -0,0 +1 @@
+9a890dfd987688d5c15178cd67d152cb1cd92da4
\ No newline at end of file
diff --git a/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml
new file mode 100644
index 0000000..3a78e14
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>test</groupId>
+  <artifactId>test-snapshot</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <versions>
+      <version>1.0-SNAPSHOT</version>
+    </versions>
+    <lastUpdated>20100121140327</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml.md5 b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml.md5
new file mode 100644
index 0000000..74cd7cf
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml.md5
@@ -0,0 +1 @@
+b5f9985b3b268a9c60d73a04200d30a8
\ No newline at end of file
diff --git a/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml.sha1 b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml.sha1
new file mode 100644
index 0000000..454f8c3
--- /dev/null
+++ b/src/test/resources/test-non-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+a7315973ad7a0831386c2ebad94f10dd8dada77e
\ No newline at end of file
diff --git a/src/test/resources/test-unique-snapshot/pom.xml b/src/test/resources/test-unique-snapshot/pom.xml
new file mode 100644
index 0000000..dc228c8
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/pom.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>NPanday.ITs</groupId>
+    <artifactId>NPanday.ITs.Parent</artifactId>
+    <version>1-SNAPSHOT</version>
+  </parent>
+  <groupId>npanday.its</groupId>
+  <artifactId>test-unique-snapshot</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>library</packaging>
+  <dependencies>
+    <dependency>
+      <groupId>test</groupId>
+      <artifactId>test-snapshot</artifactId>
+      <version>1.0-SNAPSHOT</version>
+      <type>library</type>
+    </dependency>
+    <dependency>
+      <groupId>NUnit</groupId>
+      <artifactId>NUnit.Framework</artifactId>
+      <version>2.2.8.0</version>
+      <type>library</type>
+    </dependency>
+  </dependencies>
+  <build>
+    <sourceDirectory>src/main/csharp</sourceDirectory>
+    <testSourceDirectory>src/test/csharp</testSourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>npanday.plugin</groupId>
+        <artifactId>maven-compile-plugin</artifactId>
+        <version>${npanday.version}</version>
+        <extensions>true</extensions>
+      </plugin>
+    </plugins>
+  </build>
+  <repositories>
+    <repository>
+      <id>test</id>
+      <url>file:${basedir}/test-repo</url>
+    </repository>
+  </repositories>
+</project>
diff --git a/src/test/resources/test-unique-snapshot/src/main/csharp/App/MyApp.cs b/src/test/resources/test-unique-snapshot/src/main/csharp/App/MyApp.cs
new file mode 100644
index 0000000..8f52990
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/src/main/csharp/App/MyApp.cs
@@ -0,0 +1,16 @@
+using System;
+using System.IO;
+using Sample;
+
+namespace App
+{
+    public class MyApp
+    {
+        private Sample.MyApp mySampleApp;
+
+        public MyApp()
+        {
+            Console.WriteLine("Hello");
+        }
+    }
+}
diff --git a/src/test/resources/test-unique-snapshot/src/test/csharp/App/MyAppTest.cs b/src/test/resources/test-unique-snapshot/src/test/csharp/App/MyAppTest.cs
new file mode 100644
index 0000000..97e9124
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/src/test/csharp/App/MyAppTest.cs
@@ -0,0 +1,23 @@
+using System;
+using NUnit.Framework;
+
+namespace App
+{
+
+	[TestFixture]
+	public class MyAppTest
+	{
+
+		[SetUp]
+		protected void SetUp()
+		{
+		}
+
+		[Test]
+		public void TestSample()
+		{
+
+		}
+	}
+}
+
diff --git a/src/test/resources/test-unique-snapshot/src/test/csharp/Sample/MyAppTest.cs b/src/test/resources/test-unique-snapshot/src/test/csharp/Sample/MyAppTest.cs
new file mode 100755
index 0000000..919990d
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/src/test/csharp/Sample/MyAppTest.cs
@@ -0,0 +1,23 @@
+using System;
+using NUnit.Framework;
+
+namespace Sample
+{
+
+	[TestFixture]
+	public class MyAppTest
+	{
+
+		[SetUp]
+		protected void SetUp()
+		{
+		}
+
+		[Test]
+		public void TestSample()
+		{
+
+		}
+	}
+}
+
diff --git a/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml
new file mode 100644
index 0000000..18b5d83
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>test</groupId>
+  <artifactId>test-snapshot</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <snapshot>
+      <timestamp>20100121.135725</timestamp>
+      <buildNumber>1</buildNumber>
+    </snapshot>
+    <lastUpdated>20100121135725</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.md5 b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.md5
new file mode 100644
index 0000000..3d87600
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.md5
@@ -0,0 +1 @@
+25df2916329b478ff135779d73cf21f6
\ No newline at end of file
diff --git a/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.sha1 b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.sha1
new file mode 100644
index 0000000..a84feb1
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+e3dd190621ba98e38e4accb701b3f8299ef82296
\ No newline at end of file
diff --git a/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll
new file mode 100644
index 0000000..ebbff33
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll
Binary files differ
diff --git a/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll.md5 b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll.md5
new file mode 100644
index 0000000..03d4f1c
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll.md5
@@ -0,0 +1 @@
+b50e42808d9b10c6ee58a7cdd2675c8e
\ No newline at end of file
diff --git a/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll.sha1 b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll.sha1
new file mode 100644
index 0000000..895ae1e
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.dll.sha1
@@ -0,0 +1 @@
+42ddef2d29b2a0d1a6b8d856daaad6fdd96ace79
\ No newline at end of file
diff --git a/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom
new file mode 100644
index 0000000..58c30c9
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
+  <modelVersion>4.0.0</modelVersion>  
+  <groupId>test</groupId>  
+  <artifactId>test-snapshot</artifactId>  
+  <version>1.0-SNAPSHOT</version>
+  <packaging>library</packaging>
+    <dependencies>
+    <dependency>
+      <groupId>NUnit</groupId>
+      <artifactId>NUnit.Framework</artifactId>
+      <version>2.2.8.0</version>
+      <type>library</type>
+    </dependency>
+  </dependencies>  
+  <build> 
+    <sourceDirectory>src/main/csharp</sourceDirectory>  
+    <testSourceDirectory>src/test/csharp</testSourceDirectory>  
+    <plugins> 
+      <plugin> 
+        <groupId>npanday.plugin</groupId>  
+        <artifactId>maven-compile-plugin</artifactId>  
+        <extensions>true</extensions> 
+      </plugin>
+    </plugins> 
+  </build> 
+  <distributionManagement>
+    <repository>
+      <id>test</id>
+      <url>file:${basedir}/target/test-repo</url>
+    </repository>
+  </distributionManagement>
+</project>
diff --git a/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom.md5 b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom.md5
new file mode 100644
index 0000000..6b9ba80
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom.md5
@@ -0,0 +1 @@
+6b41d5430c2852fc5c32c990925dd549
\ No newline at end of file
diff --git a/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom.sha1 b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom.sha1
new file mode 100644
index 0000000..93d0f77
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/1.0-SNAPSHOT/test-snapshot-1.0-20100121.135725-1.pom.sha1
@@ -0,0 +1 @@
+e8ed60e76392a59c97f3769ec685560080c2f9b1
\ No newline at end of file
diff --git a/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml
new file mode 100644
index 0000000..8c2e4a6
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>test</groupId>
+  <artifactId>test-snapshot</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <versioning>
+    <versions>
+      <version>1.0-SNAPSHOT</version>
+    </versions>
+    <lastUpdated>20100121135725</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml.md5 b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml.md5
new file mode 100644
index 0000000..20bed92
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml.md5
@@ -0,0 +1 @@
+1ad00d36607cb36879c142ce746d3e12
\ No newline at end of file
diff --git a/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml.sha1 b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml.sha1
new file mode 100644
index 0000000..a2c4ba7
--- /dev/null
+++ b/src/test/resources/test-unique-snapshot/test-repo/test/test-snapshot/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+b28e4f701f54eccee991daf35f5acc5fec91e0a4
\ No newline at end of file