foist master
authorRuss Handorf <rhandorf@handorf.org>
Wed, 6 Jun 2018 00:36:59 +0000 (20:36 -0400)
committerRuss Handorf <rhandorf@handorf.org>
Wed, 6 Jun 2018 00:36:59 +0000 (20:36 -0400)
SaveDetails.php [new file with mode: 0644]
a.html [new file with mode: 0644]
include/Config.php [new file with mode: 0644]
include/FingerPrinter.php [new file with mode: 0644]
include/syslog.php [new file with mode: 0644]
javascript/deployJava.js [new file with mode: 0755]
javascript/fetch_whorls.js [new file with mode: 0755]
javascript/jquery-1.3.2.min.js [new file with mode: 0755]
javascript/jquery.flash.js [new file with mode: 0755]
javascript/plugin-detect-0.6.3.js [new file with mode: 0755]
resources/fonts2.swf [new file with mode: 0755]

diff --git a/SaveDetails.php b/SaveDetails.php
new file mode 100644 (file)
index 0000000..ea00db3
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+$saveData = $_REQUEST['saveData'];
+
+if (empty($saveData)) {
+       exit;
+}
+
+require_once('./include/FingerPrinter.php');
+
+$fp = new FingerPrinter();
+
+$fp->ProcessRequest();
+
+
+?>
diff --git a/a.html b/a.html
new file mode 100644 (file)
index 0000000..1b9dd33
--- /dev/null
+++ b/a.html
@@ -0,0 +1,28 @@
+<html> 
+  <head> 
+        <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
+              <script src="/javascript/jquery-1.3.2.min.js" type="text/javascript"></script> 
+                  <script src="/javascript/plugin-detect-0.6.3.js" type="text/javascript"></script> 
+                  <script src="/javascript/deployJava.js" type="text/javascript"></script> 
+                  <script src="/javascript/jquery.flash.js" type="text/javascript"></script> 
+                    
+  </head> 
+  <body> 
+        <STYLE> 
+        .userData {behavior:url(#default#userdata);}
+        </STYLE> 
+        <ELEMENT CLASS="userData" ID="oPersistElement"> 
+        <script type="text/javascript"> 
+          var attributes = {codebase: "java", code: "fonts.class", id: "javafontshelper", name: "javafontshelper", "mayscript": "true", width: 1, height: 1};
+          if (deployJava.versionCheck('1.1+'))
+            deployJava.writeAppletTag(attributes);
+        </script>
+        <div id="flashcontent"></div> 
+        <div id="oPersistDiv" class="userData"></div> 
+        <script src="/javascript/fetch_whorls.js" type="text/javascript"> 
+        </script>
+
+  </body> 
+</html> 
diff --git a/include/Config.php b/include/Config.php
new file mode 100644 (file)
index 0000000..a955277
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+
+/* Generic Configuration for Finger Printer application */
+class Config {
+       protected $host         = "syslogserver";
+       protected $port         = 514;
+       protected $process  = "FingerPrinter";
+       protected $facility = 1;
+       protected $severity = 5;
+       protected $hostname = "hostitisrunningfrom";
+       protected $ipaddress = "ipitisrunningfrom";
+       protected $params = Array(
+               'plugins',
+               'fonts',
+               'timezone',
+               'video',
+               'supercookies'
+       );
+       protected $debug = false;
+}
+
+
+
+
+
+?>
diff --git a/include/FingerPrinter.php b/include/FingerPrinter.php
new file mode 100644 (file)
index 0000000..eba4cb6
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+
+require_once('Config.php');
+require_once('syslog.php');
+
+class FingerPrinter extends Config {
+
+       protected $_data;
+       protected $_syslog;
+
+       function __construct() {
+               $this->_data = "";
+               $this->_syslog = new Syslog();
+
+               $this->_syslog->SetFacility($this->facility);
+               $this->_syslog->SetSeverity($this->severity);
+               $this->_syslog->SetHostname($this->hostname);
+               $this->_syslog->SetFqdn($this->hostname);
+               $this->_syslog->SetServer($this->host);
+               $this->_syslog->SetPort($this->port);
+               $this->_syslog->SetIpFrom($this->ipaddress);
+               $this->_syslog->SetProcess($this->process);
+       }
+
+       public function ProcessRequest() {
+
+               $this->_data = "SourceAddress:" . $_SERVER["REMOTE_ADDR"];
+
+               foreach($this->params as $param) {
+                       $this->_data = implode(
+                               ",", 
+                               Array(
+                                       $this->_data,
+                                       $param . ':' . $this->_GenerateHash($_REQUEST[$param])
+                               )
+                       );
+               }
+               $this->_SendData();
+       }
+
+       private function _GenerateHash($input) {
+               return sha1($input);
+       }
+
+       public function getData() {
+               return $this->_data;
+       }
+
+       private function _SendData() {
+               if ($this->debug) {
+                       echo "Debug:".$this->_data;
+               }
+               $this->_syslog->SetContent($this->_data);
+               $this->_syslog->Send();
+
+       }
+}
+
+?>
diff --git a/include/syslog.php b/include/syslog.php
new file mode 100644 (file)
index 0000000..0205d47
--- /dev/null
@@ -0,0 +1,374 @@
+<?php
+
+/*********************************************************************
+ *
+ *             $HeadURL: syslog.php $
+ * $LastChangedRevision: 1.1 $
+ *             Language: PHP 4.x or higher
+ *            Copyright: SysCo systèmes de communication sa
+ *         CreationDate: 2005-11-05
+ *            CreatedBy: SysCo/al
+ *     $LastChangedDate: 2005-12-24 $
+ *       $LastChangedBy: SysCo/al $
+ *              WebSite: http://developer.sysco.ch/php/
+ *                Email: developer [at] sysco [dot] ch
+ *
+ *
+ * Description
+ *
+ *   The Syslog class is a syslog device implementation in PHP
+ *   following the RFC 3164 rules.
+ *
+ *   Facility values:
+ *      0 kernel messages
+ *      1 user-level messages
+ *      2 mail system
+ *      3 system daemons
+ *      4 security/authorization messages
+ *      5 messages generated internally by syslogd
+ *      6 line printer subsystem
+ *      7 network news subsystem
+ *      8 UUCP subsystem
+ *      9 clock daemon
+ *     10 security/authorization messages
+ *     11 FTP daemon
+ *     12 NTP subsystem
+ *     13 log audit
+ *     14 log alert
+ *     15 clock daemon
+ *     16 local user 0 (local0) (default value)
+ *     17 local user 1 (local1)
+ *     18 local user 2 (local2)
+ *     19 local user 3 (local3)
+ *     20 local user 4 (local4)
+ *     21 local user 5 (local5)
+ *     22 local user 6 (local6)
+ *     23 local user 7 (local7)
+ *
+ *   Severity values:
+ *     0 Emergency: system is unusable
+ *     1 Alert: action must be taken immediately
+ *     2 Critical: critical conditions
+ *     3 Error: error conditions
+ *     4 Warning: warning conditions
+ *     5 Notice: normal but significant condition (default value)
+ *     6 Informational: informational messages
+ *     7 Debug: debug-level messages
+ *
+ *
+ * Usage
+ *
+ *   require_once('syslog.php');
+ *   $syslog = new Syslog($facility = 16, $severity = 5, $hostname = "", $fqdn= "", $ip_from = "", $process="", $content = "");
+ *   $syslog->Send($server = "", $content = "", $timeout = 0);
+ *
+ *
+ * Examples
+ *
+ *   Example 1
+ *     <?php
+ *         require_once('syslog.php');
+ *         $syslog = new Syslog();
+ *         $syslog->Send('192.168.0.12', 'My first PHP syslog message');
+ *     ?>
+ *
+ *   Example 2
+ *     <?php
+ *         require_once('syslog.php');
+ *         $syslog = new Syslog(23, 7, 'MYSERVER', 'myserver.mydomain.net', '192.168.0.1', 'webautomation');
+ *         $syslog->Send('192.168.0.12', 'My second PHP syslog message');
+ *     ?>
+ *
+ *   Example 3
+ *     <?php
+ *         require_once('syslog.php');
+ *         $syslog = new Syslog();
+ *         $syslog->SetFacility(23);
+ *         $syslog->SetSeverity(7);
+ *         $syslog->SetHostname('MYSERVER');
+ *         $syslog->SetFqdn('myserver.mydomain.net');
+ *         $syslog->SetIpFrom('192.168.0.1');
+ *         $syslog->SetProcess('webautomation');
+ *         $syslog->SetContent('My third PHP syslog message');
+ *         $syslog->SetServer('192.168.0.12');
+ *         $syslog->Send();
+ *     ?>
+ *
+ *   Example 4
+ *     <?php
+ *         // Do not follow the conventions of the RFC
+ *         // and send a customized MSG part instead of
+ *         // the recommanded format "process fqdn ip content"
+ *         require_once('syslog.php');
+ *         $syslog = new Syslog();
+ *         $syslog->SetFacility(23);
+ *         $syslog->SetSeverity(7);
+ *         $syslog->SetHostname('MYSERVER');
+ *         $syslog->SetMsg('My customized MSG PHP syslog message');
+ *         $syslog->SetServer('192.168.0.12');
+ *         $syslog->Send();
+ *     ?>
+ *
+ *
+ * External file needed
+ *
+ *   none.
+ *
+ *
+ * External file created
+ *
+ *   none.
+ *
+ *
+ * Special issues
+ *
+ *   - Sockets support must be enabled.
+ *     * In Linux and *nix environments, the extension is enabled at
+ *       compile time using the --enable-sockets configure option
+ *     * In Windows, PHP Sockets can be activated by un-commenting
+ *       extension=php_sockets.dll in php.ini
+ *
+ *
+ * Licence
+ *
+ *   Copyright (c) 2005, SysCo systèmes de communication sa
+ *   SysCo (tm) is a trademark of SysCo systèmes de communication sa
+ *   All rights reserved.
+ *
+ *   Redistribution and use in source and binary forms, with or without 
+ *   modification, are permitted provided that the following conditions are met:
+ *
+ *   - Redistributions of source code must retain the above copyright notice, 
+ *     this list of conditions and the following disclaimer. 
+ *   - Redistributions in binary form must reproduce the above copyright notice, 
+ *     this list of conditions and the following disclaimer in the documentation 
+ *     and/or other materials provided with the distribution. 
+ *   - Neither the name of SysCo systèmes de communication sa nor the names of its
+ *     contributors may be used to endorse or promote products derived from this
+ *     software without specific prior written permission. 
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
+ *   EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
+ *   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
+ *   SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
+ *   OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+ *   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
+ *   TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+ *   EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *
+ * Change Log
+ *
+ *   2005-12-24 1.1 SysCo/al Generic release and documentation
+ *   2005-11-05 1.0 SysCo/al Initial release
+ *
+ *********************************************************************/
+    class Syslog
+    {
+        var $_facility; // 0-23
+        var $_severity; // 0-7
+        var $_hostname; // no embedded space, no domain name, only a-z A-Z 0-9 and other authorized characters
+        var $_fqdn;
+        var $_ip_from;
+        var $_process;
+        var $_content;
+        var $_msg;
+        var $_server;   // Syslog destination server
+        var $_port;     // Standard syslog port is 514
+        var $_timeout;  // Timeout of the UDP connection (in seconds)
+        
+        function Syslog($facility = 16, $severity = 5, $hostname = "", $fqdn= "", $ip_from = "", $process="", $content = "")
+        {
+            $this->_msg      = '';
+            $this->_server   = '127.0.0.1';
+            $this->_port     = 514;
+            $this->_timeout  = 10;
+            
+            $this->_facility = $facility;
+            
+            $this->_severity = $severity;
+            
+            $this->_hostname = $hostname;
+            if ($this->_hostname == "")
+            {
+                if (isset($_ENV["COMPUTERNAME"]))
+                {
+                    $this->_hostname = $_ENV["COMPUTERNAME"];
+                }
+                elseif (isset($_ENV["HOSTNAME"]))
+                {
+                    $this->_hostname = $_ENV["HOSTNAME"];
+                }
+                else
+                {
+                    $this->_hostname = "WEBSERVER";
+                }
+            }
+            $this->_hostname = substr($this->_hostname, 0, strpos($this->_hostname.".", "."));
+            
+            $this->_fqdn = $fqdn;
+            if ($this->_fqdn == "")
+            {
+                if (isset($_SERVER["SERVER_NAME"]))
+                {
+                    $this->_fqdn = $_SERVER["SERVER_NAME"];
+                }
+            }
+
+            $this->_ip_from = $ip_from;
+            if ($this->_ip_from == "")
+            {
+                if (isset($_SERVER["SERVER_ADDR"]))
+                {
+                    $this->_ip_from = $_SERVER["SERVER_ADDR"];
+                }
+            }
+
+            $this->_process = $process;
+            if ($this->_process == "")
+            {
+                $this->_process = "PHP";
+            }
+
+            $this->_content = $content;
+            if ($this->_content == "")
+            {
+                $this->_content = "PHP generated message";
+            }
+            
+        }
+
+        function SetFacility($facility)
+        {
+            $this->_facility = $facility;
+        }
+        
+        
+        function SetSeverity($severity)
+        {
+            $this->_severity = $severity;
+        }
+        
+        
+        function SetHostname($hostname)
+        {
+            $this->_hostname = $hostname;
+        }
+        
+        
+        function SetFqdn($fqdn)
+        {
+            $this->_fqdn = $fqdn;
+        }
+        
+        
+        function SetIpFrom($ip_from)
+        {
+            $this->_ip_from = $ip_from;
+        }
+        
+        
+        function SetProcess($process)
+        {
+            $this->_process = $process;
+        }
+        
+        
+        function SetContent($content)
+        {
+            $this->_content = $content;
+        }
+        
+        
+        function SetMsg($msg)
+        {
+            $this->_msg = $msg;
+        }
+        
+        
+        function SetServer($server)
+        {
+            $this->_server = $server;
+        }
+        
+        
+        function SetPort($port)
+        {
+            if ((intval($port) > 0) && (intval($port) < 65536))
+            {
+                $this->_port = intval($port);
+            }
+        }
+
+
+        function SetTimeout($timeout)
+        {
+            if (intval($timeout) > 0)
+            {
+                $this->_timeout = intval($timeout);
+            }
+        }
+        
+        
+        function Send($server = "", $content = "", $timeout = 0)
+        {
+            if ($server != "")
+            {
+                $this->_server = $server;
+            }
+
+            if ($content != "")
+            {
+                $this->_content = $content;
+            }
+            
+            if (intval($timeout) > 0)
+            {
+                $this->_timeout = intval($timeout);
+            }
+            
+            if ($this->_facility <  0) { $this->_facility =  0; }
+            if ($this->_facility > 23) { $this->_facility = 23; }
+            if ($this->_severity <  0) { $this->_severity =  0; }
+            if ($this->_severity >  7) { $this->_severity =  7; }
+            
+            $this->_process = substr($this->_process, 0, 32);
+            
+            $actualtime = time();
+            $month      = date("M", $actualtime);
+            $day        = substr("  ".date("j", $actualtime), -2);
+            $hhmmss     = date("H:i:s", $actualtime);
+            $timestamp  = $month." ".$day." ".$hhmmss;
+            
+            $pri    = "<".($this->_facility*8 + $this->_severity).">";
+            $header = $timestamp." ".$this->_hostname;
+            
+            if ($this->_msg != "")
+            {
+                $msg = $this->_msg;
+            }
+            else
+            {
+                $msg = $this->_process.": ".$this->_fqdn." ".$this->_ip_from." ".$this->_content;
+            }
+            
+            $message = substr($pri.$header." ".$msg, 0, 1024);
+            
+            $fp = fsockopen("udp://".$this->_server, $this->_port, $errno, $errstr);
+            if ($fp)
+            {
+                fwrite($fp, $message);
+                fclose($fp);
+                $result = $message;
+            }
+            else
+            {
+                $result = "ERROR: $errno - $errstr";
+            }
+            return $result;
+        }
+    }
+
+?>
diff --git a/javascript/deployJava.js b/javascript/deployJava.js
new file mode 100755 (executable)
index 0000000..8b3bd66
--- /dev/null
@@ -0,0 +1,79 @@
+
+var deployJava={debug:null,firefoxJavaVersion:null,myInterval:null,preInstallJREList:null,returnPage:null,brand:null,locale:null,installType:null,EAInstallEnabled:false,EarlyAccessURL:null,getJavaURL:'http://java.sun.com/webapps/getjava/BrowserRedirect?host=java.com',appleRedirectPage:'http://www.apple.com/support/downloads/',oldMimeType:'application/npruntime-scriptable-plugin;DeploymentToolkit',mimeType:'application/java-deployment-toolkit',launchButtonPNG:'http://java.sun.com/products/jfc/tsc/articles/swing2d/webstart.png',browserName:null,browserName2:null,getJREs:function(){var list=new Array();if(deployJava.isPluginInstalled()){var plugin=deployJava.getPlugin();var VMs=plugin.jvms;for(var i=0;i<VMs.getLength();i++){list[i]=VMs.get(i).version;}}else{var browser=deployJava.getBrowser();if(browser=='MSIE'){if(deployJava.testUsingActiveX('1.7.0')){list[0]='1.7.0';}else if(deployJava.testUsingActiveX('1.6.0')){list[0]='1.6.0';}else if(deployJava.testUsingActiveX('1.5.0')){list[0]='1.5.0';}else if(deployJava.testUsingActiveX('1.4.2')){list[0]='1.4.2';}else if(deployJava.testForMSVM()){list[0]='1.1';}}else if(browser=='Netscape Family'){deployJava.getJPIVersionUsingMimeType();if(deployJava.firefoxJavaVersion!=null){list[0]=deployJava.firefoxJavaVersion;}else if(deployJava.testUsingMimeTypes('1.7')){list[0]='1.7.0';}else if(deployJava.testUsingMimeTypes('1.6')){list[0]='1.6.0';}else if(deployJava.testUsingMimeTypes('1.5')){list[0]='1.5.0';}else if(deployJava.testUsingMimeTypes('1.4.2')){list[0]='1.4.2';}else if(deployJava.browserName2=='Safari'){if(deployJava.testUsingPluginsArray('1.7.0')){list[0]='1.7.0';}else if(deployJava.testUsingPluginsArray('1.6')){list[0]='1.6.0';}else if(deployJava.testUsingPluginsArray('1.5')){list[0]='1.5.0';}else if(deployJava.testUsingPluginsArray('1.4.2')){list[0]='1.4.2';}}}}
+if(deployJava.debug){for(var i=0;i<list.length;++i){alert('We claim to have detected Java SE '+list[i]);}}
+return list;},installJRE:function(requestVersion){var ret=false;if(deployJava.isPluginInstalled()){if(deployJava.getPlugin().installJRE(requestVersion)){deployJava.refresh();if(deployJava.returnPage!=null){document.location=deployJava.returnPage;}
+return true;}else{return false;}}else{return deployJava.installLatestJRE();}},installLatestJRE:function(){if(deployJava.isPluginInstalled()){if(deployJava.getPlugin().installLatestJRE()){deployJava.refresh();if(deployJava.returnPage!=null){document.location=deployJava.returnPage;}
+return true;}else{return false;}}else{var browser=deployJava.getBrowser();var platform=navigator.platform.toLowerCase();if((deployJava.EAInstallEnabled=='true')&&(platform.indexOf('win')!=-1)&&(deployJava.EarlyAccessURL!=null)){deployJava.preInstallJREList=deployJava.getJREs();if(deployJava.returnPage!=null){deployJava.myInterval=setInterval("deployJava.poll()",3000);}
+location.href=deployJava.EarlyAccessURL;return false;}else{if(browser=='MSIE'){return deployJava.IEInstall();}else if((browser=='Netscape Family')&&(platform.indexOf('win32')!=-1)){return deployJava.FFInstall();}else{location.href=deployJava.getJavaURL+
+((deployJava.returnPage!=null)?('&returnPage='+deployJava.returnPage):'')+
+((deployJava.locale!=null)?('&locale='+deployJava.locale):'')+
+((deployJava.brand!=null)?('&brand='+deployJava.brand):'');}
+return false;}}},runApplet:function(attributes,parameters,minimumVersion){if(minimumVersion=='undefined'||minimumVersion==null){minimumVersion='1.1';}
+var regex="^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$";var matchData=minimumVersion.match(regex);if(deployJava.returnPage==null){deployJava.returnPage=document.location;}
+if(matchData!=null){var browser=deployJava.getBrowser();if((browser!='?')&&('Safari'!=deployJava.browserName2)){if(deployJava.versionCheck(minimumVersion+'+')){deployJava.writeAppletTag(attributes,parameters);}else if(deployJava.installJRE(minimumVersion+'+')){deployJava.refresh();location.href=document.location;deployJava.writeAppletTag(attributes,parameters);}}else{deployJava.writeAppletTag(attributes,parameters);}}else{if(deployJava.debug){alert('Invalid minimumVersion argument to runApplet():'+
+minimumVersion);}}},writeAppletTag:function(attributes,parameters){var s='<'+'applet ';var codeAttribute=false;for(var attribute in attributes){s+=(' '+attribute+'="'+attributes[attribute]+'"');if(attribute=='code'){codeAttribute=true;}}
+if(!codeAttribute){s+=(' code="dummy"');}
+s+='>';document.write(s);if(parameters!='undefined'&&parameters!=null){var codebaseParam=false;for(var parameter in parameters){if(parameter=='codebase_lookup'){codebaseParam=true;}
+s='<param name="'+parameter+'" value="'+
+parameters[parameter]+'">';document.write(s);}
+if(!codebaseParam){document.write('<param name="codebase_lookup" value="false">');}}
+document.write('<'+'/'+'applet'+'>');},versionCheck:function(versionPattern)
+{var index=0;var regex="^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?(\\*|\\+)?$";var matchData=versionPattern.match(regex);if(matchData!=null){var familyMatch=true;var patternArray=new Array();for(var i=1;i<matchData.length;++i){if((typeof matchData[i]=='string')&&(matchData[i]!='')){patternArray[index]=matchData[i];index++;}}
+if(patternArray[patternArray.length-1]=='+'){familyMatch=false;patternArray.length--;}else{if(patternArray[patternArray.length-1]=='*'){patternArray.length--;}}
+var list=deployJava.getJREs();for(var i=0;i<list.length;++i){if(deployJava.compareVersionToPattern(list[i],patternArray,familyMatch)){return true;}}
+return false;}else{alert('Invalid versionPattern passed to versionCheck: '+
+versionPattern);return false;}},isWebStartInstalled:function(minimumVersion){var browser=deployJava.getBrowser();if((browser=='?')||('Safari'==deployJava.browserName2)){return true;}
+if(minimumVersion=='undefined'||minimumVersion==null){minimumVersion='1.4.2';}
+var retval=false;var regex="^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$";var matchData=minimumVersion.match(regex);if(matchData!=null){retval=deployJava.versionCheck(minimumVersion+'+');}else{if(deployJava.debug){alert('Invalid minimumVersion argument to isWebStartInstalled(): '+minimumVersion);}
+retval=deployJava.versionCheck('1.4.2+');}
+return retval;},getJPIVersionUsingMimeType:function(){for(var i=0;i<navigator.mimeTypes.length;++i){var s=navigator.mimeTypes[i].type;var m=s.match(/^application\/x-java-applet;jpi-version=(.*)$/);if(m!=null){deployJava.firefoxJavaVersion=m[1];break;}}},launchWebStartApplication:function(jnlp){var uaString=navigator.userAgent.toLowerCase();deployJava.getJPIVersionUsingMimeType();if(uaString.indexOf("windows",0)!=-1){if(deployJava.isWebStartInstalled('1.6.0_18')==false){if(deployJava.isPluginInstalled()){if(deployJava.installLatestJRE()==false){alert("Java install failed: cannot use launchWebStartApplication function");return;}}else{alert("Please visit java.com to install Java and try again after");return;}}}else{if(deployJava.firefoxJavaVersion==null){alert("Please visit java.com to install Java and try again after");return;}
+if(deployJava.firefoxJavaVersion<"1.6.0_18"){alert("Please visit java.com to install Java and try again after");return;}}
+var jnlpDocbase=null;if(document.documentURI){jnlpDocbase=document.documentURI;}
+if(jnlpDocbase==null){jnlpDocbase=document.URL;}
+var browser=deployJava.getBrowser();if(browser=='MSIE'){document.write('<'+'object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" '+'width="0" height="0">'+'<'+'PARAM name="launchjnlp" value="'+jnlp+'"'+'>'+'<'+'PARAM name="docbase" value="'+jnlpDocbase+'"'+'>'+'<'+'/'+'object'+'>');}else if(browser=='Netscape Family'){document.write('<'+'embed type="application/x-java-applet;jpi-version='+
+deployJava.firefoxJavaVersion+'" '+'width="0" height="0" '+'launchjnlp="'+jnlp+'"'+'docbase="'+jnlpDocbase+'"'+' />');}
+document.location=jnlpDocbase;},createWebStartLaunchButtonEx:function(jnlp,minimumVersion){if(deployJava.returnPage==null){deployJava.returnPage=jnlp;}
+var url='javascript:deployJava.launchWebStartApplication(\''+jnlp+'\');';document.write('<'+'a href="'+url+'" onMouseOver="window.status=\'\'; '+'return true;"><'+'img '+'src="'+deployJava.launchButtonPNG+'" '+'border="0" /><'+'/'+'a'+'>');},createWebStartLaunchButton:function(jnlp,minimumVersion){if(deployJava.returnPage==null){deployJava.returnPage=jnlp;}
+var url='javascript:'+'if (!deployJava.isWebStartInstalled(&quot;'+
+minimumVersion+'&quot;)) {'+'if (deployJava.installLatestJRE()) {'+'if (deployJava.launch(&quot;'+jnlp+'&quot;)) {}'+'}'+'} else {'+'if (deployJava.launch(&quot;'+jnlp+'&quot;)) {}'+'}';document.write('<'+'a href="'+url+'" onMouseOver="window.status=\'\'; '+'return true;"><'+'img '+'src="'+deployJava.launchButtonPNG+'" '+'border="0" /><'+'/'+'a'+'>');},launch:function(jnlp){if(deployJava.isPluginInstalled()){return deployJava.getPlugin().launch(jnlp);}else{document.location=jnlp;return true;}},isPluginInstalled:function(){var plugin=deployJava.getPlugin();if(plugin&&plugin.jvms){return true;}else{return false;}},isAutoUpdateEnabled:function(){if(deployJava.isPluginInstalled()){return deployJava.getPlugin().isAutoUpdateEnabled();}
+return false;},setAutoUpdateEnabled:function(){if(deployJava.isPluginInstalled()){return deployJava.getPlugin().setAutoUpdateEnabled();}
+return false;},setInstallerType:function(type){deployJava.installType=type;if(deployJava.isPluginInstalled()){return deployJava.getPlugin().setInstallerType(type);}
+return false;},setAdditionalPackages:function(packageList){if(deployJava.isPluginInstalled()){return deployJava.getPlugin().setAdditionalPackages(packageList);}
+return false;},setEarlyAccess:function(enabled){deployJava.EAInstallEnabled=enabled;},isPlugin2:function(){if(deployJava.isPluginInstalled()){if(deployJava.versionCheck('1.6.0_10+')){try{return deployJava.getPlugin().isPlugin2();}catch(err){}}}
+return false;},allowPlugin:function(){deployJava.getBrowser();var ret=('Chrome'!=deployJava.browserName2&&'Safari'!=deployJava.browserName2&&'Opera'!=deployJava.browserName2);return ret;},getPlugin:function(){deployJava.refresh();var ret=null;if(deployJava.allowPlugin()){ret=document.getElementById('deployJavaPlugin');}
+return ret;},compareVersionToPattern:function(version,patternArray,familyMatch){var regex="^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$";var matchData=version.match(regex);if(matchData!=null){var index=0;var result=new Array();for(var i=1;i<matchData.length;++i){if((typeof matchData[i]=='string')&&(matchData[i]!=''))
+{result[index]=matchData[i];index++;}}
+var l=Math.min(result.length,patternArray.length);if(familyMatch){for(var i=0;i<l;++i){if(result[i]!=patternArray[i])return false;}
+return true;}else{for(var i=0;i<l;++i){if(result[i]<patternArray[i]){return false;}else if(result[i]>patternArray[i]){return true;}}
+return true;}}else{return false;}},getBrowser:function(){if(deployJava.browserName==null){var browser=navigator.userAgent.toLowerCase();if(deployJava.debug){alert('userAgent -> '+browser);}
+if(browser.indexOf('msie')!=-1){deployJava.browserName='MSIE';deployJava.browserName2='MSIE';}else if(browser.indexOf('firefox')!=-1){deployJava.browserName='Netscape Family';deployJava.browserName2='Firefox';}else if(browser.indexOf('chrome')!=-1){deployJava.browserName='Netscape Family';deployJava.browserName2='Chrome';}else if(browser.indexOf('safari')!=-1){deployJava.browserName='Netscape Family';deployJava.browserName2='Safari';}else if(browser.indexOf('mozilla')!=-1){deployJava.browserName='Netscape Family';deployJava.browserName2='Other';}else if(browser.indexOf('opera')!=-1){deployJava.browserName='Netscape Family';deployJava.browserName2='Opera';}else{deployJava.browserName='?';deployJava.browserName2='unknown';}
+if(deployJava.debug){alert('Detected browser name:'+deployJava.browserName+', '+deployJava.browserName2);}}
+return deployJava.browserName;},testUsingActiveX:function(version){var objectName='JavaWebStart.isInstalled.'+version+'.0';if(!ActiveXObject){if(deployJava.debug){alert('Browser claims to be IE, but no ActiveXObject object?');}
+return false;}
+try{return(new ActiveXObject(objectName)!=null);}catch(exception){return false;}},testForMSVM:function(){var clsid='{08B0E5C0-4FCB-11CF-AAA5-00401C608500}';if(typeof oClientCaps!='undefined'){var v=oClientCaps.getComponentVersion(clsid,"ComponentID");if((v=='')||(v=='5,0,5000,0')){return false;}else{return true;}}else{return false;}},testUsingMimeTypes:function(version){if(!navigator.mimeTypes){if(deployJava.debug){alert('Browser claims to be Netscape family, but no mimeTypes[] array?');}
+return false;}
+for(var i=0;i<navigator.mimeTypes.length;++i){s=navigator.mimeTypes[i].type;var m=s.match(/^application\/x-java-applet\x3Bversion=(1\.8|1\.7|1\.6|1\.5|1\.4\.2)$/);if(m!=null){if(deployJava.compareVersions(m[1],version)){return true;}}}
+return false;},testUsingPluginsArray:function(version){if((!navigator.plugins)||(!navigator.plugins.length)){return false;}
+var platform=navigator.platform.toLowerCase();for(var i=0;i<navigator.plugins.length;++i){s=navigator.plugins[i].description;if(s.search(/^Java Switchable Plug-in (Cocoa)/)!=-1){if(deployJava.compareVersions("1.5.0",version)){return true;}}else if(s.search(/^Java/)!=-1){if(platform.indexOf('win')!=-1){if(deployJava.compareVersions("1.5.0",version)||deployJava.compareVersions("1.6.0",version)){return true;}}}}
+if(deployJava.compareVersions("1.5.0",version)){return true;}
+return false;},IEInstall:function(){location.href=deployJava.getJavaURL+
+((deployJava.returnPage!=null)?('&returnPage='+deployJava.returnPage):'')+
+((deployJava.locale!=null)?('&locale='+deployJava.locale):'')+
+((deployJava.brand!=null)?('&brand='+deployJava.brand):'')+
+((deployJava.installType!=null)?('&type='+deployJava.installType):'');return false;},done:function(name,result){},FFInstall:function(){location.href=deployJava.getJavaURL+
+((deployJava.returnPage!=null)?('&returnPage='+deployJava.returnPage):'')+
+((deployJava.locale!=null)?('&locale='+deployJava.locale):'')+
+((deployJava.brand!=null)?('&brand='+deployJava.brand):'')+
+((deployJava.installType!=null)?('&type='+deployJava.installType):'');return false;},compareVersions:function(installed,required){var a=installed.split('.');var b=required.split('.');for(var i=0;i<a.length;++i){a[i]=Number(a[i]);}
+for(var i=0;i<b.length;++i){b[i]=Number(b[i]);}
+if(a.length==2){a[2]=0;}
+if(a[0]>b[0])return true;if(a[0]<b[0])return false;if(a[1]>b[1])return true;if(a[1]<b[1])return false;if(a[2]>b[2])return true;if(a[2]<b[2])return false;return true;},enableAlerts:function(){deployJava.browserName=null;deployJava.debug=true;},poll:function(){deployJava.refresh();var postInstallJREList=deployJava.getJREs();if((deployJava.preInstallJREList.length==0)&&(postInstallJREList.length!=0)){clearInterval(deployJava.myInterval);if(deployJava.returnPage!=null){location.href=deployJava.returnPage;};}
+if((deployJava.preInstallJREList.length!=0)&&(postInstallJREList.length!=0)&&(deployJava.preInstallJREList[0]!=postInstallJREList[0])){clearInterval(deployJava.myInterval);if(deployJava.returnPage!=null){location.href=deployJava.returnPage;}}},writePluginTag:function(){var browser=deployJava.getBrowser();if(browser=='MSIE'){document.write('<'+'object classid="clsid:CAFEEFAC-DEC7-0000-0000-ABCDEFFEDCBA" '+'id="deployJavaPlugin" width="0" height="0">'+'<'+'/'+'object'+'>');}else if(browser=='Netscape Family'&&deployJava.allowPlugin()){deployJava.writeEmbedTag();}},refresh:function(){navigator.plugins.refresh(false);var browser=deployJava.getBrowser();if(browser=='Netscape Family'&&deployJava.allowPlugin()){var plugin=document.getElementById('deployJavaPlugin');if(plugin==null){deployJava.writeEmbedTag();}}},writeEmbedTag:function(){var written=false;if(navigator.mimeTypes!=null){for(var i=0;i<navigator.mimeTypes.length;i++){if(navigator.mimeTypes[i].type==deployJava.mimeType){if(navigator.mimeTypes[i].enabledPlugin){document.write('<'+'embed id="deployJavaPlugin" type="'+
+deployJava.mimeType+'" hidden="true" />');written=true;}}}
+if(!written)for(var i=0;i<navigator.mimeTypes.length;i++){if(navigator.mimeTypes[i].type==deployJava.oldMimeType){if(navigator.mimeTypes[i].enabledPlugin){document.write('<'+'embed id="deployJavaPlugin" type="'+
+deployJava.oldMimeType+'" hidden="true" />');}}}}},do_initialize:function(){deployJava.writePluginTag();if(deployJava.locale==null){var loc=null;if(loc==null)try{loc=navigator.userLanguage;}catch(err){}
+if(loc==null)try{loc=navigator.systemLanguage;}catch(err){}
+if(loc==null)try{loc=navigator.language;}catch(err){}
+if(loc!=null){loc.replace("-","_")
+deployJava.locale=loc;}}}};deployJava.do_initialize();
+
diff --git a/javascript/fetch_whorls.js b/javascript/fetch_whorls.js
new file mode 100755 (executable)
index 0000000..78b387d
--- /dev/null
@@ -0,0 +1,203 @@
+$("#flashcontent").flash(
+  {
+    "src": "/resources/fonts2.swf",
+    "width": "1",
+    "height": "1",
+    "swliveconnect": "true",
+    "id": "flashfontshelper",
+    "name": "flashfontshelper"
+  },
+  { update: false }
+);
+
+function identify_plugins(){
+  // fetch and serialize plugins
+  var plugins = "";
+  // in Mozilla and in fact most non-IE browsers, this is easy
+  if (navigator.plugins) {
+    var np = navigator.plugins;
+    var plist = new Array();
+    // sorting navigator.plugins is a right royal pain
+    // but it seems to be necessary because their order
+    // is non-constant in some browsers
+    for (var i = 0; i < np.length; i++) {
+      plist[i] = np[i].name + "; ";
+      plist[i] += np[i].description + "; ";
+      plist[i] += np[i].filename + ";";
+      for (var n = 0; n < np[i].length; n++) {
+        plist[i] += " (" + np[i][n].description +"; "+ np[i][n].type +
+                   "; "+ np[i][n].suffixes + ")";
+      }
+      plist[i] += ". ";
+    }
+    plist.sort(); 
+    for (i = 0; i < np.length; i++)
+      plugins+= "Plugin "+i+": " + plist[i];
+  }
+  // in IE, things are much harder; we use PluginDetect to get less
+  // information (only the plugins listed below & their version numbers)
+  if (plugins == "") {
+    var pp = new Array();
+    pp[0] = "Java"; pp[1] = "QuickTime"; pp[2] = "DevalVR"; pp[3] = "Shockwave";
+    pp[4] = "Flash"; pp[5] = "WindowsMediaplayer"; pp[6] = "Silverlight"; 
+    pp[7] = "VLC";
+    var version;
+    for ( p in pp ) {
+      version = PluginDetect.getVersion(pp[p]);
+      if (version) 
+        plugins += pp[p] + " " + version + "; "
+    }
+    plugins += ieAcrobatVersion();
+  }
+  return plugins;
+}
+
+function ieAcrobatVersion() {
+  // estimate the version of Acrobat on IE using horrible horrible hacks
+  if (window.ActiveXObject) {
+    for (var x = 2; x < 10; x++) {
+      try {
+        oAcro=eval("new ActiveXObject('PDF.PdfCtrl."+x+"');");
+        if (oAcro) 
+          return "Adobe Acrobat version" + x + ".?";
+      } catch(ex) {}
+    }
+    try {
+      oAcro4=new ActiveXObject('PDF.PdfCtrl.1');
+      if (oAcro4)
+        return "Adobe Acrobat version 4.?";
+    } catch(ex) {}
+    try {
+      oAcro7=new ActiveXObject('AcroPDF.PDF.1');
+      if (oAcro7)
+        return "Adobe Acrobat version 7.?";
+    } catch (ex) {}
+    return "";
+  }
+}
+
+function get_fonts() {
+  // Try flash first
+       var fonts = "";
+       var obj = document.getElementById("flashfontshelper");
+       if (obj && typeof(obj.GetVariable) != "undefined") {
+               fonts = obj.GetVariable("/:user_fonts");
+    fonts = fonts.replace(/,/g,", ");
+    fonts += " (via Flash)";
+       } else {
+    // Try java fonts
+    try {
+      var javafontshelper = document.getElementById("javafontshelper");
+      var jfonts = javafontshelper.getFontList();
+      for (var n = 0; n < jfonts.length; n++) {
+        fonts = fonts + jfonts[n] + ", ";
+      }
+    fonts += " (via Java)";
+    } catch (ex) {}
+  }
+  if ("" == fonts)
+    fonts = "No Flash or Java fonts detected";
+  return fonts;
+}
+
+function set_dom_storage(){
+  try { 
+    localStorage.panopticlick = "yea";
+    sessionStorage.panopticlick = "yea";
+  } catch (ex) { }
+}
+
+function test_dom_storage(){
+  var supported = "";
+  try {
+    if (localStorage.panopticlick == "yea") {
+       supported += "DOM localStorage: Yes";
+    } else {
+       supported += "DOM localStorage: No";
+    }
+  } catch (ex) { supported += "DOM localStorage: No"; }
+
+  try {
+    if (sessionStorage.panopticlick == "yea") {
+       supported += ", DOM sessionStorage: Yes";
+    } else {
+       supported += ", DOM sessionStorage: No";
+    }
+  } catch (ex) { supported += ", DOM sessionStorage: No"; }
+
+  return supported;
+}
+
+function test_ie_userdata(){
+  try {
+    oPersistDiv.setAttribute("remember", "remember this value");
+    oPersistDiv.save("oXMLStore");
+    oPersistDiv.setAttribute("remember", "overwritten!");
+    oPersistDiv.load("oXMLStore");
+    if ("remember this value" == (oPersistDiv.getAttribute("remember"))) {
+      return ", IE userData: Yes";
+    } else { 
+      return ", IE userData: No";
+    }
+  } catch (ex) {
+      return ", IE userData: No";
+  }
+}
+
+var success = 0;
+var retries = 20;
+
+function retry_post() {
+  retries = retries -1;
+  if (success || retries == 0)
+    return 0;
+  // no luck yet
+  fetch_client_whorls()
+}
+
+function fetch_client_whorls(){
+  // fetch client-side vars
+  var whorls = new Object();
+
+  // this is a backup plan
+  setTimeout("retry_post()",1100);
+
+  try { 
+    whorls['plugins'] = identify_plugins(); 
+  } catch(ex) { 
+    whorls['plugins'] = "permission denied";
+  }
+
+  whorls['fonts'] = get_fonts();
+  
+  try { 
+    whorls['timezone'] = new Date().getTimezoneOffset();
+  } catch(ex) {
+    whorls['timezone'] = "permission denied";
+  }
+
+  try {
+    whorls['video'] = screen.width+"x"+screen.height+"x"+screen.colorDepth;
+  } catch(ex) {
+    whorls['video'] = "permission denied";
+  }
+
+  whorls['supercookies'] = test_dom_storage() + test_ie_userdata();
+
+  // send to server for logging / calculating
+  // and fetch results
+  $.post("/SaveDetails.php?saveData=true", whorls,
+    function(input){
+      success = 1;
+      $('#content').html(input);
+    }, "html" );
+  
+};
+
+
+set_dom_storage();
+
+$(document).ready(function(){
+  // wait some time for the flash font detection:
+  setTimeout("fetch_client_whorls()",1000);
+});
diff --git a/javascript/jquery-1.3.2.min.js b/javascript/jquery-1.3.2.min.js
new file mode 100755 (executable)
index 0000000..b1ae21d
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ *  Copyright 2009, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.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\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<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>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
\ No newline at end of file
diff --git a/javascript/jquery.flash.js b/javascript/jquery.flash.js
new file mode 100755 (executable)
index 0000000..e47cc2e
--- /dev/null
@@ -0,0 +1,288 @@
+/**
+ * Flash (http://jquery.lukelutman.com/plugins/flash)
+ * A jQuery plugin for embedding Flash movies.
+ * 
+ * Version 1.0
+ * November 9th, 2006
+ *
+ * Copyright (c) 2006 Luke Lutman (http://www.lukelutman.com)
+ * Dual licensed under the MIT and GPL licenses.
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.opensource.org/licenses/gpl-license.php
+ * 
+ * Inspired by:
+ * SWFObject (http://blog.deconcept.com/swfobject/)
+ * UFO (http://www.bobbyvandersluis.com/ufo/)
+ * sIFR (http://www.mikeindustries.com/sifr/)
+ * 
+ * IMPORTANT: 
+ * The packed version of jQuery breaks ActiveX control
+ * activation in Internet Explorer. Use JSMin to minifiy
+ * jQuery (see: http://jquery.lukelutman.com/plugins/flash#activex).
+ *
+ **/ 
+;(function(){
+       
+var $$;
+
+/**
+ * 
+ * @desc Replace matching elements with a flash movie.
+ * @author Luke Lutman
+ * @version 1.0.1
+ *
+ * @name flash
+ * @param Hash htmlOptions Options for the embed/object tag.
+ * @param Hash pluginOptions Options for detecting/updating the Flash plugin (optional).
+ * @param Function replace Custom block called for each matched element if flash is installed (optional).
+ * @param Function update Custom block called for each matched if flash isn't installed (optional).
+ * @type jQuery
+ *
+ * @cat plugins/flash
+ * 
+ * @example $('#hello').flash({ src: 'hello.swf' });
+ * @desc Embed a Flash movie.
+ *
+ * @example $('#hello').flash({ src: 'hello.swf' }, { version: 8 });
+ * @desc Embed a Flash 8 movie.
+ *
+ * @example $('#hello').flash({ src: 'hello.swf' }, { expressInstall: true });
+ * @desc Embed a Flash movie using Express Install if flash isn't installed.
+ *
+ * @example $('#hello').flash({ src: 'hello.swf' }, { update: false });
+ * @desc Embed a Flash movie, don't show an update message if Flash isn't installed.
+ *
+**/
+$$ = jQuery.fn.flash = function(htmlOptions, pluginOptions, replace, update) {
+       
+       // Set the default block.
+       var block = replace || $$.replace;
+       
+       // Merge the default and passed plugin options.
+       pluginOptions = $$.copy($$.pluginOptions, pluginOptions);
+       
+       // Detect Flash.
+       if(!$$.hasFlash(pluginOptions.version)) {
+               // Use Express Install (if specified and Flash plugin 6,0,65 or higher is installed).
+               if(pluginOptions.expressInstall && $$.hasFlash(6,0,65)) {
+                       // Add the necessary flashvars (merged later).
+                       var expressInstallOptions = {
+                               flashvars: {    
+                                       MMredirectURL: location,
+                                       MMplayerType: 'PlugIn',
+                                       MMdoctitle: jQuery('title').text() 
+                               }                                       
+                       };
+               // Ask the user to update (if specified).
+               } else if (pluginOptions.update) {
+                       // Change the block to insert the update message instead of the flash movie.
+                       block = update || $$.update;
+               // Fail
+               } else {
+                       // The required version of flash isn't installed.
+                       // Express Install is turned off, or flash 6,0,65 isn't installed.
+                       // Update is turned off.
+                       // Return without doing anything.
+                       return this;
+               }
+       }
+       
+       // Merge the default, express install and passed html options.
+       htmlOptions = $$.copy($$.htmlOptions, expressInstallOptions, htmlOptions);
+       
+       // Invoke $block (with a copy of the merged html options) for each element.
+       return this.each(function(){
+               block.call(this, $$.copy(htmlOptions));
+       });
+       
+};
+/**
+ *
+ * @name flash.copy
+ * @desc Copy an arbitrary number of objects into a new object.
+ * @type Object
+ * 
+ * @example $$.copy({ foo: 1 }, { bar: 2 });
+ * @result { foo: 1, bar: 2 };
+ *
+**/
+$$.copy = function() {
+       var options = {}, flashvars = {};
+       for(var i = 0; i < arguments.length; i++) {
+               var arg = arguments[i];
+               if(arg == undefined) continue;
+               jQuery.extend(options, arg);
+               // don't clobber one flash vars object with another
+               // merge them instead
+               if(arg.flashvars == undefined) continue;
+               jQuery.extend(flashvars, arg.flashvars);
+       }
+       options.flashvars = flashvars;
+       return options;
+};
+/*
+ * @name flash.hasFlash
+ * @desc Check if a specific version of the Flash plugin is installed
+ * @type Boolean
+ *
+**/
+$$.hasFlash = function() {
+       // look for a flag in the query string to bypass flash detection
+       if(/hasFlash\=true/.test(location)) return true;
+       if(/hasFlash\=false/.test(location)) return false;
+       var pv = $$.hasFlash.playerVersion().match(/\d+/g);
+       var rv = String([arguments[0], arguments[1], arguments[2]]).match(/\d+/g) || String($$.pluginOptions.version).match(/\d+/g);
+       for(var i = 0; i < 3; i++) {
+               pv[i] = parseInt(pv[i] || 0);
+               rv[i] = parseInt(rv[i] || 0);
+               // player is less than required
+               if(pv[i] < rv[i]) return false;
+               // player is greater than required
+               if(pv[i] > rv[i]) return true;
+       }
+       // major version, minor version and revision match exactly
+       return true;
+};
+/**
+ *
+ * @name flash.hasFlash.playerVersion
+ * @desc Get the version of the installed Flash plugin.
+ * @type String
+ *
+**/
+$$.hasFlash.playerVersion = function() {
+       // ie
+       try {
+               try {
+                       // avoid fp6 minor version lookup issues
+                       // see: http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
+                       var axo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6');
+                       try { axo.AllowScriptAccess = 'always'; } 
+                       catch(e) { return '6,0,0'; }                            
+               } catch(e) {}
+               return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
+       // other browsers
+       } catch(e) {
+               try {
+                       if(navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin){
+                               return (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g, ",").match(/^,?(.+),?$/)[1];
+                       }
+               } catch(e) {}           
+       }
+       return '0,0,0';
+};
+/**
+ *
+ * @name flash.htmlOptions
+ * @desc The default set of options for the object or embed tag.
+ *
+**/
+$$.htmlOptions = {
+       height: 240,
+       flashvars: {},
+       pluginspage: 'http://www.adobe.com/go/getflashplayer',
+       src: '#',
+       type: 'application/x-shockwave-flash',
+       width: 320              
+};
+/**
+ *
+ * @name flash.pluginOptions
+ * @desc The default set of options for checking/updating the flash Plugin.
+ *
+**/
+$$.pluginOptions = {
+       expressInstall: false,
+       update: true,
+       version: '6.0.65'
+};
+/**
+ *
+ * @name flash.replace
+ * @desc The default method for replacing an element with a Flash movie.
+ *
+**/
+$$.replace = function(htmlOptions) {
+       this.innerHTML = '<div class="alt">'+this.innerHTML+'</div>';
+       jQuery(this)
+               .addClass('flash-replaced')
+               .prepend($$.transform(htmlOptions));
+};
+/**
+ *
+ * @name flash.update
+ * @desc The default method for replacing an element with an update message.
+ *
+**/
+$$.update = function(htmlOptions) {
+       var url = String(location).split('?');
+       url.splice(1,0,'?hasFlash=true&');
+       url = url.join('');
+       var msg = '<p>This content requires the Flash Player. <a href="http://www.adobe.com/go/getflashplayer">Download Flash Player</a>. Already have Flash Player? <a href="'+url+'">Click here.</a></p>';
+       this.innerHTML = '<span class="alt">'+this.innerHTML+'</span>';
+       jQuery(this)
+               .addClass('flash-update')
+               .prepend(msg);
+};
+/**
+ *
+ * @desc Convert a hash of html options to a string of attributes, using Function.apply(). 
+ * @example toAttributeString.apply(htmlOptions)
+ * @result foo="bar" foo="bar"
+ *
+**/
+function toAttributeString() {
+       var s = '';
+       for(var key in this)
+               if(typeof this[key] != 'function')
+                       s += key+'="'+this[key]+'" ';
+       return s;               
+};
+/**
+ *
+ * @desc Convert a hash of flashvars to a url-encoded string, using Function.apply(). 
+ * @example toFlashvarsString.apply(flashvarsObject)
+ * @result foo=bar&foo=bar
+ *
+**/
+function toFlashvarsString() {
+       var s = '';
+       for(var key in this)
+               if(typeof this[key] != 'function')
+                       s += key+'='+encodeURIComponent(this[key])+'&';
+       return s.replace(/&$/, '');             
+};
+/**
+ *
+ * @name flash.transform
+ * @desc Transform a set of html options into an embed tag.
+ * @type String 
+ *
+ * @example $$.transform(htmlOptions)
+ * @result <embed src="foo.swf" ... />
+ *
+ * Note: The embed tag is NOT standards-compliant, but it 
+ * works in all current browsers. flash.transform can be
+ * overwritten with a custom function to generate more 
+ * standards-compliant markup.
+ *
+**/
+$$.transform = function(htmlOptions) {
+       htmlOptions.toString = toAttributeString;
+       if(htmlOptions.flashvars) htmlOptions.flashvars.toString = toFlashvarsString;
+       return '<embed ' + String(htmlOptions) + '/>';          
+};
+
+/**
+ *
+ * Flash Player 9 Fix (http://blog.deconcept.com/2006/07/28/swfobject-143-released/)
+ *
+**/
+if (window.attachEvent) {
+       window.attachEvent("onbeforeunload", function(){
+               __flash_unloadHandler = function() {};
+               __flash_savedUnloadHandler = function() {};
+       });
+}
+       
+})();
\ No newline at end of file
diff --git a/javascript/plugin-detect-0.6.3.js b/javascript/plugin-detect-0.6.3.js
new file mode 100755 (executable)
index 0000000..39d6133
--- /dev/null
@@ -0,0 +1,636 @@
+/* PluginDetect v0.6.3 [ onWindowLoaded getVersion Java(OTF&getInfo) QT DevalVR Shockwave Flash WMP Silverlight VLC ] by Eric Gerds www.pinlady.net/PluginDetect */ if(!PluginDetect){var PluginDetect={getNum:function(b,c){if(!this.num(b)){return null
+}var a;
+if(typeof c=="undefined"){a=/[\d][\d\.\_,-]*/.exec(b)
+}else{a=(new RegExp(c)).exec(b)
+}return a?a[0].replace(/[\.\_-]/g,","):null
+},hasMimeType:function(c){if(PluginDetect.isIE){return null
+}var b,a,d,e=c.constructor==String?[c]:c;
+for(d=0;
+d<e.length;
+d++){b=navigator.mimeTypes[e[d]];
+if(b&&b.enabledPlugin){a=b.enabledPlugin;
+if(a.name||a.description){return b
+}}}return null
+},findNavPlugin:function(g,d){var a=g.constructor==String?g:g.join(".*"),e=d===false?"":"\\d",b,c=new RegExp(a+".*"+e+"|"+e+".*"+a,"i"),f=navigator.plugins;
+for(b=0;
+b<f.length;
+b++){if(c.test(f[b].description)||c.test(f[b].name)){return f[b]
+}}return null
+},AXO:window.ActiveXObject,getAXO:function(b,a){var f=null,d,c=false;
+try{f=new this.AXO(b);
+c=true
+}catch(d){}if(typeof a!="undefined"){delete f;
+return c
+}return f
+},num:function(a){return(typeof a!="string"?false:(/\d/).test(a))
+},compareNums:function(g,e){var d=this,c,b,a,f=window.parseInt;
+if(!d.num(g)||!d.num(e)){return 0
+}if(d.plugin&&d.plugin.compareNums){return d.plugin.compareNums(g,e)
+}c=g.split(",");
+b=e.split(",");
+for(a=0;
+a<Math.min(c.length,b.length);
+a++){if(f(c[a],10)>f(b[a],10)){return 1
+}if(f(c[a],10)<f(b[a],10)){return -1
+}}return 0
+},formatNum:function(b){if(!this.num(b)){return null
+}var a,c=b.replace(/\s/g,"").replace(/[\.\_]/g,",").split(",").concat(["0","0","0","0"]);
+for(a=0;
+a<4;
+a++){if(/^(0+)(.+)$/.test(c[a])){c[a]=RegExp.$2
+}}if(!(/\d/).test(c[0])){c[0]="0"
+}return c[0]+","+c[1]+","+c[2]+","+c[3]
+},initScript:function(){var $=this,userAgent=navigator.userAgent;
+$.isIE=
+/*@cc_on!@*/
+false;
+$.IEver=$.isIE&&((/MSIE\s*(\d\.?\d*)/i).exec(userAgent))?parseFloat(RegExp.$1,10):-1;
+$.ActiveXEnabled=false;
+if($.isIE){var x,progid=["Msxml2.XMLHTTP","Msxml2.DOMDocument","Microsoft.XMLDOM","ShockwaveFlash.ShockwaveFlash","TDCCtl.TDCCtl","Shell.UIHelper","Scripting.Dictionary","wmplayer.ocx"];
+for(x=0;
+x<progid.length;
+x++){if($.getAXO(progid[x],1)){$.ActiveXEnabled=true;
+break
+}}$.head=typeof document.getElementsByTagName!="undefined"?document.getElementsByTagName("head")[0]:null
+}$.isGecko=!$.isIE&&typeof navigator.product=="string"&&(/Gecko/i).test(navigator.product)&&(/Gecko\s*\/\s*\d/i).test(userAgent)?true:false;
+$.GeckoRV=$.isGecko?$.formatNum((/rv\s*\:\s*([\.\,\d]+)/i).test(userAgent)?RegExp.$1:"0.9"):null;
+$.isSafari=!$.isIE&&(/Safari\s*\/\s*\d/i).test(userAgent)?true:false;
+$.isChrome=(/Chrome\s*\/\s*\d/i).test(userAgent)?true:false;
+$.onWindowLoaded(0)
+},init:function(c,a){if(typeof c!="string"){return -3
+}c=c.toLowerCase().replace(/\s/g,"");
+var b=this,d;
+if(typeof b[c]=="undefined"){return -3
+}d=b[c];
+b.plugin=d;
+if(typeof d.installed=="undefined"||a==true){d.installed=null;
+d.version=null;
+d.version0=null;
+d.getVersionDone=null;
+d.$=b
+}b.garbage=false;
+if(b.isIE&&!b.ActiveXEnabled){if(b.plugin!=b.java){return -2
+}}return 1
+},isMinVersion:function(g,e,c,b){
+return -3
+},getVersion:function(e,b,a){
+var d=PluginDetect,c=d.init(e),f;
+if(c<0){return null
+}f=d.plugin;
+if(f.getVersionDone!=1){f.getVersion(b,a);
+if(f.getVersionDone===null){f.getVersionDone=1
+}}d.cleanup();
+return(f.version||f.version0);
+;
+return null
+},getInfo:function(f,c,b){var a={};
+;
+var e=PluginDetect,d=e.init(f),g;
+if(d<0){return a
+}g=e.plugin;
+if(typeof g.getInfo!="undefined"){if(g.getVersionDone===null){e.getVersion(f,c,b)
+}a=g.getInfo()
+};
+return a
+},cleanup:function(){
+var a=this;
+if(a.garbage&&typeof window.CollectGarbage!="undefined"){window.CollectGarbage()
+}
+},isActiveXObject:function(b){
+var d=this,a,g,f="/",c='<object width="1" height="1" style="display:none" '+d.plugin.getCodeBaseVersion(b)+">"+d.plugin.HTML+"<"+f+"object>";
+if(d.head.firstChild){d.head.insertBefore(document.createElement("object"),d.head.firstChild)
+}else{d.head.appendChild(document.createElement("object"))
+}d.head.firstChild.outerHTML=c;
+try{d.head.firstChild.classid=d.plugin.classID
+}catch(g){}a=false;
+try{if(d.head.firstChild.object){a=true
+}}catch(g){}try{if(a&&d.head.firstChild.readyState<4){d.garbage=true
+}}catch(g){}d.head.removeChild(d.head.firstChild);
+return a;
+
+},codebaseSearch:function(c){var e=this;
+if(!e.ActiveXEnabled){return null
+}if(typeof c!="undefined"){return e.isActiveXObject(c)
+};
+var j=[0,0,0,0],g,f,b=e.plugin.digits,i=function(k,m){var l=(k==0?m:j[0])+","+(k==1?m:j[1])+","+(k==2?m:j[2])+","+(k==3?m:j[3]);
+return e.isActiveXObject(l)
+};
+var h,d,a=false;
+for(g=0;
+g<b.length;
+g++){h=b[g]*2;
+j[g]=0;
+for(f=0;
+f<20;
+f++){if(h==1&&g>0&&a){break
+}if(h-j[g]>1){d=Math.round((h+j[g])/2);
+if(i(g,d)){j[g]=d;
+a=true
+}else{h=d
+}}else{if(h-j[g]==1){h--;
+if(!a&&i(g,h)){a=true
+}break
+}else{if(!a&&i(g,h)){a=true
+}break
+}}}if(!a){return null
+}}return j.join(",");
+
+},dummy1:0}
+}PluginDetect.onDetectionDone=function(g,e,d,a){
+return -1
+};
+PluginDetect.onWindowLoaded=function(c){
+var b=PluginDetect,a=window;
+if(b.EventWinLoad===true){}else{b.winLoaded=false;
+b.EventWinLoad=true;
+if(typeof a.addEventListener!="undefined"){a.addEventListener("load",b.runFuncs,false)
+}else{if(typeof a.attachEvent!="undefined"){a.attachEvent("onload",b.runFuncs)
+}else{if(typeof a.onload=="function"){b.funcs[b.funcs.length]=a.onload
+}a.onload=b.runFuncs
+}}}if(typeof c=="function"){b.funcs[b.funcs.length]=c
+}
+};
+;
+PluginDetect.funcs=[0];
+PluginDetect.runFuncs=function(){var b=PluginDetect,a;
+b.winLoaded=true;
+for(a=0;
+a<b.funcs.length;
+a++){if(typeof b.funcs[a]=="function"){b.funcs[a](b);
+b.funcs[a]=null
+}}};
+;
+PluginDetect.quicktime={mimeType:["video/quicktime","application/x-quicktimeplayer","image/x-macpaint","image/x-quicktime"],progID:"QuickTimeCheckObject.QuickTimeCheck.1",progID0:"QuickTime.QuickTime",classID:"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B",minIEver:7,HTML:'<param name="src" value="A14999.mov" /><param name="controller" value="false" />',getCodeBaseVersion:function(a){return'codebase="#version='+a+'"'
+},digits:[8,64,16,0],clipTo3digits:function(f){if(f===null||typeof f=="undefined"){return null
+}var e,d,h,g=this.$;
+e=f.split(",");
+if(g.compareNums(f,"7,60,0,0")<0&&g.compareNums(f,"7,50,0,0")>=0){d=e[0]+","+e[1].charAt(0)+","+e[1].charAt(1)+","+e[2]
+}else{d=e[0]+","+e[1]+","+e[2]+","+e[3]
+}h=d.split(",");
+return h[0]+","+h[1]+","+h[2]+",0"
+},getVersion:function(){var a=null,d,b=this.$,e=true;
+if(!b.isIE){if(navigator.platform&&(/linux/i).test(navigator.platform)){e=false
+}if(e){d=b.findNavPlugin(["QuickTime","(Plug-in|Plugin)"]);
+if(d&&d.name&&b.hasMimeType(this.mimeType)){a=b.getNum(d.name)
+}}this.installed=a?1:-1
+}else{var c;
+if(b.IEver>=this.minIEver&&b.getAXO(this.progID0,1)){a=b.codebaseSearch()
+}else{c=b.getAXO(this.progID);
+if(c&&c.QuickTimeVersion){a=c.QuickTimeVersion.toString(16);
+a=a.charAt(0)+"."+a.charAt(1)+"."+a.charAt(2)
+}}this.installed=a?1:(b.getAXO(this.progID0,1)?0:-1)
+}this.version=this.clipTo3digits(b.formatNum(a))
+}};
+;
+PluginDetect.java={mimeType:"application/x-java-applet",classID:"clsid:8AD9C840-044E-11D1-B3E9-00805F499D93",DTKclassID:"clsid:CAFEEFAC-DEC7-0000-0000-ABCDEFFEDCBA",DTKmimeType:"application/npruntime-scriptable-plugin;DeploymentToolkit",JavaVersions:[[1,9,2,25],[1,8,2,25],[1,7,2,25],[1,6,2,25],[1,5,2,25],[1,4,2,25],[1,3,1,25]],searchJavaPluginAXO:function(){var h=null,a=this,c=a.$,g=[],j=[1,5,0,14],i=[1,6,0,2],f=[1,3,1,0],e=[1,4,2,0],d=[1,5,0,7],b=false;
+if(!c.ActiveXEnabled){return null
+};
+b=true;
+;
+if(c.IEver>=a.minIEver){g=a.searchJavaAXO(i,i,b);
+if(g.length>0&&b){g=a.searchJavaAXO(j,j,b)
+}}else{
+if(b){g=a.searchJavaAXO(d,d,true)
+};
+if(g.length==0){g=a.searchJavaAXO(f,e,false)
+}}if(g.length>0){h=g[0]
+}a.JavaPlugin_versions=[].concat(g);
+return h
+},searchJavaAXO:function(l,i,m){var n,f,h=this.$,p,k,a,e,g,j,b,q=[];
+if(h.compareNums(l.join(","),i.join(","))>0){i=l
+}i=h.formatNum(i.join(","));
+var o,d="1,4,2,0",c="JavaPlugin."+l[0]+""+l[1]+""+l[2]+""+(l[3]>0?("_"+(l[3]<10?"0":"")+l[3]):"");
+for(n=0;
+n<this.JavaVersions.length;
+n++){f=this.JavaVersions[n];
+p="JavaPlugin."+f[0]+""+f[1];
+g=f[0]+"."+f[1]+".";
+for(a=f[2];
+a>=0;
+a--){b="JavaWebStart.isInstalled."+g+a+".0";
+if(h.compareNums(f[0]+","+f[1]+","+a+",0",i)>=0&&!h.getAXO(b,1)){continue
+}o=h.compareNums(f[0]+","+f[1]+","+a+",0",d)<0?true:false;
+for(e=f[3];
+e>=0;
+e--){k=a+"_"+(e<10?"0"+e:e);
+j=p+k;
+if(h.getAXO(j,1)&&(o||h.getAXO(b,1))){q[q.length]=g+k;
+if(!m){return q
+}}if(j==c){return q
+}}if(h.getAXO(p+a,1)&&(o||h.getAXO(b,1))){q[q.length]=g+a;
+if(!m){return q
+}}if(p+a==c){return q
+}}}return q
+},minIEver:7,getFromMimeType:function(a){var h,f,c=this.$,j=new RegExp(a),d,k,i={},e=0,b,g=[""];
+for(h=0;
+h<navigator.mimeTypes.length;
+h++){k=navigator.mimeTypes[h];
+if(j.test(k.type)&&k.enabledPlugin){k=k.type.substring(k.type.indexOf("=")+1,k.type.length);
+d="a"+c.formatNum(k);
+if(typeof i[d]=="undefined"){i[d]=k;
+e++
+}}}for(f=0;
+f<e;
+f++){b="0,0,0,0";
+for(h in i){if(i[h]){d=h.substring(1,h.length);
+if(c.compareNums(d,b)>0){b=d
+}}}g[f]=i["a"+b];
+i["a"+b]=null
+}if(!(/windows|macintosh/i).test(navigator.userAgent)){g=[g[0]]
+}return g
+},queryJavaHandler:function(){var b=PluginDetect.java,a=window.java,c;
+b.hasRun=true;
+try{if(typeof a.lang!="undefined"&&typeof a.lang.System!="undefined"){b.value=[a.lang.System.getProperty("java.version")+" ",a.lang.System.getProperty("java.vendor")+" "]
+}}catch(c){}},queryJava:function(){var c=this,d=c.$,b=navigator.userAgent,f;
+if(typeof window.java!="undefined"&&navigator.javaEnabled()&&!c.hasRun){if(d.isGecko){if(d.hasMimeType("application/x-java-vm")){try{var g=document.createElement("div"),a=document.createEvent("HTMLEvents");
+a.initEvent("focus",false,true);
+g.addEventListener("focus",c.queryJavaHandler,false);
+g.dispatchEvent(a)
+}catch(f){}if(!c.hasRun){c.queryJavaHandler()
+}}}else{if((/opera.9\.(0|1)/i).test(b)&&(/mac/i).test(b)){}else{if(!c.hasRun){c.queryJavaHandler()
+}}}}return c.value
+},forceVerifyTag:[],jar:[],VENDORS:["Sun Microsystems Inc.","Apple Computer, Inc."],init:function(){var a=this,b=a.$;
+if(typeof a.app!="undefined"){a.delJavaApplets(b)
+}a.hasRun=false;
+a.value=[null,null];
+a.useTag=[2,2,2];
+a.app=[0,0,0,0,0,0];
+a.appi=3;
+a.queryDTKresult=null;
+a.OTF=0;
+a.BridgeResult=[[null,null],[null,null],[null,null]];
+a.JavaActive=[0,0,0];
+a.All_versions=[];
+a.DeployTK_versions=[];
+a.MimeType_versions=[];
+a.JavaPlugin_versions=[];
+a.funcs=[];
+var c=a.NOTF;
+if(c){c.$=b;
+if(c.javaInterval){clearInterval(c.javaInterval)
+}c.EventJavaReady=null;
+c.javaInterval=null;
+c.count=0;
+c.intervalLength=250;
+c.countMax=40
+}a.lateDetection=b.winLoaded;
+if(!a.lateDetection){b.onWindowLoaded(a.delJavaApplets)
+}},getVersion:function(f,l){var h,d=this,g=d.$,j=null,n=null,e=null,c=navigator.javaEnabled();
+if(d.getVersionDone===null){d.init()
+}var k;
+if(typeof l!="undefined"&&l.constructor==Array){for(k=0;
+k<d.useTag.length;
+k++){if(typeof l[k]=="number"){d.useTag[k]=l[k]
+}}}for(k=0;
+k<d.forceVerifyTag.length;
+k++){d.useTag[k]=d.forceVerifyTag[k]
+}if(typeof f!="undefined"){d.jar[d.jar.length]=f
+}if(d.getVersionDone==0){if(!d.version||d.useAnyTag()){h=d.queryExternalApplet(f);
+if(h[0]){e=h[0];
+n=h[1]
+}}d.EndGetVersion(e,n);
+return
+}var i=d.queryDeploymentToolKit();
+if(typeof i=="string"&&i.length>0){j=i;
+n=d.VENDORS[0]
+}if(!g.isIE){var q,m,b,o,a;
+a=g.hasMimeType(d.mimeType);
+o=(a&&c)?true:false;
+if(d.MimeType_versions.length==0&&a){h=d.getFromMimeType("application/x-java-applet.*jpi-version.*=");
+if(h[0]!=""){if(!j){j=h[0]
+}d.MimeType_versions=h
+}}if(!j&&a){h="Java[^\\d]*Plug-in";
+b=g.findNavPlugin(h);
+if(b){h=new RegExp(h,"i");
+q=h.test(b.description)?g.getNum(b.description):null;
+m=h.test(b.name)?g.getNum(b.name):null;
+if(q&&m){j=(g.compareNums(g.formatNum(q),g.formatNum(m))>=0)?q:m
+}else{j=q||m
+}}}if(!j&&a&&(/macintosh.*safari/i).test(navigator.userAgent)){b=g.findNavPlugin("Java.*\\d.*Plug-in.*Cocoa",false);
+if(b){q=g.getNum(b.description);
+if(q){j=q
+}}}if(j){d.version0=j;
+if(c){e=j
+}}if(!e||d.useAnyTag()){b=d.queryExternalApplet(f);
+if(b[0]){e=b[0];
+n=b[1]
+}}if(!e){b=d.queryJava();
+if(b[0]){d.version0=b[0];
+e=b[0];
+n=b[1];
+if(d.installed==-0.5){d.installed=0.5
+}}}if(d.installed===null&&!e&&o&&!(/macintosh.*ppc/i).test(navigator.userAgent)){h=d.getFromMimeType("application/x-java-applet.*version.*=");
+if(h[0]!=""){e=h[0]
+}}if(!e&&o){if(/macintosh.*safari/i.test(navigator.userAgent)){if(d.installed===null){d.installed=0
+}else{if(d.installed==-0.5){d.installed=0.5
+}}}}}else{if(!j&&i!=-1){j=d.searchJavaPluginAXO();
+if(j){n=d.VENDORS[0]
+}}if(!j){d.JavaFix()
+}if(j){d.version0=j;
+if(c&&g.ActiveXEnabled){e=j
+}}if(!e||d.useAnyTag()){h=d.queryExternalApplet(f);
+if(h[0]){e=h[0];
+n=h[1]
+}}}if(d.installed===null){d.installed=e?1:(j?-0.2:-1)
+}d.EndGetVersion(e,n)
+},EndGetVersion:function(b,d){var a=this,c=a.$;
+if(a.version0){a.version0=c.formatNum(c.getNum(a.version0))
+}if(b){a.version=c.formatNum(c.getNum(b));
+a.vendor=(typeof d=="string"?d:"")
+}if(a.getVersionDone!=1){a.getVersionDone=0
+}},queryDeploymentToolKit:function(){var d=this,g=d.$,i,b,h=null,a=null;
+if((g.isGecko&&g.compareNums(g.GeckoRV,g.formatNum("1.6"))<=0)||g.isSafari||(g.isIE&&!g.ActiveXEnabled)){d.queryDTKresult=0
+}if(d.queryDTKresult!==null){return d.queryDTKresult
+}if(g.isIE&&g.IEver>=6){d.app[0]=g.instantiate("object",[],[]);
+h=g.getObject(d.app[0])
+}else{if(!g.isIE&&g.hasMimeType(d.DTKmimeType)){d.app[0]=g.instantiate("object",["type",d.DTKmimeType],[]);
+h=g.getObject(d.app[0])
+}}if(h){if(g.isIE&&g.IEver>=6){try{h.classid=d.DTKclassID
+}catch(i){}}try{var c,f=h.jvms;
+if(f){a=f.getLength();
+if(typeof a=="number"){for(b=0;
+b<a;
+b++){c=f.get(a-1-b);
+if(c){c=c.version;
+if(g.getNum(c)){d.DeployTK_versions[b]=c
+}}}}}}catch(i){}}g.hideObject(h);
+d.queryDTKresult=d.DeployTK_versions.length>0?d.DeployTK_versions[0]:(a==0?-1:0);
+return d.queryDTKresult
+},queryExternalApplet:function(d){var c=this,e=c.$,h=c.BridgeResult,b=c.app,g=c.appi,a="&nbsp;&nbsp;&nbsp;&nbsp;";
+if(typeof d!="string"||!(/\.jar\s*$/).test(d)){return[null,null]
+}if(c.OTF<1){c.OTF=1
+}if(!e.isIE){if((e.isGecko||e.isChrome)&&!e.hasMimeType(c.mimeType)&&!c.queryJava()[0]){return[null,null]
+}}if(c.OTF<2){c.OTF=2
+}if(!b[g]&&c.canUseObjectTag()&&c.canUseThisTag(0)){b[1]=e.instantiate("object",[],[],a);
+b[g]=e.isIE?e.instantiate("object",["archive",d,"code","A.class","type",c.mimeType],["archive",d,"code","A.class","mayscript","true","scriptable","true"],a):e.instantiate("object",["archive",d,"classid","java:A.class","type",c.mimeType],["archive",d,"mayscript","true","scriptable","true"],a);
+h[0]=[0,0];
+c.query1Applet(g)
+}if(!b[g+1]&&c.canUseAppletTag()&&c.canUseThisTag(1)){b[g+1]=e.instantiate("applet",["archive",d,"code","A.class","alt",a,"mayscript","true"],["mayscript","true"],a);
+h[1]=[0,0];
+c.query1Applet(g+1)
+}if(e.isIE&&!b[g+2]&&c.canUseObjectTag()&&c.canUseThisTag(2)){b[g+2]=e.instantiate("object",["classid",c.classID],["archive",d,"code","A.class","mayscript","true","scriptable","true"],a);
+h[2]=[0,0];
+c.query1Applet(g+2)
+};
+var j,f=0;
+for(j=0;
+j<h.length;
+j++){if(b[g+j]||c.canUseThisTag(j)){f++
+}else{break
+}}if(f==h.length){c.getVersionDone=1;
+if(c.forceVerifyTag.length>0){c.getVersionDone=0
+}}return c.getBR()
+},canUseAppletTag:function(){return((!this.$.isIE||navigator.javaEnabled())?true:false)
+},canUseObjectTag:function(){return((!this.$.isIE||this.$.ActiveXEnabled)?true:false)
+},useAnyTag:function(){var b=this,a;
+for(a=0;
+a<b.useTag.length;
+a++){if(b.canUseThisTag(a)){return true
+}}return false
+},canUseThisTag:function(c){var a=this,b=a.$;
+if(a.useTag[c]==3){return true
+}if(!a.version0||!navigator.javaEnabled()||(b.isIE&&!b.ActiveXEnabled)){if(a.useTag[c]==2){return true
+}if(a.useTag[c]==1&&!a.getBR()[0]){return true
+}}return false
+},getBR:function(){var b=this.BridgeResult,a;
+for(a=0;
+a<b.length;
+a++){if(b[a][0]){return[b[a][0],b[a][1]]
+}}return[b[0][0],b[0][1]]
+},delJavaApplets:function(b){var c=b.java.app,a;
+for(a=c.length-1;
+a>=0;
+a--){b.uninstantiate(c[a])
+}},query1Applet:function(g){var f,c=this,d=c.$,a=null,h=null,b=d.getObject(c.app[g],true);
+try{if(b){a=b.getVersion()+" ";
+h=b.getVendor()+" ";
+if(d.num(a)){c.BridgeResult[g-c.appi]=[a,h];
+d.hideObject(c.app[g])
+}if(d.isIE&&a&&b.readyState!=4){d.garbage=true;
+d.uninstantiate(c.app[g])
+}}}catch(f){}},NOTF:{isJavaActive:function(){
+}},append:function(e,d){for(var c=0;
+c<d.length;
+c++){e[e.length]=d[c]
+}},getInfo:function(){var m={};
+;
+var a=this,d=a.$,h,l=a.installed;
+m={All_versions:[],DeployTK_versions:[],MimeType_versions:[],DeploymentToolkitPlugin:(a.queryDTKresult==0?false:true),vendor:(typeof a.vendor=="string"?a.vendor:""),OTF:(a.OTF<3?0:(a.OTF==3?1:2))};
+var g=[null,null,null];
+for(h=0;
+h<a.BridgeResult.length;
+h++){g[h]=a.BridgeResult[h][0]?1:(a.JavaActive[h]==1?0:(a.useTag[h]>=1&&a.OTF>=1&&a.OTF!=3&&!(h==2&&!d.isIE)&&(a.BridgeResult[h][0]!==null||(h==1&&!a.canUseAppletTag())||(h!=1&&!a.canUseObjectTag())||l==-0.2||l==-1)?-1:null))
+}m.objectTag=g[0];
+m.appletTag=g[1];
+m.objectTagActiveX=g[2];
+var c=m.All_versions,k=m.DeployTK_versions,f=m.MimeType_versions,b=a.JavaPlugin_versions;
+a.append(k,a.DeployTK_versions);
+a.append(f,a.MimeType_versions);
+a.append(c,(k.length>0?k:(f.length>0?f:(b.length>0?b:(typeof a.version=="string"?[a.version]:[])))));
+for(h=0;
+h<c.length;
+h++){c[h]=d.formatNum(d.getNum(c[h]))
+}var i,e=null;
+if(!d.isIE){i=f.length>0?d.hasMimeType(a.mimeType+";jpi-version="+f[0]):d.hasMimeType(a.mimeType);
+if(i){e=i.enabledPlugin
+}}m.name=e?e.name:"";
+m.description=e?e.description:"";
+var j=null;
+if((l==0||l==1)&&m.vendor==""){if(/macintosh/i.test(navigator.userAgent)){j=a.VENDORS[1]
+}else{if(!d.isIE&&(/windows/i).test(navigator.userAgent)){j=a.VENDORS[0]
+}else{if(/linux/i.test(navigator.userAgent)){j=a.VENDORS[0]
+}}}if(j){m.vendor=j
+}};
+return m
+},JavaFix:function(){}};
+;
+PluginDetect.devalvr={mimeType:"application/x-devalvrx",progID:"DevalVRXCtrl.DevalVRXCtrl.1",classID:"clsid:5D2CF9D0-113A-476B-986F-288B54571614",getVersion:function(){var a=null,g,c=this.$,f;
+if(!c.isIE){g=c.findNavPlugin("DevalVR");
+if(g&&g.name&&c.hasMimeType(this.mimeType)){a=g.description.split(" ")[3]
+}this.installed=a?1:-1
+}else{var b,h,d;
+h=c.getAXO(this.progID,1);
+if(h){b=c.instantiate("object",["classid",this.classID],["src",""]);
+d=c.getObject(b);
+if(d){try{if(d.pluginversion){a="00000000"+d.pluginversion.toString(16);
+a=a.substr(a.length-8,8);
+a=parseInt(a.substr(0,2),16)+","+parseInt(a.substr(2,2),16)+","+parseInt(a.substr(4,2),16)+","+parseInt(a.substr(6,2),16)
+}}catch(f){}}c.uninstantiate(b)
+}this.installed=a?1:(h?0:-1)
+}this.version=c.formatNum(a)
+}};
+;
+PluginDetect.flash={mimeType:["application/x-shockwave-flash","application/futuresplash"],progID:"ShockwaveFlash.ShockwaveFlash",classID:"clsid:D27CDB6E-AE6D-11CF-96B8-444553540000",getVersion:function(){var c=function(i){if(!i){return null
+}var e=/[\d][\d\,\.\s]*[rRdD]{0,1}[\d\,]*/.exec(i);
+return e?e[0].replace(/[rRdD\.]/g,",").replace(/\s/g,""):null
+};
+var j,g=this.$,h,f,b=null,a=null,d=null;
+if(!g.isIE){j=g.findNavPlugin("Flash");
+if(j&&j.description&&g.hasMimeType(this.mimeType)){b=c(j.description)
+}}else{for(f=15;
+f>2;
+f--){a=g.getAXO(this.progID+"."+f);
+if(a){d=f.toString();
+break
+}}if(d=="6"){try{a.AllowScriptAccess="always"
+}catch(h){return"6,0,21,0"
+}}try{b=c(a.GetVariable("$version"))
+}catch(h){}if(!b&&d){b=d
+}}this.installed=b?1:-1;
+this.version=g.formatNum(b);
+return true
+}};
+;
+PluginDetect.shockwave={mimeType:"application/x-director",progID:"SWCtl.SWCtl",classID:"clsid:166B1BCA-3F9C-11CF-8075-444553540000",getVersion:function(){var a=null,b=null,f,d,c=this.$;
+if(!c.isIE){d=c.findNavPlugin("Shockwave for Director");
+if(d&&d.description&&c.hasMimeType(this.mimeType)){a=c.getNum(d.description)
+}}else{try{b=c.getAXO(this.progID).ShockwaveVersion("")
+}catch(f){}if(typeof b=="string"&&b.length>0){a=c.getNum(b)
+}else{if(c.getAXO(this.progID+".8",1)){a="8"
+}else{if(c.getAXO(this.progID+".7",1)){a="7"
+}else{if(c.getAXO(this.progID+".1",1)){a="6"
+}}}}}this.installed=a?1:-1;
+this.version=c.formatNum(a)
+}};
+;
+PluginDetect.div=null;
+PluginDetect.pluginSize=1;
+PluginDetect.DOMbody=null;
+PluginDetect.uninstantiate=function(a){var c,b=this;
+if(!a){return
+}try{if(a[0]&&a[0].firstChild){a[0].removeChild(a[0].firstChild)
+}if(a[0]&&b.div){b.div.removeChild(a[0])
+}if(b.div&&b.div.childNodes.length==0){b.div.parentNode.removeChild(b.div);
+b.div=null;
+if(b.DOMbody&&b.DOMbody.parentNode){b.DOMbody.parentNode.removeChild(b.DOMbody)
+}b.DOMbody=null
+}a[0]=null
+}catch(c){}};
+PluginDetect.getObject=function(b,a){var f,c=this,d=null;
+try{if(b&&b[0]&&b[0].firstChild){d=b[0].firstChild
+}}catch(f){}try{if(a&&d&&typeof d.focus!="undefined"&&typeof document.hasFocus!="undefined"&&!document.hasFocus()){d.focus()
+}}catch(f){}return d
+};
+PluginDetect.getContainer=function(a){var c,b=null;
+if(a&&a[0]){b=a[0]
+}return b
+};
+PluginDetect.hideObject=function(a){var b=this.getObject(a);
+if(b&&b.style){b.style.height="0"
+}};
+PluginDetect.instantiate=function(h,b,c,a){var j=function(d){var e=d.style;
+if(!e){return
+}e.border="0px";
+e.padding="0px";
+e.margin="0px";
+e.fontSize=(g.pluginSize+3)+"px";
+e.height=(g.pluginSize+3)+"px";
+e.visibility="visible";
+if(d.tagName&&d.tagName.toLowerCase()=="div"){e.width="100%";
+e.display="block"
+}else{if(d.tagName&&d.tagName.toLowerCase()=="span"){e.width=g.pluginSize+"px";
+e.display="inline"
+}}};
+var k,l=document,g=this,p,i=(l.getElementsByTagName("body")[0]||l.body),o=l.createElement("span"),n,f,m="/";
+if(typeof a=="undefined"){a=""
+}p="<"+h+' width="'+g.pluginSize+'" height="'+g.pluginSize+'" ';
+for(n=0;
+n<b.length;
+n=n+2){p+=b[n]+'="'+b[n+1]+'" '
+}p+=">";
+for(n=0;
+n<c.length;
+n=n+2){p+='<param name="'+c[n]+'" value="'+c[n+1]+'" />'
+}p+=a+"<"+m+h+">";
+if(!g.div){g.div=l.createElement("div");
+f=l.getElementById("plugindetect");
+if(f){j(f);
+f.appendChild(g.div)
+}else{if(i){try{if(i.firstChild&&typeof i.insertBefore!="undefined"){i.insertBefore(g.div,i.firstChild)
+}else{i.appendChild(g.div)
+}}catch(k){}}else{try{l.write('<div id="pd33993399">o<'+m+"div>");
+i=(l.getElementsByTagName("body")[0]||l.body);
+i.appendChild(g.div);
+i.removeChild(l.getElementById("pd33993399"))
+}catch(k){try{g.DOMbody=l.createElement("body");
+l.getElementsByTagName("html")[0].appendChild(g.DOMbody);
+g.DOMbody.appendChild(g.div)
+}catch(k){}}}}j(g.div)
+}if(g.div&&g.div.parentNode&&g.div.parentNode.parentNode){g.div.appendChild(o);
+try{o.innerHTML=p
+}catch(k){}j(o);
+return[o]
+}return[null]
+};
+;
+PluginDetect.windowsmediaplayer={mimeType:["application/x-mplayer2","application/asx"],progID:"wmplayer.ocx",classID:"clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6",getVersion:function(){var a=null,e=this.$,b=null;
+this.installed=-1;
+if(!e.isIE){if(e.hasMimeType(this.mimeType)){if(e.findNavPlugin(["Windows","Media","(Plug-in|Plugin)"],false)||e.findNavPlugin(["Flip4Mac","Windows","Media"],false)){this.installed=0
+}var d=e.isGecko&&e.compareNums(e.GeckoRV,e.formatNum("1.8"))<0;
+if(!d&&e.findNavPlugin(["Windows","Media","Firefox Plugin"],false)){var c=e.instantiate("object",["type",this.mimeType[0]],[]),f=e.getObject(c);
+if(f){a=f.versionInfo
+}e.uninstantiate(c)
+}}}else{b=e.getAXO(this.progID);
+if(b){a=b.versionInfo
+}}if(a){this.installed=1
+}this.version=e.formatNum(a)
+}};
+;
+PluginDetect.silverlight={mimeType:"application/x-silverlight",progID:"AgControl.AgControl",digits:[9,20,9,12,31],getVersion:function(){var c=this.$,j=document,g=null,b=null,f=false;
+if(!c.isIE){var a=[null,null],e=c.findNavPlugin("Silverlight Plug-in",false),h=c.isGecko&&c.compareNums(c.GeckoRV,c.formatNum("1.6"))<=0;
+if(e&&c.hasMimeType(this.mimeType)){g=c.formatNum(e.description);
+if(g){p=g.split(",");
+if(parseInt(p[2],10)>=30226&&parseInt(p[0],10)<2){p[0]="2"
+}g=p.join(",")
+}if(c.isGecko&&!h){f=true
+}if(!f&&!h&&g){a=c.instantiate("object",["type",this.mimeType],[]);
+b=c.getObject(a);
+if(b){if(typeof b.IsVersionSupported!="undefined"){f=true
+}if(!f){b.data="data:"+this.mimeType+",";
+if(typeof b.IsVersionSupported!="undefined"){f=true
+}}}c.uninstantiate(a)
+}}}else{b=c.getAXO(this.progID);
+var p=[1,0,1,1,1],l,k,o,i=function(d){return(d<10?"0":"")+d.toString()
+},m=function(q,d,s,t,r){return(q+"."+d+"."+s+i(t)+i(r)+".0")
+},n=function(d,s){var q,r=m((d==0?s:p[0]),(d==1?s:p[1]),(d==2?s:p[2]),(d==3?s:p[3]),(d==4?s:p[4]));
+try{return b.IsVersionSupported(r)
+}catch(q){}return false
+};
+if(b&&typeof b.IsVersionSupported!="undefined"){for(l=0;
+l<this.digits.length;
+l++){o=p[l];
+for(k=o+(l==0?0:1);
+k<=this.digits[l];
+k++){if(n(l,k)){f=true;
+p[l]=k
+}else{break
+}}if(!f){break
+}}if(f){g=m(p[0],p[1],p[2],p[3],p[4])
+}}}this.installed=f?1:-1;
+this.version=c.formatNum(g)
+}};
+;
+PluginDetect.vlc={mimeType:"application/x-vlc-plugin",progID:"VideoLAN.VLCPlugin",compareNums:function(d,c){var j=d.split(","),h=c.split(","),g,b,a,f,e,i;
+for(g=0;
+g<Math.min(j.length,h.length);
+g++){i=/([\d]+)([a-z]?)/.test(j[g]);
+b=parseInt(RegExp.$1,10);
+f=(g==2&&RegExp.$2.length>0)?RegExp.$2.charCodeAt(0):-1;
+i=/([\d]+)([a-z]?)/.test(h[g]);
+a=parseInt(RegExp.$1,10);
+e=(g==2&&RegExp.$2.length>0)?RegExp.$2.charCodeAt(0):-1;
+if(b!=a){return(b>a?1:-1)
+}if(g==2&&f!=e){return(f>e?1:-1)
+}}return 0
+},getVersion:function(){var b=this.$,d,a=null,c;
+if(!b.isIE){if(b.hasMimeType(this.mimeType)){d=b.findNavPlugin(["VLC","(Plug-in|Plugin)"],false);
+if(d&&d.description){a=b.getNum(d.description,"[\\d][\\d\\.]*[a-z]*")
+}}this.installed=a?1:-1
+}else{d=b.getAXO(this.progID);
+if(d){try{a=b.getNum(d.VersionInfo,"[\\d][\\d\\.]*[a-z]*")
+}catch(c){}}this.installed=d?1:-1
+}this.version=b.formatNum(a)
+}};
+;
+PluginDetect.initScript();
+
diff --git a/resources/fonts2.swf b/resources/fonts2.swf
new file mode 100755 (executable)
index 0000000..e08e99e
Binary files /dev/null and b/resources/fonts2.swf differ